Upstream Patch: Override path patch
This commit is contained in:
parent
174b78800c
commit
d2fc6d4d47
@ -191,6 +191,7 @@ class Kohana_Core {
|
|||||||
|
|
||||||
// Kohana is now initialized
|
// Kohana is now initialized
|
||||||
Kohana::$_init = TRUE;
|
Kohana::$_init = TRUE;
|
||||||
|
Kohana::$_paths = Kohana::build_paths();
|
||||||
|
|
||||||
if (isset($settings['profile']))
|
if (isset($settings['profile']))
|
||||||
{
|
{
|
||||||
@ -370,7 +371,7 @@ class Kohana_Core {
|
|||||||
|
|
||||||
// Reset internal storage
|
// Reset internal storage
|
||||||
Kohana::$_modules = Kohana::$_files = array();
|
Kohana::$_modules = Kohana::$_files = array();
|
||||||
Kohana::$_paths = array(APPPATH, SYSPATH);
|
Kohana::$_paths = Kohana::build_paths();
|
||||||
|
|
||||||
// Reset file cache status
|
// Reset file cache status
|
||||||
Kohana::$_files_changed = FALSE;
|
Kohana::$_files_changed = FALSE;
|
||||||
@ -511,14 +512,15 @@ class Kohana_Core {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start a new list of include paths, APPPATH first
|
// Start a new list of include paths, APPPATH first
|
||||||
$paths = array(APPPATH);
|
$paths = array();
|
||||||
|
|
||||||
foreach ($modules as $name => $path)
|
foreach ($modules as $name => $path)
|
||||||
{
|
{
|
||||||
if (is_dir($path))
|
if (is_dir($path))
|
||||||
{
|
{
|
||||||
// Add the module to include paths
|
// Add the module to include paths
|
||||||
$paths[] = $modules[$name] = realpath($path).DIRECTORY_SEPARATOR;
|
$modules[$name] = realpath($path).DIRECTORY_SEPARATOR;
|
||||||
|
$paths[] = $name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -527,11 +529,8 @@ class Kohana_Core {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finish the include paths by adding SYSPATH
|
|
||||||
$paths[] = SYSPATH;
|
|
||||||
|
|
||||||
// Set the new include paths
|
// Set the new include paths
|
||||||
Kohana::$_paths = $paths;
|
Kohana::$_paths = Kohana::build_paths($paths);
|
||||||
|
|
||||||
// Set the current module list
|
// Set the current module list
|
||||||
Kohana::$_modules = $modules;
|
Kohana::$_modules = $modules;
|
||||||
@ -550,6 +549,39 @@ class Kohana_Core {
|
|||||||
return Kohana::$_modules;
|
return Kohana::$_modules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function build_paths(array $module_paths=array()) {
|
||||||
|
// Start a new list of include paths, APPPATH first
|
||||||
|
$paths = array();
|
||||||
|
|
||||||
|
if (OVERPATH AND is_dir(OVERPATH.'application'))
|
||||||
|
$paths[] = OVERPATH.'application';
|
||||||
|
|
||||||
|
$paths[] = APPPATH;
|
||||||
|
|
||||||
|
// Add our modules
|
||||||
|
foreach ($module_paths as $path)
|
||||||
|
{
|
||||||
|
if (is_dir(MODPATH.$path))
|
||||||
|
{
|
||||||
|
// Add the override path
|
||||||
|
if (OVERPATH AND is_dir(OVERPATH.'modules'.DIRECTORY_SEPARATOR.$path))
|
||||||
|
{
|
||||||
|
$paths[] = realpath(OVERPATH.'modules'.DIRECTORY_SEPARATOR.$path).DIRECTORY_SEPARATOR;
|
||||||
|
}
|
||||||
|
// Add the module to include paths
|
||||||
|
$paths[] = realpath(MODPATH.$path).DIRECTORY_SEPARATOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finish the include paths by adding SYSPATH
|
||||||
|
if (OVERPATH AND is_dir(OVERPATH.'system'))
|
||||||
|
$paths[] = OVERPATH.'system';
|
||||||
|
|
||||||
|
$paths[] = SYSPATH;
|
||||||
|
|
||||||
|
return $paths;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the the currently active include paths, including the
|
* Returns the the currently active include paths, including the
|
||||||
* application and system paths.
|
* application and system paths.
|
||||||
@ -1355,6 +1387,10 @@ class Kohana_Core {
|
|||||||
{
|
{
|
||||||
$file = 'MODPATH'.DIRECTORY_SEPARATOR.substr($file, strlen(MODPATH));
|
$file = 'MODPATH'.DIRECTORY_SEPARATOR.substr($file, strlen(MODPATH));
|
||||||
}
|
}
|
||||||
|
elseif (strpos($file, OVERPATH) === 0)
|
||||||
|
{
|
||||||
|
$file = 'OVERPATH/'.substr($file, strlen(OVERPATH));
|
||||||
|
}
|
||||||
elseif (strpos($file, DOCROOT) === 0)
|
elseif (strpos($file, DOCROOT) === 0)
|
||||||
{
|
{
|
||||||
$file = 'DOCROOT'.DIRECTORY_SEPARATOR.substr($file, strlen(DOCROOT));
|
$file = 'DOCROOT'.DIRECTORY_SEPARATOR.substr($file, strlen(DOCROOT));
|
||||||
|
29
kh.php
29
kh.php
@ -23,6 +23,12 @@ $modules = 'modules';
|
|||||||
*/
|
*/
|
||||||
$system = 'system';
|
$system = 'system';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This directory in which we can override classes that may not yet be accepted
|
||||||
|
* upstream.
|
||||||
|
*/
|
||||||
|
$override = 'override';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default extension of resource files. If you change this, all resources
|
* The default extension of resource files. If you change this, all resources
|
||||||
* must be renamed to use the new extension.
|
* must be renamed to use the new extension.
|
||||||
@ -68,13 +74,22 @@ if ( ! is_dir($modules) AND is_dir(DOCROOT.$modules))
|
|||||||
if ( ! is_dir($system) AND is_dir(DOCROOT.$system))
|
if ( ! is_dir($system) AND is_dir(DOCROOT.$system))
|
||||||
$system = DOCROOT.$system;
|
$system = DOCROOT.$system;
|
||||||
|
|
||||||
|
// Make the override relative to the docroot
|
||||||
|
if ( ! is_dir($override) AND is_dir(DOCROOT.$override))
|
||||||
|
$override = DOCROOT.$override;
|
||||||
|
|
||||||
// Define the absolute paths for configured directories
|
// Define the absolute paths for configured directories
|
||||||
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
|
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
|
||||||
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
|
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
|
||||||
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);
|
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
if (is_dir(realpath($override)))
|
||||||
|
define('OVERPATH', realpath($override).DIRECTORY_SEPARATOR);
|
||||||
|
else
|
||||||
|
define('OVERPATH', '');
|
||||||
|
|
||||||
// Clean up the configuration vars
|
// Clean up the configuration vars
|
||||||
unset($application, $modules, $system);
|
unset($application, $modules, $system, $override);
|
||||||
|
|
||||||
if (file_exists('install'.EXT))
|
if (file_exists('install'.EXT))
|
||||||
{
|
{
|
||||||
@ -88,11 +103,21 @@ require SYSPATH.'base'.EXT;
|
|||||||
// Load the core Kohana class
|
// Load the core Kohana class
|
||||||
require SYSPATH.'classes/kohana/core'.EXT;
|
require SYSPATH.'classes/kohana/core'.EXT;
|
||||||
|
|
||||||
if (is_file(APPPATH.'classes/kohana'.EXT))
|
if (is_file(OVERPATH.'application/classes/kohana'.EXT))
|
||||||
|
{
|
||||||
|
// Override Application extends the core
|
||||||
|
require OVERPATH.'application/classes/kohana'.EXT;
|
||||||
|
}
|
||||||
|
elseif (is_file(APPPATH.'classes/kohana'.EXT))
|
||||||
{
|
{
|
||||||
// Application extends the core
|
// Application extends the core
|
||||||
require APPPATH.'classes/kohana'.EXT;
|
require APPPATH.'classes/kohana'.EXT;
|
||||||
}
|
}
|
||||||
|
elseif (is_file(OVERPATH.'system/classes/kohana'.EXT))
|
||||||
|
{
|
||||||
|
// Override system extends the core
|
||||||
|
require APPPATH.'system/classes/kohana'.EXT;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Load empty core extension
|
// Load empty core extension
|
||||||
|
Reference in New Issue
Block a user