if (!$autoupdate->get_server_extensions()) { $page['errors'][] = l10n('Can\'t connect to server.'); return; // TODO: remove this return and add a proper "page killer" } foreach ($autoupdate->types as $type) { $fs = 'fs_' . $type; $server = 'server_' . $type; $server_ext = $autoupdate->{$type}->{$server}; $fs_ext = $autoupdate->{$type}->{$fs}; if (empty($server_ext)) { continue; } foreach ($fs_ext as $ext_id => $fs_ext) { if (!isset($fs_ext['extension']) or !isset($server_ext[$fs_ext['extension']])) { continue; } $ext_info = $server_ext[$fs_ext['extension']]; if (!safe_version_compare($fs_ext['version'], $ext_info['revision_name'], '>=')) { $template->append('update_' . $type, array('ID' => $ext_info['extension_id'], 'REVISION_ID' => $ext_info['revision_id'], 'EXT_ID' => $ext_id, 'EXT_NAME' => $fs_ext['name'], 'EXT_URL' => PEM_URL . '/extension_view.php?eid=' . $ext_info['extension_id'], 'EXT_DESC' => trim($ext_info['extension_description'], " \n\r"), 'REV_DESC' => trim($ext_info['revision_description'], " \n\r"), 'CURRENT_VERSION' => $fs_ext['version'], 'NEW_VERSION' => $ext_info['revision_name'], 'AUTHOR' => $ext_info['author_name'], 'DOWNLOADS' => $ext_info['extension_nb_downloads'], 'URL_DOWNLOAD' => $ext_info['download_url'] . '&origin=piwigo_download', 'IGNORED' => in_array($ext_id, $conf['updates_ignored'][$type]))); } } if (!empty($conf['updates_ignored'][$type])) { $show_reset = true; } } $template->assign('SHOW_RESET', $show_reset); $template->assign('PWG_TOKEN', get_pwg_token()); $template->assign('EXT_TYPE', $page['page'] == 'updates' ? 'extensions' : $page['page']); $template->set_filename('plugin_admin_content', 'updates_ext.tpl'); $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
/** * Performs update task of a plugin. * Autoupdate is only performed if the plugin has a maintain.class.php file. * * @since 2.7 * * @param array &$plugin (id, version, state) will be updated if version changes */ function autoupdate_plugin(&$plugin) { // try to find the filesystem version in lines 2 to 10 of main.inc.php $fh = fopen(PHPWG_PLUGINS_PATH . $plugin['id'] . '/main.inc.php', 'r'); $fs_version = null; $i = -1; while (($line = fgets($fh)) !== false && $fs_version == null && $i < 10) { $i++; if ($i < 2) { continue; } // first lines are typically "<?php" and "/*" if (preg_match('/Version:\\s*([\\w.-]+)/', $line, $matches)) { $fs_version = $matches[1]; } } fclose($fh); // if version is auto (dev) or superior if ($fs_version != null && ($fs_version == 'auto' || $plugin['version'] == 'auto' || safe_version_compare($plugin['version'], $fs_version, '<'))) { $plugin['version'] = $fs_version; $maintain_file = PHPWG_PLUGINS_PATH . $plugin['id'] . '/maintain.class.php'; // autoupdate is applicable only to plugins with 2.7 architecture if (file_exists($maintain_file)) { global $page; // call update method include_once $maintain_file; $classname = $plugin['id'] . '_maintain'; $plugin_maintain = new $classname($plugin['id']); $plugin_maintain->update($plugin['version'], $fs_version, $page['errors']); } // update database (only on production) if ($plugin['version'] != 'auto') { $query = ' UPDATE ' . PLUGINS_TABLE . ' SET version = "' . $plugin['version'] . '" WHERE id = "' . $plugin['id'] . '" ;'; pwg_query($query); } } }
function check_updated_extensions() { foreach ($this->types as $type) { if (!empty($_SESSION['extensions_need_update'][$type])) { $fs = 'fs_' . $type; foreach ($this->{$type}->{$fs} as $ext_id => $fs_ext) { if (isset($_SESSION['extensions_need_update'][$type][$ext_id]) and safe_version_compare($fs_ext['version'], $_SESSION['extensions_need_update'][$type][$ext_id], '>=')) { // Extension have been upgraded $this->check_extensions(); break; } } } } }