addMethod( 'pwg.plugins.update', 'ws_plugins_update', array( 'id' => array(), 'revision' => array(), 'pwg_token' => array(), ), 'Update a plugin. Webmaster only.' ); $service->addMethod( 'pwg.themes.update', 'ws_themes_update', array( 'id' => array(), 'revision' => array(), 'pwg_token' => array(), ), 'Update a theme. Webmaster only.' ); $service->addMethod( 'pwg.languages.update', 'ws_languages_update', array( 'id' => array(), 'revision'=> array(), 'pwg_token' => array(), ), 'Update a language. Webmaster only.' ); $service->addMethod( 'pwg.extensions.checkUpdates', 'ws_extensions_checkupdates', array(), 'Check if piwigo or extensions are up to date.' ); $service->addMethod( 'pwg.extensions.ignoreUpdates', 'ws_extensions_ignoreupdates', array( 'type' => array('default'=>null), 'id' => array('default'=>null), 'reset' => array('default'=>null), 'pwg_token' => array(), ), 'Ignore an extension if it need update.' ); function ws_plugins_update($params, &$service) { if (!is_webmaster()) { return new PwgError(401, l10n('Webmaster status is required.')); } if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token']) { return new PwgError(403, 'Invalid security token'); } include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php'); $plugins = new plugins(); if (empty($params['id']) or empty($params['revision'])) { return new PwgError(null, 'Wrong parameters'); } $plugin_id = $params['id']; $revision = $params['revision']; if (isset($plugins->db_plugins_by_id[$plugin_id]) and $plugins->db_plugins_by_id[$plugin_id]['state'] == 'active' and $plugin_id != 'autoupdate') { $plugins->perform_action('deactivate', $plugin_id); redirect(PHPWG_ROOT_PATH . 'ws.php' . '?method=pwg.plugins.update' . '&revision=' . $revision . '&id=' . $plugin_id . '&reactivate=true' . '&pwg_token=' . get_pwg_token() . '&format=json' ); } $upgrade_status = $plugins->extract_plugin_files('upgrade', $revision, $plugin_id); if (isset($params['reactivate'])) { $plugins->perform_action('activate', $plugin_id); } global $template; $template->delete_compiled_templates(); switch ($upgrade_status) { case 'ok': return sprintf(l10n('%s has been successfully upgraded.'), $plugins->fs_plugins[$plugin_id]['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, sprintf(l10n('An error occured during extraction (%s).'), $upgrade_status)); } } function ws_themes_update($params, &$service) { if (!is_webmaster()) { return new PwgError(401, l10n('Webmaster status is required.')); } if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token']) { return new PwgError(403, 'Invalid security token'); } include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php'); $themes = new themes(); $theme_id = $params['id']; $revision = $params['revision']; $upgrade_status = $themes->extract_theme_files('upgrade', $revision, $theme_id); global $template; $template->delete_compiled_templates(); switch ($upgrade_status) { case 'ok': return sprintf(l10n('%s has been successfully upgraded.'), $themes->fs_themes[$theme_id]['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, sprintf(l10n('An error occured during extraction (%s).'), $upgrade_status)); } } function ws_languages_update($params, &$service) { if (!is_webmaster()) { return new PwgError(401, l10n('Webmaster status is required.')); } if (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token']) { return new PwgError(403, 'Invalid security token'); } include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); include_once(PHPWG_ROOT_PATH.'admin/include/languages.class.php'); $languages = new languages(); $language_id = $params['id']; $revision = $params['revision']; $upgrade_status = $languages->extract_language_files('upgrade', $revision, $language_id); global $template; $template->delete_compiled_templates(); switch ($upgrade_status) { case 'ok': return sprintf(l10n('%s has been successfully upgraded.'), $languages->fs_languages[$language_id]['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, sprintf(l10n('An error occured during extraction (%s).'), $upgrade_status)); } } function ws_extensions_checkupdates($params, &$service) { define('IN_ADMIN', true); include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); include_once(AUTOUPDATE_PATH.'include/autoupdate.class.php'); $autoupdate = new autoupdate(); if (!is_webmaster()) { return new PwgError(401, 'Access denied'); } // Check if gallery or plugins are up to date load_language('plugin.lang', dirname(dirname(__FILE__)).'/'); function autoupdate_error() { unset($_SESSION['extensions_need_update']); return new PwgError(null, 'An error occured'); } if (!isset($_SESSION['need_update'])) $autoupdate->check_piwigo_upgrade(); if ($_SESSION['need_update']) return 'piwigo_upgrade'; // Gallery is up to date -> check extensions if (!isset($_SESSION['extensions_need_update'])) $autoupdate->check_extensions(); else $autoupdate->check_updated_extensions(); if (!empty($_SESSION['extensions_need_update'])) return 'ext_upgrade'; elseif ($_SESSION['need_update'] === false and $_SESSION['extensions_need_update'] === array()) return 'up_to_date'; autoupdate_error(); } function ws_extensions_ignoreupdates($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 (empty($params['pwg_token']) or get_pwg_token() != $params['pwg_token']) { return new PwgError(403, 'Invalid security token'); } if ($params['reset']) { $conf['AU_ignore'] = array('plugins'=>array(),'themes'=>array(),'languages'=>array()); conf_update_param('autoupdate_ignore_list', pwg_db_real_escape_string(serialize($conf['AU_ignore']))); 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(null, 'Invalid parameters'); } // Add or remove plugin from ignore list if (!in_array($params['id'], $conf['AU_ignore'][$params['type']])) { array_push($conf['AU_ignore'][$params['type']], $params['id']); } conf_update_param('autoupdate_ignore_list', pwg_db_real_escape_string(serialize($conf['AU_ignore']))); unset($_SESSION['extensions_need_update']); return true; } ?>