Current Path : /web/htdocs/www.entinoprofit.org/home/lists/admin/
Upload File :
Current File : /web/htdocs/www.entinoprofit.org/home/lists/admin/pluginlib.php

<?php

require_once dirname(__FILE__).'/accesscheck.php';
require_once dirname(__FILE__).'/EmailSender.php';
include_once dirname(__FILE__).'/defaultplugin.php';

$GLOBALS['plugins'] = array();
$GLOBALS['editorplugin'] = false;
$GLOBALS['authenticationplugin'] = false;
$GLOBALS['emailsenderplugin'] = false;

$pluginRootDirs = array();
if (PLUGIN_ROOTDIRS != '') {
    $pluginRootDirs = explode(';', PLUGIN_ROOTDIRS);
}
$pluginRootDirs[] = PLUGIN_ROOTDIR;
$pluginRootDirs = array_filter(array_unique($pluginRootDirs));
$pluginFiles = array();

foreach ($pluginRootDirs as $pluginRootDir) {
    //# try to expand to subdir of the admin dir
    if (!is_dir($pluginRootDir)) {
        $pluginRootDir = dirname(__FILE__).'/'.$pluginRootDir;
    }

//  print '<h3>'.$pluginRootDir.'</h3>';
    if (is_dir($pluginRootDir) && ($dh = opendir($pluginRootDir))) {
        while (false !== ($file = readdir($dh))) {
            if ($file != '.' && $file != '..' && !preg_match('/~$/', $file)) {
                //        print $pluginRootDir.' '.$file.'<br/>';
                if (is_file($pluginRootDir.'/'.$file) && preg_match("/\.php$/", $file)) {
                    //          print "ADD $file<br/>";
                    array_push($pluginFiles, $pluginRootDir.'/'.$file);
                } elseif (is_dir($pluginRootDir.'/'.$file.'/plugins')) {
                    //         print 'SUBROOT'.$pluginRootDir.' '.$file.'<br/>';
                    $subRoot = $pluginRootDir.'/'.$file.'/plugins';
                    $subDir = opendir($subRoot);
                    while (false !== ($subFile = readdir($subDir))) {
                        if (is_file($subRoot.'/'.$subFile) && preg_match("/\.php$/", $subFile)) {
                            //              print "ADD $subFile<br/>";
                            array_push($pluginFiles, $subRoot.'/'.$subFile);
                        } else {
                            //              print "NOT A FILE: $subRoot.'/'.$subFile<br/>";
                        }
                    }
                } else {
                    //          print 'NOT A DIR: '.$pluginRootDir.'/'.$file.'/plugins<br/>';
                }
            }
        }
        closedir($dh);
    }
}

$auto_enable_plugins = array();
if (isset($GLOBALS['plugins_autoenable'])) {
    $auto_enable_plugins = $GLOBALS['plugins_autoenable'];
}

//var_dump($pluginFiles);exit;
$disabled_plugins = unserialize(getConfig('plugins_disabled'));
if (is_array($disabled_plugins)) {
    foreach ($disabled_plugins as $pl => $plstate) {
        if (!empty($plstate) && !in_array($pl, $auto_enable_plugins)) {
            $GLOBALS['plugins_disabled'][] = $pl;
        }
    }
}

