Пример #1
0
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');
Пример #2
0
/**
 * 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);
        }
    }
}
Пример #3
0
 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;
                 }
             }
         }
     }
 }