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