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