Part of the EllisLab Network
x
 
Create New Page
 View Previous Changes    ( Last updated by xwero )

MY Loader

Category:Libraries -> Extended
Made the BASEPATH and APPPATH changable

class MY_Loader extends CI_Loader
{

        
        
var $_ci_base_path        '';
        var 
$_ci_app_path        '';

        function 
CI_Loader()
    
{    
        parent
::CI_Loader();
                
$this->_ci_base_path BASEPATH;
                
$this->_ci_app_path APPPATH
            $this
->_ci_view_path $this->_ci_app_path.'views/';    
        
log_message('debug'"MY_Loader Class Initialized");
    
}

        
function model($model$name ''$db_conn FALSE)
    
{        
        
if (is_array($model))
        
{
            
foreach($model as $babe)
            
{
                $this
->model($babe);    
            
}
            
return;
        
}

        
if ($model == '')
        
{
            
return;
        
}
    
        
// Is the model in a sub-folder? If so, parse out the filename and path.
        
if (strpos($model'/') === FALSE)
        
{
            $path 
'';
        
}
        
else
        
{
            $x 
explode('/'$model);
            
$model end($x);            
            unset(
$x[count($x)-1]);
            
$path implode('/'$x).'/';
        
}
    
        
if ($name == '')
        
{
            $name 
$model;
        
}
        
        
if (in_array($name$this->_ci_modelsTRUE))
        
{
            
return;
        
}
        
        $CI 
=& get_instance();
        if (isset(
$CI->$name))
        
{
            show_error
('The model name you are loading is the name of a resource that is already being used: '.$name);
        
}
    
        $model 
strtolower($model);
        
        if ( ! 
file_exists($this->_ci_app_path.'models/'.$path.$model.EXT))
        
{
            show_error
('Unable to locate the model you have specified: '.$model);
        
}
                
        
if ($db_conn !== FALSE AND ! class_exists('CI_DB'))
        
{
            
if ($db_conn === TRUE)
                
$db_conn '';
        
            
$CI->load->database($db_connFALSETRUE);
        
}
    
        
if ( ! class_exists('Model'))
        
{
            load_class
('Model'FALSE);
        
}

        
require_once($this->_ci_app_path.'models/'.$path.$model.EXT);

        
$model ucfirst($model);
                
        
$CI->$name = new $model();
        
$CI->$name->_assign_libraries();
        
        
$this->_ci_models[] $name;    
    
}

        
function database($params ''$return FALSE$active_record FALSE)
    
{
        
// Grab the super object
        
$CI =& get_instance();
        
        
// Do we even need to load the database class?
        
if (class_exists('CI_DB') AND $return == FALSE AND $active_record == FALSE AND isset($CI->db) AND is_object($CI->db))
        
{
            
return FALSE;
        
}    
    
        
require_once($this->_ci_base_path.'database/DB'.EXT);

        if (
$return === TRUE)
        
{
            
return DB($params$active_record);
        
}
        
        
// Initialize the db variable.  Needed to prevent   
        // reference errors with some configurations
        
$CI->db '';
        
        
// Load the DB class
        
$CI->db =& DB($params$active_record);    
        
        
// Assign the DB object to any existing models
        
$this->_ci_assign_to_models();
    
}

        
function dbutil()
    
{
        
if ( ! class_exists('CI_DB'))
        
{
            $this
->database();
        
}
        
        $CI 
=& get_instance();

        
// for backwards compatibility, load dbforge so we can extend dbutils off it
        // this use is deprecated and strongly discouraged
        
$CI->load->dbforge();
    
        require_once(
$this->_ci_base_path.'database/DB_utility'.EXT);
        require_once(
$this->_ci_base_path.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_utility'.EXT);
        
$class 'CI_DB_'.$CI->db->dbdriver.'_utility';

        
$CI->dbutil =& new $class();

        
$CI->load->_ci_assign_to_models();
    
}

        
function dbforge()
    
{
        
if ( ! class_exists('CI_DB'))
        
{
            $this
->database();
        
}
        
        $CI 
=& get_instance();
    
        require_once(
$this->_ci_base_path.'database/DB_forge'.EXT);
        require_once(
$this->_ci_base_path.'database/drivers/'.$CI->db->dbdriver.'/'.$CI->db->dbdriver.'_forge'.EXT);
        
$class 'CI_DB_'.$CI->db->dbdriver.'_forge';

        
$CI->dbforge = new $class();
    
}

        
function helper($helpers = array())
    
{
        
if ( ! is_array($helpers))
        
{
            $helpers 
= array($helpers);
        
}
    
        
foreach ($helpers as $helper)
        
{        
            $helper 
strtolower(str_replace(EXT''str_replace('_helper'''$helper)).'_helper');
        
            if (isset(
$this->_ci_helpers[$helper]))
            
{
                
continue;
            
}
            
            $ext_helper 
$this->_ci_app_path.'helpers/'.config_item('subclass_prefix').$helper.EXT;

            
// Is this a helper extension request?            
            
if (file_exists($ext_helper))
            
{
                $base_helper 
$this->_ci_base_path.'helpers/'.$helper.EXT;
                
                if ( ! 
file_exists($base_helper))
                
{
                    show_error
('Unable to load the requested file: helpers/'.$helper.EXT);
                
}
                
                
include_once($ext_helper);
                include_once(
$base_helper);
            
}
            
elseif (file_exists($this->_ci_app_path.'helpers/'.$helper.EXT))
            

                
include_once($this->_ci_app_path.'helpers/'.$helper.EXT);
            
}
            
else
            
{        
                
if (file_exists($this->_ci_base_path.'helpers/'.$helper.EXT))
                
{
                    
include($this->_ci_base_path.'helpers/'.$helper.EXT);
                
}
                
else
                
{
                    show_error
('Unable to load the requested file: helpers/'.$helper.EXT);
                
}
            }

            $this
->_ci_helpers[$helper] TRUE;
            
        
}
        
        log_message
('debug''Helpers loaded: '.implode(', '$helpers));
    
}

        
function plugin($plugins = array())
    
{
        
if ( ! is_array($plugins))
        
{
            $plugins 
= array($plugins);
        
}
    
        
foreach ($plugins as $plugin)
        
{    
            $plugin 
strtolower(str_replace(EXT''str_replace('_pi'''$plugin)).'_pi');        

            if (isset(
$this->_ci_plugins[$plugin]))
            
{
                
continue;
            
}

            
if (file_exists($this->_ci_app_path.'plugins/'.$plugin.EXT))
            
{
                
include($this->_ci_app_path.'plugins/'.$plugin.EXT);    
            
}
            
else
            
{
                
if (file_exists($this->_ci_base_path.'plugins/'.$plugin.EXT))
                
{
                    
include($this->_ci_base_path.'plugins/'.$plugin.EXT);    
                
}
                
else
                
{
                    show_error
('Unable to load the requested file: plugins/'.$plugin.EXT);
                
}
            }
            
            $this
->_ci_plugins[$plugin] TRUE;
        
}
        
        log_message
('debug''Plugins loaded: '.implode(', '$plugins));
    
}

        
function script($scripts = array())
    
{
        
if ( ! is_array($scripts))
        
{
            $scripts 
= array($scripts);
        
}
    
        
foreach ($scripts as $script)
        
{    
            $script 
strtolower(str_replace(EXT''$script));

            if (isset(
$this->_ci_scripts[$script]))
            
{
                
continue;
            
}
        
            
if ( ! file_exists($this->_ci_app_path.'scripts/'.$script.EXT))
            
{
                show_error
('Unable to load the requested script: scripts/'.$script.EXT);
            
}
            
            
include($this->_ci_app_path.'scripts/'.$script.EXT);
        
}
        
        log_message
('debug''Scripts loaded: '.implode(', '$scripts));
    
}

        
function _ci_load_class($class$params NULL)
    
{    
        
// Get the class name
        
$class str_replace(EXT''$class);

        
// We'll test for both lowercase and capitalized versions of the file name
        
foreach (array(ucfirst($class), strtolower($class)) as $class)
        
{
            $subclass 
$this->_ci_app_path.'libraries/'.config_item('subclass_prefix').$class.EXT;

            
// Is this a class extension request?            
            
if (file_exists($subclass))
            
{
                $baseclass 
$this->_ci_base_path.'libraries/'.ucfirst($class).EXT;
                
                if ( ! 
file_exists($baseclass))
                
{
                    log_message
('error'"Unable to load the requested class: ".$class);
                    
show_error("Unable to load the requested class: ".$class);
                
}

                
// Safety:  Was the class already loaded by a previous call?
                
if (in_array($subclass$this->_ci_classes))
                
{
                    $is_duplicate 
TRUE;
                    
log_message('debug'$class." class already loaded. Second attempt ignored.");
                    return;
                
}
    
                
include($baseclass);                
                include(
$subclass);
                
$this->_ci_classes[] $subclass;
    
                return 
$this->_ci_init_class($classconfig_item('subclass_prefix'), $params);            
            
}
        
            
// Lets search for the requested library file and load it.
            
$is_duplicate FALSE;        
            for (
$i 1$i 3$i++)
            
{
                $path 
= ($i 2) ? $this->_ci_app_path $this->_ci_base_path;    
                
$filepath $path.'libraries/'.$class.EXT;
                
                
// Does the file exist?  No?  Bummer...
                
if ( ! file_exists($filepath))
                
{
                    
continue;
                
}
                
                
// Safety:  Was the class already loaded by a previous call?
                
if (in_array($filepath$this->_ci_classes))
                
{
                    $is_duplicate 
TRUE;
                    
log_message('debug'$class." class already loaded. Second attempt ignored.");
                    return;
                
}
                
                
include($filepath);
                
$this->_ci_classes[] $filepath;
                return 
$this->_ci_init_class($class''$params);
            
}
        } 
// END FOREACH
        
        // If we got this far we were unable to find the requested class.
        // We do not issue errors if the load call failed due to a duplicate request
        
if ($is_duplicate == FALSE)
        
{
            log_message
('error'"Unable to load the requested class: ".$class);
            
show_error("Unable to load the requested class: ".$class);
        
}
    }

        

Categories: