aboutsummaryrefslogtreecommitdiffstats
path: root/admin/plugins_list.php
diff options
context:
space:
mode:
Diffstat (limited to 'admin/plugins_list.php')
-rw-r--r--admin/plugins_list.php175
1 files changed, 155 insertions, 20 deletions
diff --git a/admin/plugins_list.php b/admin/plugins_list.php
index 7e7a153cb..3c6dfd512 100644
--- a/admin/plugins_list.php
+++ b/admin/plugins_list.php
@@ -28,29 +28,163 @@ if( !defined("PHPWG_ROOT_PATH") )
die ("Hacking attempt!");
}
-$template->set_filenames(array('plugins' => 'admin/plugins_list.tpl'));
-//----------------------------------------------------------------sort options
-$order = isset($_GET['order']) ? $_GET['order'] : 'name';
+// +-----------------------------------------------------------------------+
+// | perform requested actions |
+// +-----------------------------------------------------------------------+
+if (isset($_GET['action']) and isset($_GET['plugin']) and !is_adviser())
+{
+ $plugin_id = $_GET['plugin'];
+ $crt_db_plugin = get_db_plugins('', $plugin_id);
+ if (!empty($crt_db_plugin))
+ {
+ $crt_db_plugin = $crt_db_plugin[0];
+ }
+ else
+ {
+ unset($crt_db_plugin);
+ }
-$template->assign('order',
- array(htmlentities($my_base_url.'&order=name') => l10n('Name'),
- htmlentities($my_base_url.'&order=status') => l10n('Status')
- )
- );
-
-$template->assign('selected', htmlentities($my_base_url.'&order=').$order);
+ $errors = array();
+ $file_to_include = PHPWG_PLUGINS_PATH . $plugin_id . '/maintain.inc.php';
+
+ switch ($_GET['action'])
+ {
+ case 'install':
+ if (!empty($crt_db_plugin))
+ {
+ array_push($errors, 'CANNOT install - ALREADY INSTALLED');
+ break;
+ }
+ $fs_plugins = get_fs_plugins();
+ if (!isset($fs_plugins[$plugin_id]))
+ {
+ array_push($errors, 'CANNOT install - NO SUCH PLUGIN');
+ break;
+ }
+ if (file_exists($file_to_include))
+ {
+ include_once($file_to_include);
+ if (function_exists('plugin_install'))
+ {
+ plugin_install($plugin_id, $fs_plugins[$plugin_id]['version'], $errors);
+ }
+ }
+ if (empty($errors))
+ {
+ $query = '
+INSERT INTO ' . PLUGINS_TABLE . ' (id,version) VALUES ("'
+. $plugin_id . '","' . $fs_plugins[$plugin_id]['version'] . '"
+)';
+ pwg_query($query);
+ }
+ break;
+
+ case 'activate':
+ activate_plugin($plugin_id, $errors);
+ break;
+ case 'deactivate':
+ deactivate_plugin($plugin_id, $errors);
+ break;
+
+ case 'uninstall':
+ if (!isset($crt_db_plugin))
+ {
+ die ('CANNOT ' . $_GET['action'] . ' - NOT INSTALLED');
+ }
+ $query = '
+DELETE FROM ' . PLUGINS_TABLE . ' WHERE id="' . $plugin_id . '"';
+ pwg_query($query);
+ if (file_exists($file_to_include))
+ {
+ include_once($file_to_include);
+ if (function_exists('plugin_uninstall'))
+ {
+ plugin_uninstall($plugin_id);
+ }
+ }
+ break;
+
+ case 'delete':
+ if (!empty($crt_db_plugin))
+ {
+ array_push($errors, 'CANNOT delete - PLUGIN IS INSTALLED');
+ }
+ elseif (!deltree(PHPWG_PLUGINS_PATH . $plugin_id))
+ {
+ send_to_trash(PHPWG_PLUGINS_PATH . $plugin_id);
+ }
+ break;
+ }
+ if (empty($errors))
+ {
+ redirect(
+ get_root_url()
+ .'admin.php'
+ .get_query_string_diff( array('action', 'plugin') )
+ );
+ }
+ else
+ {
+ $page['errors'] = array_merge($page['errors'], $errors);
+ }
+}
+
+
+$fs_plugins = get_fs_plugins();
+$db_plugins = get_db_plugins();
+$db_plugins_by_id = array();
+foreach ($db_plugins as $db_plugin)
+{
+ $db_plugins_by_id[$db_plugin['id']] = $db_plugin;
+}
// +-----------------------------------------------------------------------+
// | start template output |
// +-----------------------------------------------------------------------+
-if ($order == 'status')
+$template->set_filenames(array('plugins' => 'admin/plugins_list.tpl'));
+
+$base_url = get_root_url().'admin.php';
+
+//----------------------------------------------------------------sort options
+$selected_order = isset($_GET['order']) ? $_GET['order'] : 'name';
+
+$url = $base_url.get_query_string_diff( array('action', 'plugin', 'order'));
+
+$template->assign('order',
+ array(
+ $url.'&order=name' => l10n('Name'),
+ $url.'&order=status' => l10n('Status'),
+ $url.'&order=author' => l10n('Author'),
+ $url.'&order=id' => l10n('Id'),
+ )
+ );
+
+$template->assign('selected', $url.'&order='.$selected_order);
+
+switch ($selected_order)
{
- $fs_plugins = sort_plugins_by_state($fs_plugins, $db_plugins_by_id);
+ case 'name':
+ uasort($fs_plugins, 'name_compare');
+ break;
+ case 'id':
+ uksort($fs_plugins, 'strcasecmp');
+ break;
+ case 'author':
+ uasort($fs_plugins, 'plugin_author_compare');
+ break;
+ case 'status':
+ $fs_plugins = sort_plugins_by_state($fs_plugins, $db_plugins_by_id);
+ break;
}
+
+//--------------------------------------------------------------display plugins
+
+$url = $base_url.get_query_string_diff( array('action', 'plugin') );
+
foreach($fs_plugins as $plugin_id => $fs_plugin)
{
$display_name = $fs_plugin['name'];
@@ -80,23 +214,23 @@ foreach($fs_plugins as $plugin_id => $fs_plugin)
'VERSION' => $fs_plugin['version'],
'DESCRIPTION' => $desc);
- $action_url = htmlentities($my_base_url) . '&plugin=' . $plugin_id;
+ $action_url = $url.'&plugin='.$plugin_id;
if (isset($db_plugins_by_id[$plugin_id]))
- {
+ {
switch ($db_plugins_by_id[$plugin_id]['state'])
{
case 'active':
- $tpl_plugin['actions'][] =
+ $tpl_plugin['actions'][] =
array('U_ACTION' => $action_url . '&action=deactivate',
'L_ACTION' => l10n('Deactivate'));
break;
case 'inactive':
- $tpl_plugin['actions'][] =
+ $tpl_plugin['actions'][] =
array('U_ACTION' => $action_url . '&action=activate',
'L_ACTION' => l10n('Activate'));
- $tpl_plugin['actions'][] =
+ $tpl_plugin['actions'][] =
array('U_ACTION' => $action_url . '&action=uninstall',
'L_ACTION' => l10n('Uninstall'),
'CONFIRM' => l10n('Are you sure?'));
@@ -105,11 +239,11 @@ foreach($fs_plugins as $plugin_id => $fs_plugin)
}
else
{
- $tpl_plugin['actions'][] =
+ $tpl_plugin['actions'][] =
array('U_ACTION' => $action_url . '&action=install',
'L_ACTION' => l10n('Install'),
'CONFIRM' => l10n('Are you sure?'));
- $tpl_plugin['actions'][] =
+ $tpl_plugin['actions'][] =
array('U_ACTION' => $action_url . '&action=delete',
'L_ACTION' => l10n('plugins_delete'),
'CONFIRM' => l10n('plugins_confirm_delete'));
@@ -123,7 +257,7 @@ $missing_plugin_ids = array_diff(
foreach($missing_plugin_ids as $plugin_id)
{
- $action_url = $my_base_url.'&plugin='.$plugin_id;
+ $action_url = $url.'&plugin='.$plugin_id;
$template->append( 'plugins',
array(
@@ -138,4 +272,5 @@ foreach($missing_plugin_ids as $plugin_id)
);
}
+$template->assign_var_from_handle('ADMIN_CONTENT', 'plugins');
?> \ No newline at end of file