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