//var_dump($GLOBALS['plugins_disabled']);exit;
foreach ($pluginFiles as $file) {
    list($className, $ext) = explode('.', basename($file));
    if (preg_match("/[\w]+/", $className)) {
        // && !in_array($className,$GLOBALS['plugins_disabled'])) {
        if (!class_exists($className)) {
            include_once $file;
            if (class_exists($className)) {
                $pluginInstance = new $className();
                $pluginInstance->origin = $file;
                //  print "Instance $className<br/>";
                //# bit of a duplication of plugins, but $GLOBALS['plugins'] should only contain active ones
                //# using "allplugins" allow listing them, and switch on/off in the plugins page
                $GLOBALS['allplugins'][$className] = $pluginInstance;

                if (!in_array($className, $GLOBALS['plugins_disabled'])) {
                    $plugin_initialised = getConfig(md5('plugin-'.$className.'-initialised'));

                    if (!empty($plugin_initialised)) {
                        $GLOBALS['plugins'][$className] = $pluginInstance;
                        $pluginInstance->enabled = true;
                    } elseif (in_array($className, $auto_enable_plugins)) {
                        $GLOBALS['plugins'][$className] = $pluginInstance;
                        $pluginInstance->initialise();
                        $pluginInstance->enabled = true;
                    } else {
                        // plugin is not enabled and not disabled, so disable it and don't process this plugin any further
                        $pluginInstance->enabled = false;
                        $disabled_plugins[$className] = 1;
                        saveConfig('plugins_disabled', serialize($disabled_plugins), 0);
                        continue;
                    }
                    // remember the first plugins that provide editor, authentication or email sending
                    if (!$GLOBALS['editorplugin'] && $pluginInstance->editorProvider && method_exists($pluginInstance,
                            'editor')
                    ) {
                        $GLOBALS['editorplugin'] = $className;
                    }
                    if (!$GLOBALS['authenticationplugin'] && $pluginInstance->authProvider && method_exists($pluginInstance,
                            'validateLogin')
                    ) {
                        $GLOBALS['authenticationplugin'] = $className;
                    }

                    if (!$GLOBALS['emailsenderplugin'] && $pluginInstance instanceof EmailSender) {
                        $GLOBALS['emailsenderplugin'] = $pluginInstance;
                    }

                    if (!empty($pluginInstance->DBstruct)) {
                        foreach ($pluginInstance->DBstruct as $tablename => $tablecolumns) {
                            $GLOBALS['tables'][$className.'_'.$tablename] = $GLOBALS['table_prefix'].$className.'_'.$tablename;
                        }
                    }
                } else {
                    $pluginInstance->enabled = false;
                    dbg($className.' disabled');
                }
            } else {
                Error('initialisation of plugin '.$className.' failed');
            }
            //print "$className = ".$pluginInstance->name."<br/>";
        }
    }
}
//  Activate plugins in descending priority order
uasort(
    $plugins,
    function($a, $b) {
        return $b->priority - $a->priority;
    }
);

foreach ($plugins as $pluginInstance) {
    $pluginInstance->activate();
}

$GLOBALS['pluginsendformats'] = array();
foreach ($GLOBALS['plugins'] as $className => $pluginInstance) {
    $plugin_sendformats = $pluginInstance->sendFormats();
    if (is_array($plugin_sendformats) && count($plugin_sendformats)) {
        foreach ($plugin_sendformats as $val => $desc) {
            $val = preg_replace("/\W/", '', strtolower(trim($val)));
            $GLOBALS['pluginsendformats'][$val] = $className;
        }
    }
}

function upgradePlugins($toUpgrade)
{
    foreach ($toUpgrade as $pluginname) {
        //    print '<h2>Upgrading '.$pluginname. '</h2><br/> ';
//    print md5('plugin-'.$pluginname.'-versiondate');
        $currentDate = getConfig(md5('plugin-'.$pluginname.'-versiondate'));
//    print 'CUrrent '.$currentDate;
        if ($GLOBALS['allplugins'][$pluginname]->upgrade($currentDate)) {
            //      print "Saving ".'plugin-'.$pluginname.'-versiondate';
            SaveConfig(md5('plugin-'.$pluginname.'-versiondate'), date('Y-m-d'), 0);
        }
    }
}

$commandlinePluginPages = array();
$commandlinePlugins = array();
if (count($GLOBALS['plugins'])) {
    foreach ($GLOBALS['plugins'] as $pluginName => $plugin) {
        $cl_pages = $plugin->commandlinePluginPages;
        if (count($cl_pages)) {
            $commandlinePlugins[] = $pluginName;
            $commandlinePluginPages[$pluginName] = $cl_pages;
        }
    }
}

/*
  * central function to call a method on all plugins
  * not sure to go down this route yet, MD 201212
  */

function pluginsCall($method)
{
    $args = func_get_args();
    $m = array_shift($args); // the first is the method itself
    foreach ($GLOBALS['plugins'] as $pluginname => $plugin) {
        if (method_exists($plugin, $method)) {
            $plugin->$method($args);
        }
    }
}

function pluginCanEnable($plugin)
{
    global $allplugins;

    $canEnable = false;

    if (isset($allplugins[$plugin])) {
        $dependencies = $allplugins[$plugin]->dependencyCheck();
        $dependencyDesc = array_search(false, $dependencies);

        if ($dependencyDesc === false) {
            $canEnable = true;
        } else {
            $allplugins[$plugin]->dependencyFailure = $dependencyDesc;
        }
    }

    return $canEnable;
}