Bontiv-Sourceer source code viewer
Root | Help
./bontiv-cms/core/core_modules.php
<?php
class core_modules {
    static protected
$modlist;
   
    static function
LoadModules() {
       
$table = new SQL(array('M' => 'modules','C' => 'class'));
       
$table->where(array(
           
'modules' =>
                array(
                   
'active' => 'yes',
                ),
           
'class' =>
                array(
                   
'Type' => 'mod',
                   
'SyName' => array('field' => 'M.SyName'),
                )
        ));
       
$mods = $table->select();
        foreach (
$mods as $mod)
        {
            if (
$mod->active == 'yes')
            {
               
self::$modlist[$mod->Class] = array(
                   
'sysName' => $mod->SyName,
                   
'instance' => null,
                   
'Name' => $mod->Name,
                   
'ClassName' => $mod->ClassName,
                );
               
               
$libs = explode('|', $mod->libraries);
                foreach (
$libs as $lib)
                    if (
$lib && !core_libraries::IsLoaded($lib))
                       
core_libraries::LoadLibrary($lib);
               
                if (
$mod->autoStart == 'yes')
                   
self::$modlist[$mod->Class]['instance'] = new $mod->Class ();
            }
        }
    }
   
    static function
FindFile($file)
    {
       
$ret = array();
        foreach (
self::$modlist as $class => $mod)
        {
           
$pathfile = MODSDIR . $mod['sysName'] . DIRECTORY_SEPARATOR . $file;
            if (
file_exists($pathfile))
            {
               
$ret[] = $class;
            }
        }
        return
$ret;
    }
   
    static function
ActivedMods()
    {
        return
array_keys(self::$modlist);
    }
   
    static function
LoadUnregistredMod($file)
    {
       
$content = file_get_contents($file);
       
preg_match('`class +(mod_[a-z0-1]+)`i', $content, $m);
        unset(
$content);

       
$sysName = '';
        if (
stripos(dirname($file), COREDIR))
           
$sysName = str_ireplace(COREDIR, '..' . DIRECTORY_SEPARATOR, dirname($file));

        require_once
$file;
       
       
self::$modlist[$m[1]] = array(
           
'instance' => new $m[1](),
           
'Name' => substr($m[1], 4),
           
'ClassName' => substr($m[1], 4),
           
'sysName' => $sysName,
        );
    }
   
    static function
FindClass($className)
    {
        foreach (
self::$modlist as $class => $module)
        {
            if (
$module['ClassName'] == $className)
                return
$class;
        }
        return
false;
    }
   
    static function
modDir($module = null)
    {
        if (
$module == null)
           
$module = LastClass();

       
$module = 'mod' . strchr($module, '_');

        if (isset(
self::$modlist[$module]) && self::$modlist[$module])
        {
            return
self::$modlist[$module]['sysName'];
        }
        else
        {
            return
false;
        }
    }
   
    static function
IsLoaded($module)
    {
        return isset(
self::$modlist[$module]);
    }
   
    static function &
GetDetail($module)
    {
        if (isset(
self::$modlist[$module]))
        {
            return
self::$modlist[$module];
        }
        else
            throw new
ModuleLoadingError ('Module don\'t exist.');
    }
   
    static function &
GetInstance($module)
    {
        if (!
self::IsLoaded($module))
        {
           
var_dump($module);
            throw new
ModuleLoadingError ('Module don\'t exist.');
        }
        else
        {
            if (
self::$modlist[$module]['instance'] === null)
               
self::$modlist[$module]['instance'] = new $module();
            return
self::$modlist[$module]['instance'];
        }
    }

    static function
ModMap($args, $func, $static = true)
    {
       
$ret = array();
        foreach (
self::$modlist as $class => $mod)
        {
            if (
$static)
            {
               
$callback = array($class, $func);
            }
            else
            {
               
$callback = array($mod['instance'], $func);
            }
           
            if (
is_callable($callback))
            {
               
$ret[$class] = call_user_func_array(array($mod['instance'], $func), $args);
            }
            else
            {
               
$ret[$class] = null;
            }
        }
        return
$ret;
    }
   
    static function
IterYes($args, $func = 'UrlCatcher', $static = true)
    {
       
$mod = self::ModMap($args, $func, $static);
        return
array_keys($mod, true);
    }
}
Presented with Bontiv-Sourceer