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