root/trunk/wifidog-auth/wifidog/include/schema_validate.php @ 1069

Revision 1069, 49.4 KB (checked in by fproulx, 7 years ago)

2006-05-26 François Proulx <francois.proulx@…>

  • Added 'ja' to database locales table
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1<?php
2
3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5// +-------------------------------------------------------------------+
6// | WiFiDog Authentication Server                                     |
7// | =============================                                     |
8// |                                                                   |
9// | The WiFiDog Authentication Server is part of the WiFiDog captive  |
10// | portal suite.                                                     |
11// +-------------------------------------------------------------------+
12// | PHP version 5 required.                                           |
13// +-------------------------------------------------------------------+
14// | Homepage:     http://www.wifidog.org/                             |
15// | Source Forge: http://sourceforge.net/projects/wifidog/            |
16// +-------------------------------------------------------------------+
17// | This program is free software; you can redistribute it and/or     |
18// | modify it under the terms of the GNU General Public License as    |
19// | published by the Free Software Foundation; either version 2 of    |
20// | the License, or (at your option) any later version.               |
21// |                                                                   |
22// | This program is distributed in the hope that it will be useful,   |
23// | but WITHOUT ANY WARRANTY; without even the implied warranty of    |
24// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     |
25// | GNU General Public License for more details.                      |
26// |                                                                   |
27// | You should have received a copy of the GNU General Public License |
28// | along with this program; if not, contact:                         |
29// |                                                                   |
30// | Free Software Foundation           Voice:  +1-617-542-5942        |
31// | 59 Temple Place - Suite 330        Fax:    +1-617-542-2652        |
32// | Boston, MA  02111-1307,  USA       gnu@gnu.org                    |
33// |                                                                   |
34// +-------------------------------------------------------------------+
35
36/**
37 * Network status page
38 *
39 * @package    WiFiDogAuthServer
40 * @author     Benoit Grégoire <bock@step.polymtl.ca>
41 * @copyright  2004-2006 Benoit Grégoire, Technologies Coeus inc.
42 * @version    Subversion $Id$
43 * @link       http://www.wifidog.org/
44 */
45
46/**
47 * Define current database schema version
48 */
49define('REQUIRED_SCHEMA_VERSION', 41);
50
51/**
52 * Check that the database schema is up to date.  If it isn't, offer to update it.
53 *
54 * @return void
55 */
56function validate_schema()
57{
58    // Define globals
59    global $db;
60
61    // Init values
62    $row = null;
63
64    try {
65        // Check the schema info
66        $db->execSqlUniqueRes("SELECT * FROM schema_info WHERE tag='schema_version'", $row, false);
67    }
68    catch(Exception $e) {
69        /* Be quiet */
70    }
71
72    if (empty ($row)) {
73        echo "<html><body>";
74        echo "<h1>"._("Unable to retrieve schema version. The database schema is too old to be updated.")."</h1>";
75        echo "<h2>"._("Try running the")." <a href='" . BASE_URL_PATH . "install.php'>"._("installation script")."</a>.</h2>\n";
76        echo "</html></body>";
77        exit ();
78    } else {
79        if ($row['value'] < REQUIRED_SCHEMA_VERSION) {
80            update_schema();
81        }
82    }
83}
84
85/**
86 * Auto create an administrator user with the first authenticator available
87 *
88 * @return void
89 */
90function check_users_not_empty()
91{
92    // Define globals
93    global $db;
94
95    // Extract the first account origin, assume it's the default
96    $network = Network::getDefaultNetwork();
97
98    if (!empty ($network)) {
99        $db->execSqlUniqueRes("SELECT user_id FROM users WHERE account_origin = '{$network->getId()}' LIMIT 1", $row, false);
100
101        if ($row == null) {
102            echo "<html><head><h1>";
103            echo _("No user matches the default network, a new user admin/admin will be created. Change the password as soon as possible !");
104            echo "</html></head>";
105            $sql = "BEGIN;";
106            $sql .= "INSERT INTO users (user_id, username, pass, email, account_status, validation_token, account_origin) VALUES ('admin_original_user_delete_me', 'admin', 'ISMvKXpXpadDiUoOSoAfww==', 'test_user_please@delete.me', 1, 'df16cc4b1d0975e267f3425eaac31950', '$default_account_origin');";
107            $sql .= "INSERT INTO administrators (user_id) VALUES ('admin_original_user_delete_me');";
108            $sql .= "COMMIT;";
109            $db->execSqlUpdate($sql, $row, false);
110            exit;
111        }
112    } else {
113        echo "<html><head><h1>";
114        echo _("Could not get a default network!");
115        echo "</html></head>";
116        exit ();
117    }
118}
119
120/**
121 * Prints the standard update message to which version the database schema
122 * will be updated
123 *
124 * @param int $version Version to which the database schema will be updated
125 *
126 * @return void
127 */
128function printUpdateVersion($version)
129{
130    if (isset($version)) {
131        echo "<h2>Preparing SQL statements to update schema to version <i>$version</i></h2>";
132    }
133}
134
135/**
136 * Try to bring the database schema up to date.
137 *
138 * @return void
139 */
140function update_schema()
141{
142    // Define globals
143    global $db;
144
145    // Init values
146    $sql = '';
147
148    echo "<html><head><h1>\n";
149    echo _("Trying to update the database schema.");
150    echo "</h1>\n";
151    $db->execSqlUniqueRes("SELECT * FROM schema_info WHERE tag='schema_version'", $row, false);
152
153    if (empty ($row)) {
154        echo "<h1>"._("Unable to retrieve schema version.  The database schema is too old to be updated.")."</h1>";
155        exit ();
156    } else {
157        $schema_version = $row['value'];
158
159        $new_schema_version = 2;
160        if ($schema_version < $new_schema_version) {
161            printUpdateVersion($new_schema_version);
162
163            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
164            $sql .= "ALTER TABLE users ADD COLUMN username text;\n";
165            $sql .= "ALTER TABLE users ADD COLUMN account_origin text;\n";
166            $db->execSql("SELECT user_id FROM users", $results, false);
167
168            foreach ($results as $row) {
169                $user_id = $db->escapeString($row['user_id']);
170                $sql .= "UPDATE users SET username='$user_id', user_id='".get_guid()."', account_origin='LOCAL_USER' WHERE user_id='$user_id';\n";
171            }
172
173            $sql .= "CREATE UNIQUE INDEX idx_unique_username_and_account_origin ON users (username, account_origin);\n";
174            $sql .= "CREATE UNIQUE INDEX idx_unique_email_and_account_origin ON users USING btree (email, account_origin);\n";
175        }
176
177        $new_schema_version = 3;
178        if ($schema_version < $new_schema_version) {
179            printUpdateVersion($new_schema_version);
180
181            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
182            $sql .= "DROP INDEX idx_unique_email_and_account_origin;\n";
183            $sql .= "ALTER TABLE users DROP CONSTRAINT check_email_not_empty;\n";
184        }
185
186        $new_schema_version = 4;
187        if ($schema_version < $new_schema_version) {
188            printUpdateVersion($new_schema_version);
189
190            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
191            $sql .= "ALTER TABLE users ALTER COLUMN account_origin SET NOT NULL;\n";
192            $sql .= "ALTER TABLE users ADD CONSTRAINT check_account_origin_not_empty CHECK (account_origin::text <> ''::text);\n";
193
194            // We must skip all other updates because schema 5 must be manually updated:
195            $schema_version = 1000000;
196        }
197
198        $new_schema_version = 5;
199        if ($schema_version == $new_schema_version -1) {
200            echo "<h1>Recoding database from ISO-8859-1 to UTF-8</h1>";
201            echo "<h1>YOU MUST EXECUTE THESE COMMANDS FROM THE COMMAND_LINE:</h1>";
202            echo "pg_dump wifidog -U wifidog > wifidog_dump.sql;<br>";
203            echo "dropdb wifidog -U wifidog; <br>";
204            echo "createdb --encoding=UNICODE --template=template0 -U wifidog wifidog;<br>";
205            echo "psql wifidog -U wifidog < wifidog_dump.sql;<br>\n";
206            echo " (Note: You may ignore the following errors:  \"ERROR:  permission denied to set session authorization\" and \"ERROR:  must be owner of schema public\")<br>";
207            echo "psql wifidog -U wifidog -c \"UPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version'\";<br>";
208            exit;
209        }
210
211        $new_schema_version = 6;
212        if ($schema_version < $new_schema_version) {
213            printUpdateVersion($new_schema_version);
214
215            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
216            $sql .= "CREATE TABLE locales ( \n";
217            $sql .= "  locales_id text PRIMARY KEY \n";
218            $sql .= "  ); \n";
219            $sql .= "  INSERT INTO locales VALUES ('fr'); \n";
220            $sql .= "  INSERT INTO locales VALUES ('en'); \n";
221            $sql .= "ALTER TABLE users ADD COLUMN never_show_username bool;\n";
222            $sql .= "ALTER TABLE users ALTER COLUMN never_show_username SET DEFAULT FALSE;\n";
223            $sql .= "ALTER TABLE users ADD COLUMN real_name text;\n";
224            $sql .= "ALTER TABLE users ALTER COLUMN real_name SET DEFAULT NULL;\n";
225            $sql .= "ALTER TABLE users ADD COLUMN website text;\n";
226            $sql .= "ALTER TABLE users ALTER COLUMN website SET DEFAULT NULL;\n";
227            $sql .= "ALTER TABLE users ADD COLUMN prefered_locale text REFERENCES locales ON DELETE SET NULL ON UPDATE CASCADE;\n";
228
229            $sql .= "
230                CREATE TABLE content
231                (
232                content_id text NOT NULL PRIMARY KEY,
233                content_type text NOT NULL  CONSTRAINT content_type_not_empty_string CHECK (content_type != ''),
234                title text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
235                description text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
236                project_info text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
237                sponsor_info text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
238                creation_timestamp timestamp DEFAULT now()
239                );
240
241                CREATE TABLE content_has_owners
242                (
243                content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
244                user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
245                is_author bool NOT NULL,
246                owner_since timestamp DEFAULT now(),
247                PRIMARY KEY  (content_id, user_id)
248                );
249
250                CREATE TABLE langstring_entries (
251                  langstring_entries_id text NOT NULL PRIMARY KEY,
252                  langstrings_id text REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
253                  locales_id text REFERENCES locales ON DELETE RESTRICT ON UPDATE CASCADE,
254                  value text  DEFAULT ''
255                );
256
257                CREATE TABLE content_group (
258                  content_group_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
259                  is_artistic_content bool NOT NULL DEFAULT FALSE,
260                  is_locative_content bool NOT NULL DEFAULT FALSE,
261                  content_selection_mode text
262                );
263
264                CREATE TABLE content_group_element (
265                  content_group_element_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
266                  content_group_id text NOT NULL REFERENCES content_group ON DELETE CASCADE ON UPDATE CASCADE,
267                  display_order integer DEFAULT '1',
268                  displayed_content_id text REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
269                  force_only_allowed_node bool
270                );
271                CREATE INDEX idx_content_group_element_content_group_id ON content_group_element (content_group_id);
272
273                CREATE TABLE content_group_element_has_allowed_nodes
274                (
275                content_group_element_id text NOT NULL REFERENCES content_group_element ON DELETE CASCADE ON UPDATE CASCADE,
276                node_id text NOT NULL REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
277                allowed_since timestamp DEFAULT now(),
278                PRIMARY KEY  (content_group_element_id, node_id)
279                );
280
281                CREATE TABLE content_group_element_portal_display_log (
282                  user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
283                  content_group_element_id text NOT NULL REFERENCES content_group_element ON DELETE CASCADE ON UPDATE CASCADE,
284                  display_timestamp timestamp NOT NULL DEFAULT now(),
285                  node_id text REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
286                  PRIMARY KEY  (user_id,content_group_element_id, display_timestamp)
287                );
288
289                CREATE TABLE user_has_content (
290                  user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
291                  content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
292                  subscribe_timestamp timestamp NOT NULL DEFAULT now(),
293                  PRIMARY KEY  (user_id,content_id)
294                );
295
296                CREATE TABLE node_has_content (
297                  node_id text NOT NULL REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
298                  content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
299                  subscribe_timestamp timestamp NOT NULL DEFAULT now(),
300                  PRIMARY KEY  (node_id,content_id)
301                );
302
303                CREATE TABLE network_has_content (
304                  network_id text NOT NULL,
305                  content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
306                  subscribe_timestamp timestamp NOT NULL DEFAULT now(),
307                  PRIMARY KEY  (network_id,content_id)
308                );";
309        }
310
311        $new_schema_version = 7;
312        if ($schema_version < $new_schema_version) {
313            printUpdateVersion($new_schema_version);
314
315            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
316            $sql .= "ALTER TABLE content ADD COLUMN is_persistent bool;\n";
317            $sql .= "ALTER TABLE content ALTER COLUMN is_persistent SET DEFAULT FALSE;\n";
318        }
319
320        $new_schema_version = 8;
321        if ($schema_version < $new_schema_version) {
322            printUpdateVersion($new_schema_version);
323
324            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
325            $sql .= "CREATE TABLE flickr_photostream
326                        (
327                          flickr_photostream_id text NOT NULL,
328                          api_key text,
329                          photo_selection_mode text NOT NULL DEFAULT 'PSM_GROUP'::text,
330                          user_id text,
331                          user_name text,
332                          tags text,
333                          tag_mode varchar(10) DEFAULT 'any'::character varying,
334                          group_id text,
335                          random bool NOT NULL DEFAULT true,
336                          min_taken_date timestamp,
337                          max_taken_date timestamp,
338                          photo_batch_size int4 DEFAULT 10,
339                          photo_count int4 DEFAULT 1,
340                          display_title bool NOT NULL DEFAULT true,
341                          display_description bool NOT NULL DEFAULT false,
342                          display_tags bool NOT NULL DEFAULT false,
343                          CONSTRAINT flickr_photostream_pkey PRIMARY KEY (flickr_photostream_id),
344                          CONSTRAINT flickr_photostream_content_group_fkey FOREIGN KEY (flickr_photostream_id) REFERENCES content_group (content_group_id) ON UPDATE CASCADE ON DELETE CASCADE
345                        );";
346        }
347
348        $new_schema_version = 9;
349        if ($schema_version < $new_schema_version) {
350            printUpdateVersion($new_schema_version);
351
352            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
353            $sql .= "CREATE TABLE files
354                        (
355                          files_id text NOT NULL,
356                          filename text,
357                          mime_type text,
358                          binary_data bytea,
359                          remote_size bigint,
360                          CONSTRAINT files_pkey PRIMARY KEY (files_id)
361                        );";
362        }
363
364        $new_schema_version = 10;
365        if ($schema_version < $new_schema_version) {
366            printUpdateVersion($new_schema_version);
367
368            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
369            $sql .= "ALTER TABLE files ADD COLUMN url text;";
370            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN preferred_size text;";
371            $sql .= "CREATE TABLE embedded_content (
372                            embedded_content_id text NOT NULL,
373                            embedded_file_id text,
374                            fallback_content_id text,
375                            parameters text,
376                            attributes text
377                        );";
378        }
379
380        $new_schema_version = 11;
381        if ($schema_version < $new_schema_version) {
382            printUpdateVersion($new_schema_version);
383
384            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
385            $sql .= "DROP TABLE content_group_element_portal_display_log;\n";
386            $sql .= "CREATE TABLE content_display_log
387            (
388              user_id text NOT NULL REFERENCES users ON UPDATE CASCADE ON DELETE CASCADE,
389              content_id text NOT NULL REFERENCES content ON UPDATE CASCADE ON DELETE CASCADE,
390              first_display_timestamp timestamp NOT NULL DEFAULT now(),
391              node_id text NOT NULL REFERENCES nodes ON UPDATE CASCADE ON DELETE CASCADE,
392              last_display_timestamp timestamp NOT NULL DEFAULT now(),
393              CONSTRAINT content_group_element_portal_display_log_pkey PRIMARY KEY (user_id, content_id, node_id)
394            ); \n";
395
396        }
397
398        $new_schema_version = 12;
399        if ($schema_version < $new_schema_version) {
400            printUpdateVersion($new_schema_version);
401
402            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
403            $sql .= "ALTER TABLE flickr_photostream DROP CONSTRAINT flickr_photostream_content_group_fkey;";
404            $sql .= "ALTER TABLE flickr_photostream ADD CONSTRAINT flickr_photostream_content_fkey FOREIGN KEY (flickr_photostream_id) REFERENCES content (content_id) ON UPDATE CASCADE ON DELETE CASCADE;";
405        }
406
407        $new_schema_version = 13;
408        if ($schema_version < $new_schema_version) {
409            printUpdateVersion($new_schema_version);
410
411            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
412            $sql .= "ALTER TABLE content_group DROP COLUMN content_selection_mode;\n";
413            $sql .= "ALTER TABLE content_group ADD COLUMN content_changes_on_mode text;\n";
414            $sql .= "UPDATE content_group SET content_changes_on_mode='ALWAYS';\n";
415            $sql .= "ALTER TABLE content_group ALTER COLUMN content_changes_on_mode SET DEFAULT 'ALWAYS';\n";
416            $sql .= "ALTER TABLE content_group ALTER COLUMN content_changes_on_mode SET NOT NULL;\n";
417            $sql .= "ALTER TABLE content_group ADD COLUMN content_ordering_mode text;\n";
418            $sql .= "UPDATE content_group SET content_ordering_mode='RANDOM';\n";
419            $sql .= "ALTER TABLE content_group ALTER COLUMN content_ordering_mode SET DEFAULT 'RANDOM';\n";
420            $sql .= "ALTER TABLE content_group ALTER COLUMN content_ordering_mode SET NOT NULL;\n";
421
422            $sql .= "ALTER TABLE content_group ADD COLUMN display_num_elements int;\n";
423            $sql .= "UPDATE content_group SET display_num_elements=1;\n";
424            $sql .= "ALTER TABLE content_group ALTER COLUMN display_num_elements SET DEFAULT '1';\n";
425            $sql .= "ALTER TABLE content_group ALTER COLUMN display_num_elements SET NOT NULL;\n";
426            $sql .= "ALTER TABLE content_group ADD CONSTRAINT display_at_least_one_element CHECK (display_num_elements > 0);\n";
427
428            $sql .= "ALTER TABLE content_group ADD COLUMN allow_repeat text;\n";
429            $sql .= "UPDATE content_group SET allow_repeat='YES';\n";
430            $sql .= "ALTER TABLE content_group ALTER COLUMN allow_repeat SET DEFAULT 'YES';\n";
431            $sql .= "ALTER TABLE content_group ALTER COLUMN allow_repeat SET NOT NULL;\n";
432        }
433
434        $new_schema_version = 14;
435        if ($schema_version < $new_schema_version) {
436            printUpdateVersion($new_schema_version);
437
438            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
439            $sql .= "CREATE TABLE pictures "."( "."pictures_id text NOT NULL PRIMARY KEY REFERENCES files ON DELETE CASCADE ON UPDATE CASCADE, "."width int4, "."height int4".");\n";
440        }
441
442        $new_schema_version = 15;
443        if ($schema_version < $new_schema_version) {
444            printUpdateVersion($new_schema_version);
445
446            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
447            $sql .= "ALTER TABLE files ADD COLUMN data_blob oid;
448                                ALTER TABLE files ADD COLUMN local_binary_size int8;
449                                ALTER TABLE files DROP COLUMN binary_data;\n";
450        }
451
452        $new_schema_version = 16;
453        if ($schema_version < $new_schema_version) {
454            printUpdateVersion($new_schema_version);
455
456            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
457            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN requests_cache text; \n";
458            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN cache_update_timestamp timestamp; \n";
459        }
460
461        $new_schema_version = 17;
462        if ($schema_version < $new_schema_version) {
463            printUpdateVersion($new_schema_version);
464
465            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
466            $sql .= "ALTER TABLE nodes ADD COLUMN max_monthly_incoming int8; \n";
467            $sql .= "ALTER TABLE nodes ADD COLUMN max_monthly_outgoing int8; \n";
468            $sql .= "ALTER TABLE nodes ADD COLUMN quota_reset_day_of_month int4; \n";
469        }
470
471        $new_schema_version = 18;
472        if ($schema_version < $new_schema_version) {
473            printUpdateVersion($new_schema_version);
474
475            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
476            $sql .= "ALTER TABLE content ADD COLUMN long_description text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE;\n";
477        }
478
479        $new_schema_version = 19;
480        if ($schema_version < $new_schema_version) {
481            printUpdateVersion($new_schema_version);
482
483            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
484            $sql .= "CREATE TABLE iframes (";
485            $sql .= "iframes_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,";
486            $sql .= "url text,";
487            $sql .= "width int4,";
488            $sql .= "height int4";
489            $sql .= ");\n";
490        }
491
492        $new_schema_version = 20;
493        if ($schema_version < $new_schema_version) {
494            printUpdateVersion($new_schema_version);
495
496            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
497            $sql .= "ALTER TABLE nodes ADD COLUMN latitude NUMERIC(16, 6);\n";
498            $sql .= "ALTER TABLE nodes ADD COLUMN longitude NUMERIC(16, 6);\n";
499        }
500
501        $new_schema_version = 21;
502        if ($schema_version < $new_schema_version) {
503            printUpdateVersion($new_schema_version);
504
505            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
506            $sql .= "CREATE TABLE content_rss_aggregator \n";
507            $sql .= "( \n";
508            $sql .= "content_id text NOT NULL PRIMARY KEY REFERENCES content ON UPDATE CASCADE ON DELETE CASCADE, \n";
509            $sql .= "number_of_display_items integer NOT NULL DEFAULT 10, \n";
510            $sql .= "algorithm_strength real NOT NULL DEFAULT 0.75, \n";
511            $sql .= "max_item_age interval DEFAULT NULL \n";
512            $sql .= "); \n";
513
514            $sql .= "CREATE TABLE content_rss_aggregator_feeds \n";
515            $sql .= "( ";
516            $sql .= "content_id text NOT NULL REFERENCES content_rss_aggregator ON UPDATE CASCADE ON DELETE CASCADE, \n";
517            $sql .= "url text, \n";
518            $sql .= "bias real NOT NULL DEFAULT 1, \n";
519            $sql .= "default_publication_interval int DEFAULT NULL, \n";
520            $sql .= "PRIMARY KEY(content_id, url) \n";
521            $sql .= "); \n";
522            $sql .= "ALTER TABLE content_has_owners ALTER COLUMN is_author SET DEFAULT 'f';\n";
523            $results = null;
524            $db->execSql("SELECT node_id, rss_url FROM nodes", $results, false);
525
526            foreach ($results as $row) {
527                if (!empty ($row['rss_url'])) {
528                    $content_id = get_guid();
529                    $sql .= "\nINSERT INTO content (content_id, content_type) VALUES ('$content_id', 'RssAggregator');\n";
530                    $sql .= "INSERT INTO content_rss_aggregator (content_id) VALUES ('$content_id');\n";
531                    $sql .= "INSERT INTO content_rss_aggregator_feeds (content_id, url) VALUES ('$content_id', '".$row['rss_url']."');\n";
532                    $node = Node :: getObject($row['node_id']);
533                    $owners = $node->getOwners();
534
535                    foreach ($owners as $owner) {
536                        $sql .= "INSERT INTO content_has_owners (content_id, user_id) VALUES ('$content_id', '".$owner->getId()."');\n";
537                    }
538
539                    $sql .= "INSERT INTO node_has_content (content_id, node_id) VALUES ('$content_id', '".$row['node_id']."');\n";
540                }
541            }
542
543            $sql .= "\nALTER TABLE nodes DROP COLUMN rss_url;\n";
544            $sql .= "\nDELETE FROM content WHERE content_type='HotspotRss';\n";
545        }
546
547        $new_schema_version = 22;
548        if ($schema_version < $new_schema_version) {
549            printUpdateVersion($new_schema_version);
550
551            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
552            $sql .= "ALTER TABLE nodes ADD COLUMN civic_number text;\n";
553
554            // Dropping street_address and copying data to street_name for the sake of backward compatibility
555            $sql .= "ALTER TABLE nodes ADD COLUMN street_name text;\n";
556            $sql .= "UPDATE nodes SET street_name = street_address;\n";
557            $sql .= "ALTER TABLE nodes DROP COLUMN street_address;\n";
558            $sql .= "ALTER TABLE nodes ADD COLUMN city text;\n";
559            $sql .= "ALTER TABLE nodes ADD COLUMN province text;\n";
560            $sql .= "ALTER TABLE nodes ADD COLUMN country text;\n";
561            $sql .= "ALTER TABLE nodes ADD COLUMN postal_code text;\n";
562        }
563
564        $new_schema_version = 23;
565        if ($schema_version < $new_schema_version) {
566            printUpdateVersion($new_schema_version);
567
568            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
569            $sql .= "CREATE TABLE node_tech_officers (\n";
570            $sql .= "  node_id VARCHAR(32) REFERENCES nodes (node_id),\n";
571            $sql .= "  user_id VARCHAR(45) REFERENCES users (user_id),\n";
572            $sql .= "PRIMARY KEY (node_id, user_id)\n";
573            $sql .= ");\n";
574        }
575
576        $new_schema_version = 24;
577        if ($schema_version < $new_schema_version) {
578            printUpdateVersion($new_schema_version);
579
580            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
581            $sql .= "ALTER TABLE content_rss_aggregator_feeds ADD COLUMN title text; \n";
582        }
583
584        $new_schema_version = 25;
585        if ($schema_version < $new_schema_version) {
586            printUpdateVersion($new_schema_version);
587
588            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
589            $sql .= "CREATE TABLE node_stakeholders ( \n";
590            $sql .= "  node_id VARCHAR(32) REFERENCES nodes (node_id),\n";
591            $sql .= "  user_id VARCHAR(45) REFERENCES users (user_id),\n";
592            $sql .= "  is_owner BOOLEAN NOT NULL DEFAULT FALSE,\n";
593            $sql .= "  is_tech_officer BOOLEAN NOT NULL DEFAULT FALSE,\n";
594            $sql .= "PRIMARY KEY (node_id, user_id)\n";
595            $sql .= ");\n";
596            $sql .= "INSERT INTO node_stakeholders (node_id, user_id) SELECT node_id, user_id FROM node_owners UNION SELECT node_id, user_id FROM node_tech_officers;\n";
597            $sql .= "UPDATE node_stakeholders SET is_owner = true FROM node_owners WHERE node_stakeholders.node_id = node_owners.node_id AND node_stakeholders.user_id = node_owners.user_id;\n";
598            $sql .= "UPDATE node_stakeholders SET is_tech_officer = true FROM node_tech_officers WHERE node_stakeholders.node_id = node_tech_officers.node_id AND node_stakeholders.user_id = node_tech_officers.user_id;";
599            $sql .= "DROP TABLE node_owners;\n";
600            $sql .= "DROP TABLE node_tech_officers;\n";
601        }
602
603        $new_schema_version = 26;
604        if ($schema_version < $new_schema_version) {
605            printUpdateVersion($new_schema_version);
606
607            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
608            $sql .= "CREATE TABLE networks ( \n";
609            $sql .= "  network_id text NOT NULL PRIMARY KEY,\n";
610            $sql .= "  network_authenticator_class text NOT NULL CHECK (network_authenticator_class<>''),\n";
611            $sql .= "  network_authenticator_params text,\n";
612            $sql .= "  is_default_network boolean NOT NULL DEFAULT FALSE,\n";
613            $sql .= "  name text NOT NULL DEFAULT 'Unnamed network' CHECK (name<>''),\n";
614            $sql .= "  creation_date date NOT NULL DEFAULT now(),\n";
615            $sql .= "  homepage_url text,\n";
616            $sql .= "  tech_support_email text,\n";
617            $sql .= "  validation_grace_time interval NOT NULL DEFAULT '1200 seconds',\n";
618            $sql .= "  validation_email_from_address text NOT NULL CHECK (validation_email_from_address<>'') DEFAULT 'validation@wifidognetwork',\n";
619            $sql .= "  allow_multiple_login BOOLEAN NOT NULL DEFAULT FALSE,\n";
620            $sql .= "  allow_splash_only_nodes BOOLEAN NOT NULL DEFAULT FALSE,\n";
621            $sql .= "  allow_custom_portal_redirect BOOLEAN NOT NULL DEFAULT FALSE\n";
622            $sql .= ");\n";
623            $sql .= "INSERT INTO networks (network_id, network_authenticator_class, network_authenticator_params) SELECT  account_origin, COALESCE('AuthenticatorLocalUser') as network_authenticator_class, '\'' || account_origin || '\'' FROM users GROUP BY (account_origin) ORDER BY min(reg_date);\n";
624            $sql .= "UPDATE networks SET is_default_network=TRUE WHERE network_id=(SELECT account_origin FROM users GROUP BY (account_origin) ORDER BY min(reg_date) LIMIT 1);\n";
625            $sql .= "ALTER TABLE users ADD CONSTRAINT account_origin_fkey FOREIGN KEY (account_origin) REFERENCES networks (network_id) ON UPDATE CASCADE ON DELETE RESTRICT;\n";
626            $sql .= "ALTER TABLE nodes ADD COLUMN network_id text; \n";
627            $sql .= "UPDATE nodes SET network_id=(SELECT account_origin FROM users GROUP BY (account_origin) ORDER BY min(reg_date) LIMIT 1);\n";
628            $sql .= "ALTER TABLE nodes ALTER COLUMN network_id SET NOT NULL; \n";
629            $sql .= "ALTER TABLE nodes ADD CONSTRAINT network_id_fkey FOREIGN KEY (network_id) REFERENCES networks ON UPDATE CASCADE ON DELETE RESTRICT;\n";
630            $sql .= "ALTER TABLE network_has_content ADD CONSTRAINT network_id_fkey FOREIGN KEY (network_id) REFERENCES networks ON UPDATE CASCADE ON DELETE CASCADE;\n";
631
632            $sql .= "CREATE TABLE network_stakeholders ( \n";
633            $sql .= "  network_id text REFERENCES networks,\n";
634            $sql .= "  user_id VARCHAR(45) REFERENCES users,\n";
635            $sql .= "  is_admin BOOLEAN NOT NULL DEFAULT FALSE,\n";
636            $sql .= "  is_stat_viewer BOOLEAN NOT NULL DEFAULT FALSE,\n";
637            $sql .= "PRIMARY KEY (network_id, user_id)\n";
638            $sql .= ");\n";
639        }
640
641        $new_schema_version = 27;
642        if ($schema_version < $new_schema_version) {
643            printUpdateVersion($new_schema_version);
644
645            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
646            $sql .= "ALTER TABLE nodes ADD COLUMN last_paged timestamp;\n";
647        }
648
649        $new_schema_version = 28;
650        if ($schema_version < $new_schema_version) {
651            printUpdateVersion($new_schema_version);
652
653            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
654            $sql .= "ALTER TABLE nodes ADD COLUMN is_splash_only_node boolean;\n";
655            $sql .= "ALTER TABLE nodes ALTER COLUMN is_splash_only_node SET DEFAULT FALSE;\n";
656            $sql .= "ALTER TABLE nodes ADD COLUMN custom_portal_redirect_url text;\n";
657
658        }
659
660        $new_schema_version = 29;
661        if ($schema_version < $new_schema_version) {
662            printUpdateVersion($new_schema_version);
663
664            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
665            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN api_shared_secret text;\n";
666        }
667
668        $new_schema_version = 30;
669        if ($schema_version < $new_schema_version) {
670            printUpdateVersion($new_schema_version);
671
672            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
673            $sql .= "CREATE INDEX idx_connections_user_id ON connections (user_id);\n";
674            $sql .= "CREATE INDEX idx_connections_user_mac ON connections (user_mac);\n";
675            $sql .= "CREATE INDEX idx_connections_node_id ON connections (node_id);\n";
676        }
677
678        $new_schema_version = 31;
679        if ($schema_version < $new_schema_version) {
680            printUpdateVersion($new_schema_version);
681
682            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
683            $sql .= "CREATE TABLE content_display_location ( \n";
684            $sql .= "  display_location text NOT NULL PRIMARY KEY\n";
685            $sql .= ");\n";
686            $sql .= "INSERT INTO content_display_location (display_location) VALUES ('portal_page');\n";
687            $sql .= "INSERT INTO content_display_location (display_location) VALUES ('login_page');\n";
688
689            $sql .= "ALTER TABLE network_has_content ADD COLUMN display_location text;\n";
690            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_location SET DEFAULT 'portal_page';\n";
691            $sql .= "UPDATE network_has_content SET display_location='portal_page';\n";
692            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_location SET NOT NULL;\n";
693            $sql .= "ALTER TABLE network_has_content ADD CONSTRAINT display_location_fkey FOREIGN KEY (display_location) REFERENCES content_display_location ON UPDATE CASCADE ON DELETE RESTRICT;\n";
694
695            $sql .= "ALTER TABLE node_has_content ADD COLUMN display_location text;\n";
696            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_location SET DEFAULT 'portal_page';\n";
697            $sql .= "UPDATE node_has_content SET display_location='portal_page';\n";
698            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_location SET NOT NULL;\n";
699            $sql .= "ALTER TABLE node_has_content ADD CONSTRAINT display_location_fkey FOREIGN KEY (display_location) REFERENCES content_display_location ON UPDATE CASCADE ON DELETE RESTRICT;\n";
700
701                        /* Convert the existing node logos */
702            $results = null;
703            $db->execSql("SELECT node_id FROM nodes", $results, false);
704            define('HOTSPOT_LOGO_NAME', 'hotspot_logo.jpg');
705
706            foreach ($results as $row) {
707                $php_logo_path = WIFIDOG_ABS_FILE_PATH . LOCAL_CONTENT_REL_PATH . $row['node_id'] . '/' . HOTSPOT_LOGO_NAME;
708
709                if (file_exists($php_logo_path)) {
710                    $node_logo_abs_url=$db->escapeString(BASE_URL_PATH.LOCAL_CONTENT_REL_PATH.$row['node_id'].'/'.HOTSPOT_LOGO_NAME);
711                    $content_id = get_guid();
712
713                    $sql .= "\nINSERT INTO content (content_id, content_type) VALUES ('$content_id', 'Picture');\n";
714                    $sql .= "INSERT INTO files (files_id, url) VALUES ('$content_id', '$node_logo_abs_url');\n";
715                    $sql .= "INSERT INTO pictures (pictures_id) VALUES ('$content_id');\n";
716
717                    $node = Node :: getObject($row['node_id']);
718                    $owners = $node->getOwners();
719
720                    foreach ($owners as $owner) {
721                        $sql .= "INSERT INTO content_has_owners (content_id, user_id) VALUES ('$content_id', '".$owner->getId()."');\n";
722                    }
723
724                    $sql .= "INSERT INTO node_has_content (content_id, node_id, display_location) VALUES ('$content_id', '".$row['node_id']."', 'login_page');\n";
725                }
726            }
727        }
728
729        $new_schema_version = 32;
730        if ($schema_version < $new_schema_version) {
731            printUpdateVersion($new_schema_version);
732
733            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
734            $sql .= "INSERT INTO locales VALUES ('de');\n";
735        }
736
737        $new_schema_version = 33;
738        if ($schema_version < $new_schema_version) {
739            printUpdateVersion($new_schema_version);
740
741            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
742            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN photo_display_mode text;\n";
743            $sql .= "ALTER TABLE flickr_photostream ALTER COLUMN photo_display_mode SET DEFAULT 'PDM_GRID'::text;\n";
744            $sql .= "UPDATE flickr_photostream SET photo_display_mode = 'PDM_GRID';\n";
745            $sql .= "ALTER TABLE flickr_photostream ALTER COLUMN photo_display_mode SET NOT NULL;\n";
746        }
747
748        $new_schema_version = 34;
749        if ($schema_version < $new_schema_version) {
750            printUpdateVersion($new_schema_version);
751
752            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
753            $sql .= "ALTER TABLE node_stakeholders DROP CONSTRAINT \"$1\";\n";
754            $sql .= "ALTER TABLE node_stakeholders ADD CONSTRAINT nodes_fkey FOREIGN KEY (node_id) REFERENCES nodes(node_id) ON UPDATE CASCADE ON DELETE CASCADE;";
755        }
756
757        $new_schema_version = 35;
758        if ($schema_version < $new_schema_version) {
759            printUpdateVersion($new_schema_version);
760
761            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
762            $sql .= "CREATE TABLE servers ( \n";
763            $sql .= "  server_id text NOT NULL PRIMARY KEY,\n";
764            $sql .= "  is_default_server boolean NOT NULL DEFAULT FALSE,\n";
765            $sql .= "  name text NOT NULL DEFAULT 'Unnamed server' CHECK (name<>''),\n";
766            $sql .= "  creation_date date NOT NULL DEFAULT now(),\n";
767            $sql .= "  hostname text NOT NULL DEFAULT 'localhost' CHECK (name<>''),\n";
768            $sql .= "  ssl_available BOOLEAN NOT NULL DEFAULT FALSE,\n";
769            $sql .= "  gmaps_api_key text\n";
770            $sql .= ");\n";
771            $sql .= "INSERT INTO servers (server_id, is_default_server, name, creation_date, hostname, ssl_available, gmaps_api_key) VALUES ('" . str_replace(".", "-", $_SERVER['SERVER_NAME']) . "', TRUE, 'Unnamed server', (SELECT creation_date FROM networks GROUP BY (creation_date) ORDER BY min(creation_date) LIMIT 1), '{$_SERVER['SERVER_NAME']}', " . (defined("SSL_AVAILABLE") ? (SSL_AVAILABLE ? "TRUE" : "FALSE") : "FALSE") . ", " . (defined("GMAPS_PUBLIC_API_KEY") ? "'" . GMAPS_PUBLIC_API_KEY . "'" : "''") . ");\n";
772
773            $sql .= "ALTER TABLE networks ADD COLUMN gmaps_initial_latitude NUMERIC(16, 6);\n";
774            $sql .= "ALTER TABLE networks ADD COLUMN gmaps_initial_longitude NUMERIC(16, 6);\n";
775            $sql .= "ALTER TABLE networks ADD COLUMN gmaps_initial_zoom_level integer;\n";
776            $sql .= "ALTER TABLE networks ADD COLUMN gmaps_map_type text CHECK (gmaps_map_type<>'');\n";
777            $sql .= "ALTER TABLE networks ALTER COLUMN gmaps_map_type SET DEFAULT 'G_MAP_TYPE';\n";
778            $sql .= "UPDATE networks SET gmaps_map_type = 'G_MAP_TYPE';\n";
779            $sql .= "ALTER TABLE networks ALTER COLUMN gmaps_map_type SET NOT NULL;\n";
780            $sql .= "UPDATE networks SET gmaps_initial_latitude = " . (defined("GMAPS_INITIAL_LATITUDE") ? "'" . GMAPS_INITIAL_LATITUDE . "'" : "'45.494511'") . ", gmaps_initial_longitude = " . (defined("GMAPS_INITIAL_LONGITUDE") ? "'" . GMAPS_INITIAL_LONGITUDE . "'" : "'-73.560285'") . ", gmaps_initial_zoom_level = " . (defined("GMAPS_INITIAL_ZOOM_LEVEL") ? "'" . GMAPS_INITIAL_ZOOM_LEVEL . "'" : "'5'") . ";\n";
781        }
782
783        $new_schema_version = 36;
784        if ($schema_version < $new_schema_version) {
785            printUpdateVersion($new_schema_version);
786
787            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
788            $sql .= "INSERT INTO locales VALUES ('pt');\n";
789        }
790
791        $new_schema_version = 37;
792        if ($schema_version < $new_schema_version) {
793            printUpdateVersion($new_schema_version);
794
795            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
796            $sql .= "ALTER TABLE flickr_photostream RENAME TO content_flickr_photostream;\n";
797            $sql .= "ALTER TABLE embedded_content RENAME TO content_embedded_content;\n";
798            $sql .= "ALTER TABLE files RENAME TO content_file;\n";
799            $sql .= "ALTER TABLE iframes RENAME TO content_iframe;\n";
800            $sql .= "ALTER TABLE langstring_entries RENAME TO content_langstring_entries;\n";
801            $sql .= "ALTER TABLE pictures RENAME TO content_file_image;\n";
802            $sql .= "ALTER TABLE content_display_location RENAME TO content_available_display_pages; \n";
803            $sql .= "ALTER TABLE content_available_display_pages RENAME COLUMN display_location TO display_page; \n";
804            $sql .= "UPDATE content_available_display_pages SET display_page = 'login' WHERE display_page = 'login_page';\n";
805            $sql .= "UPDATE content_available_display_pages SET display_page = 'portal' WHERE display_page = 'portal_page';\n";
806            $sql .= "INSERT INTO content_available_display_pages (display_page) VALUES ('everywhere');\n";
807            $sql .= "CREATE TABLE content_available_display_areas ( display_area text PRIMARY KEY);\n";
808            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('page_header');\n";
809            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('page_footer');\n";
810            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('left_area-top');\n";
811            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('left_area_middle');\n";
812            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('left_area_bottom');\n";
813            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('main_area_top');\n";
814            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('main_area_middle');\n";
815            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('main_area_bottom');\n";
816            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('right_area_top');\n";
817            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('right_area_middle');\n";
818            $sql .= "INSERT INTO content_available_display_areas (display_area) VALUES ('right_area_bottom');\n";
819
820            $sql .= "ALTER TABLE network_has_content RENAME COLUMN display_location TO display_page;\n";
821            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_page SET DEFAULT 'portal'::text;\n";
822            $sql .= "ALTER TABLE network_has_content ADD COLUMN display_area text REFERENCES content_available_display_areas ON UPDATE CASCADE ON DELETE CASCADE;\n";
823            $sql .= "UPDATE network_has_content SET display_area = 'main_area_middle';\n";
824            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_area SET DEFAULT 'main_area_middle'::text;\n";
825            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_area SET NOT NULL;\n";
826            $sql .= "ALTER TABLE network_has_content ADD COLUMN display_order integer;\n";
827            $sql .= "UPDATE network_has_content SET display_order = 1;\n";
828            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_order SET DEFAULT 1;\n";
829            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_order SET NOT NULL;\n";
830
831            $sql .= "ALTER TABLE node_has_content RENAME COLUMN display_location TO display_page;\n";
832            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_page SET DEFAULT 'portal'::text;\n";
833            $sql .= "ALTER TABLE node_has_content ADD COLUMN display_area text REFERENCES content_available_display_areas ON UPDATE CASCADE ON DELETE CASCADE;\n";
834            $sql .= "UPDATE node_has_content SET display_area = 'main_area_middle';\n";
835            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_area SET DEFAULT 'main_area_middle'::text;\n";
836            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_area SET NOT NULL;ALTER TABLE node_has_content ADD COLUMN display_order integer;\n";
837            $sql .= "UPDATE node_has_content SET display_order = 1;\n";
838            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_order SET DEFAULT 1;\n";
839            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_order SET NOT NULL;\n";
840        }
841
842        $new_schema_version = 38;
843        if ($schema_version < $new_schema_version) {
844                printUpdateVersion($new_schema_version);
845                $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
846                $sql .= "UPDATE content_available_display_areas SET display_area='left_area_top' WHERE display_area='left_area-top';\n";
847        }
848
849        $new_schema_version = 39;
850        if ($schema_version < $new_schema_version) {
851                        printUpdateVersion($new_schema_version);
852                $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
853
854                // Update to new Gmaps v2 constants
855                $sql .= "ALTER TABLE networks ALTER COLUMN gmaps_map_type SET DEFAULT 'G_NORMAL_MAP'::text;\n";
856                $sql .= "UPDATE networks SET gmaps_map_type='G_NORMAL_MAP' WHERE gmaps_map_type = 'G_MAP_TYPE'; \n";
857                $sql .= "UPDATE networks SET gmaps_map_type='G_HYBRID_MAP' WHERE gmaps_map_type = 'G_HYBRID_TYPE'; \n";
858                $sql .= "UPDATE networks SET gmaps_map_type='G_SATELLITE_MAP' WHERE gmaps_map_type = 'G_SATELLITE_TYPE'; \n";
859
860                // Use formula given here : http://www.google.com/apis/maps/documentation/upgrade.html#Upgrade
861                $sql .= "UPDATE networks SET gmaps_initial_zoom_level = 17 - gmaps_initial_zoom_level; \n";
862        }
863        $new_schema_version = 40;
864        if ($schema_version < $new_schema_version) {
865                printUpdateVersion($new_schema_version);
866            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
867            $sql .= "ALTER TABLE networks ADD COLUMN theme_pack text;\n";
868            $sql .= "ALTER TABLE networks ALTER COLUMN theme_pack SET DEFAULT NULL;\n";
869        }
870
871        $new_schema_version = 41;
872        if ($schema_version < $new_schema_version) {
873            printUpdateVersion($new_schema_version);
874            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
875            $sql .= "INSERT INTO locales (locales_id) VALUES('ja');\n";
876        }
877
878        /*
879        $new_schema_version = 42;
880        if ($schema_version < $new_schema_version) {
881            printUpdateVersion($new_schema_version);
882            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
883
884            $sql .= "ALTER TABLE users DROP COLUMN real_name text;\n";
885            $sql .= "ALTER TABLE users DROP COLUMN website text;\n";
886                        $sql .= "ALTER TABLE users RENAME COLUMN never_show_username is_invisible;\n";
887            $sql .= "CREATE TABLE user_profiles (\n";
888            $sql .= "   user_profile_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,\n";
889            $sql .= "   display_area text PRIMARY KEY,\n";
890            $sql .= "   real_name text,\n";
891            $sql .= "   website text,\n";
892            $sql .= ");\n";
893
894        }       */
895        $db->execSqlUpdate("BEGIN;\n$sql\nCOMMIT;\nVACUUM ANALYZE;\n", true);
896        //$db->execSqlUpdate("BEGIN;\n$sql\nROLLBACK;\n", true);
897
898        echo "</html></head>";
899    }
900}
901
902/*
903 * Local variables:
904 * tab-width: 4
905 * c-basic-offset: 4
906 * c-hanging-comment-ender-p: nil
907 * End:
908 */
Note: See TracBrowser for help on using the browser.