diff options
Diffstat (limited to '')
-rw-r--r-- | include/ws_functions/pwg.extensions.php | 343 |
1 files changed, 343 insertions, 0 deletions
diff --git a/include/ws_functions/pwg.extensions.php b/include/ws_functions/pwg.extensions.php new file mode 100644 index 000000000..3eb8f092d --- /dev/null +++ b/include/ws_functions/pwg.extensions.php @@ -0,0 +1,343 @@ +<?php +// +-----------------------------------------------------------------------+ +// | Piwigo - a PHP based photo gallery | +// +-----------------------------------------------------------------------+ +// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org | +// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | +// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +/** + * API method + * Returns the list of all plugins + * @param mixed[] $params + */ +function ws_plugins_getList($params, &$service) +{ + include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php'); + + $plugins = new plugins(); + $plugins->sort_fs_plugins('name'); + $plugin_list = array(); + + foreach ($plugins->fs_plugins as $plugin_id => $fs_plugin) + { + if (isset($plugins->db_plugins_by_id[$plugin_id])) + { + $state = $plugins->db_plugins_by_id[$plugin_id]['state']; + } + else + { + $state = 'uninstalled'; + } + + $plugin_list[] = array( + 'id' => $plugin_id, + 'name' => $fs_plugin['name'], + 'version' => $fs_plugin['version'], + 'state' => $state, + 'description' => $fs_plugin['description'], + ); + } + + return $plugin_list; +} + +/** + * API method + * Performs an action on a plugin + * @param mixed[] $params + * @option string action + * @option string plugin + * @option string pwg_token + */ +function ws_plugins_performAction($params, &$service) +{ + global $template; + + if (get_pwg_token() != $params['pwg_token']) + { + return new PwgError(403, 'Invalid security token'); + } + + define('IN_ADMIN', true); + include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php'); + + $plugins = new plugins(); + $errors = $plugins->perform_action($params['action'], $params['plugin']); + + if (!empty($errors)) + { + return new PwgError(500, $errors); + } + else + { + if (in_array($params['action'], array('activate', 'deactivate'))) + { + $template->delete_compiled_templates(); + } + return true; + } +} + +/** + * API method + * Performs an action on a theme + * @param mixed[] $params + * @option string action + * @option string theme + * @option string pwg_token + */ +function ws_themes_performAction($params, &$service) +{ + global $template; + + if (get_pwg_token() != $params['pwg_token']) + { + return new PwgError(403, 'Invalid security token'); + } + + define('IN_ADMIN', true); + include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php'); + + $themes = new themes(); + $errors = $themes->perform_action($params['action'], $params['theme']); + + if (!empty($errors)) + { + return new PwgError(500, $errors); + } + else + { + if (in_array($params['action'], array('activate', 'deactivate'))) + { + $template->delete_compiled_templates(); + } + return true; + } +} + +/** + * API method + * Updates an extension + * @param mixed[] $params + * @option string type + * @option string id + * @option string revision + * @option string pwg_token + * @option bool reactivate (optional - undocumented) + */ +function ws_extensions_update($params, &$service) +{ + if (!is_webmaster()) + { + return new PwgError(401, l10n('Webmaster status is required.')); + } + + if (get_pwg_token() != $params['pwg_token']) + { + return new PwgError(403, 'Invalid security token'); + } + + if (!in_array($params['type'], array('plugins', 'themes', 'languages'))) + { + return new PwgError(403, "invalid extension type"); + } + + include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); + include_once(PHPWG_ROOT_PATH.'admin/include/'.$params['type'].'.class.php'); + + $type = $params['type']; + $extension_id = $params['id']; + $revision = $params['revision']; + + $extension = new $type(); + + if ($type == 'plugins') + { + if ( + isset($extension->db_plugins_by_id[$extension_id]) + and $extension->db_plugins_by_id[$extension_id]['state'] == 'active' + ) + { + $extension->perform_action('deactivate', $extension_id); + + redirect(PHPWG_ROOT_PATH + . 'ws.php' + . '?method=pwg.extensions.update' + . '&type=plugins' + . '&id=' . $extension_id + . '&revision=' . $revision + . '&reactivate=true' + . '&pwg_token=' . get_pwg_token() + . '&format=json' + ); + } + + $upgrade_status = $extension->extract_plugin_files('upgrade', $revision, $extension_id); + $extension_name = $extension->fs_plugins[$extension_id]['name']; + + if (isset($params['reactivate'])) + { + $extension->perform_action('activate', $extension_id); + } + } + else if ($type == 'themes') + { + $upgrade_status = $extension->extract_theme_files('upgrade', $revision, $extension_id); + $extension_name = $extension->fs_themes[$extension_id]['name']; + } + else if ($type == 'languages') + { + $upgrade_status = $extension->extract_language_files('upgrade', $revision, $extension_id); + $extension_name = $extension->fs_languages[$extension_id]['name']; + } + + global $template; + $template->delete_compiled_templates(); + + switch ($upgrade_status) + { + case 'ok': + return l10n('%s has been successfully updated.', $extension_name); + + case 'temp_path_error': + return new PwgError(null, l10n('Can\'t create temporary file.')); + + case 'dl_archive_error': + return new PwgError(null, l10n('Can\'t download archive.')); + + case 'archive_error': + return new PwgError(null, l10n('Can\'t read or extract archive.')); + + default: + return new PwgError(null, l10n('An error occured during extraction (%s).', $upgrade_status)); + } +} + +/** + * API method + * Ignore an update + * @param mixed[] $params + * @option string type (optional) + * @option string id (optional) + * @option bool reset + * @option string pwg_token + */ +function ws_extensions_ignoreupdate($params, &$service) +{ + global $conf; + + define('IN_ADMIN', true); + include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); + + if (!is_webmaster()) + { + return new PwgError(401, 'Access denied'); + } + + if (get_pwg_token() != $params['pwg_token']) + { + return new PwgError(403, 'Invalid security token'); + } + + $conf['updates_ignored'] = unserialize($conf['updates_ignored']); + + // Reset ignored extension + if ($params['reset']) + { + if (!empty($params['type']) and isset($conf['updates_ignored'][ $params['type'] ])) + { + $conf['updates_ignored'][$params['type']] = array(); + } + else + { + $conf['updates_ignored'] = array( + 'plugins'=>array(), + 'themes'=>array(), + 'languages'=>array() + ); + } + + conf_update_param('updates_ignored', pwg_db_real_escape_string(serialize($conf['updates_ignored']))); + unset($_SESSION['extensions_need_update']); + return true; + } + + if (empty($params['id']) or empty($params['type']) or !in_array($params['type'], array('plugins', 'themes', 'languages'))) + { + return new PwgError(403, 'Invalid parameters'); + } + + // Add or remove extension from ignore list + if (!in_array($params['id'], $conf['updates_ignored'][ $params['type'] ])) + { + $conf['updates_ignored'][ $params['type'] ][] = $params['id']; + } + + conf_update_param('updates_ignored', pwg_db_real_escape_string(serialize($conf['updates_ignored']))); + unset($_SESSION['extensions_need_update']); + return true; +} + +/** + * API method + * Checks for updates (core and extensions) + * @param mixed[] $params + */ +function ws_extensions_checkupdates($params, &$service) +{ + global $conf; + + define('IN_ADMIN', true); + include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); + include_once(PHPWG_ROOT_PATH.'admin/include/updates.class.php'); + + $update = new updates(); + $result = array(); + + if (!isset($_SESSION['need_update'])) + { + $update->check_piwigo_upgrade(); + } + + $result['piwigo_need_update'] = $_SESSION['need_update']; + + $conf['updates_ignored'] = unserialize($conf['updates_ignored']); + + if (!isset($_SESSION['extensions_need_update'])) + { + $update->check_extensions(); + } + else + { + $update->check_updated_extensions(); + } + + if (!is_array($_SESSION['extensions_need_update'])) + { + $result['ext_need_update'] = null; + } + else + { + $result['ext_need_update'] = !empty($_SESSION['extensions_need_update']); + } + + return $result; +} + +?>
\ No newline at end of file |