PageRenderTime 60ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/inc/upgrade_inc.php

https://bitbucket.org/ryanhowdy/family-connections
PHP | 1635 lines | 1270 code | 202 blank | 163 comment | 217 complexity | 595a00602bf2b4882aeba66ae1aa36be MD5 | raw file
Possible License(s): Apache-2.0, GPL-2.0
  1. <?php
  2. /**
  3. * disableSite
  4. *
  5. * Creates a 'siteoff' file in the inc directory.
  6. * If this file exists users will be unable to view site for a period of time.
  7. *
  8. * @return void
  9. */
  10. function disableSite ()
  11. {
  12. $str = '<?php $upgrading = '.time().'; ?>';
  13. $file = @fopen(INC.'siteoff', 'w');
  14. if ($file === false)
  15. {
  16. return false;
  17. }
  18. $write = @fwrite($file, $str);
  19. if ($write === false)
  20. {
  21. return false;
  22. }
  23. fclose($file);
  24. return true;
  25. }
  26. /**
  27. * enableSite
  28. *
  29. * Removes 'siteoff' file from inc directory.
  30. *
  31. * @return boolean
  32. */
  33. function enableSite ()
  34. {
  35. if (file_exists(INC.'siteoff'))
  36. {
  37. if (!unlink(INC.'siteoff'))
  38. {
  39. return false;
  40. }
  41. }
  42. return true;
  43. }
  44. /**
  45. * updateCurrentVersion
  46. *
  47. * @param string $version
  48. *
  49. * @return boolean
  50. */
  51. function updateCurrentVersion ($version)
  52. {
  53. $sql = "UPDATE `fcms_config`
  54. SET `value` = '$version'
  55. WHERE `name` = 'current_version'";
  56. if (!mysql_query($sql))
  57. {
  58. displaySqlError($sql, mysql_error());
  59. return false;
  60. }
  61. return true;
  62. }
  63. /**
  64. * downloadLatestVersion
  65. *
  66. * @return void
  67. */
  68. function downloadLatestVersion ()
  69. {
  70. // Have we downloaded the latest file already?
  71. if (file_exists(INC.'latest.zip'))
  72. {
  73. $modified = filemtime(INC.'latest.zip');
  74. // Skip the download if the file has been downloaded already today
  75. if (date('Ymd') == date('Ymd', $modified))
  76. {
  77. return;
  78. }
  79. }
  80. $ch = curl_init(LATEST_FILE_URL);
  81. $fh = fopen(INC.'latest.zip', 'w');
  82. curl_setopt($ch, CURLOPT_FILE, $fh);
  83. curl_exec($ch);
  84. curl_close($ch);
  85. }
  86. /**
  87. * unzipFile
  88. *
  89. * @return boolean
  90. */
  91. function unzipFile ()
  92. {
  93. $zipFile = INC.'latest.zip';
  94. $za = new ZipArchive();
  95. if (!$za->open($zipFile))
  96. {
  97. echo '<div class="error-alert">'.T_('Could not open zip file.').'</div>';
  98. return false;
  99. }
  100. if (!$za->extractTo(INC.'upgrade'))
  101. {
  102. echo '<div class="error-alert">'.T_('Could extract zip file.').'</div>';
  103. return false;
  104. }
  105. $za->close();
  106. return true;
  107. }
  108. /**
  109. * install
  110. *
  111. * Copies newly downloaded files from temp.
  112. *
  113. * @return boolean
  114. */
  115. function install ()
  116. {
  117. $dir = INC.'upgrade/';
  118. if (!is_dir($dir))
  119. {
  120. echo '<div class="error-alert">'.T_('Could not find upgrade directory.').'</div>';
  121. return false;
  122. }
  123. $dh = @opendir($dir);
  124. if ($dh === false)
  125. {
  126. echo '<div class="error-alert">'.T_('Could not open upgrade directory.').'</div>';
  127. return false;
  128. }
  129. // Get container file (FCMS 2.X)
  130. while (($container = readdir($dh)) !== false)
  131. {
  132. // Skip directories that start with a period
  133. if ($container[0] === '.')
  134. {
  135. continue;
  136. }
  137. if (!is_dir($dir.$container))
  138. {
  139. echo '<div class="error-alert">'.T_('Could not find new upgrade files.').'</div>';
  140. return false;
  141. }
  142. break;
  143. }
  144. if (!copy_files(INC."upgrade/$container", ROOT))
  145. {
  146. // error alrady displayed by copy_files
  147. return false;
  148. }
  149. // Everything copied over fine, delete the upgrade directory
  150. deleteDirectory(INC."upgrade");
  151. return true;
  152. }
  153. /**
  154. * copy_files
  155. *
  156. * @param string $from
  157. * @param string $to
  158. *
  159. * @return void
  160. */
  161. function copy_files ($from, $to)
  162. {
  163. // Add trailing slashes to directories
  164. if (substr($from, -1) !== '/')
  165. {
  166. $from .= '/';
  167. }
  168. if (substr($to, -1) !== '/')
  169. {
  170. $to .= '/';
  171. }
  172. if (!is_dir($from))
  173. {
  174. echo '<div class="error-alert">'.sprintf(T_('Could not find origin: %s.'), $from).'</div>';
  175. return false;
  176. }
  177. if (!is_dir($to))
  178. {
  179. if (!mkdir($to))
  180. {
  181. echo '<div class="error-alert">'.sprintf(T_('Destination not found and could not be created: %s.'), $to).'</div>';
  182. return false;
  183. }
  184. }
  185. $dh = @opendir($from);
  186. if ($dh === false)
  187. {
  188. echo '<div class="error-alert">'.sprintf(T_('Could not open directory: %s.'), $from).'</div>';
  189. return false;
  190. }
  191. while (($file = readdir($dh)) !== false)
  192. {
  193. // Skip directories that start with a period
  194. if ($file[0] === '.')
  195. {
  196. continue;
  197. }
  198. // Directory
  199. if (filetype($from.$file) == "dir")
  200. {
  201. if (!copy_files($from.$file, $to.$file))
  202. {
  203. // error alrady displayed by copy_files
  204. return false;
  205. }
  206. }
  207. // File
  208. else
  209. {
  210. if (!copy($from.$file, $to.$file))
  211. {
  212. echo '<div class="error-alert">'.sprintf(T_('Could not copy file: %s.'), $from.$file).'</div>';
  213. return false;
  214. }
  215. }
  216. }
  217. return true;
  218. }
  219. /**
  220. * deleteDirectory
  221. *
  222. * Recursively deletes a directory and anything in it.
  223. *
  224. * @param string $dir
  225. *
  226. * @return void
  227. */
  228. function deleteDirectory ($dir)
  229. {
  230. $files = scandir($dir);
  231. if ($files === false)
  232. {
  233. return false;
  234. }
  235. // remove . and .. if they exist
  236. if ($files[0] == '.') { array_shift($files); }
  237. if ($files[0] == '..') { array_shift($files); }
  238. foreach ($files as $file)
  239. {
  240. $file = $dir . '/' . $file;
  241. if (is_dir($file))
  242. {
  243. deleteDirectory($file);
  244. }
  245. else
  246. {
  247. unlink($file);
  248. }
  249. }
  250. if (is_dir($dir))
  251. {
  252. rmdir($dir);
  253. }
  254. return true;
  255. }
  256. /**
  257. * upgrade
  258. *
  259. * Upgrade database from 2.5 to current version.
  260. *
  261. * @return boolean
  262. */
  263. function upgrade ()
  264. {
  265. if (!upgrade250())
  266. {
  267. return false;
  268. }
  269. if (!upgrade260())
  270. {
  271. return false;
  272. }
  273. if (!upgrade270())
  274. {
  275. return false;
  276. }
  277. if (!upgrade280())
  278. {
  279. return false;
  280. }
  281. if (!upgrade290())
  282. {
  283. return false;
  284. }
  285. if (!upgrade300())
  286. {
  287. return false;
  288. }
  289. if (!upgrade310())
  290. {
  291. return false;
  292. }
  293. return true;
  294. }
  295. /**
  296. * upgrade250
  297. *
  298. * Upgrade database to version 2.5.
  299. *
  300. * @return boolean
  301. */
  302. function upgrade250 ()
  303. {
  304. global $cfg_mysql_db;
  305. // Status updates
  306. $status_fixed = false;
  307. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  308. $result = mysql_query($sql);
  309. if (!$result)
  310. {
  311. displaySqlError($sql, mysql_error());
  312. return false;
  313. }
  314. if (mysql_num_rows($result) > 0)
  315. {
  316. while($r = mysql_fetch_array($result))
  317. {
  318. if ($r[0] == 'fcms_status') { $status_fixed = true; }
  319. }
  320. }
  321. if (!$status_fixed)
  322. {
  323. $sql = "CREATE TABLE `fcms_status` (
  324. `id` INT(25) NOT NULL AUTO_INCREMENT,
  325. `user` INT(25) NOT NULL DEFAULT '0',
  326. `status` TEXT DEFAULT NULL,
  327. `parent` INT(25) NOT NULL DEFAULT '0',
  328. `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  329. `updated` DATETIME DEFAULT NULL,
  330. PRIMARY KEY (`id`),
  331. CONSTRAINT FOREIGN KEY (`user`) REFERENCES `fcms_users` (`id`)
  332. ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
  333. if (!mysql_query($sql))
  334. {
  335. displaySqlError($sql, mysql_error());
  336. return false;
  337. }
  338. $sql = "ALTER TABLE `fcms_config` ADD `fb_app_id` VARCHAR(50) NULL";
  339. if (!mysql_query($sql))
  340. {
  341. displaySqlError($sql, mysql_error());
  342. return false;
  343. }
  344. $sql = "ALTER TABLE `fcms_config` ADD `fb_secret` VARCHAR(50) NULL";
  345. if (!mysql_query($sql))
  346. {
  347. displaySqlError($sql, mysql_error());
  348. return false;
  349. }
  350. $sql = "ALTER TABLE `fcms_user_settings` ADD `fb_access_token` VARCHAR(255) NULL";
  351. if (!mysql_query($sql))
  352. {
  353. displaySqlError($sql, mysql_error());
  354. return false;
  355. }
  356. $adminOrder = getNextAdminNavigationOrder();
  357. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  358. VALUES ('admin_facebook', 6, $adminOrder, 0)";
  359. if (!mysql_query($sql))
  360. {
  361. displaySqlError($sql, mysql_error());
  362. return false;
  363. }
  364. }
  365. return true;
  366. }
  367. /**
  368. * upgrade260
  369. *
  370. * Upgrade database to version 2.6.
  371. *
  372. * @return boolean
  373. */
  374. function upgrade260 ()
  375. {
  376. global $cfg_mysql_db;
  377. // Family News created/updated
  378. $fnews_fixed = false;
  379. $sql = "SHOW COLUMNS FROM `fcms_news`";
  380. $result = mysql_query($sql);
  381. if (!$result)
  382. {
  383. displaySqlError($sql, mysql_error());
  384. return false;
  385. }
  386. if (mysql_num_rows($result) > 0)
  387. {
  388. while($r = mysql_fetch_array($result))
  389. {
  390. if ($r['Field'] == 'created')
  391. {
  392. $fnews_fixed = true;
  393. }
  394. }
  395. }
  396. if (!$fnews_fixed)
  397. {
  398. $sql = "ALTER TABLE `fcms_news`
  399. CHANGE `date` `updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  400. ADD COLUMN `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `user`";
  401. if (!mysql_query($sql))
  402. {
  403. displaySqlError($sql, mysql_error());
  404. return false;
  405. }
  406. }
  407. // Change log
  408. $change_fixed = false;
  409. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  410. $result = mysql_query($sql);
  411. if (!$result)
  412. {
  413. displaySqlError($sql, mysql_error());
  414. return false;
  415. }
  416. if (mysql_num_rows($result) > 0)
  417. {
  418. while($r = mysql_fetch_array($result))
  419. {
  420. if ($r[0] == 'fcms_changelog') { $change_fixed = true; }
  421. }
  422. }
  423. if (!$change_fixed)
  424. {
  425. $sql = "CREATE TABLE `fcms_changelog` (
  426. `id` INT(25) NOT NULL AUTO_INCREMENT,
  427. `user` INT(25) NOT NULL DEFAULT '0',
  428. `table` VARCHAR(50) NOT NULL,
  429. `column` VARCHAR(50) NOT NULL,
  430. `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  431. PRIMARY KEY (`id`),
  432. CONSTRAINT FOREIGN KEY (`user`) REFERENCES `fcms_users` (`id`)
  433. ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
  434. if (!mysql_query($sql))
  435. {
  436. displaySqlError($sql, mysql_error());
  437. return false;
  438. }
  439. }
  440. // Addressbook
  441. $book_fixed = false;
  442. $sql = "SHOW COLUMNS FROM `fcms_address`";
  443. $result = mysql_query($sql);
  444. if (!$result)
  445. {
  446. displaySqlError($sql, mysql_error());
  447. return false;
  448. }
  449. if (mysql_num_rows($result) > 0)
  450. {
  451. while($r = mysql_fetch_array($result))
  452. {
  453. if ($r['Field'] == 'created')
  454. {
  455. $book_fixed = true;
  456. }
  457. }
  458. }
  459. if (!$book_fixed)
  460. {
  461. $sql = "ALTER TABLE `fcms_address`
  462. CHANGE `entered_by` `created_id` INT(11) NOT NULL DEFAULT '0',
  463. ADD COLUMN `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `created_id`,
  464. ADD COLUMN `updated_id` INT(11) NOT NULL DEFAULT '0' AFTER `updated`";
  465. if (!mysql_query($sql))
  466. {
  467. displaySqlError($sql, mysql_error());
  468. return false;
  469. }
  470. $sql = "UPDATE `fcms_address`
  471. SET `updated_id` = `created_id`
  472. WHERE `updated_id` = 0";
  473. if (!mysql_query($sql))
  474. {
  475. displaySqlError($sql, mysql_error());
  476. return false;
  477. }
  478. $sql = "UPDATE `fcms_address`
  479. SET `created` = `updated`
  480. WHERE `created` = '0000-00-00 00:00:00'";
  481. if (!mysql_query($sql))
  482. {
  483. displaySqlError($sql, mysql_error());
  484. return false;
  485. }
  486. }
  487. // YouTube (key) - Old config style
  488. $youtube_fixed = false;
  489. $sql = "SHOW COLUMNS FROM `fcms_config`";
  490. $result = mysql_query($sql);
  491. if (!$result)
  492. {
  493. displaySqlError($sql, mysql_error());
  494. return false;
  495. }
  496. if (mysql_num_rows($result) > 0)
  497. {
  498. while($r = mysql_fetch_array($result))
  499. {
  500. if ($r['Field'] == 'youtube_key')
  501. {
  502. $youtube_fixed = true;
  503. }
  504. }
  505. }
  506. // YouTube (key) - New config style
  507. // We do this check, because the upgrade script may have already done added the youtube key,
  508. // and then converted it to the new style.
  509. // We want to check for that before we add the old style config.
  510. if (!$youtube_fixed)
  511. {
  512. $sql = "SELECT `name` FROM `fcms_config` WHERE `name` = 'youtube_key'";
  513. $result = mysql_query($sql);
  514. if (!$result)
  515. {
  516. displaySqlError($sql, mysql_error());
  517. return false;
  518. }
  519. if (mysql_num_rows($result) > 0)
  520. {
  521. $youtube_fixed = true;
  522. }
  523. }
  524. if (!$youtube_fixed)
  525. {
  526. $sql = "ALTER TABLE `fcms_config`
  527. ADD COLUMN `youtube_key` VARCHAR(255) NULL";
  528. if (!mysql_query($sql))
  529. {
  530. displaySqlError($sql, mysql_error());
  531. return false;
  532. }
  533. $adminOrder = getNextAdminNavigationOrder();
  534. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  535. VALUES ('admin_youtube', 6, $adminOrder, 1)";
  536. if (!mysql_query($sql))
  537. {
  538. displaySqlError($sql, mysql_error());
  539. return false;
  540. }
  541. }
  542. // YouTube (token)
  543. $youtube_fixed = false;
  544. $sql = "SHOW COLUMNS FROM `fcms_user_settings`";
  545. $result = mysql_query($sql);
  546. if (!$result)
  547. {
  548. displaySqlError($sql, mysql_error());
  549. return false;
  550. }
  551. if (mysql_num_rows($result) > 0)
  552. {
  553. while($r = mysql_fetch_array($result))
  554. {
  555. if ($r['Field'] == 'youtube_session_token')
  556. {
  557. $youtube_fixed = true;
  558. }
  559. }
  560. }
  561. if (!$youtube_fixed)
  562. {
  563. $sql = "ALTER TABLE `fcms_user_settings`
  564. ADD COLUMN `youtube_session_token` VARCHAR(255) NULL";
  565. if (!mysql_query($sql))
  566. {
  567. displaySqlError(mysql_error());
  568. return false;
  569. }
  570. }
  571. // Config
  572. $cfg_fixed = false;
  573. $sql = "SHOW COLUMNS FROM `fcms_config`";
  574. $result = mysql_query($sql);
  575. if (!$result)
  576. {
  577. displaySqlError($sql, mysql_error());
  578. return false;
  579. }
  580. if (mysql_num_rows($result) > 0)
  581. {
  582. while($r = mysql_fetch_array($result))
  583. {
  584. if ($r['Field'] == 'name')
  585. {
  586. $cfg_fixed = true;
  587. }
  588. }
  589. }
  590. if (!$cfg_fixed)
  591. {
  592. // Create new config
  593. $sql = "CREATE TABLE `fcms_config2` (
  594. `name` VARCHAR(50) NOT NULL,
  595. `value` VARCHAR(255) NULL
  596. )
  597. ENGINE=InnoDB DEFAULT CHARSET=utf8";
  598. mysql_query($sql) or die($sql . '<br/>' . mysql_error());
  599. // Get current config data
  600. $sql = "SELECT *
  601. FROM `fcms_config`";
  602. $result = mysql_query($sql) or die($sql . '<br/>' . mysql_error());
  603. $config = mysql_fetch_assoc($result);
  604. // Insert current config into new table
  605. $sql = "INSERT INTO `fcms_config2` (`name`, `value`)
  606. VALUES
  607. ('sitename', '".escape_string($config['sitename'])."'),
  608. ('contact', '".escape_string($config['contact'])."'),
  609. ('current_version', '".escape_string($config['current_version'])."'),
  610. ('auto_activate', '".escape_string($config['auto_activate'])."'),
  611. ('registration', '".escape_string($config['registration'])."'),
  612. ('full_size_photos', '".escape_string($config['full_size_photos'])."'),
  613. ('site_off', '".escape_string($config['site_off'])."'),
  614. ('log_errors', '".escape_string($config['log_errors'])."'),
  615. ('fs_client_id', '".escape_string($config['fs_client_id'])."'),
  616. ('fs_client_secret', '".escape_string($config['fs_client_secret'])."'),
  617. ('fs_callback_url', '".escape_string($config['fs_callback_url'])."'),
  618. ('external_news_date', '".escape_string($config['external_news_date'])."'),
  619. ('fb_app_id', '".escape_string($config['fb_app_id'])."'),
  620. ('fb_secret', '".escape_string($config['fb_secret'])."'),
  621. ('youtube_key', '".escape_string($config['youtube_key'])."')";
  622. mysql_query($sql) or die($sql . '<br/>' . mysql_error());
  623. // Delete current config
  624. $sql = "DROP TABLE `fcms_config`";
  625. mysql_query($sql) or die($sql . '<br/>' . mysql_error());
  626. // Rename new table to current
  627. $sql = "RENAME TABLE `fcms_config2` TO `fcms_config`";
  628. mysql_query($sql) or die($sql . '<br/>' . mysql_error());
  629. }
  630. // Schedule
  631. $schedule_fixed = false;
  632. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  633. $result = mysql_query($sql);
  634. if (!$result)
  635. {
  636. displaySqlError($sql, mysql_error());
  637. return false;
  638. }
  639. if (mysql_num_rows($result) > 0)
  640. {
  641. while($r = mysql_fetch_array($result))
  642. {
  643. if ($r[0] == 'fcms_schedule') { $schedule_fixed = true; }
  644. }
  645. }
  646. if (!$schedule_fixed)
  647. {
  648. $sql = "CREATE TABLE `fcms_schedule` (
  649. `id` INT(25) NOT NULL AUTO_INCREMENT,
  650. `type` VARCHAR(50) NOT NULL DEFAULT 'familynews',
  651. `repeat` VARCHAR(50) NOT NULL DEFAULT 'hourly',
  652. `lastrun` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  653. `status` TINYINT(1) NOT NULL DEFAULT 0,
  654. PRIMARY KEY (`id`)
  655. ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
  656. if (!mysql_query($sql))
  657. {
  658. displaySqlError($sql, mysql_error());
  659. return false;
  660. }
  661. $sql = "INSERT INTO `fcms_schedule` (`type`, `repeat`)
  662. VALUES
  663. ('familynews', 'hourly'),
  664. ('youtube', 'hourly')";
  665. if (!mysql_query($sql))
  666. {
  667. displaySqlError($sql, mysql_error());
  668. return false;
  669. }
  670. $sql = "INSERT INTO `fcms_config` (`name`, `value`)
  671. VALUES ('running_job', '0')";
  672. if (!mysql_query($sql))
  673. {
  674. displaySqlError($sql, mysql_error());
  675. return false;
  676. }
  677. $adminOrder = getNextAdminNavigationOrder();
  678. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  679. VALUES ('admin_scheduler', 6, $adminOrder, 1)";
  680. if (!mysql_query($sql))
  681. {
  682. displaySqlError($sql, mysql_error());
  683. return false;
  684. }
  685. }
  686. // Video Gallery
  687. $video_fixed = false;
  688. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  689. $result = mysql_query($sql);
  690. if (!$result)
  691. {
  692. displaySqlError($sql, mysql_error());
  693. return false;
  694. }
  695. if (mysql_num_rows($result) > 0)
  696. {
  697. while($r = mysql_fetch_array($result))
  698. {
  699. if ($r[0] == 'fcms_video') { $video_fixed = true; }
  700. }
  701. }
  702. if (!$video_fixed)
  703. {
  704. $sql = "CREATE TABLE `fcms_video` (
  705. `id` INT(25) NOT NULL AUTO_INCREMENT,
  706. `source_id` VARCHAR(255) NOT NULL,
  707. `title` VARCHAR(255) NOT NULL DEFAULT 'untitled',
  708. `description` VARCHAR(255) NULL,
  709. `duration` INT(25) NULL,
  710. `source` VARCHAR(50) NULL,
  711. `height` INT(4) NOT NULL DEFAULT '420',
  712. `width` INT(4) NOT NULL DEFAULT '780',
  713. `active` TINYINT(1) NOT NULL DEFAULT '1',
  714. `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  715. `created_id` INT(25) NOT NULL,
  716. `updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  717. `updated_id` INT(25) NOT NULL,
  718. PRIMARY KEY (`id`)
  719. ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
  720. if (!mysql_query($sql))
  721. {
  722. displaySqlError($sql, mysql_error());
  723. return false;
  724. }
  725. $order = getNextShareNavigationOrder();
  726. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  727. VALUES ('videogallery', 4, $order, 1)";
  728. if (!mysql_query($sql))
  729. {
  730. displaySqlError($sql, mysql_error());
  731. return false;
  732. }
  733. $sql = "CREATE TABLE `fcms_video_comment` (
  734. `id` INT(25) NOT NULL AUTO_INCREMENT,
  735. `video_id` INT(25) NOT NULL,
  736. `comment` TEXT NOT NULL,
  737. `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  738. `created_id` INT(25) NOT NULL,
  739. `updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  740. `updated_id` INT(25) NOT NULL,
  741. PRIMARY KEY (`id`),
  742. CONSTRAINT FOREIGN KEY (`video_id`) REFERENCES `fcms_video` (`id`)
  743. ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
  744. if (!mysql_query($sql))
  745. {
  746. displaySqlError($sql, mysql_error());
  747. return false;
  748. }
  749. }
  750. return true;
  751. }
  752. /**
  753. * upgrade270
  754. *
  755. * Upgrade database to version 2.7.
  756. *
  757. * @return boolean
  758. */
  759. function upgrade270 ()
  760. {
  761. global $cfg_mysql_db;
  762. // Country
  763. $country_fixed = false;
  764. $sql = "SHOW COLUMNS FROM `fcms_address`";
  765. $result = mysql_query($sql);
  766. if (!$result)
  767. {
  768. displaySqlError($sql, mysql_error());
  769. return false;
  770. }
  771. if (mysql_num_rows($result) > 0)
  772. {
  773. while($r = mysql_fetch_array($result))
  774. {
  775. if ($r['Field'] == 'country')
  776. {
  777. $country_fixed = true;
  778. }
  779. }
  780. }
  781. if (!$country_fixed)
  782. {
  783. $sql = "ALTER TABLE `fcms_address`
  784. ADD COLUMN `country` CHAR(2) DEFAULT NULL AFTER `user`";
  785. if (!mysql_query($sql))
  786. {
  787. displaySqlError($sql, mysql_error());
  788. return false;
  789. }
  790. $sql = "INSERT INTO `fcms_config` (`name`, `value`)
  791. VALUES ('country', 'US')";
  792. if (!mysql_query($sql))
  793. {
  794. displaySqlError($sql, mysql_error());
  795. return false;
  796. }
  797. }
  798. // Birthday and date of death
  799. $dob_dod_fixed = false;
  800. $sql = "SHOW COLUMNS FROM `fcms_users`";
  801. $result = mysql_query($sql);
  802. if (!$result)
  803. {
  804. displaySqlError($sql, mysql_error());
  805. return false;
  806. }
  807. if (mysql_num_rows($result) > 0)
  808. {
  809. while($r = mysql_fetch_array($result))
  810. {
  811. if ($r['Field'] == 'dob_year')
  812. {
  813. $dob_dod_fixed = true;
  814. }
  815. }
  816. }
  817. if (!$dob_dod_fixed)
  818. {
  819. $sql = "ALTER TABLE `fcms_users`
  820. ADD COLUMN `dob_year` CHAR(4) AFTER `birthday`,
  821. ADD COLUMN `dob_month` CHAR(2) AFTER `dob_year`,
  822. ADD COLUMN `dob_day` CHAR(2) AFTER `dob_month`,
  823. ADD COLUMN `dod_year` CHAR(4) AFTER `dob_day`,
  824. ADD COLUMN `dod_month` CHAR(2) AFTER `dod_year`,
  825. ADD COLUMN `dod_day` CHAR(2) AFTER `dod_month`";
  826. if (!mysql_query($sql))
  827. {
  828. displaySqlError($sql, mysql_error());
  829. return false;
  830. }
  831. $sql = "SELECT `id`, `birthday`, `death`
  832. FROM `fcms_users`";
  833. $result = mysql_query($sql);
  834. if (!$result)
  835. {
  836. displaySqlError($sql, mysql_error());
  837. return false;
  838. }
  839. if (mysql_num_rows($result) <= 0)
  840. {
  841. echo '<p>'.T_('No user birthday\'s found.').'</p>';
  842. return false;
  843. }
  844. while ($r = mysql_fetch_assoc($result))
  845. {
  846. $id = $r['id'];
  847. $bYear = substr($r['birthday'], 0, 4);
  848. $bMonth = substr($r['birthday'], 5, 2);
  849. $bDay = substr($r['birthday'], 8, 2);
  850. $dYear = substr($r['death'], 0, 4);
  851. $dMonth = substr($r['death'], 5, 2);
  852. $dDay = substr($r['death'], 8, 2);
  853. $sql = "UPDATE `fcms_users`
  854. SET `dob_year` = '$bYear',
  855. `dob_month` = '$bMonth',
  856. `dob_day` = '$bDay',
  857. `dod_year` = '$dYear',
  858. `dod_month` = '$dMonth',
  859. `dod_day` = '$dDay'
  860. WHERE `id` = '$id'";
  861. if (!mysql_query($sql))
  862. {
  863. displaySqlError($sql, mysql_error());
  864. return false;
  865. }
  866. }
  867. $sql = "ALTER TABLE `fcms_users`
  868. DROP COLUMN `birthday`,
  869. DROP COLUMN `death`";
  870. if (!mysql_query($sql))
  871. {
  872. displaySqlError($sql, mysql_error());
  873. return false;
  874. }
  875. }
  876. return true;
  877. }
  878. /**
  879. * upgrade280
  880. *
  881. * Upgrade database to version 2.8.
  882. *
  883. * @return boolean
  884. */
  885. function upgrade280 ()
  886. {
  887. global $cfg_mysql_db;
  888. // category description
  889. $desc_fixed = false;
  890. $sql = "SHOW COLUMNS FROM `fcms_category`";
  891. $result = mysql_query($sql);
  892. if (!$result)
  893. {
  894. displaySqlError($sql, mysql_error());
  895. return false;
  896. }
  897. if (mysql_num_rows($result) > 0)
  898. {
  899. while($r = mysql_fetch_array($result))
  900. {
  901. if ($r['Field'] == 'description')
  902. {
  903. $desc_fixed = true;
  904. }
  905. }
  906. }
  907. if (!$desc_fixed)
  908. {
  909. $sql = "ALTER TABLE `fcms_category`
  910. ADD COLUMN `description` VARCHAR(255) NULL";
  911. if (!mysql_query($sql))
  912. {
  913. displaySqlError($sql, mysql_error());
  914. return false;
  915. }
  916. }
  917. // debug
  918. $debug_fixed = false;
  919. $sql = "SELECT `name` FROM `fcms_config` WHERE `name` = 'debug'";
  920. $result = mysql_query($sql);
  921. if (!$result)
  922. {
  923. displaySqlError($sql, mysql_error());
  924. return false;
  925. }
  926. if (mysql_num_rows($result) > 0)
  927. {
  928. $debug_fixed = true;
  929. }
  930. if (!$debug_fixed)
  931. {
  932. $sql = "INSERT INTO `fcms_config` (`name`, `value`)
  933. VALUES ('debug', '0')";
  934. if (!mysql_query($sql))
  935. {
  936. displaySqlError($sql, mysql_error());
  937. return false;
  938. }
  939. }
  940. return true;
  941. }
  942. /**
  943. * upgrade290
  944. *
  945. * Upgrade database to version 2.9.
  946. *
  947. * @return boolean
  948. */
  949. function upgrade290 ()
  950. {
  951. global $cfg_mysql_db;
  952. // turn on foursquare admin
  953. $foursquare_fixed = false;
  954. $sql = "SELECT `link`, `order`
  955. FROM `fcms_navigation`
  956. WHERE `link` = 'admin_whereiseveryone'
  957. OR `link` = 'admin_foursquare'
  958. AND `order` > 0
  959. LIMIT 1";
  960. $result = mysql_query($sql);
  961. if (!$result)
  962. {
  963. displaySqlError($sql, mysql_error());
  964. return false;
  965. }
  966. if (mysql_num_rows($result) > 0)
  967. {
  968. $foursquare_fixed = true;
  969. }
  970. if (!$foursquare_fixed)
  971. {
  972. $adminOrder = getNextAdminNavigationOrder();
  973. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  974. VALUES ('admin_foursquare', 6, $adminOrder, 0)";
  975. if (!mysql_query($sql))
  976. {
  977. displaySqlError($sql, mysql_error());
  978. return false;
  979. }
  980. }
  981. // awards scheduler
  982. $awards_fixed = false;
  983. $sql = "SELECT `type`
  984. FROM `fcms_schedule`
  985. WHERE `type` = 'awards'
  986. LIMIT 1";
  987. $result = mysql_query($sql);
  988. if (!$result)
  989. {
  990. displaySqlError($sql, mysql_error());
  991. return false;
  992. }
  993. if (mysql_num_rows($result) > 0)
  994. {
  995. $awards_fixed = true;
  996. }
  997. if (!$awards_fixed)
  998. {
  999. $sql = "INSERT INTO `fcms_schedule` (`type`, `repeat`)
  1000. VALUES ('awards', 'daily')";
  1001. if (!mysql_query($sql))
  1002. {
  1003. displaySqlError($sql, mysql_error());
  1004. return false;
  1005. }
  1006. // delete db entry
  1007. $sql = "DELETE FROM `fcms_navigation`
  1008. WHERE `link` = 'admin_awards'";
  1009. if (!mysql_query($sql))
  1010. {
  1011. displaySqlError($sql, mysql_error());
  1012. return false;
  1013. }
  1014. // delete file
  1015. if (file_exists('awards.php'))
  1016. {
  1017. unlink('awards.php');
  1018. }
  1019. }
  1020. // Start of week
  1021. $start_fixed = false;
  1022. $sql = "SELECT `name` FROM `fcms_config` WHERE `name` = 'start_week'";
  1023. $result = mysql_query($sql);
  1024. if (!$result)
  1025. {
  1026. displaySqlError($sql, mysql_error());
  1027. return false;
  1028. }
  1029. if (mysql_num_rows($result) > 0)
  1030. {
  1031. $start_fixed = true;
  1032. }
  1033. if (!$start_fixed)
  1034. {
  1035. $sql = "INSERT INTO `fcms_config` (`name`, `value`)
  1036. VALUES ('start_week', '0')";
  1037. if (!mysql_query($sql))
  1038. {
  1039. displaySqlError($sql, mysql_error());
  1040. return false;
  1041. }
  1042. }
  1043. // Notifications
  1044. $notification_fixed = false;
  1045. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  1046. $result = mysql_query($sql);
  1047. if (!$result)
  1048. {
  1049. displaySqlError($sql, mysql_error());
  1050. return false;
  1051. }
  1052. if (mysql_num_rows($result) > 0)
  1053. {
  1054. while($r = mysql_fetch_array($result))
  1055. {
  1056. if ($r[0] == 'fcms_notification') { $notification_fixed = true; }
  1057. }
  1058. }
  1059. if (!$notification_fixed)
  1060. {
  1061. $sql = "CREATE TABLE `fcms_notification` (
  1062. `id` INT(25) NOT NULL AUTO_INCREMENT,
  1063. `user` INT(25) NOT NULL DEFAULT '0',
  1064. `created_id` INT(25) NOT NULL DEFAULT '0',
  1065. `notification` VARCHAR(50) NOT NULL,
  1066. `data` VARCHAR(50) NOT NULL,
  1067. `read` TINYINT(1) NOT NULL DEFAULT '0',
  1068. `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  1069. `updated` DATETIME DEFAULT NULL,
  1070. PRIMARY KEY (`id`),
  1071. CONSTRAINT FOREIGN KEY (`user`) REFERENCES `fcms_users` (`id`)
  1072. ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
  1073. if (!mysql_query($sql))
  1074. {
  1075. displaySqlError($sql, mysql_error());
  1076. return false;
  1077. }
  1078. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  1079. VALUES ('notification', 2, 4, 1)";
  1080. if (!mysql_query($sql))
  1081. {
  1082. displaySqlError($sql, mysql_error());
  1083. return false;
  1084. }
  1085. }
  1086. return true;
  1087. }
  1088. /**
  1089. * upgrade300
  1090. *
  1091. * Upgrade database to version 3.0.
  1092. *
  1093. * @return boolean
  1094. */
  1095. function upgrade300 ()
  1096. {
  1097. global $cfg_mysql_db;
  1098. // instagram client id
  1099. $instagram_client_id_fixed = false;
  1100. $sql = "SELECT `name`
  1101. FROM `fcms_config`
  1102. WHERE `name` = 'instagram_client_id'";
  1103. $result = mysql_query($sql);
  1104. if (!$result)
  1105. {
  1106. displaySqlError($sql, mysql_error());
  1107. return false;
  1108. }
  1109. if (mysql_num_rows($result) > 0)
  1110. {
  1111. $instagram_client_id_fixed = true;
  1112. }
  1113. if (!$instagram_client_id_fixed)
  1114. {
  1115. $sql = "INSERT INTO `fcms_config` (`name`, `value`)
  1116. VALUES ('instagram_client_id', NULL)";
  1117. if (!mysql_query($sql))
  1118. {
  1119. displaySqlError($sql, mysql_error());
  1120. return false;
  1121. }
  1122. }
  1123. // instagram client secret
  1124. $instagram_client_secret_fixed = false;
  1125. $sql = "SELECT `name`
  1126. FROM `fcms_config`
  1127. WHERE `name` = 'instagram_client_secret'";
  1128. $result = mysql_query($sql);
  1129. if (!$result)
  1130. {
  1131. displaySqlError($sql, mysql_error());
  1132. return false;
  1133. }
  1134. if (mysql_num_rows($result) > 0)
  1135. {
  1136. $instagram_client_secret_fixed = true;
  1137. }
  1138. if (!$instagram_client_secret_fixed)
  1139. {
  1140. $sql = "INSERT INTO `fcms_config` (`name`, `value`)
  1141. VALUES ('instagram_client_secret', NULL)";
  1142. if (!mysql_query($sql))
  1143. {
  1144. displaySqlError($sql, mysql_error());
  1145. return false;
  1146. }
  1147. }
  1148. // instagram admin nav
  1149. $instagram_admin_nav_fixed = false;
  1150. $sql = "SELECT `link`
  1151. FROM `fcms_navigation`
  1152. WHERE `link` = 'admin_instagram'";
  1153. $result = mysql_query($sql);
  1154. if (!$result)
  1155. {
  1156. displaySqlError($sql, mysql_error());
  1157. return false;
  1158. }
  1159. if (mysql_num_rows($result) > 0)
  1160. {
  1161. $instagram_admin_nav_fixed = true;
  1162. }
  1163. if (!$instagram_admin_nav_fixed)
  1164. {
  1165. $adminOrder = getNextAdminNavigationOrder();
  1166. $sql = "INSERT INTO `fcms_navigation` (`link`, `col`, `order`, `req`)
  1167. VALUES ('admin_instagram', 6, $adminOrder, 1)";
  1168. if (!mysql_query($sql))
  1169. {
  1170. displaySqlError($sql, mysql_error());
  1171. return false;
  1172. }
  1173. }
  1174. // instagram user access code
  1175. $instagram_user_fixed = false;
  1176. $sql = "SHOW COLUMNS FROM `fcms_user_settings`";
  1177. $result = mysql_query($sql);
  1178. if (!$result)
  1179. {
  1180. displaySqlError($sql, mysql_error());
  1181. return false;
  1182. }
  1183. if (mysql_num_rows($result) > 0)
  1184. {
  1185. while($r = mysql_fetch_array($result))
  1186. {
  1187. if ($r['Field'] == 'instagram_access_token')
  1188. {
  1189. $instagram_user_fixed = true;
  1190. }
  1191. }
  1192. }
  1193. if (!$instagram_user_fixed)
  1194. {
  1195. $sql = "ALTER TABLE `fcms_user_settings` ADD `instagram_access_token` VARCHAR(255) NULL";
  1196. if (!mysql_query($sql))
  1197. {
  1198. displaySqlError($sql, mysql_error());
  1199. return false;
  1200. }
  1201. }
  1202. // external
  1203. $external_fixed = false;
  1204. $sql = "SHOW COLUMNS FROM `fcms_gallery_photos`";
  1205. $result = mysql_query($sql);
  1206. if (!$result)
  1207. {
  1208. displaySqlError($sql, mysql_error());
  1209. return false;
  1210. }
  1211. if (mysql_num_rows($result) > 0)
  1212. {
  1213. while($r = mysql_fetch_array($result))
  1214. {
  1215. if ($r['Field'] == 'external_id')
  1216. {
  1217. $external_fixed = true;
  1218. }
  1219. }
  1220. }
  1221. if (!$external_fixed)
  1222. {
  1223. $sql = "ALTER TABLE `fcms_gallery_photos` ADD `external_id` INT(11) DEFAULT NULL AFTER `filename`";
  1224. if (!mysql_query($sql))
  1225. {
  1226. displaySqlError($sql, mysql_error());
  1227. return false;
  1228. }
  1229. }
  1230. // external photos
  1231. $external_photos_fixed = false;
  1232. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  1233. $result = mysql_query($sql);
  1234. if (!$result)
  1235. {
  1236. displaySqlError($sql, mysql_error());
  1237. return false;
  1238. }
  1239. if (mysql_num_rows($result) > 0)
  1240. {
  1241. while($r = mysql_fetch_array($result))
  1242. {
  1243. if ($r[0] == 'fcms_gallery_external_photo')
  1244. {
  1245. $external_photos_fixed = true;
  1246. }
  1247. }
  1248. }
  1249. if (!$external_photos_fixed)
  1250. {
  1251. $sql = "CREATE TABLE `fcms_gallery_external_photo` (
  1252. `id` INT(11) NOT NULL AUTO_INCREMENT,
  1253. `source_id` VARCHAR(255) NOT NULL,
  1254. `thumbnail` VARCHAR(255) NOT NULL,
  1255. `medium` VARCHAR(255) NOT NULL,
  1256. `full` VARCHAR(255) NOT NULL,
  1257. PRIMARY KEY (`id`)
  1258. )
  1259. ENGINE=InnoDB DEFAULT CHARSET=utf8";
  1260. if (!mysql_query($sql))
  1261. {
  1262. displaySqlError($sql, mysql_error());
  1263. return false;
  1264. }
  1265. }
  1266. // Rename gallery photo comment
  1267. $photo_com_fixed = false;
  1268. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  1269. $result = mysql_query($sql);
  1270. if (!$result)
  1271. {
  1272. displaySqlError($sql, mysql_error());
  1273. return false;
  1274. }
  1275. if (mysql_num_rows($result) > 0)
  1276. {
  1277. while($r = mysql_fetch_array($result))
  1278. {
  1279. if ($r[0] == 'fcms_gallery_photo_comment')
  1280. {
  1281. $photo_com_fixed = true;
  1282. }
  1283. }
  1284. }
  1285. if (!$photo_com_fixed)
  1286. {
  1287. $sql = "RENAME TABLE `fcms_gallery_comments` TO `fcms_gallery_photo_comment`";
  1288. if (!mysql_query($sql))
  1289. {
  1290. displaySqlError($sql, mysql_error());
  1291. return false;
  1292. }
  1293. }
  1294. // Gallery category comments
  1295. $cat_com_fixed = false;
  1296. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  1297. $result = mysql_query($sql);
  1298. if (!$result)
  1299. {
  1300. displaySqlError($sql, mysql_error());
  1301. return false;
  1302. }
  1303. if (mysql_num_rows($result) > 0)
  1304. {
  1305. while($r = mysql_fetch_array($result))
  1306. {
  1307. if ($r[0] == 'fcms_gallery_category_comment')
  1308. {
  1309. $cat_com_fixed = true;
  1310. }
  1311. }
  1312. }
  1313. if (!$cat_com_fixed)
  1314. {
  1315. $sql = "CREATE TABLE `fcms_gallery_category_comment` (
  1316. `id` INT(11) NOT NULL AUTO_INCREMENT,
  1317. `category_id` INT(11) NOT NULL,
  1318. `comment` TEXT NOT NULL,
  1319. `created` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  1320. `created_id` INT(11) NOT NULL,
  1321. PRIMARY KEY (`id`)
  1322. )
  1323. ENGINE=InnoDB DEFAULT CHARSET=utf8";
  1324. if (!mysql_query($sql))
  1325. {
  1326. displaySqlError($sql, mysql_error());
  1327. return false;
  1328. }
  1329. }
  1330. // instagram automatic
  1331. $instagram_auto_upload_fixed = false;
  1332. $sql = "SHOW COLUMNS FROM `fcms_user_settings`";
  1333. $result = mysql_query($sql);
  1334. if (!$result)
  1335. {
  1336. displaySqlError($sql, mysql_error());
  1337. return false;
  1338. }
  1339. if (mysql_num_rows($result) > 0)
  1340. {
  1341. while($r = mysql_fetch_array($result))
  1342. {
  1343. if ($r['Field'] == 'instagram_auto_upload')
  1344. {
  1345. $instagram_auto_upload_fixed = true;
  1346. }
  1347. }
  1348. }
  1349. if (!$instagram_auto_upload_fixed)
  1350. {
  1351. $sql = "ALTER TABLE `fcms_user_settings` ADD `instagram_auto_upload` TINYINT(1) DEFAULT 0";
  1352. if (!mysql_query($sql))
  1353. {
  1354. displaySqlError($sql, mysql_error());
  1355. return false;
  1356. }
  1357. }
  1358. // instagram scheduler
  1359. $instagram_sched_fixed = false;
  1360. $sql = "SELECT `type`
  1361. FROM `fcms_schedule`
  1362. WHERE `type` = 'instagram'
  1363. LIMIT 1";
  1364. $result = mysql_query($sql);
  1365. if (!$result)
  1366. {
  1367. displaySqlError($sql, mysql_error());
  1368. return false;
  1369. }
  1370. if (mysql_num_rows($result) > 0)
  1371. {
  1372. $instagram_sched_fixed = true;
  1373. }
  1374. if (!$instagram_sched_fixed)
  1375. {
  1376. $sql = "INSERT INTO `fcms_schedule` (`type`, `repeat`)
  1377. VALUES ('instagram', 'hourly')";
  1378. if (!mysql_query($sql))
  1379. {
  1380. displaySqlError($sql, mysql_error());
  1381. return false;
  1382. }
  1383. }
  1384. return true;
  1385. }
  1386. /**
  1387. * upgrade310
  1388. *
  1389. * Upgrade database to version 3.1.
  1390. *
  1391. * @return boolean
  1392. */
  1393. function upgrade310 ()
  1394. {
  1395. global $cfg_mysql_db;
  1396. // Poll comments
  1397. $poll_com_fixed = false;
  1398. $sql = "SHOW TABLES FROM `$cfg_mysql_db`";
  1399. $result = mysql_query($sql);
  1400. if (!$result)
  1401. {
  1402. displaySqlError($sql, mysql_error());
  1403. return false;
  1404. }
  1405. if (mysql_num_rows($result) > 0)
  1406. {
  1407. while($r = mysql_fetch_array($result))
  1408. {
  1409. if ($r[0] == 'fcms_poll_comment')
  1410. {
  1411. $poll_com_fixed = true;
  1412. }
  1413. }
  1414. }
  1415. if (!$poll_com_fixed)
  1416. {
  1417. $sql = "CREATE TABLE `fcms_poll_comment` (
  1418. `id` INT(11) NOT NULL AUTO_INCREMENT,
  1419. `poll_id` INT(11) NOT NULL,
  1420. `comment` TEXT NOT NULL,
  1421. `created` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  1422. `created_id` INT(11) NOT NULL,
  1423. PRIMARY KEY (`id`)
  1424. )
  1425. ENGINE=InnoDB DEFAULT CHARSET=utf8";
  1426. if (!mysql_query($sql))
  1427. {
  1428. displaySqlError($sql, mysql_error());
  1429. return false;
  1430. }
  1431. }
  1432. return true;
  1433. }