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

Revision 685, 24.5 KB (checked in by benoitg, 8 years ago)

2005-08-12 Benoit Gr�goire <bock@…>

  • classes/MainUI.php: Move the call to schema_validate() in MainUI's constructor
  • lib/RssPressReview/RssPressReview.php: Finish rewrite. Move there to reflect it's independently maintained status
  • wifidog/classes/Content/HotspotRss.php: Delete the class, obsolete
  • wifidog/classes/Content/RssAggregator.php: Functionnal, but needs it's admin UI written.
  • wifidog/include/schema_validate.php: Create the table structure for the new RssAggregator?. Remove rss_url in nodes table, no longer needed. Move it's data to the new Content class.
  • 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 * This program is free software; you can redistribute it and/or    *
4 * modify it under the terms of the GNU General Public License as   *
5 * published by the Free Software Foundation; either version 2 of   *
6 * the License, or (at your option) any later version.              *
7 *                                                                  *
8 * This program is distributed in the hope that it will be useful,  *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
11 * GNU General Public License for more details.                     *
12 *                                                                  *
13 * You should have received a copy of the GNU General Public License*
14 * along with this program; if not, contact:                        *
15 *                                                                  *
16 * Free Software Foundation           Voice:  +1-617-542-5942       *
17 * 59 Temple Place - Suite 330        Fax:    +1-617-542-2652       *
18 * Boston, MA  02111-1307,  USA       gnu@gnu.org                   *
19 *                                                                  *
20 \********************************************************************/
21/**@file schema_validate.php
22 * Network status page
23 * @author Copyright (C) 2004 Benoit Grégoire
24 */
25error_reporting(E_ALL);
26require_once BASEPATH.'config.php';
27require_once BASEPATH.'classes/AbstractDb.php';
28require_once BASEPATH.'classes/Session.php';
29define('REQUIRED_SCHEMA_VERSION', 21);
30
31/** Check that the database schema is up to date.  If it isn't, offer to update it. */
32function validate_schema()
33{
34        global $db;
35
36        check_users_not_empty();
37        $db->ExecSqlUniqueRes("SELECT * FROM schema_info WHERE tag='schema_version'", $row, false);
38        if (empty ($row))
39        {
40                echo "<html><head><h1>"._("Unable to retrieve schema version.  The database schema is too old to be updated.")."</h1></html></head>";
41                exit ();
42        }
43        else
44                if ($row['value'] < REQUIRED_SCHEMA_VERSION)
45                {
46                        if (!empty ($_REQUEST['schema_update_confirm']) && $_REQUEST['schema_update_confirm'] == 'on')
47                        {
48                                update_schema();
49                        }
50                        else
51                        {
52                                echo "<html><head><h1>";
53                                echo _("The database schema is not up to date.  Do you want to try to update it?  This operation is irreversible.");
54                                echo "</h1><form name='login_form' method='get'>\n";
55                                echo "<input type='submit' name='submit' value='"._("Try to update database schema")."'>\n";
56                                echo _("Yes, I am sure:")."<input type='checkbox' name='schema_update_confirm'>\n";
57                                echo "</form>\n";
58                                echo "</html></head>";
59                                exit ();
60                        }
61                }
62                else
63                {
64                        //echo "<html><head><h1>The database schema is up to date.</h1></html></head>";
65                        //exit();
66                }
67}
68
69/**
70 * Auto create an administrator user with the first authenticator available
71 */
72function check_users_not_empty()
73{
74        // Extract the first account origin, assume it's the default
75        global $AUTH_SOURCE_ARRAY;
76        if (!empty ($AUTH_SOURCE_ARRAY))
77        {
78                $default_account_origin = array_values(array_keys($AUTH_SOURCE_ARRAY));
79                $default_account_origin = $default_account_origin[0];
80        }
81
82        if (!empty ($default_account_origin))
83        {
84                global $db;
85                $db->ExecSqlUniqueRes("SELECT user_id FROM users WHERE account_origin = '$default_account_origin' LIMIT 1", $row, false);
86                if ($row == null)
87                {
88                        echo "<html><head><h1>";
89                        echo _("No user matches the default account origin, a new user admin/admin will be created. Change the password as soon as possible !");
90                        echo "</html></head>";
91                        $sql = "BEGIN;";
92                        $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');";
93                        $sql .= "INSERT INTO administrators (user_id) VALUES ('admin_original_user_delete_me');";
94                        $sql .= "COMMIT;";
95                        $db->ExecSqlUpdate($sql, $row, false);
96                        exit;
97                }
98        }
99        else
100        {
101                echo "<html><head><h1>";
102                echo _("Could not get a default account origin, make sure you config.php has at least one AUTH_SOURCE_ARRAY entry.");
103                echo "</html></head>";
104                exit ();
105        }
106} /** Try to bring the database schema up to date. */
107function update_schema()
108{
109        global $db;
110        echo "<html><head><h1>\n";
111        echo _("Trying to update the database schema.");
112        echo "</h1>\n";
113        $db->ExecSqlUniqueRes("SELECT * FROM schema_info WHERE tag='schema_version'", $row, false);
114        if (empty ($row))
115        {
116                echo "<h1>"._("Unable to retrieve schema version.  The database schema is too old to be updated.")."</h1>";
117                exit ();
118        }
119        else
120        {
121                $schema_version = $row['value'];
122                $sql = '';
123                $new_schema_version = 2;
124                if ($schema_version < $new_schema_version)
125                {
126
127                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
128                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
129                        $sql .= "ALTER TABLE users ADD COLUMN username text;\n";
130                        $sql .= "ALTER TABLE users ADD COLUMN account_origin text;\n";
131                        $db->ExecSql("SELECT user_id FROM users", $results, false);
132                        foreach ($results as $row)
133                        {
134                                $user_id = $db->EscapeString($row['user_id']);
135                                $sql .= "UPDATE users SET username='$user_id', user_id='".get_guid()."', account_origin='".LOCAL_USER_ACCOUNT_ORIGIN."' WHERE user_id='$user_id';\n";
136                        }
137                        $sql .= "CREATE UNIQUE INDEX idx_unique_username_and_account_origin ON users (username, account_origin);\n";
138                        $sql .= "CREATE UNIQUE INDEX idx_unique_email_and_account_origin ON users USING btree (email, account_origin);\n";
139                }
140
141                $new_schema_version = 3;
142                if ($schema_version < $new_schema_version)
143                {
144                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
145                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
146                        $sql .= "DROP INDEX idx_unique_email_and_account_origin;\n";
147                        $sql .= "ALTER TABLE users DROP CONSTRAINT check_email_not_empty;\n";
148                }
149
150                $new_schema_version = 4;
151                if ($schema_version < $new_schema_version)
152                {
153                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
154                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
155                        $sql .= "ALTER TABLE users ALTER COLUMN account_origin SET NOT NULL;\n";
156                        $sql .= "ALTER TABLE users ADD CONSTRAINT check_account_origin_not_empty CHECK (account_origin::text <> ''::text);\n";
157
158                        //We must skip all other updates because schema 5 must be manually updated:
159                        $schema_version = 1000000;
160                }
161
162                $new_schema_version = 5;
163                if ($schema_version == $new_schema_version -1)
164                {
165                        echo "<h1>Recoding database from ISO-8859-1 to UTF-8</h1>";
166                        echo "<h1>YOU MUST EXECUTE THESE COMMANDS FROM THE COMMAND_LINE:</h1>";
167                        echo "pg_dump wifidog -U wifidog > wifidog_dump.sql;<br>";
168                        echo "dropdb wifidog -U wifidog; <br>";
169                        echo "createdb --encoding=UNICODE --template=template0 -U wifidog wifidog;<br>";
170                        echo "psql wifidog -U wifidog < wifidog_dump.sql;<br>\n";
171                        echo " (Note: You may ignore the following errors:  \"ERROR:  permission denied to set session authorization\" and \"ERROR:  must be owner of schema public\")<br>";
172                        echo "psql wifidog -U wifidog -c \"UPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version'\";<br>";
173                        exit;
174                }
175                $new_schema_version = 6;
176                if ($schema_version < $new_schema_version)
177                {
178
179                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
180                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
181                        $sql .= "CREATE TABLE locales ( \n";
182                        $sql .= "  locales_id text PRIMARY KEY \n";
183                        $sql .= "  ); \n";
184                        $sql .= "  INSERT INTO locales VALUES ('fr'); \n";
185                        $sql .= "  INSERT INTO locales VALUES ('en'); \n";
186                        $sql .= "ALTER TABLE users ADD COLUMN never_show_username bool;\n";
187                        $sql .= "ALTER TABLE users ALTER COLUMN never_show_username SET DEFAULT FALSE;\n";
188                        $sql .= "ALTER TABLE users ADD COLUMN real_name text;\n";
189                        $sql .= "ALTER TABLE users ALTER COLUMN real_name SET DEFAULT NULL;\n";
190                        $sql .= "ALTER TABLE users ADD COLUMN website text;\n";
191                        $sql .= "ALTER TABLE users ALTER COLUMN website SET DEFAULT NULL;\n";
192                        $sql .= "ALTER TABLE users ADD COLUMN prefered_locale text REFERENCES locales ON DELETE SET NULL ON UPDATE CASCADE;\n";
193
194                        $sql .= "                       
195                        CREATE TABLE content
196                        (
197                        content_id text NOT NULL PRIMARY KEY,
198                        content_type text NOT NULL  CONSTRAINT content_type_not_empty_string CHECK (content_type != ''),
199                        title text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
200                        description text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
201                        project_info text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
202                        sponsor_info text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE,
203                        creation_timestamp timestamp DEFAULT now()
204                        );
205
206                        CREATE TABLE content_has_owners
207                        (
208                        content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
209                        user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
210                        is_author bool NOT NULL,
211                        owner_since timestamp DEFAULT now(),
212                        PRIMARY KEY  (content_id, user_id)
213                        );
214                       
215                        CREATE TABLE langstring_entries (
216                          langstring_entries_id text NOT NULL PRIMARY KEY,
217                          langstrings_id text REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
218                          locales_id text REFERENCES locales ON DELETE RESTRICT ON UPDATE CASCADE,
219                          value text  DEFAULT ''
220                        );
221                       
222                        CREATE TABLE content_group (
223                          content_group_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
224                          is_artistic_content bool NOT NULL DEFAULT FALSE,
225                          is_locative_content bool NOT NULL DEFAULT FALSE,
226                          content_selection_mode text
227                        );
228                       
229                        CREATE TABLE content_group_element (
230                          content_group_element_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
231                          content_group_id text NOT NULL REFERENCES content_group ON DELETE CASCADE ON UPDATE CASCADE,
232                          display_order integer DEFAULT '1',
233                          displayed_content_id text REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
234                          force_only_allowed_node bool
235                        );
236                        CREATE INDEX idx_content_group_element_content_group_id ON content_group_element (content_group_id);
237                       
238                        CREATE TABLE content_group_element_has_allowed_nodes
239                        (
240                        content_group_element_id text NOT NULL REFERENCES content_group_element ON DELETE CASCADE ON UPDATE CASCADE,
241                        node_id text NOT NULL REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
242                        allowed_since timestamp DEFAULT now(),
243                        PRIMARY KEY  (content_group_element_id, node_id)
244                        );
245                       
246                        CREATE TABLE content_group_element_portal_display_log (
247                          user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
248                          content_group_element_id text NOT NULL REFERENCES content_group_element ON DELETE CASCADE ON UPDATE CASCADE,
249                          display_timestamp timestamp NOT NULL DEFAULT now(),
250                          node_id text REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
251                          PRIMARY KEY  (user_id,content_group_element_id, display_timestamp)
252                        );
253                       
254                        CREATE TABLE user_has_content (
255                          user_id text NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE,
256                          content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
257                          subscribe_timestamp timestamp NOT NULL DEFAULT now(),
258                          PRIMARY KEY  (user_id,content_id)
259                        );
260                       
261                        CREATE TABLE node_has_content (
262                          node_id text NOT NULL REFERENCES nodes ON DELETE CASCADE ON UPDATE CASCADE,
263                          content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
264                          subscribe_timestamp timestamp NOT NULL DEFAULT now(),
265                          PRIMARY KEY  (node_id,content_id)
266                        );
267                       
268                        CREATE TABLE network_has_content (
269                          network_id text NOT NULL,
270                          content_id text NOT NULL REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,
271                          subscribe_timestamp timestamp NOT NULL DEFAULT now(),
272                          PRIMARY KEY  (network_id,content_id)
273                        );";
274                }
275               
276                $new_schema_version = 7;
277                if ($schema_version < $new_schema_version)
278                {
279
280                        echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>";
281                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
282                        $sql .= "ALTER TABLE content ADD COLUMN is_persistent bool;\n";
283                        $sql .= "ALTER TABLE content ALTER COLUMN is_persistent SET DEFAULT FALSE;\n";
284                       
285                }
286       
287        $new_schema_version = 8;
288        if($schema_version < $new_schema_version)
289        {
290            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>"; 
291                        $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
292            $sql .=
293            "CREATE TABLE flickr_photostream
294            (
295              flickr_photostream_id text NOT NULL,
296              api_key text,
297              photo_selection_mode text NOT NULL DEFAULT 'PSM_GROUP'::text,
298              user_id text,
299              user_name text,
300              tags text,
301              tag_mode varchar(10) DEFAULT 'any'::character varying,
302              group_id text,
303              random bool NOT NULL DEFAULT true,
304              min_taken_date timestamp,
305              max_taken_date timestamp,
306              photo_batch_size int4 DEFAULT 10,
307              photo_count int4 DEFAULT 1,
308              display_title bool NOT NULL DEFAULT true,
309              display_description bool NOT NULL DEFAULT false,
310              display_tags bool NOT NULL DEFAULT false,
311              CONSTRAINT flickr_photostream_pkey PRIMARY KEY (flickr_photostream_id),
312              CONSTRAINT flickr_photostream_content_group_fkey FOREIGN KEY (flickr_photostream_id) REFERENCES content_group (content_group_id) ON UPDATE CASCADE ON DELETE CASCADE
313            );";
314        }
315       
316        $new_schema_version = 9;
317        if($schema_version < $new_schema_version)
318        {
319            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>"; 
320                $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
321            $sql .=
322            "CREATE TABLE files
323            (
324              files_id text NOT NULL,
325              filename text,
326              mime_type text,
327              binary_data bytea,
328              remote_size int8,
329              CONSTRAINT files_pkey PRIMARY KEY (files_id)
330            );";
331        }
332       
333        $new_schema_version = 10;
334        if($schema_version < $new_schema_version)
335        {
336            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>"; 
337                $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
338            $sql .= "ALTER TABLE files ADD COLUMN url text;";
339            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN preferred_size text;";
340            $sql .= "CREATE TABLE embedded_content (
341                                embedded_content_id text NOT NULL,
342                                embedded_file_id text,
343                                fallback_content_id text,
344                            parameters text,
345                            attributes text
346                        );";
347        }
348       
349               $new_schema_version = 11;
350        if($schema_version < $new_schema_version)
351        {
352            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>"; 
353                $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n";
354            $sql .= "DROP TABLE content_group_element_portal_display_log;\n";
355            $sql .= "CREATE TABLE content_display_log
356(
357  user_id text NOT NULL REFERENCES users ON UPDATE CASCADE ON DELETE CASCADE,
358  content_id text NOT NULL REFERENCES content ON UPDATE CASCADE ON DELETE CASCADE,
359  first_display_timestamp timestamp NOT NULL DEFAULT now(),
360  node_id text NOT NULL REFERENCES nodes ON UPDATE CASCADE ON DELETE CASCADE,
361  last_display_timestamp timestamp NOT NULL DEFAULT now(),
362  CONSTRAINT content_group_element_portal_display_log_pkey PRIMARY KEY (user_id, content_id, node_id)
363); \n";
364           
365        } 
366       
367        $new_schema_version = 12;
368        if($schema_version < $new_schema_version)
369        {
370            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
371            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
372            $sql .= "ALTER TABLE flickr_photostream DROP CONSTRAINT flickr_photostream_content_group_fkey;";
373            $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;";
374        }
375       
376        $new_schema_version = 13;
377        if($schema_version < $new_schema_version)
378        {
379            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
380            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
381                        $sql .= "ALTER TABLE content_group DROP COLUMN content_selection_mode;\n";
382                        $sql .= "ALTER TABLE content_group ADD COLUMN content_changes_on_mode text;\n";
383                        $sql .= "UPDATE content_group SET content_changes_on_mode='ALWAYS';\n";
384                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_changes_on_mode SET DEFAULT 'ALWAYS';\n";
385                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_changes_on_mode SET NOT NULL;\n";
386                        $sql .= "ALTER TABLE content_group ADD COLUMN content_ordering_mode text;\n";
387                        $sql .= "UPDATE content_group SET content_ordering_mode='RANDOM';\n";
388                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_ordering_mode SET DEFAULT 'RANDOM';\n";
389                        $sql .= "ALTER TABLE content_group ALTER COLUMN content_ordering_mode SET NOT NULL;\n";
390
391                        $sql .= "ALTER TABLE content_group ADD COLUMN display_num_elements int;\n";
392                                                $sql .= "UPDATE content_group SET display_num_elements=1;\n";
393                        $sql .= "ALTER TABLE content_group ALTER COLUMN display_num_elements SET DEFAULT '1';\n";
394                        $sql .= "ALTER TABLE content_group ALTER COLUMN display_num_elements SET NOT NULL;\n";
395                        $sql .= "ALTER TABLE content_group ADD CONSTRAINT display_at_least_one_element CHECK (display_num_elements > 0);\n";
396                       
397                        $sql .= "ALTER TABLE content_group ADD COLUMN allow_repeat text;\n";
398                                                $sql .= "UPDATE content_group SET allow_repeat='YES';\n";
399                        $sql .= "ALTER TABLE content_group ALTER COLUMN allow_repeat SET DEFAULT 'YES';\n";
400                        $sql .= "ALTER TABLE content_group ALTER COLUMN allow_repeat SET NOT NULL;\n";
401                }
402               
403                $new_schema_version = 14;
404        if($schema_version < $new_schema_version)
405        {
406            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
407            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
408            $sql .= "CREATE TABLE pictures " .
409                        "( " .
410                        "pictures_id text NOT NULL PRIMARY KEY REFERENCES files ON DELETE CASCADE ON UPDATE CASCADE, " .
411                        "width int4, ".
412                        "height int4".
413                        ");\n";
414        }
415       
416        $new_schema_version = 15;
417        if($schema_version < $new_schema_version)
418        {
419            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
420            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
421            $sql .= "ALTER TABLE files ADD COLUMN data_blob oid;
422                    ALTER TABLE files ADD COLUMN local_binary_size int8;
423                    ALTER TABLE files DROP COLUMN binary_data;\n";
424        }       
425       
426        $new_schema_version = 16;
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 .= "ALTER TABLE flickr_photostream ADD COLUMN requests_cache text; \n";
432            $sql .= "ALTER TABLE flickr_photostream ADD COLUMN cache_update_timestamp timestamp; \n";
433        }
434       
435        $new_schema_version = 17;
436        if($schema_version < $new_schema_version)
437        {
438            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
439            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
440            $sql .= "ALTER TABLE nodes ADD COLUMN max_monthly_incoming int8; \n";
441            $sql .= "ALTER TABLE nodes ADD COLUMN max_monthly_outgoing int8; \n";
442            $sql .= "ALTER TABLE nodes ADD COLUMN quota_reset_day_of_month int4; \n";
443        }
444       
445        $new_schema_version = 18;
446        if($schema_version < $new_schema_version)
447        {
448            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
449            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
450            $sql .= "ALTER TABLE content ADD COLUMN long_description text REFERENCES content ON DELETE RESTRICT ON UPDATE CASCADE;\n";
451        }
452       
453        $new_schema_version = 19;
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 .= "CREATE TABLE iframes (";
459            $sql .= "iframes_id text NOT NULL PRIMARY KEY REFERENCES content ON DELETE CASCADE ON UPDATE CASCADE,";
460            $sql .= "url text,";
461            $sql .= "width int4,";
462            $sql .= "height int4";
463            $sql .= ");\n";
464        }
465       
466        $new_schema_version = 20;
467        if($schema_version < $new_schema_version)
468        {
469            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
470            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
471            $sql .= "ALTER TABLE nodes ADD COLUMN latitude NUMERIC(16, 6);\n";
472            $sql .= "ALTER TABLE nodes ADD COLUMN longitude NUMERIC(16, 6);\n";
473        }
474       
475                       
476                $new_schema_version = 21;
477        if($schema_version < $new_schema_version)
478        {
479            echo "<h2>Preparing SQL statements to update schema to version  $new_schema_version</h2>\n";
480            $sql .= "\n\nUPDATE schema_info SET value='$new_schema_version' WHERE tag='schema_version';\n"; 
481            $sql .= "CREATE TABLE content_rss_aggregator " .
482                        "( " .
483                        "content_id text NOT NULL PRIMARY KEY REFERENCES content ON UPDATE CASCADE ON DELETE CASCADE, " .
484                        "number_of_display_items integer NOT NULL DEFAULT 10, " .
485                        "algorithm_strength real NOT NULL DEFAULT 0.75, ".
486                        "max_item_age interval DEFAULT NULL".
487                        ");\n";
488                $sql .= "CREATE TABLE content_rss_aggregator_feeds " .
489                        "( " .
490                        "content_id text NOT NULL REFERENCES content_rss_aggregator ON UPDATE CASCADE ON DELETE CASCADE, " .
491                        "url text, ".
492                        "bias real NOT NULL DEFAULT 1, ".
493                        "default_publication_interval int DEFAULT NULL, ".
494                        "PRIMARY KEY(content_id, url) " .
495                        ");\n";
496            $sql .= "ALTER TABLE content_has_owners ALTER COLUMN is_author SET DEFAULT 'f';\n";
497            $results=null;
498            $db->ExecSql("SELECT node_id, rss_url FROM nodes", $results, false);
499                        foreach ($results as $row)
500                        {
501                                if(!empty($row['rss_url']))
502{
503                                //$user_id = $db->EscapeString($row['user_id']);
504                                $content_id = get_guid();
505                                $sql .= "\nINSERT INTO content (content_id, content_type) VALUES ('$content_id', 'RssAggregator');\n";
506                                $sql .= "INSERT INTO content_rss_aggregator (content_id) VALUES ('$content_id');\n";
507                                $sql .= "INSERT INTO content_rss_aggregator_feeds (content_id, url) VALUES ('$content_id', '".$row['rss_url']."');\n";
508                                $node = Node::getObject ($row['node_id']);
509                                $owners = $node->getOwners();
510                                foreach ($owners as $owner)
511                                {
512                                        $sql .= "INSERT INTO content_has_owners (content_id, user_id) VALUES ('$content_id', '".$owner->getId()."');\n";
513                                }
514                                $sql .= "INSERT INTO node_has_content (content_id, node_id) VALUES ('$content_id', '".$row['node_id']."');\n";
515                                }
516                        }
517                        $sql .= "\nALTER TABLE nodes DROP COLUMN rss_url;\n";
518                        $sql .= "\nDELETE FROM content WHERE content_type='HotspotRss';\n";                     
519                       
520                       
521        }
522                $db->ExecSqlUpdate("BEGIN;\n$sql\nCOMMIT;\n", true);
523                //$db->ExecSqlUpdate("BEGIN;\n$sql\nROLLBACK;\n", true);
524                echo "</html></head>";
525                exit ();
526        }
527}
528?>
Note: See TracBrowser for help on using the browser.