Changeset 6167


Ignore:
Timestamp:
May 13, 2010, 12:06:29 PM (14 years ago)
Author:
patdenice
Message:

Upgrade work for 2.1.
Language keys have not been inserted yet.

Location:
extensions/autoupdate
Files:
8 added
6 edited
2 copied

Legend:

Unmodified
Added
Removed
  • extensions/autoupdate/autoupdate.php

    r4711 r6167  
    22
    33load_language('plugin.lang', dirname(__FILE__).'/');
    4 
    5 if (isset($_GET['action']) and
    6   ($_GET['action'] == 'check_autoupdate' or $_GET['action'] == 'check_upgrade' ))
    7 {
    8   unset($_SESSION['need_update']);
    9   unset($_SESSION['plugins_need_update']);
    10 }
    11 
    12 if (isset($_GET['autoupdate']))
    13 {
    14   if ($_GET['autoupdate'] == 'success')
    15   {
    16     array_push($page['infos'], sprintf(l10n('autoupdate_success'), PHPWG_VERSION));
    17   }
    18   elseif ($file = $conf['local_data_dir'].'/autoupdate/'.$_GET['autoupdate'].'.zip' and file_exists($file))
    19   {
    20     include(dirname(__FILE__).'/class.inc.php');
    21     include_once(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php');
    22     $autoupdate = new autoupdate();
    23     $zip = new PclZip($file);
    24     if ($result = $zip->extract(PCLZIP_OPT_PATH, PHPWG_ROOT_PATH,
    25                                 PCLZIP_OPT_REMOVE_PATH, $_GET['autoupdate'],
    26                                 PCLZIP_OPT_SET_CHMOD, 0755,
    27                                 PCLZIP_OPT_REPLACE_NEWER))
    28     {
    29       //Check if all files were extracted
    30       $error = '';
    31       foreach($result as $extract)
    32       {
    33         if (!in_array($extract['status'], array('ok', 'filtered', 'already_a_directory')))
     4include(AUTOUPDATE_PATH.'include/functions.inc.php');
     5include(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php');
     6
     7/*
     8STEP:
     90 = check is needed. If version is latest or check fail, we stay on step 0
     101 = new version on same branch AND new branch are available => user may choose upgrade.
     112 = upgrade on same branch
     123 = upgrade on different branch
     13*/
     14$step = isset($_GET['step']) ? $_GET['step'] : 0;
     15
     16// +-----------------------------------------------------------------------+
     17// |                                Step 0                                 |
     18// +-----------------------------------------------------------------------+
     19if ($step == 0)
     20{
     21  if (preg_match('/(\d+\.\d+)\.(\d+)/', PHPWG_VERSION, $matches)
     22    and @fetchRemote(PHPWG_URL.'/download/all_versions.php', $result)
     23    and $all_versions = @explode("\n", $result)
     24    and is_array($all_versions))
     25  {
     26    $template->assign('CHECK_VERSION', true);
     27
     28    $last_version = trim($all_versions[0]);
     29
     30    if (version_compare(PHPWG_VERSION, $last_version, '<'))
     31    {
     32      $new_branch = preg_replace('/(\d+\.\d+)\.\d+/', '$1', $last_version);
     33      $actual_branch = $matches[1];
     34
     35      if ($new_branch == $actual_branch)
     36      {
     37        $step = 2;
     38      }
     39      else
     40      {
     41        $step = 3;
     42
     43        // Check if new version exists in same branch
     44        foreach ($all_versions as $version)
    3445        {
    35           // Try to change chmod and extract
    36           if (@chmod(PHPWG_ROOT_PATH.$extract['filename'], 0777)
    37             and ($res = $zip->extract(PCLZIP_OPT_BY_NAME, $_GET['autoupdate'].'/'.$extract['filename'],
    38                                       PCLZIP_OPT_PATH, PHPWG_ROOT_PATH,
    39                                       PCLZIP_OPT_REMOVE_PATH, $_GET['autoupdate'],
    40                                       PCLZIP_OPT_SET_CHMOD, 0755,
    41                                       PCLZIP_OPT_REPLACE_NEWER))
    42             and isset($res[0]['status'])
    43             and $res[0]['status'] == 'ok')
     46          $new_branch = preg_replace('/(\d+\.\d+)\.\d+/', '$1', $version);
     47
     48          if ($new_branch == $actual_branch)
    4449          {
    45             continue;
    46           }
    47           else
    48           {
    49             $error .= $extract['filename'].': '.$extract['status']."\n";
     50            if (version_compare(PHPWG_VERSION, $version, '<'))
     51            {
     52              $step = 1;
     53            }
     54            break;
    5055          }
    5156        }
    5257      }
    53 
    54       if (empty($error))
    55       {
    56         if (file_exists(PHPWG_ROOT_PATH.'obsolete.list')
    57           and $old_files = file(PHPWG_ROOT_PATH.'obsolete.list', FILE_IGNORE_NEW_LINES)
    58           and !empty($old_files))
    59         {
    60           array_push($old_files, 'obsolete.list');
    61           foreach($old_files as $old_file)
    62           {
    63             $path = PHPWG_ROOT_PATH.$old_file;
    64             if (is_file($path))
    65             {
    66               @unlink($path);
    67             }
    68             elseif (is_dir($path))
    69             {
    70               $autoupdate->deltree($path);
    71             }
    72           }
    73         }
    74         if (preg_match('/\d+\.\d+\.\d+_to_(\d+\.\d+\.\d+)/', $_GET['autoupdate'], $matches))
    75         {
    76           unset($_SESSION['need_update']);
    77           $autoupdate->check_version($matches[1]);
    78         }
    79         $autoupdate->deltree($conf['local_data_dir'].'/autoupdate');
    80         invalidate_user_cache(true);
    81         $template->delete_compiled_templates();
    82         redirect('admin.php?autoupdate=success');
    83       }
    84       else
    85       {
    86         file_put_contents($conf['local_data_dir'].'/autoupdate/log_error.txt', $error);
    87         $relative_path = trim(str_replace(dirname(dirname(dirname(__FILE__))), '', $conf['local_data_dir']), '/\\');
    88         array_push($page['errors'], sprintf(l10n('autoupdate_extract_fail'), PHPWG_ROOT_PATH.$relative_path.'/autoupdate/log_error.txt'));
    89       }
    90     }
    91     else
    92     {
    93       $autoupdate->deltree($conf['local_data_dir'].'/autoupdate');
    94       array_push($page['errors'], l10n('autoupdate_fail'));
    9558    }
    9659  }
    9760  else
    9861  {
    99     @unlink($file);
    100     array_push($page['errors'], l10n('autoupdate_fail'));
    101   }
    102 }
    103 
    104 if (!isset($_SESSION['need_update']) or !isset($_SESSION['plugins_need_update'])
    105   or $_SESSION['need_update'] !== false or $_SESSION['plugins_need_update'] !== array())
    106 {
    107   $template->set_filename('autoupdate_head', realpath(dirname(__FILE__).'/head.tpl'));
    108   array_push($header_notes, $template->parse('autoupdate_head', true));
    109 }
     62    $template->assign('CHECK_VERSION', false);
     63  }
     64}
     65
     66// +-----------------------------------------------------------------------+
     67// |                                Step 1                                 |
     68// +-----------------------------------------------------------------------+
     69if ($step == 1)
     70{
     71  $new_versions = array($last_version, $version);
     72  $template->assign('new_versions', $new_versions);
     73}
     74
     75// +-----------------------------------------------------------------------+
     76// |                                Step 2                                 |
     77// +-----------------------------------------------------------------------+
     78if ($step == 2)
     79{
     80  if (isset($_POST['submit']) and isset($_POST['upgrade_to']))
     81  {
     82    upgrade_to($_POST['upgrade_to'], $step);
     83  }
     84
     85  $template->assign('UPGRADE_TO', isset($_GET['to']) ? $_GET['to'] : $last_version);
     86}
     87
     88// +-----------------------------------------------------------------------+
     89// |                                Step 3                                 |
     90// +-----------------------------------------------------------------------+
     91if ($step == 3)
     92{
     93  if (isset($_POST['saveTemplate']))
     94  {
     95    $path = $conf['local_data_dir'].'/autoupdate';
     96
     97    if (@mkgetdir($path)
     98      and ($zip = tempnam($path, 'zip'))
     99      and ($archive = new pclZip($zip))
     100      and ($v_list = $archive->add(PHPWG_ROOT_PATH.'template', PCLZIP_OPT_REMOVE_PATH, PHPWG_ROOT_PATH))
     101      and is_array($v_list)
     102      and !empty($v_list))
     103    {
     104      $http_headers = array(
     105        'Content-Length: '.@filesize($zip),
     106        'Content-Type: application/zip',
     107        'Content-Disposition: attachment; filename="template.zip";',
     108        'Content-Transfer-Encoding: binary',
     109        );
     110
     111      foreach ($http_headers as $header) {
     112        header($header);
     113      }
     114
     115      @readfile($zip);
     116      autoupdate_deltree($conf['local_data_dir'].'/autoupdate');
     117      exit();
     118    }
     119
     120    array_push($page['errors'], l10n('Unable to send template directory.'));
     121  }
     122
     123  if (isset($_POST['dumpDatabase']))
     124  {
     125    if (version_compare(PHPWG_VERSION, '2.1', '<'))
     126    {
     127      global $cfgBase;
     128      $conf['db_base'] = $cfgBase;
     129    }
     130
     131    include(AUTOUPDATE_PATH.'include/mysqldump.php');
     132
     133    $path = $conf['local_data_dir'].'/autoupdate';
     134
     135    if (@mkgetdir($path)
     136      and ($backupFile = tempnam($path, 'sql'))
     137      and ($dumper = new MySQLDump($conf['db_base'],$backupFile,false,false)))
     138    {
     139      $tablesStructure = array(
     140        CATEGORIES_TABLE,
     141        COMMENTS_TABLE,
     142        CONFIG_TABLE,
     143        FAVORITES_TABLE,
     144        GROUP_ACCESS_TABLE,
     145        GROUPS_TABLE,
     146        HISTORY_TABLE,
     147        HISTORY_SUMMARY_TABLE,
     148        IMAGE_CATEGORY_TABLE,
     149        IMAGES_TABLE,
     150        SESSIONS_TABLE,
     151        SITES_TABLE,
     152        USER_ACCESS_TABLE,
     153        USER_GROUP_TABLE,
     154        USERS_TABLE,
     155        USER_INFOS_TABLE,
     156        USER_FEED_TABLE,
     157        WAITING_TABLE,
     158        RATE_TABLE,
     159        USER_CACHE_TABLE,
     160        USER_CACHE_CATEGORIES_TABLE,
     161        CADDIE_TABLE,
     162        UPGRADE_TABLE,
     163        SEARCH_TABLE,
     164        USER_MAIL_NOTIFICATION_TABLE,
     165        TAGS_TABLE,
     166        IMAGE_TAG_TABLE,
     167        PLUGINS_TABLE,
     168        OLD_PERMALINKS_TABLE,
     169        );
     170
     171      $tablesData = $tablesStructure;
     172
     173      if (!isset($_POST['includeHistory']))
     174      {
     175        unset($tablesData[6]);
     176      }
     177
     178      foreach ($tablesStructure as $table)
     179      {
     180        $dumper->getTableStructure($table);
     181      }
     182      foreach ($tablesData as $table)
     183      {
     184        $dumper->getTableData($table);
     185      }
     186    }
     187
     188    if (@filesize($backupFile))
     189    {
     190      $http_headers = array(
     191        'Content-Length: '.@filesize($backupFile),
     192        'Content-Type: text/x-sql',
     193        'Content-Disposition: attachment; filename="database.sql";',
     194        'Content-Transfer-Encoding: binary',
     195        );
     196
     197      foreach ($http_headers as $header) {
     198        header($header);
     199      }
     200
     201      @readfile($backupFile);
     202      autoupdate_deltree($conf['local_data_dir'].'/autoupdate');
     203      exit();
     204    }
     205
     206    array_push($page['errors'], l10n('Unable to dump database.'));
     207  }
     208
     209  if (isset($_POST['submit']) and isset($_POST['upgrade_to']))
     210  {
     211    upgrade_to($_POST['upgrade_to'], $step);
     212  }
     213
     214  $template->assign('UPGRADE_TO', isset($_GET['to']) ? $_GET['to'] : $last_version);
     215}
     216
     217// +-----------------------------------------------------------------------+
     218// |                        Process template                               |
     219// +-----------------------------------------------------------------------+
     220
     221$template->assign(array(
     222  'STEP' => $step,
     223  'AU_URL' => get_admin_plugin_menu_link(AUTOUPDATE_PATH . '/autoupdate.php'),
     224  )
     225);
     226
     227$template->set_filename('plugin_admin_content', realpath(AUTOUPDATE_PATH.'template/autoupdate.tpl'));
     228$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
    110229
    111230?>
  • extensions/autoupdate/index.php

    r3575 r6167  
    11<?php
    22// +-----------------------------------------------------------------------+
    3 // | PhpWebGallery - a PHP based picture gallery                           |
    4 // | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
    5 // | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
     3// | Piwigo - a PHP based picture gallery                                  |
    64// +-----------------------------------------------------------------------+
    7 // | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
    8 // | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
    9 // | last modifier : $Author: rub $
    10 // | revision      : $Revision: 1912 $
     5// | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.org |
     6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
     7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
    118// +-----------------------------------------------------------------------+
    129// | This program is free software; you can redistribute it and/or modify  |
  • extensions/autoupdate/main.inc.php

    r4711 r6167  
    1111if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
    1212
    13 if (script_basename() == 'admin') add_event_handler('get_admin_plugin_menu_links', 'check_for_auto_upgrade');
     13define('AUTOUPDATE_PATH' , PHPWG_PLUGINS_PATH . basename(dirname(__FILE__)) . '/');
     14
     15if (script_basename() == 'admin')
     16 add_event_handler('get_admin_plugin_menu_links', 'check_for_auto_upgrade');
    1417
    1518function check_for_auto_upgrade($plugin_menu_links)
    1619{
    17   global $template, $page, $conf, $header_notes;
     20  global $template, $page, $conf, $header_notes, $prefixeTable;
    1821
    1922  if ($page['page'] == 'intro')
    2023  {
    21     include(dirname(__FILE__).'/autoupdate.php');
     24    if (isset($_GET['action']) and
     25      ($_GET['action'] == 'check_autoupdate' or $_GET['action'] == 'check_upgrade' ))
     26    {
     27      unset($_SESSION['need_update']);
     28      unset($_SESSION['plugins_need_update']);
     29    }
     30
     31    if (!isset($_SESSION['need_update']) or !isset($_SESSION['plugins_need_update'])
     32      or $_SESSION['need_update'] !== false or $_SESSION['plugins_need_update'] !== array())
     33    {
     34      $template->set_filename('autoupdate_head', realpath(AUTOUPDATE_PATH.'template/head.tpl'));
     35      array_push($header_notes, $template->parse('autoupdate_head', true));
     36    }
    2237  }
    2338
    24   if ($page['page'] == 'plugins_update')
     39  if ($page['page'] == 'plugins_update' and method_exists('template', 'set_prefilter'))
    2540  {
    2641    include(dirname(__FILE__).'/plugins_update.php');
    2742  }
    2843
     44  array_push($plugin_menu_links, array(
     45      'NAME' => 'Piwigo AutoUpgrade',
     46      'URL' => get_admin_plugin_menu_link(AUTOUPDATE_PATH . '/autoupdate.php')));
     47
    2948  return $plugin_menu_links;
    3049}
  • extensions/autoupdate/maintain.inc.php

    r4711 r6167  
    33function plugin_activate()
    44{
    5   global $prefixeTable;
     5  global $prefixeTable, $conf;
    66
    7   $query = '
     7  if (!isset($conf['autoupdate_ignore_list']))
     8  {
     9    $query = '
    810INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
    911VALUES ("autoupdate_ignore_list" , "'.addslashes(serialize(array())).'" , "Ignored plugin list for Piwigo Auto Update plugin");';
    1012
    11   pwg_query($query);
     13    pwg_query($query);
     14  }
    1215}
    1316
  • extensions/autoupdate/plugins_update.php

    r4711 r6167  
    55function autoupdate_plugins_update_filter($content, &$smarty)
    66{
    7   $search = '<a href="{$plugin.URL_DOWNLOAD}">{\'plugins_download\'|@translate}</a>';
    8   $replacement = '  <a href="{$plugin.URL_DOWNLOAD}">{\'plugins_download\'|@translate}</a><br>
     7  $l_key = version_compare(PHPWG_VERSION, '2.1', '<') ? 'plugins_download' : 'Download file';
     8
     9  $search = '<a href="{$plugin.URL_DOWNLOAD}">{\''.$l_key.'\'|@translate}</a>';
     10
     11  $replacement = '  <a href="{$plugin.URL_DOWNLOAD}">{\''.$l_key.'\'|@translate}</a><br>
    912    <a href="#" onClick="autoupdate_ignore(\'{$plugin.EXT_NAME}\', true, {$smarty.foreach.plugins_loop.index}); return false;" id="au_ignore_{$smarty.foreach.plugins_loop.index}_true" {if $plugin.EXT_NAME|@in_array:$AU_IGNORE_LIST}style="display: none;"{/if}>{\'Don\\\'t notify on admin homepage\'|@translate}</a>
    1013    <a href="#" onClick="autoupdate_ignore(\'{$plugin.EXT_NAME}\', false, {$smarty.foreach.plugins_loop.index}); return false;" id="au_ignore_{$smarty.foreach.plugins_loop.index}_false" {if !$plugin.EXT_NAME|@in_array:$AU_IGNORE_LIST}style="display: none;"{/if}>{\'Notify on admin homepage\'|@translate}</a>';
     
    1821  jQuery.post(
    1922    "'.PHPWG_ROOT_PATH.'plugins/autoupdate/remote.php",
    20     { "autoupdate_ignore[]": [name, bool] },
     23    { "autoupdate_ignore'.(version_compare(PHPWG_VERSION, '2.1', '<') ? '[]' : '').'": [name, bool] },
    2124    function(data) {
    2225      if (data == "ok") {
     
    3033';
    3134
    32 //$template->delete_compiled_templates();
    3335$template->block_html_head('', $script_head, $smarty, $repeat);
    3436$template->set_prefilter('plugins', 'autoupdate_plugins_update_filter');
  • extensions/autoupdate/remote.php

    r4835 r6167  
    55include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
    66include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
     7include_once(PHPWG_ROOT_PATH.'admin/include/functions_plugins.inc.php');
    78
    89check_status(ACCESS_ADMINISTRATOR);
     
    1213  and count($_POST['autoupdate_ignore']) == 2)
    1314{
     15  // Add or remove plugin from ignore list
    1416  $ignore = unserialize($conf['autoupdate_ignore_list']);
    1517  $ignore = array_flip($ignore);
     
    4345else
    4446{
     47  // Check if gallery or plugins are up to date
    4548  load_language('plugin.lang', dirname(__FILE__).'/');
    4649  header('Content-Type: text/html; charset=UTF-8');
    4750
    48   include(dirname(__FILE__).'/class.inc.php');
    49   $autoupdate = new autoupdate();
    50 
    51   echo $autoupdate->check_version();
     51  include(AUTOUPDATE_PATH.'include/functions_remote.inc.php');
     52  echo autoupdate_check_version();
    5253}
    5354
  • extensions/autoupdate/template/head.tpl

    r6138 r6167  
    2121  });
    2222}
    23 
    24 function confirm_autoupdate() {ldelim}
    25   conf = confirm('{'autoupdate_alert'|@translate}');
    26   if (conf) jQuery('#autoupdate').html('Upgrade in progress... Please wait.');
    27   return conf;
    28 }
    2923</script>
    3024{/html_head}
    31 <p id="autoupdate"><img src="plugins/autoupdate/ajax-loader.gif"> &nbsp; {'Checking upgrades for gallery and plugins...'|@translate}</p>
     25<p id="autoupdate"><img src="plugins/autoupdate/template/ajax-loader.gif"> &nbsp; {'Checking upgrades for gallery and plugins...'|@translate}</p>
Note: See TracChangeset for help on using the changeset viewer.