diff options
Diffstat (limited to 'admin/include')
-rw-r--r-- | admin/include/functions_plugins.inc.php | 18 | ||||
-rw-r--r-- | admin/include/plugins.class.php | 28 |
2 files changed, 37 insertions, 9 deletions
diff --git a/admin/include/functions_plugins.inc.php b/admin/include/functions_plugins.inc.php index 7bed61904..2860e2d66 100644 --- a/admin/include/functions_plugins.inc.php +++ b/admin/include/functions_plugins.inc.php @@ -46,4 +46,22 @@ function get_admin_plugin_menu_link($file) } return $url; } + +/** + * Set tabsheet for plugins pages. + * @param string selected page. + */ +function set_plugins_tabsheet($selected) +{ + include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php'); + + $link = get_root_url().'admin.php?page='; + + $tabsheet = new tabsheet(); + $tabsheet->add('plugins_list', l10n('plugins_tab_list'), $link.'plugins_list'); + $tabsheet->add('plugins_update', l10n('plugins_tab_update'), $link.'plugins_update'); + $tabsheet->add('plugins_new', l10n('plugins_tab_new'), $link.'plugins_new'); + $tabsheet->select($selected); + $tabsheet->assign(); +} ?>
\ No newline at end of file diff --git a/admin/include/plugins.class.php b/admin/include/plugins.class.php index e26e0f3b9..459eb5ef5 100644 --- a/admin/include/plugins.class.php +++ b/admin/include/plugins.class.php @@ -28,7 +28,7 @@ class plugins { var $fs_plugins = array(); var $db_plugins_by_id = array(); - var $server_plugins = array(); + var $server_plugins; /** * Initialize $fs_plugins and $db_plugins_by_id @@ -49,7 +49,7 @@ class plugins * @param string - plugin id * @param array - errors */ - function perform_action($action, $plugin_id, $errors=array()) + function perform_action($action, $plugin_id) { if (isset($this->db_plugins_by_id[$plugin_id])) { @@ -57,6 +57,8 @@ class plugins } $file_to_include = PHPWG_PLUGINS_PATH . $plugin_id . '/maintain.inc.php'; + $errors = array(); + switch ($action) { case 'install': @@ -279,10 +281,6 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; { $this->server_plugins = @unserialize($source); } - else - { - $this->server_plugins = false; - } } /** @@ -295,6 +293,9 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; case 'date': krsort($this->server_plugins); break; + case 'revision': + usort($this->server_plugins, array($this, 'extension_revision_compare')); + break; case 'name': uasort($this->server_plugins, array($this, 'extension_name_compare')); break; @@ -427,9 +428,18 @@ DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"'; */ function plugin_version_compare($a, $b) { - $r = version_compare($a['version'], $b['version']); - if ($r == 0) return strcasecmp($a['version'], $b['version']); - else return $r; + $pattern = array('/([a-z])/ei', '/\.+/', '/\.\Z|\A\./'); + $replacement = array( "'.'.intval('\\1', 36).'.'", '.', ''); + + $array = preg_replace($pattern, $replacement, array($a['version'], $b['version'])); + + return version_compare($array[0], $array[1], '>='); + } + + function extension_revision_compare($a, $b) + { + if ($a['date'] < $b['date']) return 1; + else return -1; } function extension_name_compare($a, $b) |