Exemplo n.º 1
0
/**
 * Loads all the registered plugins.
 */
function load_plugins()
{
    global $conf, $pwg_loaded_plugins;
    $pwg_loaded_plugins = array();
    if ($conf['enable_plugins']) {
        $plugins = get_db_plugins('active');
        foreach ($plugins as $plugin) {
            // include main from a function to avoid using same function context
            load_plugin($plugin);
        }
        trigger_notify('plugins_loaded');
    }
}
Exemplo n.º 2
0
    /**
     * Perform requested actions
     * @param string - action
     * @param string - plugin id
     * @param array - errors
     */
    function perform_action($action, $plugin_id, $options = array())
    {
        if (isset($this->db_plugins_by_id[$plugin_id])) {
            $crt_db_plugin = $this->db_plugins_by_id[$plugin_id];
        }
        if ($action !== 'update') {
            // wait for files to be updated
            $plugin_maintain = self::build_maintain_class($plugin_id);
        }
        $errors = array();
        switch ($action) {
            case 'install':
                if (!empty($crt_db_plugin) or !isset($this->fs_plugins[$plugin_id])) {
                    break;
                }
                $plugin_maintain->install($this->fs_plugins[$plugin_id]['version'], $errors);
                if (empty($errors)) {
                    $query = '
INSERT INTO ' . PLUGINS_TABLE . ' (id,version)
  VALUES (\'' . $plugin_id . '\', \'' . $this->fs_plugins[$plugin_id]['version'] . '\')
;';
                    pwg_query($query);
                }
                break;
            case 'update':
                $previous_version = $this->fs_plugins[$plugin_id]['version'];
                $errors[0] = $this->extract_plugin_files('upgrade', $options['revision'], $plugin_id);
                if ($errors[0] === 'ok') {
                    $this->get_fs_plugin($plugin_id);
                    // refresh plugins list
                    $new_version = $this->fs_plugins[$plugin_id]['version'];
                    $plugin_maintain = self::build_maintain_class($plugin_id);
                    $plugin_maintain->update($previous_version, $new_version, $errors);
                    if ($new_version != 'auto') {
                        $query = '
UPDATE ' . PLUGINS_TABLE . '
  SET version=\'' . $new_version . '\'
  WHERE id=\'' . $plugin_id . '\'
;';
                        pwg_query($query);
                    }
                }
                break;
            case 'activate':
                if (!isset($crt_db_plugin)) {
                    $errors = $this->perform_action('install', $plugin_id);
                    list($crt_db_plugin) = get_db_plugins(null, $plugin_id);
                    load_conf_from_db();
                } elseif ($crt_db_plugin['state'] == 'active') {
                    break;
                }
                if (empty($errors)) {
                    $plugin_maintain->activate($crt_db_plugin['version'], $errors);
                }
                if (empty($errors)) {
                    $query = '
UPDATE ' . PLUGINS_TABLE . '
  SET state=\'active\'
  WHERE id=\'' . $plugin_id . '\'
;';
                    pwg_query($query);
                }
                break;
            case 'deactivate':
                if (!isset($crt_db_plugin) or $crt_db_plugin['state'] != 'active') {
                    break;
                }
                $query = '
UPDATE ' . PLUGINS_TABLE . '
  SET state=\'inactive\'
  WHERE id=\'' . $plugin_id . '\'
;';
                pwg_query($query);
                $plugin_maintain->deactivate();
                break;
            case 'uninstall':
                if (!isset($crt_db_plugin)) {
                    break;
                }
                if ($crt_db_plugin['state'] == 'active') {
                    $this->perform_action('deactivate', $plugin_id);
                }
                $query = '
DELETE FROM ' . PLUGINS_TABLE . '
  WHERE id=\'' . $plugin_id . '\'
;';
                pwg_query($query);
                $plugin_maintain->uninstall();
                break;
            case 'restore':
                $this->perform_action('uninstall', $plugin_id);
                unset($this->db_plugins_by_id[$plugin_id]);
                $errors = $this->perform_action('activate', $plugin_id);
                break;
            case 'delete':
                if (!empty($crt_db_plugin)) {
                    $this->perform_action('uninstall', $plugin_id);
                }
                if (!isset($this->fs_plugins[$plugin_id])) {
                    break;
                }
                deltree(PHPWG_PLUGINS_PATH . $plugin_id, PHPWG_PLUGINS_PATH . 'trash');
                break;
        }
        return $errors;
    }