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

Revision 866, 41.3 KB (checked in by max-horvath, 7 years ago)

2005-12-26 Max Horvath <max.horvath@…>

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