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