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