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