]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - scripts/upgrade.php
move fixup group uri code to upgrade.php
[quix0rs-gnu-social.git] / scripts / upgrade.php
1 #!/usr/bin/env php
2 <?php
3 /*
4  * StatusNet - a distributed open-source microblogging tool
5  * Copyright (C) 2008-2011 StatusNet, Inc.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Affero General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Affero General Public License for more details.
16  *
17  * You should have received a copy of the GNU Affero General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
22
23 $shortoptions = 'x::';
24 $longoptions = array('extensions=');
25
26 $helptext = <<<END_OF_UPGRADE_HELP
27 php upgrade.php [options]
28 Upgrade database schema and data to latest software
29
30 END_OF_UPGRADE_HELP;
31
32 require_once INSTALLDIR.'/scripts/commandline.inc';
33
34 function main()
35 {
36     updateSchemaCore();
37     updateSchemaPlugins();
38
39     // These replace old "fixup_*" scripts
40
41     fixupNoticeRendered();
42     fixupNoticeConversation();
43     fixupGroupURI();
44 }
45
46 function tableDefs()
47 {
48         $schema = array();
49         require INSTALLDIR.'/db/core.php';
50         return $schema;
51 }
52
53 function updateSchemaCore()
54 {
55     printfnq("Upgrading core schema...");
56
57     $schema = Schema::get();
58     $schemaUpdater = new SchemaUpdater($schema);
59     foreach (tableDefs() as $table => $def) {
60         $schemaUpdater->register($table, $def);
61     }
62     $schemaUpdater->checkSchema();
63
64     printfnq("DONE.\n");
65 }
66
67 function updateSchemaPlugins()
68 {
69     printfnq("Upgrading plugin schema...");
70
71     Event::handle('CheckSchema');
72
73     printfnq("DONE.\n");
74 }
75
76 function fixupNoticeRendered()
77 {
78     printfnq("Ensuring all notices have rendered HTML...");
79
80     $notice = new Notice();
81
82     $notice->whereAdd('rendered IS NULL');
83     $notice->find();
84
85     while ($notice->fetch()) {
86         $original = clone($notice);
87         $notice->rendered = common_render_content($notice->content, $notice);
88         $notice->update($original);
89     }
90
91     printfnq("DONE.\n");
92 }
93
94 function fixupNoticeConversation()
95 {
96     printfnq("Ensuring all notices have a conversation ID...");
97
98     $notice = new Notice();
99     $notice->whereAdd('conversation is null');
100     $notice->orderBy('id'); // try to get originals before replies
101     $notice->find();
102
103     while ($notice->fetch()) {
104         try {
105             $cid = null;
106     
107             $orig = clone($notice);
108     
109             if (empty($notice->reply_to)) {
110                 $notice->conversation = $notice->id;
111             } else {
112                 $reply = Notice::staticGet('id', $notice->reply_to);
113
114                 if (empty($reply)) {
115                     $notice->conversation = $notice->id;
116                 } else if (empty($reply->conversation)) {
117                     $notice->conversation = $notice->id;
118                 } else {
119                     $notice->conversation = $reply->conversation;
120                 }
121         
122                 unset($reply);
123                 $reply = null;
124             }
125
126             $result = $notice->update($orig);
127
128             $orig = null;
129             unset($orig);
130         } catch (Exception $e) {
131             printv("Error setting conversation: " . $e->getMessage());
132         }
133     }
134
135     printfnq("DONE.\n");
136 }
137
138 function fixupGroupURI()
139 {
140     printfnq("Ensuring all groups have an URI...");
141
142     $group = new User_group();
143     $group->whereAdd('uri IS NULL');
144
145     if ($group->find()) {
146         while ($group->fetch()) {
147             $orig = User_group::staticGet('id', $group->id);
148             $group->uri = $group->getUri();
149             $group->update($orig);
150         }
151     }
152
153     printfnq("DONE.\n");
154 }
155
156 main();