Habari\AdminPluginsHandler::get_plugins PHP Method

get_plugins() public method

Display the plugin administration page
public get_plugins ( )
    public function get_plugins()
    {
        // Grab pathes to plugins
        $all_plugins = Plugins::list_all();
        $active_plugins = Plugins::get_active();
        $sort_active_plugins = array();
        $sort_inactive_plugins = array();
        $providing = array();
        $available = array();
        foreach ($all_plugins as $file) {
            $plugin = array();
            $plugin_id = Plugins::id_from_file($file);
            $plugin['plugin_id'] = $plugin_id;
            $plugin['file'] = $file;
            $error = '';
            if (Utils::php_check_file_syntax($file, $error)) {
                $plugin['debug'] = false;
                $plugin['info'] = Plugins::load_info($file);
                $plugin['core'] = strpos($file, 'system' . DIRECTORY_SEPARATOR . 'plugins') !== false;
                // should rather be named "is_core"
                if (array_key_exists($plugin_id, $active_plugins)) {
                    $plugin['verb'] = _t('Deactivate');
                    $pluginobj = $active_plugins[$plugin_id];
                    $plugin['active'] = true;
                    $plugin_actions = array();
                    $plugin_actions = Plugins::filter_id('plugin_config', $plugin_id, $plugin_actions, $plugin_id);
                    $plugin_actions = Plugins::filter('plugin_config_any', $plugin_actions, $plugin_id);
                    $plugin['actions'] = array();
                    foreach ($plugin_actions as $plugin_action => $plugin_action_caption) {
                        if (is_numeric($plugin_action)) {
                            $plugin_action = $plugin_action_caption;
                        }
                        $action = array('caption' => $plugin_action_caption, 'action' => $plugin_action);
                        $urlparams = array('page' => 'plugins', 'configure' => $plugin_id, 'action' => $plugin_action);
                        $action['href'] = URL::get('display_plugins', $urlparams);
                        // @locale Displayed as an icon indicating there is help text available for a plugin.
                        if ($action['caption'] == _t('?')) {
                            $q = Controller::get_var('action');
                            if (isset($q)) {
                                $urlparams['action'] = Controller::get_var('action');
                            }
                            if ($_GET['help'] != $plugin_action) {
                                $urlparams['help'] = $plugin_action;
                            }
                            $action['url'] = URL::get('display_plugins', $urlparams);
                            $plugin['help'] = $action;
                        } else {
                            if (isset($_GET['help'])) {
                                $urlparams['help'] = $_GET['help'];
                            }
                            $urlparams['action'] = $plugin_action;
                            $action['url'] = URL::get('display_plugins', $urlparams);
                            $plugin['actions'][$plugin_action] = $action;
                        }
                    }
                    $plugin['actions']['deactivate'] = array('href' => URL::get('plugin_toggle', 'plugin_id=' . $plugin['plugin_id'] . '&action=deactivate'), 'caption' => _t('Deactivate'), 'action' => 'Deactivate');
                    if (isset($plugin['info']->provides)) {
                        foreach ($plugin['info']->provides->feature as $feature) {
                            $providing[(string) $feature] = (string) $feature;
                        }
                    }
                } else {
                    // instantiate this plugin
                    // in order to get its info()
                    $plugin['active'] = false;
                    $plugin['verb'] = _t('Activate');
                    $plugin['actions'] = array('activate' => array('href' => URL::get('plugin_toggle', 'plugin_id=' . $plugin['plugin_id'] . '&action=activate'), 'caption' => _t('Activate'), 'action' => 'activate'));
                    if (isset($plugin['info']->help)) {
                        if (isset($_GET['action'])) {
                            $urlparams['action'] = $_GET['action'];
                        }
                        if ($_GET['help'] != '_help') {
                            $urlparams['help'] = '_help';
                        }
                        // @locale Displayed as an icon indicating there is help text available for a plugin.
                        $action['caption'] = _t('?');
                        $action['action'] = '_help';
                        $urlparams = array('page' => 'plugins', 'configure' => $plugin_id);
                        $action['url'] = URL::get('admin', $urlparams);
                        $plugin['help'] = $action;
                    }
                    if (isset($plugin['info']->provides)) {
                        foreach ($plugin['info']->provides->feature as $feature) {
                            $available[(string) $feature][$plugin_id] = $plugin['info']->name;
                        }
                    }
                }
            } else {
                $plugin['debug'] = true;
                $plugin['error'] = $error;
                $plugin['active'] = false;
            }
            if (!is_null(Controller::get_var('configure')) && Controller::get_var('configure') == $plugin['plugin_id']) {
                $this->theme->configaction = Controller::get_var('action');
                if (isset($plugin['help']) && Controller::get_var('action') == $plugin['help']['action']) {
                    $this->theme->config_plugin_caption = _t('Help');
                } else {
                    if (isset($plugin['actions'][Controller::get_var('action')])) {
                        $this->theme->config_plugin_caption = $plugin['actions'][Controller::get_var('action')]['caption'];
                    } else {
                        $this->theme->config_plugin_caption = Controller::get_var('action');
                    }
                }
                unset($plugin['actions'][Controller::get_var('action')]);
                $this->theme->config_plugin = $plugin;
            } else {
                if ($plugin['active']) {
                    $sort_active_plugins[$plugin_id] = $plugin;
                } else {
                    $sort_inactive_plugins[$plugin_id] = $plugin;
                }
            }
        }
        // Get the features that the current theme provides
        $themeinfo = Themes::get_active_data();
        if (isset($themeinfo['info']->provides)) {
            foreach ($themeinfo['info']->provides->feature as $feature) {
                $providing[(string) $feature] = $feature;
            }
        }
        $providing = Plugins::filter('provided', $providing);
        foreach ($sort_inactive_plugins as $plugin_id => $plugin) {
            if (isset($plugin['info']->requires)) {
                foreach ($plugin['info']->requires->feature as $feature) {
                    if (!isset($providing[(string) $feature])) {
                        if (isset($available[(string) $feature])) {
                            $sort_inactive_plugins[$plugin_id]['available'][(string) $feature] = $available[(string) $feature];
                            if (count($sort_inactive_plugins[$plugin_id]['available'][(string) $feature]) > 1) {
                                unset($sort_inactive_plugins[$plugin_id]['actions']['activate']);
                            }
                        } else {
                            if (!isset($sort_inactive_plugins[$plugin_id]['missing'])) {
                                $sort_inactive_plugins[$plugin_id]['missing'] = array();
                            }
                            $sort_inactive_plugins[$plugin_id]['missing'][(string) $feature] = isset($feature['url']) ? $feature['url'] : '';
                            unset($sort_inactive_plugins[$plugin_id]['actions']['activate']);
                        }
                    }
                }
            }
        }
        //$this->theme->plugins = array_merge($sort_active_plugins, $sort_inactive_plugins);
        $this->theme->assign('action', Controller::get_var('action'));
        $this->theme->assign('helpaction', Controller::get_var('help'));
        $this->theme->assign('configure', Controller::get_var('configure'));
        uasort($sort_active_plugins, array($this, 'compare_names'));
        uasort($sort_inactive_plugins, array($this, 'compare_names'));
        $this->theme->active_plugins = $sort_active_plugins;
        $this->theme->inactive_plugins = $sort_inactive_plugins;
        $this->theme->plugin_loader = Plugins::filter('plugin_loader', '', $this->theme);
        Stack::add('admin_header_javascript', 'visualsearch');
        Stack::add('admin_header_javascript', 'manage-js');
        Stack::add('admin_stylesheet', 'visualsearch-css');
        Stack::add('admin_stylesheet', 'visualsearch-datauri-css');
        $this->display('plugins');
    }