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

Revision 830, 35.0 KB (checked in by fproulx, 8 years ago)

*** empty log message ***

  • 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/********************************************************************\
4 * This program is free software; you can redistribute it and/or    *
5 * modify it under the terms of the GNU General Public License as   *
6 * published by the Free Software Foundation; either version 2 of   *
7 * the License, or (at your option) any later version.              *
8 *                                                                  *
9 * This program is distributed in the hope that it will be useful,  *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
12 * GNU General Public License for more details.                     *
13 *                                                                  *
14 * You should have received a copy of the GNU General Public License*
15 * along with this program; if not, contact:                        *
16 *                                                                  *
17 * Free Software Foundation           Voice:  +1-617-542-5942       *
18 * 59 Temple Place - Suite 330        Fax:    +1-617-542-2652       *
19 * Boston, MA  02111-1307,  USA       gnu@gnu.org                   *
20 *                                                                  *
21 \********************************************************************/
22/**@file schema_validate.php
23 * Network status page
24 * @author Copyright (C) 2004 Benoit Grégoire
25 */
26error_reporting(E_ALL);
27require_once BASEPATH.'config.php';
28require_once BASEPATH.'classes/AbstractDb.php';
29require_once BASEPATH.'classes/Session.php';
30require_once BASEPATH.'classes/Node.php';
31define('REQUIRED_SCHEMA_VERSION', 33);
32
33/** Check that the database schema is up to date.  If it isn't, offer to update it. */
34function validate_schema()
35{
36        global $db;
37        $row = null;
38        try
39        {
40                // Check the schema info
41                $db->ExecSqlUniqueRes("SELECT * FROM schema_info WHERE tag='schema_version'", $row, false);
42        }
43        catch(Exception $e) { /* Be quiet */ }
44       
45        if (empty ($row))
46        {
47                echo "<html><body>";
48                echo "<h1>"._("Unable to retrieve schema version. The database schema is too old to be updated.")."</h1>";
49                echo "<h2>"._("Try running the")." <a href='".BASEPATH."install.php'>"._("installation script")."</a>.</h2>\n";
50                echo "</html></body>";
51                exit ();
52        }
53        else
54                if ($row['value'] < REQUIRED_SCHEMA_VERSION)
55                {
56//                      if (!empty ($_REQUEST['schema_update_confirm']) && $_REQUEST['schema_update_confirm'] == 'on')
57//                      {
58                                update_schema();
59/*                      }
60                        else
61                        {
62                                echo "<html><head><h1>";
63                                echo _("The database schema is not up to date.  Do you want to try to update it?  This operation is irreversible.");
64                                echo "</h1><form name='login_form' method='get'>\n";
65                                echo "<input type='submit' name='submit' value='"._("Try to update database schema")."'>\n";
66                                echo _("Yes, I am sure:")."<input type='checkbox' name='schema_update_confirm'>\n";
67                                echo "</form>\n";
68                                echo "</html></head>";
69                                exit ();
70                        } */
71                }
72                else
73                {
74                        //echo "<html><head><h1>The database schema is up to date.</h1></html></head>";
75                        //exit();
76                }
77}
78
79/**
80 * Auto create an administrator user with the first authenticator available
81 */
82function check_users_not_empty()
83{
84        // Extract the first account origin, assume it's the default
85        $network = Network::getDefaultNetwork();
86        if (!empty ($network))
87        {
88                global $db;
89                $db->ExecSqlUniqueRes("SELECT user_id FROM users WHERE account_origin = '{$network->getId()}' LIMIT 1", $row, false);
90                if ($row == null)
91                {
92                        echo "<html><head><h1>";
93                        echo _("No user matches the default network, a new user admin/admin will be created. Change the password as soon as possible !");
94                        echo "</html></head>";
95                        $sql = "BEGIN;";
96                        $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');";
97                        $sql .= "INSERT INTO administrators (user_id) VALUES ('admin_original_user_delete_me');";
98                        $sql .= "COMMIT;";
99                        $db->ExecSqlUpdate($sql, $row, false);
100                        exit;
101                }
102        }
103        else
104        {
105                echo "<html><head><h1>";
106                echo _("Could not get a default network!");
107                echo "</html></head>";
108                exit ();
109        }
110} /** Try to bring the database schema up to date. */
111function update_schema()
112{
113        global $db;
114        echo "<html><head><h1>\n";
115        echo _("Trying to update the database schema.");
116        echo "</h1>\n";
117        $db->ExecSqlUniqueRes("SELECT * FROM schema_info WHERE tag='schema_version'", $row, false);
118        if (empty ($row))
119        {
120                echo "<h1>"._("Unable to retrieve schema version.  The database schema is too old to be updated.")."</h1>";
121                exit ();
122        }
123        else
124        {
125                $schema_version = $row['value'];
126                $sql = '';
127                $new_schema_version = 2;
128                if ($schema_version < $new_schema_version)
129                {
130
131                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
132                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
133                        $sql .= "ALTER TABLE users ADD COLUMN username text;\n";
134                        $sql .= "ALTER TABLE users ADD COLUMN account_origin text;\n";
135                        $db->ExecSql("SELECT user_id FROM users", $results, false);
136                        foreach ($results as $row)
137                        {
138                                $user_id = $db->EscapeString($row['user_id']);
139                                $sql .= "UPDATE users SET username='$user_id', user_id='".get_guid()."', account_origin='LOCAL_USER' WHERE user_id='$user_id';\n";
140                        }
141                        $sql .= "CREATE UNIQUE INDEX idx_unique_username_and_account_origin ON users (username, account_origin);\n";
142                        $sql .= "CREATE UNIQUE INDEX idx_unique_email_and_account_origin ON users USING btree (email, account_origin);\n";
143                }
144
145                $new_schema_version = 3;
146                if ($schema_version < $new_schema_version)
147                {
148                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
149                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
150                        $sql .= "DROP INDEX idx_unique_email_and_account_origin;\n";
151                        $sql .= "ALTER TABLE users DROP CONSTRAINT check_email_not_empty;\n";
152                }
153
154                $new_schema_version = 4;
155                if ($schema_version < $new_schema_version)
156                {
157                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
158                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
159                        $sql .= "ALTER TABLE users ALTER COLUMN account_origin SET NOT NULL;\n";
160                        $sql .= "ALTER TABLE users ADD CONSTRAINT check_account_origin_not_empty CHECK (account_origin::text <> ''::text);\n";
161
162                        //We must skip all other updates because schema 5 must be manually updated:
163                        $schema_version = 1000000;
164                }
165
166                $new_schema_version = 5;
167                if ($schema_version == $new_schema_version -1)
168                {
169                        echo "<h1>Recoding database from ISO-8859-1 to UTF-8</h1>";
170                        echo "<h1>YOU MUST EXECUTE THESE COMMANDS FROM THE COMMAND_LINE:</h1>";
171                        echo "pg_dump wifidog -U wifidog > wifidog_dump.sql;<br>";
172                        echo "dropdb wifidog -U wifidog; <br>";
173                        echo "createdb --encoding=UNICODE --template=template0 -U wifidog wifidog;<br>";
174                        echo "psql wifidog -U wifidog < wifidog_dump.sql;<br>\n";
175                        echo " (Note: You may ignore the following errors:  \"ERROR:  permission denied to set session authorization\" and \"ERROR:  must be owner of schema public\")<br>";
176                        echo "psql wifidog -U wifidog -c \"UPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version'\";<br>";
177                        exit;
178                }
179                $new_schema_version = 6;
180                if ($schema_version < $new_schema_version)
181                {
182
183                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
184                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
185                        $sql .= "CREATE TABLE locales ( \n";
186                        $sql .= "  locales_id text PRIMARY KEY \n";
187                        $sql .= "  ); \n";
188                        $sql .= "  INSERT INTO locales VALUES ('fr'); \n";
189                        $sql .= "  INSERT INTO locales VALUES ('en'); \n";
190                        $sql .= "ALTER TABLE users ADD COLUMN never_show_username bool;\n";
191                        $sql .= "ALTER TABLE users ALTER COLUMN never_show_username SET DEFAULT FALSE;\n";
192                        $sql .= "ALTER TABLE users ADD COLUMN real_name text;\n";
193                        $sql .= "ALTER TABLE users ALTER COLUMN real_name SET DEFAULT NULL;\n";
194                        $sql .= "ALTER TABLE users ADD COLUMN website text;\n";
195                        $sql .= "ALTER TABLE users ALTER COLUMN website SET DEFAULT NULL;\n";
196                        $sql .= "ALTER TABLE users ADD COLUMN prefered_locale text REFERENCES locales ON DELETE SET NULL ON UPDATE CASCADE;\n";
197
198                        $sql .= "                       
199                                CREATE TABLE content
200                                (
201                                content_id text NOT NULL PRIMARY KEY,
202                                content_type text NOT NULL  CONSTRAINT content_type_not_empty_string CHECK (content_type != ''),
203                                title text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
204                                description text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
205                                project_info text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
206                                sponsor_info text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
207                                creation_timestamp timestamp DEFAULT now()
208                                );
209       
210                                CREATE TABLE content_has_owners
211                                (
212                                content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
213                                user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
214                                is_author bool NOT NULL,
215                                owner_since timestamp DEFAULT now(),
216                                PRIMARY KEY  (content_id, user_id)
217                                );
218                               
219                                CREATE TABLE langstring_entries (
220                                  langstring_entries_id text NOT NULL PRIMARY KEY,
221                                  langstrings_id text REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
222                                  locales_id text REFERENCES locales ON DELETE RESTRICT ON UPDATE CASCADE,
223                                  value text  DEFAULT ''
224                                );
225                               
226                                CREATE TABLE content_group (
227                                  content_group_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
228                                  is_artistic_content bool NOT NULL DEFAULT FALSE,
229                                  is_locative_content bool NOT NULL DEFAULT FALSE,
230                                  content_selection_mode text
231                                );
232                               
233                                CREATE TABLE content_group_element (
234                                  content_group_element_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
235                                  content_group_id text NOT NULL REFERENCES content_group ON DELETE CASCADE ON UPDATE CASCADE,
236                                  display_order integer DEFAULT '1',
237                                  displayed_content_id text REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
238                                  force_only_allowed_node bool
239                                );
240                                CREATE INDEX idx_content_group_element_content_group_id ON content_group_element (content_group_id);
241                               
242                                CREATE TABLE content_group_element_has_allowed_nodes
243                                (
244                                content_group_element_id text NOT NULL REFERENCES content_group_element ON DELETE CASCADE ON UPDATE CASCADE,
245                                node_id text NOT NULL REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
246                                allowed_since timestamp DEFAULT now(),
247                                PRIMARY KEY  (content_group_element_id, node_id)
248                                );
249                               
250                                CREATE TABLE content_group_element_portal_display_log (
251                                  user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
252                                  content_group_element_id text NOT NULL REFERENCES content_group_element ON DELETE CASCADE ON UPDATE CASCADE,
253                                  display_timestamp timestamp NOT NULL DEFAULT now(),
254                                  node_id text REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
255                                  PRIMARY KEY  (user_id,content_group_element_id, display_timestamp)
256                                );
257                               
258                                CREATE TABLE user_has_content (
259                                  user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
260                                  content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
261                                  subscribe_timestamp timestamp NOT NULL DEFAULT now(),
262                                  PRIMARY KEY  (user_id,content_id)
263                                );
264                               
265                                CREATE TABLE node_has_content (
266                                  node_id text NOT NULL REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
267                                  content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
268                                  subscribe_timestamp timestamp NOT NULL DEFAULT now(),
269                                  PRIMARY KEY  (node_id,content_id)
270                                );
271                               
272                                CREATE TABLE network_has_content (
273                                  network_id text NOT NULL,
274                                  content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
275                                  subscribe_timestamp timestamp NOT NULL DEFAULT now(),
276                                  PRIMARY KEY  (network_id,content_id)
277                                );";
278                }
279
280                $new_schema_version = 7;
281                if ($schema_version < $new_schema_version)
282                {
283
284                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
285                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
286                        $sql .= "ALTER TABLE content ADD COLUMN is_persistent bool;\n";
287                        $sql .= "ALTER TABLE content ALTER COLUMN is_persistent SET DEFAULT FALSE;\n";
288
289                }
290
291                $new_schema_version = 8;
292                if ($schema_version < $new_schema_version)
293                {
294                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
295                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
296                        $sql .= "CREATE TABLE flickr_photostream
297                                    (
298                                      flickr_photostream_id text NOT NULL,
299                                      api_key text,
300                                      photo_selection_mode text NOT NULL DEFAULT 'PSM_GROUP'::text,
301                                      user_id text,
302                                      user_name text,
303                                      tags text,
304                                      tag_mode varchar(10) DEFAULT 'any'::character varying,
305                                      group_id text,
306                                      random bool NOT NULL DEFAULT true,
307                                      min_taken_date timestamp,
308                                      max_taken_date timestamp,
309                                      photo_batch_size int4 DEFAULT 10,
310                                      photo_count int4 DEFAULT 1,
311                                      display_title bool NOT NULL DEFAULT true,
312                                      display_description bool NOT NULL DEFAULT false,
313                                      display_tags bool NOT NULL DEFAULT false,
314                                      CONSTRAINT flickr_photostream_pkey PRIMARY KEY (flickr_photostream_id),
315                                      CONSTRAINT flickr_photostream_content_group_fkey FOREIGN KEY (flickr_photostream_id) REFERENCES content_group (content_group_id) ON UPDATE CASCADE ON DELETE CASCADE
316                                    );";
317                }
318
319                $new_schema_version = 9;
320                if ($schema_version < $new_schema_version)
321                {
322                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
323                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
324                        $sql .= "CREATE TABLE files
325                                    (
326                                      files_id text NOT NULL,
327                                      filename text,
328                                      mime_type text,
329                                      binary_data bytea,
330                                      remote_size int8,
331                                      CONSTRAINT files_pkey PRIMARY KEY (files_id)
332                                    );";
333                }
334
335                $new_schema_version = 10;
336                if ($schema_version < $new_schema_version)
337                {
338                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
339                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
340                        $sql .= "ALTER TABLE files ADD COLUMN url text;";
341                        $sql .= "ALTER TABLE flickr_photostream ADD COLUMN preferred_size text;";
342                        $sql .= "CREATE TABLE embedded_content (
343                                                        embedded_content_id text NOT NULL,
344                                                        embedded_file_id text,
345                                                        fallback_content_id text,
346                                                    parameters text,
347                                                    attributes text
348                                                );";
349                }
350
351                $new_schema_version = 11;
352                if ($schema_version < $new_schema_version)
353                {
354                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
355                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
356                        $sql .= "DROP TABLE content_group_element_portal_display_log;\n";
357                        $sql .= "CREATE TABLE content_display_log
358                        (
359                          user_id text NOT NULL REFERENCES users ON UPDATE CASCADE ON DELETE CASCADE,
360                          content_id text NOT NULL REFERENCES content ON UPDATE CASCADE ON DELETE CASCADE,
361                          first_display_timestamp timestamp NOT NULL DEFAULT now(),
362                          node_id text NOT NULL REFERENCES nodes ON UPDATE CASCADE ON DELETE CASCADE,
363                          last_display_timestamp timestamp NOT NULL DEFAULT now(),
364                          CONSTRAINT content_group_element_portal_display_log_pkey PRIMARY KEY (user_id, content_id, node_id)
365                        ); \n";
366
367                }
368
369                $new_schema_version = 12;
370                if ($schema_version < $new_schema_version)
371                {
372                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
373                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
374                        $sql .= "ALTER TABLE flickr_photostream DROP CONSTRAINT flickr_photostream_content_group_fkey;";
375                        $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;";
376                }
377
378                $new_schema_version = 13;
379                if ($schema_version < $new_schema_version)
380                {
381                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
382                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
383                        $sql .= "ALTER TABLE content_group DROP COLUMN content_selection_mode;\n";
384                        $sql .= "ALTER TABLE content_group ADD COLUMN content_changes_on_mode text;\n";
385                        $sql .= "UPDATE content_group SET content_changes_on_mode='ALWAYS';\n";
386                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_changes_on_mode SET DEFAULT 'ALWAYS';\n";
387                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_changes_on_mode SET NOT NULL;\n";
388                        $sql .= "ALTER TABLE content_group ADD COLUMN content_ordering_mode text;\n";
389                        $sql .= "UPDATE content_group SET content_ordering_mode='RANDOM';\n";
390                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_ordering_mode SET DEFAULT 'RANDOM';\n";
391                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_ordering_mode SET NOT NULL;\n";
392
393                        $sql .= "ALTER TABLE content_group ADD COLUMN display_num_elements int;\n";
394                        $sql .= "UPDATE content_group SET display_num_elements=1;\n";
395                        $sql .= "ALTER TABLE content_group ALTER COLUMN display_num_elements SET DEFAULT '1';\n";
396                        $sql .= "ALTER TABLE content_group ALTER COLUMN display_num_elements SET NOT NULL;\n";
397                        $sql .= "ALTER TABLE content_group ADD CONSTRAINT display_at_least_one_element CHECK (display_num_elements > 0);\n";
398
399                        $sql .= "ALTER TABLE content_group ADD COLUMN allow_repeat text;\n";
400                        $sql .= "UPDATE content_group SET allow_repeat='YES';\n";
401                        $sql .= "ALTER TABLE content_group ALTER COLUMN allow_repeat SET DEFAULT 'YES';\n";
402                        $sql .= "ALTER TABLE content_group ALTER COLUMN allow_repeat SET NOT NULL;\n";
403                }
404
405                $new_schema_version = 14;
406                if ($schema_version < $new_schema_version)
407                {
408                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
409                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
410                        $sql .= "CREATE TABLE pictures "."( "."pictures_id text NOT NULL PRIMARY KEY REFERENCES files ON DELETE CASCADE ON UPDATE CASCADE, "."width int4, "."height int4".");\n";
411                }
412
413                $new_schema_version = 15;
414                if ($schema_version < $new_schema_version)
415                {
416                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
417                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
418                        $sql .= "ALTER TABLE files ADD COLUMN data_blob oid;
419                                            ALTER TABLE files ADD COLUMN local_binary_size int8;
420                                            ALTER TABLE files DROP COLUMN binary_data;\n";
421                }
422
423                $new_schema_version = 16;
424                if ($schema_version < $new_schema_version)
425                {
426                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
427                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
428                        $sql .= "ALTER TABLE flickr_photostream ADD COLUMN requests_cache text; \n";
429                        $sql .= "ALTER TABLE flickr_photostream ADD COLUMN cache_update_timestamp timestamp; \n";
430                }
431
432                $new_schema_version = 17;
433                if ($schema_version < $new_schema_version)
434                {
435                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
436                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
437                        $sql .= "ALTER TABLE nodes ADD COLUMN max_monthly_incoming int8; \n";
438                        $sql .= "ALTER TABLE nodes ADD COLUMN max_monthly_outgoing int8; \n";
439                        $sql .= "ALTER TABLE nodes ADD COLUMN quota_reset_day_of_month int4; \n";
440                }
441
442                $new_schema_version = 18;
443                if ($schema_version < $new_schema_version)
444                {
445                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
446                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
447                        $sql .= "ALTER TABLE content ADD COLUMN long_description text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE;\n";
448                }
449
450                $new_schema_version = 19;
451                if ($schema_version < $new_schema_version)
452                {
453                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
454                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
455                        $sql .= "CREATE TABLE iframes (";
456                        $sql .= "iframes_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,";
457                        $sql .= "url text,";
458                        $sql .= "width int4,";
459                        $sql .= "height int4";
460                        $sql .= ");\n";
461                }
462
463                $new_schema_version = 20;
464                if ($schema_version < $new_schema_version)
465                {
466                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
467                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
468                        $sql .= "ALTER TABLE nodes ADD COLUMN latitude NUMERIC(16, 6);\n";
469                        $sql .= "ALTER TABLE nodes ADD COLUMN longitude NUMERIC(16, 6);\n";
470                }
471
472                $new_schema_version = 21;
473                if ($schema_version < $new_schema_version)
474                {
475                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
476                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
477                        $sql .= "CREATE TABLE content_rss_aggregator \n";
478                        $sql .= "( \n";
479                        $sql .= "content_id text NOT NULL PRIMARY KEY REFERENCES content ON UPDATE CASCADE ON DELETE CASCADE, \n";
480                        $sql .= "number_of_display_items integer NOT NULL DEFAULT 10, \n";
481                        $sql .= "algorithm_strength real NOT NULL DEFAULT 0.75, \n";
482                        $sql .= "max_item_age interval DEFAULT NULL \n";
483                        $sql .= "); \n";
484                       
485                        $sql .= "CREATE TABLE content_rss_aggregator_feeds \n";
486                        $sql .= "( ";
487                        $sql .= "content_id text NOT NULL REFERENCES content_rss_aggregator ON UPDATE CASCADE ON DELETE CASCADE, \n";
488                        $sql .= "url text, \n";
489                        $sql .= "bias real NOT NULL DEFAULT 1, \n";
490                        $sql .= "default_publication_interval int DEFAULT NULL, \n";
491                        $sql .= "PRIMARY KEY(content_id, url) \n";
492                        $sql .= "); \n";
493                        $sql .= "ALTER TABLE content_has_owners ALTER COLUMN is_author SET DEFAULT 'f';\n";
494                        $results = null;
495                        $db->ExecSql("SELECT node_id, rss_url FROM nodes", $results, false);
496                        foreach ($results as $row)
497                        {
498                                if (!empty ($row['rss_url']))
499                                {
500                                        //$user_id = $db->EscapeString($row['user_id']);
501                                        $content_id = get_guid();
502                                        $sql .= "\nINSERT INTO content (content_id, content_type) VALUES ('$content_id', 'RssAggregator');\n";
503                                        $sql .= "INSERT INTO content_rss_aggregator (content_id) VALUES ('$content_id');\n";
504                                        $sql .= "INSERT INTO content_rss_aggregator_feeds (content_id, url) VALUES ('$content_id', '".$row['rss_url']."');\n";
505                                        $node = Node :: getObject($row['node_id']);
506                                        $owners = $node->getOwners();
507                                        foreach ($owners as $owner)
508                                        {
509                                                $sql .= "INSERT INTO content_has_owners (content_id, user_id) VALUES ('$content_id', '".$owner->getId()."');\n";
510                                        }
511                                        $sql .= "INSERT INTO node_has_content (content_id, node_id) VALUES ('$content_id', '".$row['node_id']."');\n";
512                                }
513                        }
514                        $sql .= "\nALTER TABLE nodes DROP COLUMN rss_url;\n";
515                        $sql .= "\nDELETE FROM content WHERE content_type='HotspotRss';\n";
516                }
517
518                $new_schema_version = 22;
519                if ($schema_version < $new_schema_version)
520                {
521                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
522                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
523                        $sql .= "ALTER TABLE nodes ADD COLUMN civic_number text;\n";
524                        // Dropping street_address and copying data to street_name for the sake of backward compatibility
525                        $sql .= "ALTER TABLE nodes ADD COLUMN street_name text;\n";
526                        $sql .= "UPDATE nodes SET street_name = street_address;\n";
527                        $sql .= "ALTER TABLE nodes DROP COLUMN street_address;\n";
528                        $sql .= "ALTER TABLE nodes ADD COLUMN city text;\n";
529                        $sql .= "ALTER TABLE nodes ADD COLUMN province text;\n";
530                        $sql .= "ALTER TABLE nodes ADD COLUMN country text;\n";
531                        $sql .= "ALTER TABLE nodes ADD COLUMN postal_code text;\n";
532                }
533               
534                $new_schema_version = 23;
535                if ($schema_version < $new_schema_version)
536                {
537                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
538                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
539                        $sql .= "CREATE TABLE node_tech_officers (\n";
540                        $sql .= "  node_id VARCHAR(32) REFERENCES nodes (node_id),\n";
541                        $sql .= "  user_id VARCHAR(45) REFERENCES users (user_id),\n";
542                        $sql .= "PRIMARY KEY (node_id, user_id)\n";
543                        $sql .= ");\n";
544                }
545               
546                $new_schema_version = 24;
547                if ($schema_version < $new_schema_version)
548                {
549                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
550                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
551                        $sql .= "ALTER TABLE content_rss_aggregator_feeds ADD COLUMN title text; \n";
552                }
553               
554                $new_schema_version = 25;
555                if ($schema_version < $new_schema_version)
556                {
557                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
558                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
559                        $sql .= "CREATE TABLE node_stakeholders ( \n";
560                        $sql .= "  node_id VARCHAR(32) REFERENCES nodes (node_id),\n";
561                        $sql .= "  user_id VARCHAR(45) REFERENCES users (user_id),\n";
562                        $sql .= "  is_owner BOOLEAN NOT NULL DEFAULT FALSE,\n";
563                        $sql .= "  is_tech_officer BOOLEAN NOT NULL DEFAULT FALSE,\n";
564                        $sql .= "PRIMARY KEY (node_id, user_id)\n";
565                        $sql .= ");\n";
566                        $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";
567                        $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";
568                        $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;";
569                        $sql .= "DROP TABLE node_owners;\n";
570                        $sql .= "DROP TABLE node_tech_officers;\n";
571                }
572                       
573                $new_schema_version = 26;
574                if ($schema_version < $new_schema_version)
575                {
576                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
577                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
578                        $sql .= "CREATE TABLE networks ( \n";
579                        $sql .= "  network_id text NOT NULL PRIMARY KEY,\n";
580                        $sql .= "  network_authenticator_class text NOT NULL CHECK (network_authenticator_class<>''),\n";
581                        $sql .= "  network_authenticator_params text,\n";
582                        $sql .= "  is_default_network boolean NOT NULL DEFAULT FALSE,\n";
583                        $sql .= "  name text NOT NULL DEFAULT 'Unnamed network' CHECK (name<>''),\n";
584                        $sql .= "  creation_date date NOT NULL DEFAULT now(),\n";
585                        $sql .= "  homepage_url text,\n";
586                        $sql .= "  tech_support_email text,\n";
587                        $sql .= "  validation_grace_time interval NOT NULL DEFAULT '1200 seconds',\n";
588                        $sql .= "  validation_email_from_address text NOT NULL CHECK (validation_email_from_address<>'') DEFAULT 'validation@wifidognetwork',\n";
589                        $sql .= "  allow_multiple_login BOOLEAN NOT NULL DEFAULT FALSE,\n";
590                        $sql .= "  allow_splash_only_nodes BOOLEAN NOT NULL DEFAULT FALSE,\n";
591                        $sql .= "  allow_custom_portal_redirect BOOLEAN NOT NULL DEFAULT FALSE\n";
592                        $sql .= ");\n";
593                        $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";
594                        $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";
595                        $sql .= "ALTER TABLE users ADD CONSTRAINT account_origin_fkey FOREIGN KEY (account_origin) REFERENCES networks (network_id) ON UPDATE CASCADE ON DELETE RESTRICT;\n";
596                        $sql .= "ALTER TABLE nodes ADD COLUMN network_id text; \n";
597                        $sql .= "UPDATE nodes SET network_id=(SELECT account_origin FROM users GROUP BY (account_origin) ORDER BY min(reg_date) LIMIT 1);\n";                   
598                        $sql .= "ALTER TABLE nodes ALTER COLUMN network_id SET NOT NULL; \n";
599                        $sql .= "ALTER TABLE nodes ADD CONSTRAINT network_id_fkey FOREIGN KEY (network_id) REFERENCES networks ON UPDATE CASCADE ON DELETE RESTRICT;\n";
600                        $sql .= "ALTER TABLE network_has_content ADD CONSTRAINT network_id_fkey FOREIGN KEY (network_id) REFERENCES networks ON UPDATE CASCADE ON DELETE CASCADE;\n";
601
602                        $sql .= "CREATE TABLE network_stakeholders ( \n";
603                        $sql .= "  network_id text REFERENCES networks,\n";
604                        $sql .= "  user_id VARCHAR(45) REFERENCES users,\n";
605                        $sql .= "  is_admin BOOLEAN NOT NULL DEFAULT FALSE,\n";
606                        $sql .= "  is_stat_viewer BOOLEAN NOT NULL DEFAULT FALSE,\n";
607                        $sql .= "PRIMARY KEY (network_id, user_id)\n";
608                        $sql .= ");\n";
609                }
610
611                $new_schema_version = 27;
612                if ($schema_version < $new_schema_version)
613                {
614                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
615                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
616            $sql .= "ALTER TABLE nodes ADD COLUMN last_paged timestamp;\n";
617
618                }
619               
620                $new_schema_version = 28;
621                if ($schema_version < $new_schema_version)
622                {
623                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
624                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
625            $sql .= "ALTER TABLE nodes ADD COLUMN is_splash_only_node boolean;\n";
626            $sql .= "ALTER TABLE nodes ALTER COLUMN is_splash_only_node SET DEFAULT FALSE;\n";
627            $sql .= "ALTER TABLE nodes ADD COLUMN custom_portal_redirect_url text;\n";
628           
629                }
630               
631                $new_schema_version = 29;
632                if ($schema_version < $new_schema_version)
633                {
634                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
635                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
636                        $sql .= "ALTER TABLE flickr_photostream ADD COLUMN api_shared_secret text;\n";
637                }
638               
639                $new_schema_version = 30;
640                if ($schema_version < $new_schema_version)
641                {
642                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
643                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
644                        $sql .= "CREATE INDEX idx_connections_user_id ON connections (user_id);\n";
645                        $sql .= "CREATE INDEX idx_connections_user_mac ON connections (user_mac);\n";
646                        $sql .= "CREATE INDEX idx_connections_node_id ON connections (node_id);\n";
647                }
648               
649                $new_schema_version = 31;
650                if ($schema_version < $new_schema_version)
651                {
652                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
653                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
654                        $sql .= "CREATE TABLE content_display_location ( \n";
655                        $sql .= "  display_location text NOT NULL PRIMARY KEY\n";
656                        $sql .= ");\n";
657                        $sql .= "INSERT INTO content_display_location (display_location) VALUES ('portal_page');\n";
658                        $sql .= "INSERT INTO content_display_location (display_location) VALUES ('login_page');\n";
659                                               
660            $sql .= "ALTER TABLE network_has_content ADD COLUMN display_location text;\n";
661            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_location SET DEFAULT 'portal_page';\n";
662            $sql .= "UPDATE network_has_content SET display_location='portal_page';\n";
663            $sql .= "ALTER TABLE network_has_content ALTER COLUMN display_location SET NOT NULL;\n";
664                        $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";
665
666            $sql .= "ALTER TABLE node_has_content ADD COLUMN display_location text;\n";
667            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_location SET DEFAULT 'portal_page';\n";
668            $sql .= "UPDATE node_has_content SET display_location='portal_page';\n";
669            $sql .= "ALTER TABLE node_has_content ALTER COLUMN display_location SET NOT NULL;\n";
670                        $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";
671/* Convert the existing node logos */
672                        $results = null;
673                        $db->ExecSql("SELECT node_id FROM nodes", $results, false);
674                                                        define('HOTSPOT_LOGO_NAME', 'hotspot_logo.jpg');
675                        foreach ($results as $row)
676                        {
677                                $php_logo_path = BASEPATH.LOCAL_CONTENT_REL_PATH.$row['node_id'].'/'.HOTSPOT_LOGO_NAME;
678                                //echo $php_logo_path."<br>";
679                                if (file_exists($php_logo_path))
680                                {
681                                        $node_logo_abs_url=$db->EscapeString(BASE_URL_PATH.LOCAL_CONTENT_REL_PATH.$row['node_id'].'/'.HOTSPOT_LOGO_NAME);
682                                        //$user_id = $db->EscapeString($row['user_id']);
683                                        $content_id = get_guid();
684                                        $sql .= "\nINSERT INTO content (content_id, content_type) VALUES ('$content_id', 'Picture');\n";
685                                        $sql .= "INSERT INTO files (files_id, url) VALUES ('$content_id', '$node_logo_abs_url');\n";
686                                        $sql .= "INSERT INTO pictures (pictures_id) VALUES ('$content_id');\n";
687                                        $node = Node :: getObject($row['node_id']);
688                                        $owners = $node->getOwners();
689                                        foreach ($owners as $owner)
690                                        {
691                                                $sql .= "INSERT INTO content_has_owners (content_id, user_id) VALUES ('$content_id', '".$owner->getId()."');\n";
692                                        }
693                                        $sql .= "INSERT INTO node_has_content (content_id, node_id, display_location) VALUES ('$content_id', '".$row['node_id']."', 'login_page');\n";
694                                }
695                        }
696                       
697                }
698               
699                $new_schema_version = 32;
700                if ($schema_version < $new_schema_version)
701                {
702                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
703                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
704                        $sql .= "INSERT INTO locales VALUES ('de');\n";
705                }
706               
707                $new_schema_version = 33;
708                if ($schema_version < $new_schema_version)
709                {
710                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
711                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
712                        $sql .= "ALTER TABLE flickr_photostream ADD COLUMN photo_display_mode text;\n";
713                        $sql .= "ALTER TABLE flickr_photostream ALTER COLUMN photo_display_mode SET DEFAULT 'PDM_GRID'::text;\n";
714                        $sql .= "UPDATE flickr_photostream SET photo_display_mode = 'PDM_GRID';\n";
715                        $sql .= "ALTER TABLE flickr_photostream ALTER COLUMN photo_display_mode SET NOT NULL;\n";
716                }
717               
718                $db->ExecSqlUpdate("BEGIN;\n$sql\nCOMMIT;\nVACUUM ANALYZE;\n", true);
719                //$db->ExecSqlUpdate("BEGIN;\n$sql\nROLLBACK;\n", true);
720                echo "</html></head>";
721                //exit ();
722        }
723}
724?>
Note: See TracBrowser for help on using the browser.