diff options
-rw-r--r-- | admin/include/functions_plugins.inc.php | 98 | ||||
-rw-r--r-- | admin/plugins.php | 162 | ||||
-rw-r--r-- | admin/plugins_list.php | 175 | ||||
-rw-r--r-- | admin/plugins_new.php | 18 | ||||
-rw-r--r-- | admin/plugins_update.php | 15 |
5 files changed, 279 insertions, 189 deletions
diff --git a/admin/include/functions_plugins.inc.php b/admin/include/functions_plugins.inc.php index b51a22fd2..3e79988fd 100644 --- a/admin/include/functions_plugins.inc.php +++ b/admin/include/functions_plugins.inc.php @@ -85,6 +85,93 @@ function get_fs_plugins() } /** + * Activates a plugin. It will be loaded only on the next page ... + * @param string $plugin_id the plugin to activate + * @param array $errors errors to be returned + */ +function activate_plugin($plugin_id, &$errors) +{ + // the plugin_id must exist in the DB as inactive + $db_plugins = get_db_plugins('', $plugin_id); + if (!empty($db_plugins)) + { + $crt_db_plugin = $db_plugins[0]; + if ($crt_db_plugin['state'] != 'inactive') + { + array_push($errors, 'CANNOT ACTIVATE - INVALID CURRENT STATE ' . $crt_db_plugin['state']); + return false; + } + } + else + { + array_push($errors, 'CANNOT ACTIVATE - NOT INSTALLED'); + return false; + } + + // now try to activate it + $file_to_include = PHPWG_PLUGINS_PATH . $plugin_id . '/maintain.inc.php'; + if (file_exists($file_to_include)) + { + include_once($file_to_include); + if (function_exists('plugin_activate')) + { + plugin_activate($plugin_id, $crt_db_plugin['version'], $errors); + } + } + if (empty($errors)) + { + $query = ' +UPDATE ' . PLUGINS_TABLE . ' SET state="active" WHERE id="' . $plugin_id . '"'; + pwg_query($query); + return true; + } + return false; +} + + +/** + * Deactivates a plugin. It will be unloaded only on the next page ... + * @param string $plugin_id the plugin to activate + * @param array $errors errors to be returned + */ +function deactivate_plugin($plugin_id, &$errors) +{ + // the plugin_id must exist in the DB as inactive + $db_plugins = get_db_plugins('', $plugin_id); + if (!empty($db_plugins)) + { + $crt_db_plugin = $db_plugins[0]; + if ($crt_db_plugin['state'] != 'active') + { + array_push($errors, 'CANNOT DEACTIVATE - INVALID CURRENT STATE ' . $crt_db_plugin['state']); + return false; + } + } + else + { + array_push($errors, 'CANNOT DEACTIVATE - NOT INSTALLED'); + return false; + } + + // now try to deactivate it + $query = ' +UPDATE ' . PLUGINS_TABLE . ' SET state="inactive" WHERE id="' . $plugin_id . '"'; + pwg_query($query); + + $file_to_include = PHPWG_PLUGINS_PATH . $plugin_id . '/maintain.inc.php'; + if (file_exists($file_to_include)) + { + include_once($file_to_include); + if (function_exists('plugin_deactivate')) + { + plugin_deactivate($plugin_id); + } + } + return true; +} + + +/** * Retrieves an url for a plugin page. * @param string file - php script full name */ @@ -287,6 +374,7 @@ function extension_name_compare($a, $b) { return strcmp(strtolower($a['ext_name']), strtolower($b['ext_name'])); } + function extension_author_compare($a, $b) { $r = strcmp(strtolower($a['author']), strtolower($b['author'])); @@ -294,4 +382,14 @@ function extension_author_compare($a, $b) else return $r; } +function plugin_author_compare($a, $b) +{ + return strcasecmp( $a['author'], $b['author']); +} + +function plugin_version_compare($a, $b) +{ + return version_compare( $a['version'], $b['version']); +} + ?>
\ No newline at end of file diff --git a/admin/plugins.php b/admin/plugins.php index a4260513b..2206be228 100644 --- a/admin/plugins.php +++ b/admin/plugins.php @@ -31,8 +31,6 @@ if( !defined("PHPWG_ROOT_PATH") ) include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php'); check_status(ACCESS_ADMINISTRATOR); -$my_base_url = PHPWG_ROOT_PATH.'admin.php?page=plugins'; - // +-----------------------------------------------------------------------+ // | Sections definitions | @@ -46,7 +44,7 @@ else $page['section'] = $_GET['section']; } -$tab_link = $my_base_url . '&section='; +$tab_link = get_root_url().'admin.php?page=plugins&section='; // TabSheet $tabsheet = new tabsheet(); @@ -59,168 +57,10 @@ $tabsheet->select($page['section']); // Assign tabsheet to template $tabsheet->assign(); -$my_base_url .= '§ion=' . $page['section']; - - -// +-----------------------------------------------------------------------+ -// | 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); - } - - $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': - if (!isset($crt_db_plugin)) - { - array_push($errors, 'CANNOT ' . $_GET['action'] . ' - NOT INSTALLED'); - break; - } - if ($crt_db_plugin['state'] != 'inactive') - { - array_push($errors, 'invalid current state ' . $crt_db_plugin['state']); - break; - } - if (file_exists($file_to_include)) - { - include_once($file_to_include); - if (function_exists('plugin_activate')) - { - plugin_activate($plugin_id, $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)) - { - die ('CANNOT ' . $_GET['action'] . ' - NOT INSTALLED'); - } - if ($crt_db_plugin['state'] != 'active') - { - die('invalid current state ' . $crt_db_plugin['state']); - } - $query = ' -UPDATE ' . PLUGINS_TABLE . ' SET state="inactive" WHERE id="' . $plugin_id . '"'; - pwg_query($query); - if (file_exists($file_to_include)) - { - include_once($file_to_include); - if (function_exists('plugin_deactivate')) - { - plugin_deactivate($plugin_id); - } - } - 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)) - { - $my_base_url .= isset($_GET['upgrade']) ? - '&plugin='.$plugin_id.'&upgrade='.$_GET['upgrade'].'&reactivate=true':''; - - $my_base_url .= isset($_GET['upgradestatus']) ? - '&plugin='.$plugin_id.'&upgradestatus='.$_GET['upgradestatus']:''; - - redirect($my_base_url); - } - else - { - $page['errors'] = array_merge($page['errors'], $errors); - } -} - // +-----------------------------------------------------------------------+ // | start template output | // +-----------------------------------------------------------------------+ -$fs_plugins = get_fs_plugins(); -uasort($fs_plugins, 'name_compare'); -$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; -} include(PHPWG_ROOT_PATH.'admin/plugins_'.$page['section'].'.php'); - -$template->assign_var_from_handle('ADMIN_CONTENT', 'plugins'); - ?>
\ No newline at end of file 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 diff --git a/admin/plugins_new.php b/admin/plugins_new.php index 186a1901e..8720228f6 100644 --- a/admin/plugins_new.php +++ b/admin/plugins_new.php @@ -1,7 +1,7 @@ <?php // +-----------------------------------------------------------------------+ // | PhpWebGallery - a PHP based picture gallery | -// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net | +// | Copyright (C) 2003-2008 PhpWebGallery Team - http://phpwebgallery.net | // +-----------------------------------------------------------------------+ // | file : $Id$ // | last update : $Date$ @@ -28,6 +28,11 @@ if( !defined("PHPWG_ROOT_PATH") ) die ("Hacking attempt!"); } + +$fs_plugins = get_fs_plugins(); +$my_base_url= get_root_url().'admin.php'.get_query_string_diff( array('install', 'extension', 'installstatus', 'order') ); + + $template->set_filenames(array('plugins' => 'admin/plugins_new.tpl')); @@ -75,11 +80,11 @@ if (isset($_GET['installstatus'])) $order = isset($_GET['order']) ? $_GET['order'] : 'date'; $template->assign('order', - array(htmlentities($my_base_url.'&order=date') => l10n('Post date'), - htmlentities($my_base_url.'&order=name') => l10n('Name'), - htmlentities($my_base_url.'&order=author') => l10n('Author'))); + array($my_base_url.'&order=date' => l10n('Post date'), + $my_base_url.'&order=name' => l10n('Name'), + $my_base_url.'&order=author' => l10n('Author'))); -$template->assign('selected', htmlentities($my_base_url.'&order=').$order); +$template->assign('selected', $my_base_url.'&order='.$order); // +-----------------------------------------------------------------------+ @@ -102,7 +107,7 @@ if ($plugins_infos !== false) nl2br(htmlspecialchars(strip_tags( utf8_encode($plugin['description']))))); - $url_auto_install = htmlentities($my_base_url) + $url_auto_install = $my_base_url . '&extension=' . $plugin['id_extension'] . '&install=%2Fupload%2Fextension-' . $plugin['id_extension'] . '%2Frevision-' . $plugin['id_revision'] . '%2F' @@ -129,4 +134,5 @@ else array_push($page['errors'], l10n('plugins_server_error')); } +$template->assign_var_from_handle('ADMIN_CONTENT', 'plugins'); ?>
\ No newline at end of file diff --git a/admin/plugins_update.php b/admin/plugins_update.php index 43aab8d56..2799fa89b 100644 --- a/admin/plugins_update.php +++ b/admin/plugins_update.php @@ -1,7 +1,7 @@ <?php // +-----------------------------------------------------------------------+ // | PhpWebGallery - a PHP based picture gallery | -// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net | +// | Copyright (C) 2003-2008 PhpWebGallery Team - http://phpwebgallery.net | // +-----------------------------------------------------------------------+ // | file : $Id$ // | last update : $Date$ @@ -28,6 +28,16 @@ if( !defined("PHPWG_ROOT_PATH") ) die ("Hacking attempt!"); } +$fs_plugins = get_fs_plugins(); +$my_base_url= get_root_url().'admin.php'.get_query_string_diff( array('upgrade', 'plugin', 'reactivate', 'action', 'upgradestatus') ); + +$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; +} + $template->set_filenames(array('plugins' => 'admin/plugins_update.tpl')); @@ -113,7 +123,7 @@ if ($plugins_infos !== false) else { // Plugin need upgrade - $url_auto_update = htmlentities($my_base_url) + $url_auto_update = $my_base_url . '&plugin=' . $plugin_id . ( (isset($db_plugins_by_id[$plugin_id]) @@ -154,4 +164,5 @@ else array_push($page['errors'], l10n('plugins_server_error')); } +$template->assign_var_from_handle('ADMIN_CONTENT', 'plugins'); ?>
\ No newline at end of file |