]> git.mxchange.org Git - friendica.git/blob - update.php
e1c5a0de0820d793ae20e5c17497f14a72927e42
[friendica.git] / update.php
1 <?php
2
3 define('UPDATE_VERSION' , 1235);
4
5 use Friendica\Core\Config;
6 use Friendica\Core\PConfig;
7 use Friendica\Core\Worker;
8
9 /**
10  *
11  * update.php - automatic system update
12  *
13  * Automatically update database schemas and any other development changes such that
14  * copying the latest files from the source code repository will always perform a clean
15  * and painless upgrade.
16  *
17  * Each function in this file is named update_nnnn() where nnnn is an increasing number
18  * which began counting at 1000.
19  *
20  * At the top of the file "boot.php" is a define for DB_UPDATE_VERSION. Any time there is a change
21  * to the database schema or one which requires an upgrade path from the existing application,
22  * the DB_UPDATE_VERSION and the UPDATE_VERSION at the top of this file are incremented.
23  *
24  * The current DB_UPDATE_VERSION is stored in the config area of the database. If the application starts up
25  * and DB_UPDATE_VERSION is greater than the last stored build number, we will process every update function
26  * in order from the currently stored value to the new DB_UPDATE_VERSION. This is expected to bring the system
27  * up to current without requiring re-installation or manual intervention.
28  *
29  * Once the upgrade functions have completed, the current DB_UPDATE_VERSION is stored as the current value.
30  * The DB_UPDATE_VERSION will always be one greater than the last numbered script in this file.
31  *
32  * If you change the database schema, the following are required:
33  *    1. Update the file include/dbstructure.php to match the new schema.
34  *    2. If there is a need for a post procession, update this file by adding a new function at the end with the number of the current DB_UPDATE_VERSION.
35  *       This function should perform some post procession steps but no database updates.
36  *    3. Increment the DB_UPDATE_VERSION in boot.php *AND* the UPDATE_VERSION in this file to match it
37  *    4. TEST the upgrade prior to checkin and filing a pull request.
38  *
39  * IMPORTANT!
40  * NEVER do a database change anymore in the update functions! Only do this in the file include/dbstructure.php!
41  */
42
43
44
45 function update_1000() {
46
47         q("ALTER TABLE `item` DROP `like`, DROP `dislike` ");
48
49         q("ALTER TABLE `item` ADD `verb` CHAR( 255 ) NOT NULL AFTER `body` ,
50                 ADD `object-type` CHAR( 255 ) NOT NULL AFTER `verb` ,
51                 ADD `object` TEXT NOT NULL AFTER `object-type` ");
52
53         q("ALTER TABLE `intro` ADD `duplex` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `knowyou` ");
54         q("ALTER TABLE `contact` ADD `duplex` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `rel` ");
55         q("ALTER TABLE `contact` CHANGE `issued-pubkey` `issued-pubkey` TEXTCHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
56         q("ALTER TABLE `contact` ADD `term-date` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `avatar-date`");
57 }
58
59 function update_1001() {
60         q("ALTER TABLE `item` ADD `wall` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `type` ");
61         q("ALTER TABLE `item` ADD INDEX ( `wall` )");
62 }
63
64 function update_1002() {
65         q("ALTER TABLE `item` ADD `gravity` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `wall` ");
66 }
67
68 function update_1003() {
69         q("ALTER TABLE `contact` DROP `issued-pubkey` , DROP `ret-id` , DROP `ret-pubkey` ");
70         q("ALTER TABLE `contact` ADD `usehub` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `ret-aes`");
71         q("ALTER TABLE `contact` ADD `hub-verify` CHAR( 255 ) NOT NULL AFTER `usehub`");
72         q("ALTER TABLE `contact` ADD INDEX ( `uid` ) ,  ADD INDEX ( `self` ),  ADD INDEX ( `issued-id` ),  ADD INDEX ( `dfrn-id` )");
73         q("ALTER TABLE `contact` ADD INDEX ( `blocked` ),   ADD INDEX ( `readonly` )");
74 }
75
76 function update_1004() {
77         q("ALTER TABLE `contact` ADD `subhub` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `usehub`");
78 }
79
80 function update_1005() {
81
82         q("ALTER TABLE `user` ADD `spubkey` TEXT NOT NULL AFTER `prvkey` ,
83                 ADD `sprvkey` TEXT NOT NULL AFTER `spubkey`");
84
85 }
86
87 function update_1006() {
88
89         // create 's' keys for everybody that does not have one
90
91         $r = q("SELECT * FROM `user` WHERE `spubkey` = '' ");
92         if (dbm::is_result($r)) {
93                 foreach ($r as $rr) {
94                         $sres=openssl_pkey_new(array('encrypt_key' => false ));
95                         $sprvkey = '';
96                         openssl_pkey_export($sres, $sprvkey);
97                         $spkey = openssl_pkey_get_details($sres);
98                         $spubkey = $spkey["key"];
99                         $r = q("UPDATE `user` SET `spubkey` = '%s', `sprvkey` = '%s'
100                                 WHERE `uid` = %d",
101                                 dbesc($spubkey),
102                                 dbesc($sprvkey),
103                                 intval($rr['uid'])
104                         );
105                 }
106         }
107 }
108
109 function update_1007() {
110         q("ALTER TABLE `user` ADD `page-flags` INT NOT NULL DEFAULT '0' AFTER `notify-flags`");
111         q("ALTER TABLE `user` ADD INDEX ( `nickname` )");
112 }
113
114 function update_1008() {
115         q("ALTER TABLE `profile` ADD `with` TEXT NOT NULL AFTER `marital` ");
116 }
117
118 function update_1009() {
119         q("ALTER TABLE `user` ADD `allow_location` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `default-location` ");
120 }
121
122 function update_1010() {
123         q("ALTER TABLE `contact` ADD `lrdd` CHAR( 255 ) NOT NULL AFTER `url` ");
124 }
125
126 function update_1011() {
127         q("ALTER TABLE `contact` ADD `nick` CHAR( 255 ) NOT NULL AFTER `name` ");
128         $r = q("SELECT * FROM `contact` WHERE 1");
129         if (dbm::is_result($r)) {
130                 foreach ($r as $rr) {
131                                 q("UPDATE `contact` SET `nick` = '%s' WHERE `id` = %d",
132                                         dbesc(basename($rr['url'])),
133                                         intval($rr['id'])
134                                 );
135                 }
136         }
137 }
138
139 function update_1012() {
140         q("ALTER TABLE `item` ADD `inform` MEDIUMTEXT NOT NULL AFTER `tag` ");
141 }
142
143 function update_1013() {
144         q("ALTER TABLE `item` ADD `target-type` CHAR( 255 ) NOT NULL
145                 AFTER `object` , ADD `target` TEXT NOT NULL AFTER `target-type`");
146 }
147
148 function update_1014() {
149         require_once('include/Photo.php');
150         q("ALTER TABLE `contact` ADD `micro` TEXT NOT NULL AFTER `thumb` ");
151         $r = q("SELECT * FROM `photo` WHERE `scale` = 4");
152         if (dbm::is_result($r)) {
153                 foreach ($r as $rr) {
154                         $ph = new Photo($rr['data']);
155                         if ($ph->is_valid()) {
156                                 $ph->scaleImage(48);
157                                 $ph->store($rr['uid'],$rr['contact-id'],$rr['resource-id'],$rr['filename'],$rr['album'],6,(($rr['profile']) ? 1 : 0));
158                         }
159                 }
160         }
161         $r = q("SELECT * FROM `contact` WHERE 1");
162         if (dbm::is_result($r)) {
163                 foreach ($r as $rr) {
164                         if(stristr($rr['thumb'],'avatar'))
165                                 q("UPDATE `contact` SET `micro` = '%s' WHERE `id` = %d",
166                                         dbesc(str_replace('avatar','micro',$rr['thumb'])),
167                                         intval($rr['id']));
168                         else
169                                 q("UPDATE `contact` SET `micro` = '%s' WHERE `id` = %d",
170                                         dbesc(str_replace('5.jpg','6.jpg',$rr['thumb'])),
171                                         intval($rr['id']));
172                 }
173         }
174 }
175
176 function update_1015() {
177         q("ALTER TABLE `item` CHANGE `body` `body` mediumtext NOT NULL");
178 }
179
180 function update_1016() {
181         q("ALTER TABLE `user` ADD `openid` CHAR( 255 ) NOT NULL AFTER `email` ");
182 }
183
184 function update_1017() {
185
186         q(" CREATE TABLE IF NOT EXISTS `clients` (
187 `client_id` VARCHAR( 20 ) NOT NULL ,
188 `pw` VARCHAR( 20 ) NOT NULL ,
189 `redirect_uri` VARCHAR( 200 ) NOT NULL ,
190 PRIMARY KEY ( `client_id` )
191 ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
192
193         q(" CREATE TABLE IF NOT EXISTS `tokens` (
194 `id` VARCHAR( 40 ) NOT NULL ,
195 `client_id` VARCHAR( 20 ) NOT NULL ,
196 `expires` INT NOT NULL ,
197 `scope` VARCHAR( 200 ) NOT NULL ,
198 PRIMARY KEY ( `id` )
199 ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
200
201         q("CREATE TABLE IF NOT EXISTS `auth_codes` (
202 `id` VARCHAR( 40 ) NOT NULL ,
203 `client_id` VARCHAR( 20 ) NOT NULL ,
204 `redirect_uri` VARCHAR( 200 ) NOT NULL ,
205 `expires` INT NOT NULL ,
206 `scope` VARCHAR( 250 ) NOT NULL ,
207 PRIMARY KEY ( `id` )
208 ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
209
210 }
211
212 function update_1018() {
213         q("CREATE TABLE IF NOT EXISTS `queue` (
214 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
215 `cid` INT NOT NULL ,
216 `created` DATETIME NOT NULL ,
217 `last` DATETIME NOT NULL ,
218 `content` MEDIUMTEXT NOT NULL
219 ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
220 }
221
222 function update_1019() {
223         q("ALTER TABLE `mail` DROP `delivered`");
224         q("ALTER TABLE `profile` ADD `showwith` TINYINT(1) NOT NULL DEFAULT '0' AFTER `marital` ");
225 }
226
227 function update_1020() {
228         q("ALTER TABLE `profile` DROP `showwith`");
229         q("ALTER TABLE `item` ADD `thr-parent` CHAR( 255 ) NOT NULL AFTER `parent-uri` ");
230 }
231
232 function update_1021() {
233         q("ALTER TABLE `profile_check` ADD `sec` CHAR( 255 ) NOT NULL AFTER `dfrn_id` ");
234         q("ALTER TABLE `profile_check` ADD `cid` INT(10) unsigned  NOT NULL DEFAULT '0' AFTER `uid`");
235         q("ALTER TABLE `item` ADD `private` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `deny_gid` ");
236 }
237
238 function update_1022() {
239         q("CREATE TABLE `pconfig` (
240                 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
241                 `uid` INT NOT NULL DEFAULT '0',
242                 `cat` CHAR( 255 ) NOT NULL ,
243                 `k` CHAR( 255 ) NOT NULL ,
244                 `v` MEDIUMTEXT NOT NULL
245                 ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci ");
246 }
247
248 function update_1023() {
249         q("ALTER TABLE `user` ADD `register_date` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `timezone` ,
250         ADD `login_date` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `register_date` ");
251 }
252
253 function update_1024() {
254         q("ALTER TABLE `profile` ADD `keywords` TEXT NOT NULL AFTER `religion` ");
255 }
256
257 function update_1025() {
258         q("ALTER TABLE `user` ADD `maxreq` int(11) NOT NULL DEFAULT '10' AFTER `pwdreset` ");
259 }
260
261 function update_1026() {
262         q("CREATE TABLE IF NOT EXISTS `hook` (
263         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
264         `hook` CHAR( 255 ) NOT NULL ,
265         `file` CHAR( 255 ) NOT NULL ,
266         `function` CHAR( 255 ) NOT NULL
267         ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
268 }
269
270
271 function update_1027() {
272         q("CREATE TABLE IF NOT EXISTS `addon` (
273         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
274         `name` CHAR( 255 ) NOT NULL ,
275         `version` CHAR( 255 ) NOT NULL ,
276         `installed` TINYINT( 1 ) NOT NULL DEFAULT '0'
277         ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
278 }
279
280 function update_1028() {
281         q("ALTER TABLE `user` ADD `openidserver` text NOT NULL AFTER `deny_gid` ");
282 }
283
284 function update_1029() {
285         q("ALTER TABLE `contact` ADD `info` MEDIUMTEXT NOT NULL AFTER `reason` ");
286 }
287
288 function update_1030() {
289         q("ALTER TABLE `contact` ADD `bdyear` CHAR( 4 ) NOT NULL COMMENT 'birthday notify flag' AFTER `profile-id` ");
290
291         q("CREATE TABLE IF NOT EXISTS `event` (
292         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
293         `uid` INT NOT NULL ,
294         `cid` INT NOT NULL ,
295         `created` DATETIME NOT NULL ,
296         `edited` DATETIME NOT NULL ,
297         `start` DATETIME NOT NULL ,
298         `finish` DATETIME NOT NULL ,
299         `desc` TEXT NOT NULL ,
300         `location` TEXT NOT NULL ,
301         `type` CHAR( 255 ) NOT NULL ,
302         `adjust` TINYINT( 1 ) NOT NULL DEFAULT '1',
303         `allow_cid` MEDIUMTEXT NOT NULL ,
304         `allow_gid` MEDIUMTEXT NOT NULL ,
305         `deny_cid` MEDIUMTEXT NOT NULL ,
306         `deny_gid` MEDIUMTEXT NOT NULL
307         ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
308
309
310 }
311
312 function update_1031() {
313         // Repair any bad links that slipped into the item table
314         $r = q("SELECT `id`, `object` FROM `item` WHERE `object` != '' ");
315         if (dbm::is_result($r)) {
316                 foreach ($r as $rr) {
317                         if (strstr($rr['object'],'type=&quot;http')) {
318                                 q("UPDATE `item` SET `object` = '%s' WHERE `id` = %d",
319                                         dbesc(str_replace('type=&quot;http','href=&quot;http',$rr['object'])),
320                                         intval($rr['id'])
321                                 );
322                         }
323                 }
324         }
325 }
326
327 function update_1032() {
328         q("ALTER TABLE `profile` ADD `pdesc` CHAR( 255 ) NOT NULL AFTER `name` ");
329 }
330
331 function update_1033() {
332         q("CREATE TABLE IF NOT EXISTS `cache` (
333                 `k` CHAR( 255 ) NOT NULL PRIMARY KEY ,
334                 `v` TEXT NOT NULL,
335                 `updated` DATETIME NOT NULL
336                 ) DEFAULT CHARSET=utf8 ");
337 }
338
339
340 function update_1034() {
341
342         /*
343          * If you have any of these parent-less posts they can cause problems, and
344          * we need to delete them. You can't see them anyway.
345          * Legitimate items will usually get re-created on the next
346          * pull from the hub.
347          * But don't get rid of a post that may have just come in
348          * and may not yet have the parent id set.
349          */
350         q("DELETE FROM `item` WHERE `parent` = 0 AND `created` < UTC_TIMESTAMP() - INTERVAL 2 MINUTE");
351
352 }
353
354
355 function update_1035() {
356
357         q("ALTER TABLE `contact` ADD `success_update` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `last-update` ");
358
359 }
360
361 function update_1036() {
362
363         $r = dbq("SELECT * FROM `contact` WHERE `network` = 'dfrn' AND `photo` LIKE '%include/photo%' ");
364         if (dbm::is_result($r)) {
365                 foreach ($r as $rr) {
366                         q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s' WHERE `id` = %d",
367                                 dbesc(str_replace('include/photo','photo',$rr['photo'])),
368                                 dbesc(str_replace('include/photo','photo',$rr['thumb'])),
369                                 dbesc(str_replace('include/photo','photo',$rr['micro'])),
370                                 intval($rr['id']));
371                 }
372         }
373 }
374
375 function update_1037() {
376
377         q("ALTER TABLE `contact` CHANGE `lrdd` `alias` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ");
378
379 }
380
381 function update_1038() {
382  q("ALTER TABLE `item` ADD `plink` CHAR( 255 ) NOT NULL AFTER `target` ");
383 }
384
385 function update_1039() {
386         q("ALTER TABLE `addon` ADD `timestamp` BIGINT NOT NULL DEFAULT '0'");
387 }
388
389
390 function update_1040() {
391
392         q("CREATE TABLE IF NOT EXISTS `fcontact` (
393         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
394         `url` CHAR( 255 ) NOT NULL ,
395         `name` CHAR( 255 ) NOT NULL ,
396         `photo` CHAR( 255 ) NOT NULL
397         ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
398
399         q("CREATE TABLE IF NOT EXISTS `ffinder` (
400         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
401         `uid` INT UNSIGNED NOT NULL ,
402         `cid` INT UNSIGNED NOT NULL ,
403         `fid` INT UNSIGNED NOT NULL
404         ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
405
406 }
407
408 function update_1041() {
409         q("ALTER TABLE `profile` CHANGE `keywords` `prv_keywords` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ");
410         q("ALTER TABLE `profile` ADD `pub_keywords` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `religion` ");
411 }
412
413 function update_1042() {
414         q("ALTER TABLE `user` ADD `expire` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `maxreq` ");
415 }
416
417
418 function update_1043() {
419         q("ALTER TABLE `user` ADD `blockwall` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `blocked` ");
420 }
421
422 function update_1044() {
423         q("ALTER TABLE `profile` ADD FULLTEXT ( `pub_keywords` ) ");
424         q("ALTER TABLE `profile` ADD FULLTEXT ( `prv_keywords` ) ");
425 }
426
427 function update_1045() {
428         q("ALTER TABLE `user` ADD `language` CHAR( 16 ) NOT NULL DEFAULT 'en' AFTER `timezone` ");
429 }
430
431 function update_1046() {
432         q("ALTER TABLE `item` ADD `attach` MEDIUMTEXT NOT NULL AFTER `tag` ");
433 }
434
435 function update_1047() {
436         q("ALTER TABLE `contact` ADD `writable` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `readonly` ");
437 }
438
439 function update_1048() {
440         q("UPDATE `contact` SET `writable` = 1 WHERE `network` = 'stat' AND `notify` != '' ");
441 }
442
443 function update_1049() {
444         q("CREATE TABLE `mailacct` (
445         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
446         `uid` INT NOT NULL,
447         `server` CHAR( 255 ) NOT NULL ,
448         `user` CHAR( 255 ) NOT NULL ,
449         `pass` CHAR( 255 ) NOT NULL ,
450         `reply_to` CHAR( 255 ) NOT NULL ,
451         `last_check` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00'
452         ) ENGINE = MYISAM ");
453 }
454
455 function update_1050() {
456         q("CREATE TABLE `attach` (
457         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
458         `uid` INT NOT NULL ,
459         `filetype` CHAR( 64 ) NOT NULL ,
460         `filesize` INT NOT NULL ,
461         `data` LONGBLOB NOT NULL ,
462         `created` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
463         `edited` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
464         `allow_cid` MEDIUMTEXT NOT NULL ,
465         `allow_gid` MEDIUMTEXT NOT NULL ,
466         `deny_cid` MEDIUMTEXT NOT NULL ,
467         `deny_gid` MEDIUMTEXT NOT NULL
468         ) ENGINE = MYISAM ");
469
470 }
471
472 function update_1051() {
473         q("ALTER TABLE `mailacct` ADD `port` INT NOT NULL AFTER `server` ,
474                 ADD `ssltype` CHAR( 16 ) NOT NULL AFTER `port` ,
475                 ADD `mailbox` CHAR( 255 ) NOT NULL AFTER `ssltype` ");
476
477         q("ALTER TABLE `contact` ADD `addr` CHAR( 255 ) NOT NULL AFTER `url` ");
478 }
479
480 function update_1052() {
481         q("ALTER TABLE `mailacct` CHANGE `pass` `pass` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
482         q("ALTER TABLE `mailacct` ADD `pubmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `reply_to` ");
483         q("ALTER TABLE `item` ADD `pubmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `private` ");
484 }
485
486
487 function update_1053() {
488         q("ALTER TABLE `item` ADD `extid` CHAR( 255 ) NOT NULL AFTER `parent-uri` , ADD INDEX ( `extid` ) ");
489 }
490
491 function update_1054() {
492         q("ALTER TABLE `register` ADD `language` CHAR( 16 ) NOT NULL AFTER `password` ");
493 }
494
495 function update_1055() {
496         q("ALTER TABLE `profile` ADD `hidewall` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `hide-friends` ");
497 }
498
499 function update_1056() {
500         q("ALTER TABLE `attach` ADD `hash` CHAR( 64 ) NOT NULL AFTER `uid` ");
501 }
502
503 function update_1057() {
504         q("ALTER TABLE `attach` ADD `filename` CHAR( 255 ) NOT NULL AFTER `hash` ");
505 }
506
507 function update_1058() {
508         q("ALTER TABLE `item` ADD `event-id` INT NOT NULL AFTER `resource-id` ");
509 }
510
511 function update_1059() {
512         q("ALTER TABLE `queue` ADD `network` CHAR( 32 ) NOT NULL AFTER `cid` ");
513 }
514
515 function update_1060() {
516         q("ALTER TABLE `event` ADD `uri` CHAR( 255 ) NOT NULL AFTER `cid` ");
517 }
518
519 function update_1061() {
520         q("ALTER TABLE `event` ADD `nofinish` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `type` ");
521 }
522
523 function update_1062() {
524         q("ALTER TABLE `user` ADD `prvnets` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `page-flags` ");
525 }
526 function update_1063() {
527         q("ALTER TABLE `addon` ADD `plugin_admin` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `timestamp` ");
528 }
529
530 function update_1064() {
531         q("ALTER TABLE `item` ADD `app` CHAR( 255 ) NOT NULL AFTER `body` ");
532 }
533
534 function update_1065() {
535         q("ALTER TABLE `intro` ADD `fid` INT NOT NULL DEFAULT '0' AFTER `uid`");
536 }
537
538 function update_1066() {
539         $r = q("ALTER TABLE `item` ADD `received` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `edited` ");
540         if($r)
541                 q("ALTER TABLE `item` ADD INDEX ( `received` ) ");
542
543         $r = q("UPDATE `item` SET `received` = `edited` WHERE 1");
544 }
545
546 function update_1067() {
547         q("ALTER TABLE `ffinder` ADD `type` CHAR( 16 ) NOT NULL AFTER `id` ,
548         ADD `note` TEXT NOT NULL AFTER `type` ");
549 }
550
551 function update_1068() {
552         // 1067 was short-sighted. Undo it.
553         q("ALTER TABLE `ffinder` DROP `type` , DROP `note` ");
554
555         // and do this instead.
556
557         q("CREATE TABLE IF NOT EXISTS `fsuggest` (
558         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
559         `uid` INT NOT NULL ,
560         `cid` INT NOT NULL ,
561         `name` CHAR( 255 ) NOT NULL ,
562         `url` CHAR( 255 ) NOT NULL ,
563         `photo` CHAR( 255 ) NOT NULL ,
564         `note` TEXT NOT NULL ,
565         `created` DATETIME NOT NULL
566         ) ENGINE = MYISAM DEFAULT CHARSET=utf8");
567
568 }
569
570 function update_1069() {
571         q("ALTER TABLE `fsuggest` ADD `request` CHAR( 255 ) NOT NULL AFTER `url` ");
572         q("ALTER TABLE `fcontact` ADD `request` CHAR( 255 ) NOT NULL AFTER `photo` ");
573 }
574
575 // mail body needs to accomodate private photos
576
577 function update_1070() {
578         q("ALTER TABLE `mail` CHANGE `body` `body` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ");
579 }
580
581 function update_1071() {
582         q("ALTER TABLE `photo` ADD INDEX ( `uid` ) ");
583         q("ALTER TABLE `photo` ADD INDEX ( `resource-id` ) ");
584         q("ALTER TABLE `photo` ADD INDEX ( `album` ) ");
585         q("ALTER TABLE `photo` ADD INDEX ( `scale` ) ");
586         q("ALTER TABLE `photo` ADD INDEX ( `profile` ) ");
587
588 }
589
590 function update_1072() {
591         q("ALTER TABLE `item` ADD `starred` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `visible` ");
592         q("ALTER TABLE `item` ADD INDEX ( `starred` ) ");
593 }
594
595 function update_1073() {
596         q("ALTER TABLE `contact` ADD `remote_self` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `self` ");
597 }
598
599 function update_1074() {
600         q("ALTER TABLE `user` ADD `hidewall` TINYINT( 1) NOT NULL DEFAULT '0' AFTER `blockwall` ");
601         $r = q("SELECT `uid` FROM `profile` WHERE `is-default` = 1 AND `hidewall` = 1");
602         if (dbm::is_result($r)) {
603                 foreach($r as $rr)
604                         q("UPDATE `user` SET `hidewall` = 1 WHERE `uid` = %d",
605                                 intval($rr['uid'])
606                         );
607         }
608         q("ALTER TABLE `profile` DROP `hidewall`");
609 }
610
611 function update_1075() {
612         q("ALTER TABLE `user` ADD `guid` CHAR( 16 ) NOT NULL AFTER `uid` ");
613         $r = q("SELECT `uid` FROM `user` WHERE 1");
614         if (dbm::is_result($r)) {
615                 foreach ($r as $rr) {
616                         $found = true;
617                         do {
618                                 $guid = substr(random_string(),0,16);
619                                 $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1",
620                                         dbesc($guid)
621                                 );
622                                 if(! count($x))
623                                         $found = false;
624                         } while ($found == true );
625
626                         q("UPDATE `user` SET `guid` = '%s' WHERE `uid` = %d",
627                                 dbesc($guid),
628                                 intval($rr['uid'])
629                         );
630                 }
631         }
632 }
633
634 function update_1076() {
635         q("CREATE TABLE `guid` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
636                 `guid` CHAR( 16 ) NOT NULL , INDEX ( `guid` ) ) ENGINE = MYISAM ");
637
638 }
639
640 // There was a typo in 1076 so we'll try again in 1077 to make sure
641 // We'll also make it big enough to allow for future growth, I seriously
642 // doubt Diaspora will be able to leave guids at 16 bytes,
643 // and we can also use the same structure for our own larger guids
644
645 function update_1077() {
646         q("CREATE TABLE IF NOT EXISTS `guid` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
647                 `guid` CHAR( 16 ) NOT NULL , INDEX ( `guid` ) ) ENGINE = MYISAM ");
648
649         q("ALTER TABLE `guid` CHANGE `guid` `guid` CHAR( 64 ) NOT NULL");
650 }
651
652 function update_1078() {
653         q("ALTER TABLE `item` ADD `guid` CHAR( 64 ) NOT NULL AFTER `id` , ADD INDEX ( `guid` ) ");
654 }
655
656 function update_1079() {
657         q("CREATE TABLE IF NOT EXISTS `sign` (
658         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
659         `iid` INT UNSIGNED NOT NULL ,
660         `signed_text` MEDIUMTEXT NOT NULL ,
661         `signature` TEXT NOT NULL ,
662         `signer` CHAR( 255 ) NOT NULL ,
663         INDEX ( `iid` )
664         ) ENGINE = MYISAM ");
665
666         q("ALTER TABLE `fcontact` ADD `nick` CHAR( 255 ) NOT NULL ,
667         ADD `addr` CHAR( 255 ) NOT NULL ,
668         ADD `notify` CHAR( 255 ) NOT NULL ,
669         ADD `poll` CHAR( 255 ) NOT NULL ,
670         ADD `confirm` CHAR( 255 ) NOT NULL ,
671         ADD `priority` TINYINT( 1 ) NOT NULL ,
672         ADD `network` CHAR( 32 ) NOT NULL ,
673         ADD `alias` CHAR( 255 ) NOT NULL ,
674         ADD `pubkey` TEXT NOT NULL ,
675         ADD INDEX ( `addr` ) ,
676         ADD INDEX ( `network` ) ");
677
678 }
679
680 function update_1080() {
681         q("ALTER TABLE `fcontact` ADD `updated` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00'");
682 }
683
684 function update_1081() {
685         // there was a typo in update 1081 so it was corrected and moved up to 1082
686 }
687
688 function update_1082() {
689         q("ALTER TABLE `photo` ADD `guid` CHAR( 64 ) NOT NULL AFTER `contact-id`,
690                 ADD INDEX ( `guid` )  ");
691         // make certain the following code is only executed once
692         $r = q("select `id` from `photo` where `guid` != '' limit 1");
693         if (dbm::is_result($r))
694                 return;
695         $r = q("SELECT distinct(`resource-id`) FROM `photo` WHERE 1 group by `id`");
696         if (dbm::is_result($r)) {
697                 foreach ($r as $rr) {
698                         $guid = get_guid();
699                         q("update `photo` set `guid` = '%s' where `resource-id` = '%s'",
700                                 dbesc($guid),
701                                 dbesc($rr['resource-id'])
702                         );
703                 }
704         }
705 }
706
707 function update_1083() {
708         q("CREATE TABLE IF NOT EXISTS `deliverq` (
709         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
710         `cmd` CHAR( 32 ) NOT NULL ,
711         `item` INT NOT NULL ,
712         `contact` INT NOT NULL
713         ) ENGINE = MYISAM ");
714
715 }
716
717 function update_1084() {
718         q("ALTER TABLE `contact` ADD `attag` CHAR( 255 ) NOT NULL AFTER `nick` ");
719 }
720
721 function update_1085() {
722         q("CREATE TABLE IF NOT EXISTS `search` (
723         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
724         `uid` INT NOT NULL ,
725         `term` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
726         INDEX ( `uid` ),
727         INDEX ( `term` )
728         ) ENGINE = MYISAM ");
729 }
730
731 function update_1086() {
732         q("ALTER TABLE `item` ADD `bookmark` tinyint(1) NOT NULL DEFAULT '0' AFTER `starred` ");
733 }
734
735 function update_1087() {
736         q("ALTER TABLE `item` ADD `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `edited` ");
737
738         $r = q("SELECT `id` FROM `item` WHERE `parent` = `id` ");
739         if (dbm::is_result($r)) {
740                 foreach ($r as $rr) {
741                         $x = q("SELECT max(`created`) AS `cdate` FROM `item` WHERE `parent` = %d LIMIT 1",
742                                 intval($rr['id'])
743                         );
744                         if(count($x))
745                                 q("UPDATE `item` SET `commented` = '%s' WHERE `id` = %d",
746                                         dbesc($x[0]['cdate']),
747                                         intval($rr['id'])
748                                 );
749                 }
750         }
751 }
752
753 function update_1088() {
754         q("ALTER TABLE `user` ADD `account_expired` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `expire` ,
755                 ADD `account_expires_on` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `account_expired` ,
756                 ADD `expire_notification_sent` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `account_expires_on` ");
757 }
758
759 function update_1089() {
760         q("ALTER TABLE `user` ADD `blocktags` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `hidewall` ");
761 }
762
763 function update_1090() {
764         q("ALTER TABLE `contact` ADD `batch` char(255) NOT NULL AFTER `prvkey` ");
765
766         q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' ");
767
768 }
769
770 function update_1091() {
771
772         // catch a few stragglers that may have crept in before we added this on remote connects
773         q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' AND `batch` = '' ");
774         q("ALTER TABLE `queue` ADD `batch` TINYINT( 1 ) NOT NULL DEFAULT '0' ");
775         q("ALTER TABLE `fcontact` ADD `batch` char(255) NOT NULL AFTER `addr` ");
776
777 }
778
779 function update_1092() {
780         q("ALTER TABLE `user` ADD INDEX ( `login_date` ) ");
781         q("ALTER TABLE `user` ADD INDEX ( `account_expired` ) ");
782 }
783
784 function update_1093() {
785         q("CREATE TABLE IF NOT EXISTS `fserver` (
786         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
787         `server` CHAR( 255 ) NOT NULL ,
788         `posturl` CHAR( 255 ) NOT NULL ,
789         `key` TEXT NOT NULL,
790         INDEX ( `server` )
791         ) ENGINE = MYISAM ");
792
793         q("ALTER TABLE `group` ADD `visible` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `uid` ");
794
795 }
796
797 function update_1094() {
798         q("ALTER TABLE `item` ADD `postopts` TEXT NOT NULL AFTER `target` ");
799 }
800
801 function update_1095() {
802         q("ALTER TABLE `contact` ADD `bd` DATE NOT NULL AFTER `bdyear` ");
803 }
804
805 function update_1096() {
806         q("ALTER TABLE `item` ADD `origin` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `deleted` , ADD INDEX ( `origin` ) ");
807 }
808
809 function update_1097() {
810         q("ALTER TABLE `queue`
811                 ADD INDEX (`cid`),
812                 ADD INDEX (`created`),
813                 ADD INDEX (`last`),
814                 ADD INDEX (`network`),
815                 ADD INDEX (`batch`)
816         ");
817 }
818
819 function update_1098() {
820         q("ALTER TABLE `contact`
821                 ADD INDEX (`network`),
822                 ADD INDEX (`name`),
823                 ADD INDEX (`nick`),
824                 ADD INDEX (`attag`),
825                 ADD INDEX (`url`),
826                 ADD INDEX (`addr`),
827                 ADD INDEX (`batch`)
828         ");
829 }
830
831 function update_1099() {
832         q("CREATE TABLE IF NOT EXISTS `gcontact` (
833         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
834         `name` CHAR( 255 ) NOT NULL ,
835         `url` CHAR( 255 ) NOT NULL ,
836         `nurl` CHAR( 255 ) NOT NULL ,
837         `photo` CHAR( 255 ) NOT NULL
838         ) ENGINE = MYISAM ");
839
840         q("CREATE TABLE IF NOT EXISTS `glink` (
841         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
842         `cid` INT NOT NULL ,
843         `uid` INT NOT NULL ,
844         `gcid` INT NOT NULL,
845         `updated` DATETIME NOT NULL
846         ) ENGINE = MYISAM ");
847
848         q("ALTER TABLE `gcontact` ADD INDEX (`nurl`) ");
849         q("ALTER TABLE `glink` ADD INDEX (`cid`), ADD INDEX (`uid`), ADD INDEX (`gcid`), ADD INDEX (`updated`) ");
850
851         q("ALTER TABLE `contact` ADD `poco` TEXT NOT NULL AFTER `confirm` ");
852
853 }
854
855 function update_1100() {
856         q("ALTER TABLE `contact` ADD `nurl` CHAR( 255 ) NOT NULL AFTER `url` ");
857         q("alter table contact add index (`nurl`) ");
858
859         require_once('include/text.php');
860
861         $r = q("select id, url from contact where url != '' and nurl = '' ");
862         if (dbm::is_result($r)) {
863                 foreach ($r as $rr) {
864                         q("update contact set nurl = '%s' where id = %d",
865                                 dbesc(normalise_link($rr['url'])),
866                                 intval($rr['id'])
867                         );
868                 }
869         }
870 }
871
872
873 function update_1101() {
874         q("CREATE TABLE IF NOT EXISTS `gcign` (
875         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
876         `uid` INT NOT NULL ,
877         `gcid` INT NOT NULL
878         ) ENGINE = MYISAM ");
879
880         q("ALTER TABLE `gcign` ADD INDEX (`uid`), ADD INDEX (`gcid`) ");
881 }
882
883 function update_1102() {
884         q("ALTER TABLE `clients` ADD `name` TEXT NULL DEFAULT NULL AFTER `redirect_uri` ");
885         q("ALTER TABLE `clients` ADD `icon` TEXT NULL DEFAULT NULL AFTER `name` ");
886         q("ALTER TABLE `clients` ADD `uid` INT NOT NULL DEFAULT 0 AFTER `icon` ");
887
888         q("ALTER TABLE `tokens` ADD `secret` TEXT NOT NULL AFTER `id` ");
889         q("ALTER TABLE `tokens` ADD `uid` INT NOT NULL AFTER `scope` ");
890 }
891
892
893 function update_1103() {
894 //      q("ALTER TABLE `item` ADD INDEX ( `wall` ) ");
895         q("ALTER TABLE `item` ADD FULLTEXT ( `tag` ) ");
896         q("ALTER TABLE `contact` ADD INDEX ( `pending` ) ");
897         q("ALTER TABLE `user` ADD INDEX ( `hidewall` ) ");
898         q("ALTER TABLE `user` ADD INDEX ( `blockwall` ) ");
899         q("ALTER TABLE `user` ADD INDEX ( `blocked` ) ");
900         q("ALTER TABLE `user` ADD INDEX ( `verified` ) ");
901
902 }
903
904 function update_1104() {
905         q("ALTER TABLE `item` ADD `forum_mode` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `origin` , ADD INDEX ( `forum_mode` ) ");
906
907 }
908
909 function update_1105() {
910         q("ALTER TABLE `mail` ADD `convid` INT NOT NULL AFTER `contact-id` ");
911         q("ALTER TABLE `mail` ADD `guid` CHAR( 64 ) NOT NULL AFTER `uid` ");
912
913         q("CREATE TABLE IF NOT EXISTS `conv` (
914         `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
915         `guid` CHAR( 64 ) NOT NULL ,
916         `recips` MEDIUMTEXT NOT NULL ,
917         `uid` INT NOT NULL
918         ) ENGINE = MYISAM ");
919 }
920
921
922 function update_1106() {
923         q("ALTER TABLE `item` ADD INDEX ( `author-link` ) ");
924
925 }
926
927 function update_1107() {
928         q("ALTER TABLE `item` ADD INDEX ( `bookmark` ) ");
929
930 }
931
932 function update_1108() {
933         q("ALTER TABLE `contact` ADD `hidden` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `writable` ,
934 ADD INDEX ( `hidden` ) ");
935
936 }
937
938 function update_1109() {
939         q("ALTER TABLE `conv` ADD `creator` CHAR( 255 ) NOT NULL ,
940                 ADD `created` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
941                 ADD `updated` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00',
942                 ADD `subject` MEDIUMTEXT NOT NULL,
943                 ADD INDEX ( `created` ), ADD INDEX ( `updated` ) ");
944 }
945
946 function update_1110() {
947         q("ALTER TABLE `mail` ADD `reply` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `seen`,
948                 ADD INDEX ( `reply` ), ADD INDEX ( `uid` ), ADD INDEX ( `guid` ), ADD INDEX ( `seen` ),
949                 ADD INDEX ( `uri` ), ADD INDEX ( `parent-uri`), ADD INDEX ( `created` ), ADD INDEX ( `convid` ) ");
950
951 }
952
953 function update_1111() {
954         q("ALTER TABLE `gcontact` ADD `connect` CHAR( 255 ) NOT NULL ");
955 }
956
957
958 function update_1112() {
959
960         q("CREATE TABLE IF NOT EXISTS `notify` (
961 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
962 `type` INT( 11 ) NOT NULL ,
963 `name` CHAR( 255 ) NOT NULL ,
964 `url` CHAR( 255 ) NOT NULL ,
965 `photo` CHAR( 255 ) NOT NULL ,
966 `date` DATETIME NOT NULL ,
967 `msg` MEDIUMTEXT NOT NULL ,
968 `uid` INT NOT NULL ,
969 `link` CHAR( 255 ) NOT NULL ,
970 `seen` TINYINT( 1 ) NOT NULL DEFAULT '0'
971 ) ENGINE = MYISAM ");
972
973         q("ALTER TABLE `notify` ADD INDEX ( `type` ), ADD INDEX ( `uid`), ADD INDEX (`seen`), ADD INDEX (`date`) ");
974
975 }
976
977 function update_1113() {
978         q("ALTER TABLE `notify` ADD `verb` CHAR( 255 ) NOT NULL ,
979 ADD `otype` CHAR( 16 ) NOT NULL");
980 }
981
982 function update_1114() {
983         q("CREATE TABLE IF NOT EXISTS `item_id` (
984 `iid` INT NOT NULL ,
985 `uid` INT NOT NULL ,
986 `face` CHAR( 255 ) NOT NULL ,
987 `dspr` CHAR( 255 ) NOT NULL ,
988 `twit` CHAR( 255 ) NOT NULL ,
989 `stat` CHAR( 255 ) NOT NULL ,
990 PRIMARY KEY ( `iid` ),
991 INDEX ( `uid` ),
992 INDEX ( `face` ),
993 INDEX ( `dspr` ),
994 INDEX ( `twit` ),
995 INDEX ( `stat` )
996 ) ENGINE = MYISAM ");
997
998 }
999
1000 function update_1115() {
1001         q("ALTER TABLE `item` ADD `moderated`
1002                 TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `pubmail`,
1003                 ADD INDEX (`moderated`) ");
1004 }
1005
1006 function update_1116() {
1007         //typo! corrected update was rolled forward
1008 }
1009
1010 function update_1117() {
1011 q("create table if not exists `manage` (
1012 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1013 `uid` INT NOT NULL ,
1014 `mid` INT NOT NULL,
1015 INDEX ( `uid` ),
1016 INDEX ( `mid` )
1017 ) ENGINE = MYISAM ");
1018
1019 }
1020
1021 function update_1118() {
1022         // rolled forward
1023 }
1024
1025 function update_1119() {
1026 q("ALTER TABLE `contact` ADD `closeness` TINYINT( 2 ) NOT NULL DEFAULT '99' AFTER `reason` , ADD INDEX (`closeness`) ");
1027 q("update contact set closeness = 0 where self = 1");
1028 q("ALTER TABLE `item` ADD `spam` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `visible` , ADD INDEX (`spam`) ");
1029 }
1030
1031
1032 function update_1120() {
1033
1034         // item table update from 1119 did not get into database.sql file.
1035         // might be missing on new installs. We'll check.
1036
1037         $r = q("describe item");
1038         if (dbm::is_result($r)) {
1039                 foreach($r as $rr)
1040                         if($rr['Field'] == 'spam')
1041                                 return;
1042         }
1043         q("ALTER TABLE `item` ADD `spam` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `visible` , ADD INDEX (`spam`) ");
1044
1045 }
1046
1047 function update_1121() {
1048         q("CREATE TABLE IF NOT EXISTS `poll_result` (
1049         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1050         `poll_id` INT NOT NULL ,
1051         `choice` INT NOT NULL ,
1052         INDEX ( `poll_id` ),
1053         INDEX ( `choice` )
1054         ) ENGINE = MYISAM ");
1055
1056         q("CREATE TABLE IF NOT EXISTS `poll` (
1057         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1058         `uid` INT NOT NULL ,
1059         `q0` MEDIUMTEXT NOT NULL ,
1060         `q1` MEDIUMTEXT NOT NULL ,
1061         `q2` MEDIUMTEXT NOT NULL ,
1062         `q3` MEDIUMTEXT NOT NULL ,
1063         `q4` MEDIUMTEXT NOT NULL ,
1064         `q5` MEDIUMTEXT NOT NULL ,
1065         `q6` MEDIUMTEXT NOT NULL ,
1066         `q7` MEDIUMTEXT NOT NULL ,
1067         `q8` MEDIUMTEXT NOT NULL ,
1068         `q9` MEDIUMTEXT NOT NULL ,
1069         INDEX ( `uid` )
1070         ) ENGINE = MYISAM ");
1071
1072 }
1073
1074 function update_1122() {
1075 q("ALTER TABLE `notify` ADD `hash` CHAR( 64 ) NOT NULL AFTER `id` ,
1076 ADD INDEX ( `hash` ) ");
1077 }
1078
1079 function update_1123() {
1080 Config::set('system','allowed_themes','dispy,quattro,testbubble,vier,darkbubble,darkzero,duepuntozero,greenzero,purplezero,quattro-green,slackr');
1081 }
1082
1083 function update_1124() {
1084 q("alter table item add index (`author-name`) ");
1085 }
1086
1087 function update_1125() {
1088   q("CREATE TABLE IF NOT EXISTS `notify-threads` (
1089   `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1090   `notify-id` INT NOT NULL,
1091   `master-parent-item` INT( 10 ) unsigned NOT NULL DEFAULT '0',
1092   `parent-item` INT( 10 ) unsigned NOT NULL DEFAULT '0',
1093   `receiver-uid` INT NOT NULL,
1094   INDEX ( `master-parent-item` ),
1095   INDEX ( `receiver-uid` )
1096   ) ENGINE = MyISAM DEFAULT CHARSET=utf8");
1097 }
1098
1099 function update_1126() {
1100         q("ALTER TABLE `mailacct` ADD `action` INT NOT NULL AFTER `pass`,
1101                 ADD `movetofolder` CHAR(255) NOT NULL AFTER `action`");
1102 }
1103
1104 function update_1127() {
1105         q("CREATE TABLE IF NOT EXISTS `spam` (
1106   `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1107   `uid` INT NOT NULL,
1108   `spam` INT NOT NULL DEFAULT '0',
1109   `ham` INT NOT NULL DEFAULT '0',
1110   `term` CHAR(255) NOT NULL,
1111   INDEX ( `uid` ),
1112   INDEX ( `spam` ),
1113   INDEX ( `ham` ),
1114   INDEX ( `term` )
1115   ) ENGINE = MyISAM DEFAULT CHARSET=utf8");
1116 }
1117
1118
1119 function update_1128() {
1120         q("alter table spam add `date` DATETIME NOT NULL DEFAULT '0001-01-01 00:00:00' AFTER `term` ");
1121 }
1122
1123 function update_1129() {
1124         q("ALTER TABLE `notify` ADD `parent` INT NOT NULL AFTER `link` , ADD INDEX ( `parent` ), ADD INDEX ( `link` ), ADD INDEX ( `otype` ) ");
1125 }
1126
1127 function update_1130() {
1128         q("ALTER TABLE `item` ADD `file` MEDIUMTEXT NOT NULL AFTER `inform`, ADD FULLTEXT KEY (`file`) ");
1129 }
1130
1131 function update_1131() {
1132         q("ALTER TABLE `contact` ADD `forum` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `writable` , ADD INDEX ( `forum` ) ");
1133 }
1134
1135
1136 function update_1132() {
1137         q("CREATE TABLE IF NOT EXISTS `userd` (
1138 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1139 `username` CHAR( 255 ) NOT NULL,
1140 INDEX ( `username` )
1141 ) ENGINE = MYISAM ");
1142
1143 }
1144
1145 function update_1133() {
1146 q("ALTER TABLE `user` ADD `unkmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `blocktags` , ADD INDEX ( `unkmail` ) ");
1147 q("ALTER TABLE `user` ADD `cntunkmail` INT NOT NULL DEFAULT '10' AFTER `unkmail` , ADD INDEX ( `cntunkmail` ) ");
1148 q("ALTER TABLE `mail` ADD `unknown` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `replied` , ADD INDEX ( `unknown` ) ");
1149 }
1150
1151 function update_1134() {
1152         // faulty update merged forward
1153         // had a hardwired tablename of 'friendica' which isn't the right name on most systems
1154 }
1155
1156 function update_1135() {
1157         //there can't be indexes with more than 1000 bytes in mysql,
1158         //so change charset to be smaller
1159         q("ALTER TABLE `config` CHANGE `cat` `cat` CHAR( 255 ) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL ,
1160 CHANGE `k` `k` CHAR( 255 ) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL");
1161
1162         //same thing for pconfig
1163         q("ALTER TABLE `pconfig` CHANGE `cat` `cat` CHAR( 255 ) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL ,
1164         CHANGE `k` `k` CHAR( 255 ) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL");
1165         // faulty update merged forward. Bad update in 1134 caused duplicate k,cat pairs
1166         // these have to be cleared before the unique keys can be added.
1167 }
1168
1169 function update_1136() {
1170
1171         $arr = array();
1172
1173         // order in reverse so that we save the newest entry
1174
1175         $r = q("select * from config where 1 order by id desc");
1176         if (dbm::is_result($r)) {
1177                 foreach ($r as $rr) {
1178                         $found = false;
1179                         foreach($arr as $x) {
1180                                 if($x['cat'] == $rr['cat'] && $x['k'] == $rr['k']) {
1181                                         $found = true;
1182                                         q("delete from config where id = %d",
1183                                                 intval($rr['id'])
1184                                         );
1185                                 }
1186                         }
1187                         if(! $found) {
1188                                 $arr[] = $rr;
1189                         }
1190                 }
1191         }
1192
1193         $arr = array();
1194         $r = q("select * from pconfig where 1 order by id desc");
1195         if (dbm::is_result($r)) {
1196                 foreach ($r as $rr) {
1197                         $found = false;
1198                         foreach($arr as $x) {
1199                                 if($x['uid'] == $rr['uid'] && $x['cat'] == $rr['cat'] && $x['k'] == $rr['k']) {
1200                                         $found = true;
1201                                         q("delete from pconfig where id = %d",
1202                                                 intval($rr['id'])
1203                                         );
1204                                 }
1205                         }
1206                         if(! $found) {
1207                                 $arr[] = $rr;
1208                         }
1209                 }
1210         }
1211         q("ALTER TABLE `config` ADD UNIQUE `access` ( `cat` , `k` ) ");
1212         q("ALTER TABLE `pconfig` ADD UNIQUE `access` ( `uid` , `cat` , `k` )");
1213
1214 }
1215
1216
1217 function update_1137() {
1218         q("alter table item_id DROP `face` , DROP `dspr` , DROP `twit` , DROP `stat` ");
1219         q("ALTER TABLE `item_id` ADD `sid` CHAR( 255 ) NOT NULL AFTER `uid` , ADD `service` CHAR( 255 ) NOT NULL AFTER `sid` , add index (`sid`), add index ( `service`) ");
1220 }
1221
1222 function update_1138() {
1223         q("alter table contact add archive tinyint(1) not null default '0' after hidden, add index (archive)");
1224 }
1225
1226 function update_1139() {
1227         $r = q("alter table user add account_removed tinyint(1) not null default '0' after expire, add index(account_removed) ");
1228         if(! $r)
1229                 return UPDATE_FAILED ;
1230         return UPDATE_SUCCESS ;
1231 }
1232
1233 function update_1140() {
1234         $r = q("alter table addon add hidden tinyint(1) not null default '0' after installed, add index(hidden) ");
1235         if(! $r)
1236                 return UPDATE_FAILED ;
1237         return UPDATE_SUCCESS ;
1238 }
1239
1240 function update_1141() {
1241         $r = q("alter table glink add zcid int(11) not null after gcid, add index(zcid) ");
1242         if(! $r)
1243                 return UPDATE_FAILED ;
1244         return UPDATE_SUCCESS ;
1245 }
1246
1247
1248 function update_1142() {
1249         $r = q("alter table user add service_class char(32) not null after expire_notification_sent, add index(service_class) ");
1250         if(! $r)
1251                 return UPDATE_FAILED ;
1252         return UPDATE_SUCCESS ;
1253 }
1254
1255 function update_1143() {
1256         $r = q("alter table user add def_gid int(11) not null default '0' after service_class");
1257         if(! $r)
1258                 return UPDATE_FAILED ;
1259         return UPDATE_SUCCESS ;
1260 }
1261
1262 function update_1144() {
1263         $r = q("alter table contact add prv tinyint(1) not null default '0' after forum");
1264         if(! $r)
1265                 return UPDATE_FAILED ;
1266         return UPDATE_SUCCESS ;
1267 }
1268
1269 function update_1145() {
1270         $r = q("alter table profile add howlong datetime not null default '0001-01-01 00:00:00' after `with`");
1271         if(! $r)
1272                 return UPDATE_FAILED ;
1273         return UPDATE_SUCCESS ;
1274 }
1275
1276 function update_1146() {
1277         $r = q("alter table profile add hometown char(255) not null after `country-name`, add index ( `hometown` ) ");
1278         if(! $r)
1279                 return UPDATE_FAILED ;
1280         return UPDATE_SUCCESS ;
1281 }
1282
1283 function update_1147() {
1284         $r1 = q("ALTER TABLE `sign` ALTER `iid` SET DEFAULT '0'");
1285         $r2 = q("ALTER TABLE `sign` ADD `retract_iid` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `iid`");
1286         $r3 = q("ALTER TABLE `sign` ADD INDEX ( `retract_iid` )");
1287         if((! $r1) || (! $r2) || (! $r3))
1288                 return UPDATE_FAILED ;
1289         return UPDATE_SUCCESS ;
1290 }
1291
1292 function update_1148() {
1293         $r = q("ALTER TABLE photo ADD type CHAR(128) NOT NULL DEFAULT 'image/jpeg' AFTER filename");
1294         if (!$r)
1295                 return UPDATE_FAILED;
1296         return UPDATE_SUCCESS;
1297 }
1298
1299
1300 function update_1149() {
1301         $r1 = q("ALTER TABLE profile ADD likes text NOT NULL after prv_keywords");
1302         $r2 = q("ALTER TABLE profile ADD dislikes text NOT NULL after likes");
1303         if (! ($r1 && $r2))
1304                 return UPDATE_FAILED;
1305         return UPDATE_SUCCESS;
1306 }
1307
1308
1309 function update_1150() {
1310         $r = q("ALTER TABLE event ADD summary text NOT NULL after finish, add index ( uid ), add index ( cid ), add index ( uri ), add index ( `start` ), add index ( finish ), add index ( `type` ), add index ( adjust ) ");
1311         if(! $r)
1312                 return UPDATE_FAILED;
1313         return UPDATE_SUCCESS;
1314 }
1315
1316
1317 function update_1151() {
1318         $r = q("CREATE TABLE IF NOT EXISTS locks (
1319                         id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1320                         name CHAR( 128 ) NOT NULL ,
1321                         locked TINYINT( 1 ) NOT NULL DEFAULT '0'
1322                   ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
1323         if (!$r)
1324                 return UPDATE_FAILED;
1325         return UPDATE_SUCCESS;
1326 }
1327
1328 function update_1152() {
1329         $r = q("CREATE TABLE IF NOT EXISTS `term` (
1330                 `tid` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
1331                 `oid` INT UNSIGNED NOT NULL ,
1332                 `otype` TINYINT( 3 ) UNSIGNED NOT NULL ,
1333                 `type` TINYINT( 3 ) UNSIGNED NOT NULL ,
1334                 `term` CHAR( 255 ) NOT NULL ,
1335                 `url` CHAR( 255 ) NOT NULL,
1336                 KEY `oid` ( `oid` ),
1337                 KEY `otype` ( `otype` ),
1338                 KEY `type`  ( `type` ),
1339                 KEY `term`  ( `term` )
1340                 ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
1341         if (!$r)
1342                 return UPDATE_FAILED;
1343         return UPDATE_SUCCESS;
1344 }
1345
1346 function update_1153() {
1347         $r = q("ALTER TABLE `hook` ADD `priority` INT(11) UNSIGNED NOT NULL DEFAULT '0'");
1348
1349         if(!$r) return UPDATE_FAILED;
1350         return UPDATE_SUCCESS;
1351 }
1352
1353 function update_1154() {
1354         $r = q("ALTER TABLE `event` ADD `ignore` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `adjust` , ADD INDEX ( `ignore` )");
1355
1356         if(!$r) return UPDATE_FAILED;
1357         return UPDATE_SUCCESS;
1358 }
1359
1360 function update_1155() {
1361         $r1 = q("ALTER TABLE `item_id` DROP PRIMARY KEY");
1362         $r2 = q("ALTER TABLE `item_id` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
1363         $r3 = q("ALTER TABLE `item_id` ADD INDEX ( `iid` ) ");
1364
1365         if($r1 && $r2 && $r3)
1366                 return UPDATE_SUCCESS;
1367
1368         return UPDATE_FAILED;
1369 }
1370
1371 function update_1156() {
1372         $r = q("ALTER TABLE `photo` ADD `datasize` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `width` ,
1373 ADD INDEX ( `datasize` ) ");
1374
1375         if(!$r) return UPDATE_FAILED;
1376         return UPDATE_SUCCESS;
1377 }
1378
1379 function update_1157() {
1380         $r = q("CREATE TABLE  IF NOT EXISTS `dsprphotoq` (
1381           `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
1382           `uid` int(11) NOT NULL,
1383           `msg` mediumtext NOT NULL,
1384           `attempt` tinyint(4) NOT NULL,
1385           PRIMARY KEY (`id`)
1386           ) ENGINE=MyISAM DEFAULT CHARSET=utf8"
1387         );
1388
1389         if($r)
1390                 return UPDATE_SUCCESS;
1391 }
1392
1393 function update_1158() {
1394         Config::set('system', 'maintenance', 1);
1395
1396         // Wait for 15 seconds for current requests to
1397         // clear before locking up the database
1398         sleep(15);
1399
1400         $r = q("CREATE INDEX event_id ON item(`event-id`)");
1401         Config::set('system', 'maintenance', 0);
1402
1403         if($r)
1404                 return UPDATE_SUCCESS;
1405
1406         return UPDATE_FAILED;
1407 }
1408
1409 function update_1159() {
1410         $r = q("ALTER TABLE `term` ADD `aid` int(10) unsigned NOT NULL DEFAULT '0',
1411                 ADD `uid` int(10) unsigned NOT NULL DEFAULT '0',
1412                 ADD INDEX (`uid`),
1413                 ADD INDEX (`aid`)");
1414
1415         if(!$r)
1416                 return UPDATE_FAILED;
1417
1418         return UPDATE_SUCCESS;
1419 }
1420
1421 function update_1160() {
1422         Config::set('system', 'maintenance', 1);
1423
1424         // Wait for 15 seconds for current requests to
1425         // clear before locking up the database
1426         sleep(15);
1427
1428         $r = q("ALTER TABLE `item` ADD `mention` TINYINT(1) NOT NULL DEFAULT '0', ADD INDEX (`mention`)");
1429         Config::set('system', 'maintenance', 0);
1430
1431         if(!$r)
1432                 return UPDATE_FAILED;
1433
1434         return UPDATE_SUCCESS;
1435 }
1436
1437 function update_1161() {
1438         $r = q("ALTER TABLE `pconfig` ADD INDEX (`cat`)");
1439
1440         if(!$r)
1441                 return UPDATE_FAILED;
1442
1443         return UPDATE_SUCCESS;
1444 }
1445
1446 function update_1162() {
1447         require_once('include/tags.php');
1448         update_items();
1449
1450         return UPDATE_SUCCESS;
1451 }
1452
1453 function update_1163() {
1454         Config::set('system', 'maintenance', 1);
1455
1456         $r = q("ALTER TABLE `item` ADD `network` char(32) NOT NULL");
1457
1458         Config::set('system', 'maintenance', 0);
1459         if(!$r)
1460                 return UPDATE_FAILED;
1461
1462         return UPDATE_SUCCESS;
1463 }
1464 function update_1164() {
1465         Config::set('system', 'maintenance', 1);
1466
1467         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '' AND `contact`.`uid` = `item`.`uid`)",
1468                 NETWORK_DFRN);
1469
1470         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1471                 NETWORK_DFRN, NETWORK_DFRN);
1472
1473         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1474                 NETWORK_ZOT, NETWORK_ZOT);
1475
1476         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1477                 NETWORK_OSTATUS, NETWORK_OSTATUS);
1478
1479         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1480                 NETWORK_FEED, NETWORK_FEED);
1481
1482         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1483                 NETWORK_DIASPORA, NETWORK_DIASPORA);
1484
1485         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1486                 NETWORK_MAIL, NETWORK_MAIL);
1487
1488         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1489                 NETWORK_MAIL2, NETWORK_MAIL2);
1490
1491         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1492                 NETWORK_FACEBOOK, NETWORK_FACEBOOK);
1493
1494         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1495                 NETWORK_LINKEDIN, NETWORK_LINKEDIN);
1496
1497         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1498                 NETWORK_XMPP, NETWORK_XMPP);
1499
1500         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1501                 NETWORK_MYSPACE, NETWORK_MYSPACE);
1502
1503         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1504                 NETWORK_GPLUS, NETWORK_GPLUS);
1505
1506         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1507                 NETWORK_PUMPIO, NETWORK_PUMPIO);
1508
1509         $r = q("UPDATE `item` SET `network`='%s' WHERE `contact-id` IN (SELECT `id` FROM`contact` WHERE `network` = '%s' AND `contact`.`uid` = `item`.`uid`)",
1510                 NETWORK_TWITTER, NETWORK_TWITTER);
1511
1512         Config::set('system', 'maintenance', 0);
1513
1514         return UPDATE_SUCCESS;
1515 }
1516
1517 function update_1165() {
1518         $r = q("CREATE TABLE IF NOT EXISTS `push_subscriber` (
1519                         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
1520                     `uid` INT NOT NULL,
1521                 `callback_url` CHAR( 255 ) NOT NULL,
1522             `topic` CHAR( 255 ) NOT NULL,
1523             `nickname` CHAR( 255 ) NOT NULL,
1524             `push` INT NOT NULL,
1525             `last_update` DATETIME NOT NULL,
1526             `secret` CHAR( 255 ) NOT NULL
1527                   ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
1528         if (!$r)
1529                 return UPDATE_FAILED;
1530
1531         return UPDATE_SUCCESS;
1532 }
1533
1534 function update_1166() {
1535         $r = q("CREATE TABLE IF NOT EXISTS `unique_contacts` (
1536                         `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
1537                         `url` CHAR(255) NOT NULL,
1538                         `nick` CHAR(255) NOT NULL,
1539                         `name` CHAR(255) NOT NULL,
1540                         `avatar` CHAR(255) NOT NULL,
1541                         INDEX (`url`)
1542                   ) ENGINE = MYISAM DEFAULT CHARSET=utf8 ");
1543         if (!$r)
1544                 return UPDATE_FAILED;
1545
1546         return UPDATE_SUCCESS;
1547 }
1548
1549 function update_1167() {
1550         $r = q("ALTER TABLE `contact` ADD `notify_new_posts` TINYINT(1) NOT NULL DEFAULT '0'");
1551         if (!$r)
1552                 return UPDATE_FAILED;
1553
1554         return UPDATE_SUCCESS;
1555 }
1556
1557 function update_1168() {
1558         $r = q("ALTER TABLE `contact` ADD `fetch_further_information` TINYINT(1) NOT NULL DEFAULT '0'");
1559         if (!$r)
1560                 return UPDATE_FAILED;
1561
1562         return UPDATE_SUCCESS;
1563 }
1564
1565 function update_1169() {
1566         $r = q("CREATE TABLE IF NOT EXISTS `thread` (
1567                   `iid` int(10) unsigned NOT NULL DEFAULT '0',
1568                   `uid` int(10) unsigned NOT NULL DEFAULT '0',
1569                   `contact-id` int(11) unsigned NOT NULL DEFAULT '0',
1570                   `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
1571                   `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
1572                   `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
1573                   `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
1574                   `changed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
1575                   `wall` tinyint(1) NOT NULL DEFAULT '0',
1576                   `private` tinyint(1) NOT NULL DEFAULT '0',
1577                   `pubmail` tinyint(1) NOT NULL DEFAULT '0',
1578                   `moderated` tinyint(1) NOT NULL DEFAULT '0',
1579                   `visible` tinyint(1) NOT NULL DEFAULT '0',
1580                   `spam` tinyint(1) NOT NULL DEFAULT '0',
1581                   `starred` tinyint(1) NOT NULL DEFAULT '0',
1582                   `bookmark` tinyint(1) NOT NULL DEFAULT '0',
1583                   `unseen` tinyint(1) NOT NULL DEFAULT '1',
1584                   `deleted` tinyint(1) NOT NULL DEFAULT '0',
1585                   `origin` tinyint(1) NOT NULL DEFAULT '0',
1586                   `forum_mode` tinyint(1) NOT NULL DEFAULT '0',
1587                   `mention` tinyint(1) NOT NULL DEFAULT '0',
1588                   `network` char(32) NOT NULL,
1589                   PRIMARY KEY (`iid`),
1590                   KEY `created` (`created`),
1591                   KEY `commented` (`commented`),
1592                   KEY `uid_network_commented` (`uid`,`network`,`commented`),
1593                   KEY `uid_network_created` (`uid`,`network`,`created`),
1594                   KEY `uid_contactid_commented` (`uid`,`contact-id`,`commented`),
1595                   KEY `uid_contactid_created` (`uid`,`contact-id`,`created`),
1596                   KEY `wall_private_received` (`wall`,`private`,`received`),
1597                   KEY `uid_created` (`uid`,`created`),
1598                   KEY `uid_commented` (`uid`,`commented`)
1599                 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;");
1600         if (!$r)
1601                 return UPDATE_FAILED;
1602
1603         Worker::add(PRIORITY_LOW, "threadupdate");
1604
1605         return UPDATE_SUCCESS;
1606 }
1607
1608 /*
1609 ==========
1610 ATTENTION!
1611 ==========
1612
1613 All following update functions are ONLY for jobs that need to run AFTER the database changes are applied.
1614
1615 Database changes are ONLY applied in the file include/dbstructure.php.
1616 */
1617
1618 function update_1177() {
1619         require_once("mod/profiles.php");
1620
1621         $profiles = q("SELECT `uid`, `about`, `locality`, `pub_keywords`, `gender` FROM `profile` WHERE `is-default`");
1622
1623         foreach ($profiles AS $profile) {
1624                 if ($profile["about"].$profile["locality"].$profile["pub_keywords"].$profile["gender"] == "")
1625                         continue;
1626
1627                 $profile["pub_keywords"] = profile_clean_keywords($profile["pub_keywords"]);
1628
1629                 $r = q("UPDATE `contact` SET `about` = '%s', `location` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `self` AND `uid` = %d",
1630                                 dbesc($profile["about"]),
1631                                 dbesc($profile["locality"]),
1632                                 dbesc($profile["pub_keywords"]),
1633                                 dbesc($profile["gender"]),
1634                                 intval($profile["uid"])
1635                         );
1636         }
1637 }
1638
1639 function update_1178() {
1640         if (Config::get('system','no_community_page'))
1641                 Config::set('system','community_page_style', CP_NO_COMMUNITY_PAGE);
1642
1643         // Update the central item storage with uid=0
1644         Worker::add(PRIORITY_LOW, "threadupdate");
1645
1646         return UPDATE_SUCCESS;
1647 }
1648
1649 function update_1180() {
1650
1651         // Fill the new fields in the term table.
1652         Worker::add(PRIORITY_LOW, "tagupdate");
1653
1654         return UPDATE_SUCCESS;
1655 }
1656
1657 function update_1188() {
1658
1659         if (strlen(Config::get('system','directory_submit_url')) &&
1660                 !strlen(Config::get('system','directory'))) {
1661                 Config::set('system','directory', dirname(Config::get('system','directory_submit_url')));
1662                 Config::delete('system','directory_submit_url');
1663         }
1664
1665         return UPDATE_SUCCESS;
1666 }
1667
1668 function update_1190() {
1669
1670         require_once('include/plugin.php');
1671
1672         Config::set('system', 'maintenance', 1);
1673
1674         if (plugin_enabled('forumlist')) {
1675                 $plugin = 'forumlist';
1676                 $plugins = Config::get('system','addon');
1677                 $plugins_arr = array();
1678
1679                 if ($plugins) {
1680                         $plugins_arr = explode(",",str_replace(" ", "",$plugins));
1681
1682                         $idx = array_search($plugin, $plugins_arr);
1683                         if ($idx !== false){
1684                                 unset($plugins_arr[$idx]);
1685                                 //delete forumlist manually from addon and hook table
1686                                 // since uninstall_plugin() don't work here
1687                                 q("DELETE FROM `addon` WHERE `name` = 'forumlist' ");
1688                                 q("DELETE FROM `hook` WHERE `file` = 'addon/forumlist/forumlist.php' ");
1689                                 Config::set('system','addon', implode(", ",$plugins_arr));
1690                         }
1691                 }
1692         }
1693
1694         // select old formlist addon entries
1695         $r = q("SELECT `uid`, `cat`, `k`, `v` FROM `pconfig` WHERE `cat` = '%s' ",
1696                 dbesc('forumlist')
1697         );
1698
1699         // convert old forumlist addon entries in new config entries
1700         if (dbm::is_result($r)) {
1701                 foreach ($r as $rr) {
1702                         $uid = $rr['uid'];
1703                         $family = $rr['cat'];
1704                         $key = $rr['k'];
1705                         $value = $rr['v'];
1706
1707                         if ($key === 'randomise')
1708                                 PConfig::delete($uid,$family,$key);
1709
1710                         if ($key === 'show_on_profile') {
1711                                 if ($value)
1712                                         PConfig::set($uid,feature,forumlist_profile,$value);
1713
1714                                 PConfig::delete($uid,$family,$key);
1715                         }
1716
1717                         if ($key === 'show_on_network') {
1718                                 if ($value)
1719                                         PConfig::set($uid,feature,forumlist_widget,$value);
1720
1721                                 PConfig::delete($uid,$family,$key);
1722                         }
1723                 }
1724         }
1725
1726         Config::set('system', 'maintenance', 0);
1727
1728         return UPDATE_SUCCESS;
1729
1730 }
1731
1732 function update_1202() {
1733         $r = q("UPDATE `user` SET `account-type` = %d WHERE `page-flags` IN (%d, %d)",
1734                 dbesc(ACCOUNT_TYPE_COMMUNITY), dbesc(PAGE_COMMUNITY), dbesc(PAGE_PRVGROUP));
1735 }