source: trunk/install/upgrade_1.5.0.php @ 26010

Last change on this file since 26010 was 19703, checked in by plg, 11 years ago

update Piwigo headers to 2013 (the end of the world didn't occur as expected on r12922)

  • Property svn:eol-style set to LF
File size: 10.5 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based photo gallery                                    |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2013 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
24if (!defined('PHPWG_ROOT_PATH'))
25{
26  die ('This page cannot be loaded directly, load upgrade.php');
27}
28else
29{
30  if (!defined('PHPWG_IN_UPGRADE') or !PHPWG_IN_UPGRADE)
31  {
32    die ('Hacking attempt!');
33  }
34}
35
36/**
37 * replace old style #images.keywords by #tags. Requires a big data
38 * migration.
39 *
40 * @return void
41 */
42function tag_replace_keywords()
43{
44  // code taken from upgrades 19 and 22
45 
46  $query = '
47CREATE TABLE '.PREFIX_TABLE.'tags (
48  id smallint(5) UNSIGNED NOT NULL auto_increment,
49  name varchar(255) BINARY NOT NULL,
50  url_name varchar(255) BINARY NOT NULL,
51  PRIMARY KEY (id)
52)
53;';
54  pwg_query($query);
55 
56  $query = '
57CREATE TABLE '.PREFIX_TABLE.'image_tag (
58  image_id mediumint(8) UNSIGNED NOT NULL,
59  tag_id smallint(5) UNSIGNED NOT NULL,
60  PRIMARY KEY (image_id,tag_id)
61)
62;';
63  pwg_query($query);
64 
65  //
66  // Move keywords to tags
67  //
68
69  // each tag label is associated to a numeric identifier
70  $tag_id = array();
71  // to each tag id (key) a list of image ids (value) is associated
72  $tag_images = array();
73
74  $current_id = 1;
75
76  $query = '
77SELECT id, keywords
78  FROM '.PREFIX_TABLE.'images
79  WHERE keywords IS NOT NULL
80;';
81  $result = pwg_query($query);
82  while ($row = pwg_db_fetch_assoc($result))
83  {
84    foreach(preg_split('/[,]+/', $row['keywords']) as $keyword)
85    {
86      if (!isset($tag_id[$keyword]))
87      {
88        $tag_id[$keyword] = $current_id++;
89      }
90
91      if (!isset($tag_images[ $tag_id[$keyword] ]))
92      {
93        $tag_images[ $tag_id[$keyword] ] = array();
94      }
95
96      array_push(
97        $tag_images[ $tag_id[$keyword] ],
98        $row['id']
99        );
100    }
101  }
102
103  $datas = array();
104  foreach ($tag_id as $tag_name => $tag_id)
105  {
106    array_push(
107      $datas,
108      array(
109        'id'       => $tag_id,
110        'name'     => $tag_name,
111        'url_name' => str2url($tag_name),
112        )
113      );
114  }
115 
116  if (!empty($datas))
117  {
118    mass_inserts(
119      PREFIX_TABLE.'tags',
120      array_keys($datas[0]),
121      $datas
122      );
123  }
124
125  $datas = array();
126  foreach ($tag_images as $tag_id => $images)
127  {
128    foreach (array_unique($images) as $image_id)
129    {
130      array_push(
131        $datas,
132        array(
133          'tag_id'   => $tag_id,
134          'image_id' => $image_id,
135          )
136        );
137    }
138  }
139 
140  if (!empty($datas))
141  {
142    mass_inserts(
143      PREFIX_TABLE.'image_tag',
144      array_keys($datas[0]),
145      $datas
146      );
147  }
148
149  //
150  // Delete images.keywords
151  //
152  $query = '
153ALTER TABLE '.PREFIX_TABLE.'images DROP COLUMN keywords
154;';
155  pwg_query($query);
156
157  //
158  // Add useful indexes
159  //
160  $query = '
161ALTER TABLE '.PREFIX_TABLE.'tags
162  ADD INDEX tags_i1(url_name)
163;';
164  pwg_query($query);
165
166
167  $query = '
168ALTER TABLE '.PREFIX_TABLE.'image_tag
169  ADD INDEX image_tag_i1(tag_id)
170;';
171  pwg_query($query);
172
173  // print_time('tags have replaced keywords');
174}
175
176tag_replace_keywords();
177
178$queries = array(
179  "
180CREATE TABLE ".PREFIX_TABLE."search (
181  id int UNSIGNED NOT NULL AUTO_INCREMENT,
182  last_seen date DEFAULT NULL,
183  rules text,
184  PRIMARY KEY  (id)
185);",
186
187  "
188CREATE TABLE ".PREFIX_TABLE."user_mail_notification (
189  user_id smallint(5) NOT NULL default '0',
190  check_key varchar(16) binary NOT NULL default '',
191  enabled enum('true','false') NOT NULL default 'false',
192  last_send datetime default NULL,
193  PRIMARY KEY  (user_id),
194  UNIQUE KEY uidx_check_key (check_key)
195);",
196
197  "
198CREATE TABLE ".PREFIX_TABLE."upgrade (
199  id varchar(20) NOT NULL default '',
200  applied datetime NOT NULL default '0000-00-00 00:00:00',
201  description varchar(255) default NULL,
202  PRIMARY KEY  (`id`)
203);",
204
205  "
206ALTER TABLE ".PREFIX_TABLE."config
207  MODIFY COLUMN value TEXT
208;",
209
210  "
211ALTER TABLE ".PREFIX_TABLE."images
212  ADD COLUMN has_high enum('true') default NULL
213;",
214
215  "
216ALTER TABLE ".PREFIX_TABLE."rate
217  ADD COLUMN anonymous_id varchar(45) NOT NULL default ''
218;",
219  "
220ALTER TABLE ".PREFIX_TABLE."rate
221  ADD COLUMN date date NOT NULL default '0000-00-00'
222;",
223  "
224ALTER TABLE ".PREFIX_TABLE."rate
225  DROP PRIMARY KEY
226;",
227  "
228ALTER TABLE ".PREFIX_TABLE."rate
229  ADD PRIMARY KEY (element_id,user_id,anonymous_id)
230;",
231  "
232UPDATE ".PREFIX_TABLE."rate
233  SET date = CURDATE()
234;",
235 
236  "
237DELETE
238  FROM ".PREFIX_TABLE."sessions
239;",
240  "
241ALTER TABLE ".PREFIX_TABLE."sessions
242  DROP COLUMN user_id
243;",
244  "
245ALTER TABLE ".PREFIX_TABLE."sessions
246  ADD COLUMN data text NOT NULL
247;",
248 
249  "
250ALTER TABLE ".PREFIX_TABLE."user_cache
251  ADD COLUMN nb_total_images mediumint(8) unsigned default NULL
252;",
253 
254  "
255ALTER TABLE ".PREFIX_TABLE."user_infos
256  CHANGE COLUMN status
257     status enum('webmaster','admin','normal','generic','guest')
258     NOT NULL default 'guest'
259;",
260  "
261UPDATE ".PREFIX_TABLE."user_infos
262  SET status = 'normal'
263  WHERE status = 'guest'
264;",
265  "
266UPDATE ".PREFIX_TABLE."user_infos
267  SET status = 'guest'
268  WHERE user_id = ".$conf['guest_id']."
269;",
270  "
271UPDATE ".PREFIX_TABLE."user_infos
272  SET status = 'webmaster'
273  WHERE user_id = ".$conf['webmaster_id']."
274;",
275
276  "
277ALTER TABLE ".PREFIX_TABLE."user_infos
278   CHANGE COLUMN template template varchar(255) NOT NULL default 'yoga/clear'
279;",
280
281  "
282UPDATE ".PREFIX_TABLE."user_infos
283  SET template = 'yoga/dark'
284  WHERE template = 'yoga-dark'
285;",
286  "
287UPDATE ".PREFIX_TABLE."user_infos
288  SET template = 'yoga/clear'
289  WHERE template != 'yoga/dark'
290;",
291  "
292ALTER TABLE ".PREFIX_TABLE."user_infos
293  ADD COLUMN adviser enum('true','false') NOT NULL default 'false'
294;",
295  "
296ALTER TABLE ".PREFIX_TABLE."user_infos
297  ADD COLUMN enabled_high enum('true','false') NOT NULL default 'true'
298;",
299  "
300ALTER TABLE ".PREFIX_TABLE."categories
301  CHANGE COLUMN rank rank SMALLINT(5) UNSIGNED DEFAULT NULL
302;",
303  // configuration table
304  "
305UPDATE ".PREFIX_TABLE."config
306  SET value = 'yoga/clear'
307  WHERE param = 'default_template'
308;"
309  );
310
311foreach ($queries as $query)
312{
313  pwg_query($query);
314}
315
316//
317// Move rate, rate_anonymous and gallery_url from config file to database
318//
319$params = array(
320  'gallery_url' => array(
321    '',
322    'Optional alternate homepage for the gallery'
323    ),
324  'rate' => array(
325    'true',
326    'Rating pictures feature is enabled'
327    ),
328  'rate_anonymous' => array(
329    'true',
330    'Rating pictures feature is also enabled for visitors'
331    )
332  );
333// Get real values from config file
334$conf_save = $conf;
335unset($conf);
336@include(PHPWG_ROOT_PATH. 'local/config/config.inc.php');
337if ( isset($conf['gallery_url']) )
338{
339  $params['gallery_url'][0] = $conf['gallery_url'];
340}
341if ( isset($conf['rate']) and is_bool($conf['rate']) )
342{
343  $params['rate'][0] = $conf['rate'] ? 'true' : 'false';
344}
345if ( isset($conf['rate_anonymous']) and is_bool($conf['rate_anonymous']) )
346{
347  $params['rate_anonymous'][0] = $conf['rate_anonymous'] ? 'true' : 'false';
348}
349$conf = $conf_save;
350
351// Do I already have them in DB ?
352$query = 'SELECT param FROM '.PREFIX_TABLE.'config';
353$result = pwg_query($query);
354while ($row = pwg_db_fetch_assoc($result))
355{
356  unset( $params[ $row['param'] ] );
357}
358
359// Perform the insert query
360foreach ($params as $param_key => $param_values)
361{
362  $query = '
363INSERT INTO '.PREFIX_TABLE.'config
364  (param,value,comment)
365  VALUES
366 ('."'$param_key','$param_values[0]','$param_values[1]')
367;";
368  pwg_query($query);
369}
370
371$query = "
372ALTER TABLE ".PREFIX_TABLE."config MODIFY COLUMN `value` TEXT;";
373pwg_query($query);
374
375
376//
377// replace gallery_description by page_banner
378//
379$query = '
380SELECT value
381  FROM '.PREFIX_TABLE.'config
382  WHERE param=\'gallery_title\'
383;';
384list($t) = array_from_query($query, 'value');
385
386$query = '
387SELECT value
388  FROM '.PREFIX_TABLE.'config
389  WHERE param=\'gallery_description\'
390;';
391list($d) = array_from_query($query, 'value');
392
393$page_banner='<h1>'.$t.'</h1><p>'.$d.'</p>';
394$page_banner=addslashes($page_banner);
395$query = '
396INSERT INTO '.PREFIX_TABLE.'config
397  (param,value,comment)
398  VALUES
399  (
400    \'page_banner\',
401    \''.$page_banner.'\',
402    \'html displayed on the top each page of your gallery\'
403  )
404;';
405pwg_query($query);
406
407$query = '
408DELETE FROM '.PREFIX_TABLE.'config
409  WHERE param=\'gallery_description\'
410;';
411pwg_query($query);
412
413//
414// configuration for notification by mail
415//
416$query = "
417INSERT INTO ".CONFIG_TABLE."
418  (param,value,comment)
419  VALUES
420  (
421    'nbm_send_mail_as',
422    '',
423    'Send mail as param value for notification by mail'
424  ),
425  (
426    'nbm_send_detailed_content',
427    'true',
428    'Send detailed content for notification by mail'
429  ),
430  (
431    'nbm_complementary_mail_content',
432    '',
433    'Complementary mail content for notification by mail'
434  )
435;";
436pwg_query($query);
437
438// depending on the way the 1.5.0 was installed (from scratch or by upgrade)
439// the database structure has small differences that should be corrected.
440
441$query = '
442ALTER TABLE '.PREFIX_TABLE.'users
443  CHANGE COLUMN password password varchar(32) default NULL
444;';
445pwg_query($query);
446
447$to_keep = array('id', 'username', 'password', 'mail_address');
448 
449$query = '
450DESC '.PREFIX_TABLE.'users
451;';
452
453$result = pwg_query($query);
454
455while ($row = pwg_db_fetch_assoc($result))
456{
457  if (!in_array($row['Field'], $to_keep))
458  {
459    $query = '
460ALTER TABLE '.PREFIX_TABLE.'users
461  DROP COLUMN '.$row['Field'].'
462;';
463    pwg_query($query);
464  }
465}
466
467// now we upgrade from 1.6.0 to 1.6.2
468include_once(PHPWG_ROOT_PATH.'install/upgrade_1.6.0.php');
469?>
Note: See TracBrowser for help on using the repository browser.