source: trunk/upgrade.php @ 5235

Last change on this file since 5235 was 5234, checked in by ddtddt, 14 years ago

[trunk] localisation hu/RU feature:1526 and feature:1527

File size: 11.9 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
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 |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24define('PHPWG_ROOT_PATH', './');
25
26// load config file
27$config_file = PHPWG_ROOT_PATH.'local/config/database.inc.php';
28$config_file_contents = @file_get_contents($config_file);
29if ($config_file_contents === false)
30{
31  die('Cannot load '.$config_file);
32}
33$php_end_tag = strrpos($config_file_contents, '?'.'>');
34if ($php_end_tag === false)
35{
36  die('Cannot find php end tag in '.$config_file);
37}
38
39include_once(PHPWG_ROOT_PATH.'include/functions.inc.php');
40include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
41include_once(PHPWG_ROOT_PATH.'admin/include/functions_upgrade.php');
42
43include(PHPWG_ROOT_PATH.'local/config/database.inc.php');
44include(PHPWG_ROOT_PATH . 'include/config_default.inc.php');
45@include(PHPWG_ROOT_PATH. 'local/config/config.inc.php');
46include(PHPWG_ROOT_PATH .'include/dblayer/functions_'.$conf['dblayer'].'.inc.php');
47
48prepare_conf_upgrade();
49
50include_once(PHPWG_ROOT_PATH.'include/constants.php');
51define('PREFIX_TABLE', $prefixeTable);
52
53// Database connection
54$pwg_db_link = pwg_db_connect($conf['db_host'], $conf['db_user'], 
55                              $conf['db_password'], $conf['db_base']);
56pwg_select_db($conf['db_base'], $pwg_db_link);
57
58pwg_db_check_charset();
59
60// +-----------------------------------------------------------------------+
61// |                              functions                                |
62// +-----------------------------------------------------------------------+
63
64/**
65 * list all tables in an array
66 *
67 * @return array
68 */
69function get_tables()
70{
71  $tables = array();
72
73  $query = '
74SHOW TABLES
75;';
76  $result = pwg_query($query);
77
78  while ($row = pwg_db_fetch_row($result))
79  {
80    if (preg_match('/^'.PREFIX_TABLE.'/', $row[0]))
81    {
82      array_push($tables, $row[0]);
83    }
84  }
85
86  return $tables;
87}
88
89/**
90 * list all columns of each given table
91 *
92 * @return array of array
93 */
94function get_columns_of($tables)
95{
96  $columns_of = array();
97
98  foreach ($tables as $table)
99  {
100    $query = '
101DESC '.$table.'
102;';
103    $result = pwg_query($query);
104
105    $columns_of[$table] = array();
106
107    while ($row = pwg_db_fetch_row($result))
108    {
109      array_push($columns_of[$table], $row[0]);
110    }
111  }
112
113  return $columns_of;
114}
115
116/**
117 */
118function print_time($message)
119{
120  global $last_time;
121
122  $new_time = get_moment();
123  echo '<pre>['.get_elapsed_time($last_time, $new_time).']';
124  echo ' '.$message;
125  echo '</pre>';
126  flush();
127  $last_time = $new_time;
128}
129
130// +-----------------------------------------------------------------------+
131// |                             playing zone                              |
132// +-----------------------------------------------------------------------+
133
134// echo implode('<br>', get_tables());
135// echo '<pre>'; print_r(get_columns_of(get_tables())); echo '</pre>';
136
137// foreach (get_available_upgrade_ids() as $upgrade_id)
138// {
139//   echo $upgrade_id, '<br>';
140// }
141
142// +-----------------------------------------------------------------------+
143// |                             language                                  |
144// +-----------------------------------------------------------------------+
145if (isset($_GET['language']))
146{
147  $language = strip_tags($_GET['language']);
148}
149else
150{
151  $language = 'en_UK';
152  // Try to get browser language
153  foreach (get_languages('utf-8') as $language_code => $language_name)
154  {
155    if (substr($language_code,0,2) == @substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2))
156    {
157      $language = $language_code;
158      break;
159    }
160  }
161}
162
163if ('fr_FR' == $language) {
164  define('PHPWG_DOMAIN', 'fr.piwigo.org');
165}
166else if ('it_IT' == $language) {
167  define('PHPWG_DOMAIN', 'it.piwigo.org');
168}
169else if ('de_DE' == $language) {
170  define('PHPWG_DOMAIN', 'de.piwigo.org');
171}
172else if ('es_ES' == $language) {
173  define('PHPWG_DOMAIN', 'es.piwigo.org');
174}
175else if ('pl_PL' == $language) {
176  define('PHPWG_DOMAIN', 'pl.piwigo.org');
177}
178else if ('zh_CN' == $language) {
179  define('PHPWG_DOMAIN', 'cn.piwigo.org');
180}
181else if ('hu_HU' == $language) {
182  define('PHPWG_DOMAIN', 'hu.piwigo.org');
183}
184else if ('ru_RU' == $language) {
185  define('PHPWG_DOMAIN', 'ru.piwigo.org');
186}
187else {
188  define('PHPWG_DOMAIN', 'piwigo.org');
189}
190define('PHPWG_URL', 'http://'.PHPWG_DOMAIN);
191
192load_language( 'common.lang', '', array('language'=>$language, 'target_charset'=>'utf-8', 'no_fallback' => true) );
193load_language( 'admin.lang', '', array('language'=>$language, 'target_charset'=>'utf-8', 'no_fallback' => true) );
194load_language( 'install.lang', '', array('language'=>$language, 'target_charset'=>'utf-8', 'no_fallback' => true) );
195load_language( 'upgrade.lang', '', array('language'=>$language, 'target_charset'=>'utf-8', 'no_fallback' => true) );
196
197// check php version
198if (version_compare(PHP_VERSION, REQUIRED_PHP_VERSION, '<'))
199{
200  include(PHPWG_ROOT_PATH.'install/php5_apache_configuration.php');
201}
202
203// +-----------------------------------------------------------------------+
204// |                        template initialization                        |
205// +-----------------------------------------------------------------------+
206
207include( PHPWG_ROOT_PATH .'include/template.class.php');
208$template = new Template(PHPWG_ROOT_PATH.'admin/themes', 'roma');
209$template->set_filenames(array('upgrade'=>'upgrade.tpl'));
210$template->assign(array(
211  'RELEASE' => PHPWG_VERSION,
212  'L_UPGRADE_HELP' => sprintf(l10n('Need help ? Ask your question on <a href="%s">Piwigo message board</a>.'), PHPWG_URL.'/forum'),
213  )
214);
215
216// +-----------------------------------------------------------------------+
217// |                            upgrade choice                             |
218// +-----------------------------------------------------------------------+
219
220$tables = get_tables();
221$columns_of = get_columns_of($tables);
222
223// find the current release
224if (!in_array('param', $columns_of[PREFIX_TABLE.'config']))
225{
226  // we're in branch 1.3, important upgrade, isn't it?
227  if (in_array(PREFIX_TABLE.'user_category', $tables))
228  {
229    $current_release = '1.3.1';
230  }
231  else
232  {
233    $current_release = '1.3.0';
234  }
235}
236else if (!in_array(PREFIX_TABLE.'user_cache', $tables))
237{
238  $current_release = '1.4.0';
239}
240else if (!in_array(PREFIX_TABLE.'tags', $tables))
241{
242  $current_release = '1.5.0';
243}
244else if ( !in_array(PREFIX_TABLE.'plugins', $tables) )
245{
246  if (!in_array('auto_login_key', $columns_of[PREFIX_TABLE.'user_infos']))
247  {
248    $current_release = '1.6.0';
249  }
250  else
251  {
252    $current_release = '1.6.2';
253  }
254}
255else if (!in_array('md5sum', $columns_of[PREFIX_TABLE.'images']))
256{
257  $current_release = '1.7.0';
258}
259else
260{
261  die('No upgrade required, the database structure is up to date');
262}
263
264// +-----------------------------------------------------------------------+
265// |                            upgrade launch                             |
266// +-----------------------------------------------------------------------+
267$page['infos'] = array();
268$page['errors'] = array();
269$mysql_changes = array();
270
271if (isset($_POST['username']) and isset($_POST['password']))
272{
273  check_upgrade_access_rights($current_release, $_POST['username'], $_POST['password']);
274}
275
276if (isset($_POST['submit']) and check_upgrade())
277{
278  $upgrade_file = PHPWG_ROOT_PATH.'install/upgrade_'.$current_release.'.php';
279  if (is_file($upgrade_file))
280  {
281    $page['upgrade_start'] = get_moment();
282    $conf['die_on_sql_error'] = false;
283    include($upgrade_file);
284
285    // Something to add in database.inc.php?
286    if (!empty($mysql_changes))
287    {
288      $config_file_contents = 
289        substr($config_file_contents, 0, $php_end_tag) . "\r\n"
290        . implode("\r\n" , $mysql_changes) . "\r\n"
291        . substr($config_file_contents, $php_end_tag);
292
293      if (!@file_put_contents($config_file, $config_file_contents))
294      {
295        array_push($page['infos'],
296                   l10n_args('in <i>%s</i>, before <b>?></b>, insert:', 
297                             'local/config/database.inc.php') . 
298                   '<p><textarea rows="4" cols="40">' .
299                   implode("\r\n" , $mysql_changes).'</textarea></p>'
300                   );
301      }
302    }
303
304    // Plugins deactivation
305    if (in_array(PREFIX_TABLE.'plugins', $tables))
306    {
307      deactivate_non_standard_plugins();
308    }
309
310    $page['upgrade_end'] = get_moment();
311
312    $template->assign(
313      'upgrade',
314      array(
315        'VERSION' => $current_release,
316        'TOTAL_TIME' => get_elapsed_time(
317          $page['upgrade_start'],
318          $page['upgrade_end']
319          ),
320        'SQL_TIME' => number_format(
321          $page['queries_time'],
322          3,
323          '.',
324          ' '
325          ).' s',
326        'NB_QUERIES' => $page['count_queries']
327        )
328      );
329
330    array_push($page['infos'],
331      l10n('Perform a maintenance check in [Administration>Specials>Maintenance] if you encounter any problem.')
332      );
333
334    // Save $page['infos'] in order to restore after maintenance actions
335    $page['infos_sav'] = $page['infos'];
336    $page['infos'] = array();
337
338    // c13y_upgrade plugin means "check integrity after upgrade", so it
339    // becomes useful just after an upgrade
340    $query = '
341REPLACE INTO '.PLUGINS_TABLE.'
342  (id, state)
343  VALUES (\'c13y_upgrade\', \'active\')
344;';
345    pwg_query($query);
346
347    // Delete cache data
348    invalidate_user_cache(true);
349    $template->delete_compiled_templates();
350
351    // Tables Maintenance
352    do_maintenance_all_tables();
353
354    // Restore $page['infos'] in order to hide informations messages from functions calles
355    // errors messages are not hide
356    $page['infos'] = $page['infos_sav'];
357
358  }
359}
360
361// +-----------------------------------------------------------------------+
362// |                          start template output                        |
363// +-----------------------------------------------------------------------+
364else
365{
366  foreach (get_languages('utf-8') as $language_code => $language_name)
367  {
368    if ($language == $language_code)
369    {
370      $template->assign('language_selection', $language_code);
371    }
372    $languages_options[$language_code] = $language_name;
373  }
374  $template->assign('language_options', $languages_options);
375
376  $template->assign('introduction', array(
377    'CURRENT_RELEASE' => $current_release,
378    'F_ACTION' => 'upgrade.php?language=' . $language));
379
380  if (!check_upgrade())
381  {
382    $template->assign('login', true);
383  }
384}
385
386if (count($page['errors']) != 0)
387{
388  $template->assign('errors', $page['errors']);
389}
390
391if (count($page['infos']) != 0)
392{
393  $template->assign('infos', $page['infos']);
394}
395
396// +-----------------------------------------------------------------------+
397// |                          sending html code                            |
398// +-----------------------------------------------------------------------+
399
400$template->pparse('upgrade');
401?>
Note: See TracBrowser for help on using the repository browser.