PageRenderTime 33ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/settings.php

https://bitbucket.org/ryanhowdy/family-connections
PHP | 1500 lines | 1068 code | 229 blank | 203 comment | 117 complexity | 0278c49529650dad75031d33d9fe7c6f MD5 | raw file
Possible License(s): Apache-2.0, GPL-2.0
  1. <?php
  2. /**
  3. * Settings
  4. *
  5. * PHP version 5
  6. *
  7. * @category FCMS
  8. * @package FamilyConnections
  9. * @author Ryan Haudenschilt <r.haudenschilt@gmail.com>
  10. * @copyright 2007 Haudenschilt LLC
  11. * @license http://www.gnu.org/licenses/gpl-2.0.html GPLv2
  12. * @link http://www.familycms.com/wiki/
  13. */
  14. session_start();
  15. define('URL_PREFIX', '');
  16. define('GALLERY_PREFIX', 'gallery/');
  17. require 'fcms.php';
  18. load('settings', 'foursquare', 'facebook', 'socialmedia', 'youtube', 'instagram');
  19. init();
  20. // Globals
  21. $settingsObj = new Settings($fcmsUser->id);
  22. $TMPL = array(
  23. 'currentUserId' => $fcmsUser->id,
  24. 'sitename' => getSiteName(),
  25. 'nav-link' => getNavLinks(),
  26. 'pagetitle' => T_('Settings'),
  27. 'path' => URL_PREFIX,
  28. 'displayname' => $fcmsUser->displayName,
  29. 'version' => getCurrentVersion(),
  30. 'year' => date('Y')
  31. );
  32. control();
  33. exit();
  34. /**
  35. * control
  36. *
  37. * The controlling structure for this script.
  38. *
  39. * @return void
  40. */
  41. function control ()
  42. {
  43. global $fcmsUser;
  44. if (checkAccess($fcmsUser->id) == 11)
  45. {
  46. displayInvalidAccessLevel();
  47. return;
  48. }
  49. // Saving changes
  50. elseif (isset($_POST['submit']))
  51. {
  52. if ($_GET['view'] == 'account')
  53. {
  54. displayEditAccountSubmit();
  55. }
  56. elseif ($_GET['view'] == 'settings')
  57. {
  58. displayEditSettingsSubmit();
  59. }
  60. elseif ($_GET['view'] == 'notifications')
  61. {
  62. displayEditNotificationsSubmit();
  63. }
  64. elseif ($_GET['view'] == 'familynews')
  65. {
  66. displayEditFamilyNewsSubmit();
  67. }
  68. elseif ($_GET['view'] == 'messageboard')
  69. {
  70. displayEditMessageBoardSubmit();
  71. }
  72. }
  73. // Theme
  74. elseif (isset($_GET['use']) && $_GET['view'] == 'theme')
  75. {
  76. displayEditThemeSubmit();
  77. }
  78. elseif (isset($_GET['delete']) && $_GET['view'] == 'theme' && !isset($_GET['confirmed']))
  79. {
  80. displayDeleteThemeConfirmation();
  81. }
  82. elseif (isset($_POST['delconfirm']) || (isset($_GET['delete']) && isset($_GET['confirmed'])))
  83. {
  84. displayDeleteThemeSubmit();
  85. }
  86. // Import
  87. elseif (isset($_GET['import']) && isset($_GET['view']))
  88. {
  89. displayImportBlogPosts();
  90. }
  91. // Edit
  92. elseif (isset($_GET['view']))
  93. {
  94. if ($_GET['view'] == 'account')
  95. {
  96. displayEditAccount();
  97. }
  98. elseif ($_GET['view'] == 'theme')
  99. {
  100. displayEditTheme();
  101. }
  102. elseif ($_GET['view'] == 'settings')
  103. {
  104. displayEditSettings();
  105. }
  106. elseif ($_GET['view'] == 'notifications')
  107. {
  108. displayEditNotifications();
  109. }
  110. elseif ($_GET['view'] == 'familynews')
  111. {
  112. displayEditFamilyNews();
  113. }
  114. elseif ($_GET['view'] == 'messageboard')
  115. {
  116. displayEditMessageBoard();
  117. }
  118. // Facebook
  119. elseif ($_GET['view'] == 'facebook')
  120. {
  121. if (isset($_GET['code']) && isset($_GET['state']))
  122. {
  123. displayEditFacebookSubmit();
  124. }
  125. else
  126. {
  127. displayEditFacebook();
  128. }
  129. }
  130. // Foursquare
  131. elseif ($_GET['view'] == 'foursquare')
  132. {
  133. if (isset($_GET['code']))
  134. {
  135. displayFoursquareSubmit();
  136. }
  137. else
  138. {
  139. displayEditFoursquare();
  140. }
  141. }
  142. // Instagram
  143. elseif ($_GET['view'] == 'instagram')
  144. {
  145. if (isset($_GET['code']))
  146. {
  147. displayEditInstagramSubmit();
  148. }
  149. else
  150. {
  151. displayEditInstagram();
  152. }
  153. }
  154. // YouTube
  155. elseif ($_GET['view'] == 'youtube')
  156. {
  157. if (isset($_GET['token']))
  158. {
  159. displayEditYouTubeSubmit();
  160. }
  161. else
  162. {
  163. displayEditYouTube();
  164. }
  165. }
  166. else
  167. {
  168. displayEditAccount();
  169. }
  170. }
  171. // Revoke app access
  172. elseif (isset($_GET['revoke']))
  173. {
  174. if ($_GET['revoke'] == 'facebook')
  175. {
  176. displayRevokeFacebookAccess();
  177. }
  178. elseif ($_GET['revoke'] == 'foursquare')
  179. {
  180. displayRevokeFoursquareAccess();
  181. }
  182. elseif ($_GET['revoke'] == 'instagram')
  183. {
  184. displayRevokeInstagramAccess();
  185. }
  186. elseif ($_GET['revoke'] == 'youtube')
  187. {
  188. displayRevokeYouTubeAccess();
  189. }
  190. }
  191. else
  192. {
  193. displayEditAccount();
  194. }
  195. }
  196. /**
  197. * displayHeader
  198. *
  199. * Displays the header of the page, including the leftcolumn navigation.
  200. *
  201. * @param string $js Allows you to overwrite the javascript that is included in the header.
  202. *
  203. * @return void
  204. */
  205. function displayHeader ($js = '')
  206. {
  207. global $fcmsUser, $TMPL;
  208. $TMPL['javascript'] = $js;
  209. // Default js
  210. if ($js == '')
  211. {
  212. $TMPL['javascript'] = '
  213. <script type="text/javascript">
  214. //<![CDATA[
  215. Event.observe(window, \'load\', function() {
  216. initChatBar(\''.T_('Chat').'\', \''.$TMPL['path'].'\');
  217. initAdvancedTagging();
  218. });
  219. //]]>
  220. </script>';
  221. }
  222. include_once getTheme($fcmsUser->id).'header.php';
  223. echo '
  224. <div id="settings" class="centercontent">
  225. <div id="leftcolumn">
  226. <h3>'.T_('General Settings').'</h3>
  227. <ul class="menu">
  228. <li><a href="?view=account">'.T_('Account').'</a></li>
  229. <li><a href="?view=theme">'.T_('Theme').'</a></li>
  230. <li><a href="?view=settings">'.T_('Settings').'</a></li>
  231. <li><a href="?view=notifications">'.T_('Notifications').'</a></li>
  232. </ul>
  233. <h3>'.T_('Plugin Settings').'</h3>
  234. <ul class="menu">
  235. <li><a href="?view=familynews">'.T_('Family News').'</a></li>
  236. <li><a href="?view=messageboard">'.T_('Message Board').'</a></li>
  237. </ul>';
  238. $facebookConfig = getFacebookConfigData();
  239. $foursquareConfig = getFoursquareConfigData();
  240. $instagramConfig = getInstagramConfigData();
  241. $youtubeConfig = getYouTubeConfigData();
  242. $facebookLink = '';
  243. $foursquareLink = '';
  244. $instagramLink = '';
  245. $youtubeLink = '';
  246. if (!empty($facebookConfig['fb_app_id']) && !empty($facebookConfig['fb_secret']))
  247. {
  248. $facebookLink = '<li><a href="?view=facebook">Facebook</a></li>';
  249. }
  250. if (!empty($foursquareConfig['fs_client_id']) && !empty($foursquareConfig['fs_client_secret']))
  251. {
  252. $foursquareLink = '<li><a href="?view=foursquare">Foursquare</a></li>';
  253. }
  254. if (!empty($instagramConfig['instagram_client_id']) && !empty($instagramConfig['instagram_client_secret']))
  255. {
  256. $instagramLink = '<li><a href="?view=instagram">Instagram</a></li>';
  257. }
  258. if (!empty($youtubeConfig['youtube_key']))
  259. {
  260. $youtubeLink = '<li><a href="?view=youtube">YouTube</a></li>';
  261. }
  262. $links = "$facebookLink$foursquareLink$instagramLink$youtubeLink";
  263. if (!empty($links))
  264. {
  265. echo '
  266. <h3>'.T_('Social Media').'</h3>
  267. <ul class="menu">
  268. '.$facebookLink.'
  269. '.$foursquareLink.'
  270. '.$instagramLink.'
  271. '.$youtubeLink.'
  272. </ul>';
  273. }
  274. echo '
  275. </div>
  276. <div id="maincolumn">';
  277. }
  278. /**
  279. * displayFooter
  280. *
  281. * @return void
  282. */
  283. function displayFooter()
  284. {
  285. global $fcmsUser, $TMPL;
  286. echo '
  287. </div>
  288. <div style="clear:both"></div>
  289. </div><!-- #settings .centercontent -->';
  290. include_once getTheme($fcmsUser->id).'footer.php';
  291. }
  292. /**
  293. * displayEditAccount
  294. *
  295. * @return void
  296. */
  297. function displayEditAccount ()
  298. {
  299. global $fcmsUser, $settingsObj;
  300. displayHeader();
  301. $settingsObj->displayAccountInformation();
  302. displayFooter();
  303. return;
  304. }
  305. /**
  306. * displayEditAccountSubmit
  307. *
  308. * @return void
  309. */
  310. function displayEditAccountSubmit ()
  311. {
  312. global $fcmsUser, $settingsObj;
  313. $email = strip_tags($_POST['email']);
  314. $cleanEmail = escape_string($email);
  315. $emailstart = $settingsObj->currentUserEmail;
  316. // Check email
  317. if ($_POST['email'] != $emailstart)
  318. {
  319. $sql2 = "SELECT `email` FROM `fcms_users`
  320. WHERE email='$cleanEmail'";
  321. $result = mysql_query($sql2);
  322. if (!$result)
  323. {
  324. displayHeader();
  325. displaySqlError($sql2, mysql_error());
  326. displayFooter();
  327. return;
  328. }
  329. $email_check = mysql_num_rows($result);
  330. if ($email_check > 0)
  331. {
  332. displayHeader();
  333. echo '
  334. <p class="error-alert">
  335. '.sprintf(T_('The email address %s is already in use. Please choose a different email.'), $email).'
  336. </p>';
  337. $settingsObj->displayAccountInformation();
  338. displayFooter();
  339. return;
  340. }
  341. }
  342. $sql = "UPDATE `fcms_users` SET ";
  343. if (isset($_POST['pass']))
  344. {
  345. $orig_pass = $_SESSION['login_pw'];
  346. if (!empty($_POST['pass']))
  347. {
  348. $sql .= "password = '".md5($_POST['pass'])."', ";
  349. $_SESSION['login_pw'] = md5($_POST['pass']);
  350. }
  351. }
  352. $sql .= "`email` = '$cleanEmail'
  353. WHERE id = '$fcmsUser->id'";
  354. if (!mysql_query($sql))
  355. {
  356. displayHeader();
  357. displaySqlError($sql, mysql_error());
  358. displayFooter();
  359. return;
  360. }
  361. if (isset($orig_pass))
  362. {
  363. echo '
  364. <html>
  365. <head>
  366. <title>'.T_('Password Change').'</title>
  367. <style>
  368. html { font: 12px/18px Verdana, Arial, sans-serif; background-color: #fff; color: #333; text-align: center; }
  369. body { width: 500px; margin: 50px auto; }
  370. div { padding: 30px; background-color: #cff0cc; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; }
  371. h1 { font: bold 20px/28px Verdana, Arial, sans-serif; }
  372. a { font: bold 14px/20px Verdana, Arial, sans-serif; background-color: #aae4a5; color: #333; text-decoration: none; padding: 5px 15px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; }
  373. a:hover { background-color: #6cd163; }
  374. </style>
  375. </head>
  376. <body>
  377. <div class="ok-alert">
  378. <h1>'.T_('To complete your changes, you must logout and log back in again.').'</h1><br/>
  379. <a href="logout.php">'.T_('Logout').'</a><br/>
  380. <p>'.T_('You will be automatically logged out in 10 seconds.').'</a></p>
  381. </div>
  382. <meta http-equiv=\'refresh\' content=\'10;URL=logout.php\'>
  383. </body>
  384. </html>';
  385. return;
  386. }
  387. displayHeader();
  388. displayOkMessage();
  389. $settingsObj->displayAccountInformation();
  390. displayFooter();
  391. }
  392. /**
  393. * displayEditTheme
  394. *
  395. * @return void
  396. */
  397. function displayEditTheme ()
  398. {
  399. global $fcmsUser, $settingsObj;
  400. $js = '
  401. <script type="text/javascript">
  402. Event.observe(window, \'load\', function() {
  403. deleteConfirmationLinks("del_theme", "'.T_('Are you sure you want to DELETE this theme?').'");
  404. });
  405. </script>';
  406. displayHeader($js);
  407. $settingsObj->displayTheme();
  408. displayFooter();
  409. return;
  410. }
  411. /**
  412. * displayEditThemeSubmit
  413. *
  414. * Changes the theme.
  415. *
  416. * @return void
  417. */
  418. function displayEditThemeSubmit ()
  419. {
  420. global $fcmsUser, $settingsObj;
  421. $theme = basename($_GET['use']);
  422. $theme = escape_string($theme);
  423. $sql = "UPDATE `fcms_user_settings`
  424. SET `theme` = '$theme'
  425. WHERE `user` = '$fcmsUser->id'";
  426. if (!mysql_query($sql))
  427. {
  428. displayHeader();
  429. displaySqlError($sql, mysql_error());
  430. displayFooter();
  431. return;
  432. }
  433. displayHeader();
  434. displayOkMessage();
  435. $settingsObj->displayTheme();
  436. displayFooter();
  437. }
  438. /**
  439. * displayDeleteThemeSubmit
  440. *
  441. * @return void
  442. */
  443. function displayDeleteThemeSubmit ()
  444. {
  445. global $fcmsUser, $settingsObj;
  446. displayHeader();
  447. $theme = basename($_GET['delete']);
  448. if (!file_exists(THEMES.$theme))
  449. {
  450. echo '
  451. <p class="error-alert">'.sprintf(T_('Theme [%s] not found.'), $theme).'</p>';
  452. $settingsObj->displayTheme();
  453. displayFooter();
  454. return;
  455. }
  456. if (!is_dir(THEMES.$theme))
  457. {
  458. echo '
  459. <p class="error-alert">'.sprintf(T_('[%s] is not a directory.'), $theme).'</p>';
  460. $settingsObj->displayTheme();
  461. displayFooter();
  462. return;
  463. }
  464. if (!deleteDirectory(THEMES.$theme))
  465. {
  466. echo '
  467. <p class="error-alert">'.sprintf(T_('Could not delete theme [%s].'), $theme).'</p>';
  468. $settingsObj->displayTheme();
  469. displayFooter();
  470. return;
  471. }
  472. displayOkMessage();
  473. $settingsObj->displayTheme();
  474. displayFooter();
  475. }
  476. /**
  477. * displayEditSettings
  478. *
  479. * @return void
  480. */
  481. function displayEditSettings ()
  482. {
  483. global $fcmsUser, $settingsObj;
  484. displayHeader();
  485. $settingsObj->displaySettings();
  486. displayFooter();
  487. return;
  488. }
  489. /**
  490. * displayEditSettingsSubmit
  491. *
  492. * @return void
  493. */
  494. function displayEditSettingsSubmit ()
  495. {
  496. global $fcmsUser, $settingsObj;
  497. displayHeader();
  498. $sql = "UPDATE `fcms_user_settings` SET ";
  499. if ($_POST['advanced_upload'])
  500. {
  501. if ($_POST['advanced_upload'] == 'yes')
  502. {
  503. $sql .= "`advanced_upload` = '1', ";
  504. }
  505. else
  506. {
  507. $sql .= "`advanced_upload` = '0', ";
  508. }
  509. }
  510. if ($_POST['advanced_tagging'])
  511. {
  512. if ($_POST['advanced_tagging'] == 'yes')
  513. {
  514. $sql .= "`advanced_tagging` = '1', ";
  515. }
  516. else
  517. {
  518. $sql .= "`advanced_tagging` = '0', ";
  519. }
  520. }
  521. if ($_POST['language'])
  522. {
  523. $sql .= "`language` = '".escape_string($_POST['language'])."', ";
  524. }
  525. if ($_POST['timezone'])
  526. {
  527. $sql .= "`timezone` = '".escape_string($_POST['timezone'])."', ";
  528. }
  529. if ($_POST['dst'])
  530. {
  531. if ($_POST['dst'] == 'on')
  532. {
  533. $sql .= "`dst` = '1', ";
  534. }
  535. else
  536. {
  537. $sql .= "`dst` = '0', ";
  538. }
  539. }
  540. if ($_POST['displayname'])
  541. {
  542. $sql .= "`displayname` = '".(int)$_POST['displayname']."', ";
  543. }
  544. if ($_POST['frontpage'])
  545. {
  546. $sql .= "`frontpage` = '".escape_string($_POST['frontpage'])."', ";
  547. }
  548. $sql = substr($sql, 0, -2); // remove the extra comma space at the end
  549. $sql .= " WHERE `user` = '$fcmsUser->id'";
  550. if (strlen($sql) > 50)
  551. {
  552. if (!mysql_query($sql))
  553. {
  554. displaySqlError($sql, mysql_error());
  555. displayFooter();
  556. return;
  557. }
  558. displayOkMessage();
  559. }
  560. $settingsObj->displaySettings();
  561. displayFooter();
  562. }
  563. /**
  564. * displayEditNotifications
  565. *
  566. * @return void
  567. */
  568. function displayEditNotifications ()
  569. {
  570. global $fcmsUser, $settingsObj;
  571. displayHeader();
  572. $settingsObj->displayNotifications();
  573. displayFooter();
  574. return;
  575. }
  576. /**
  577. * displayEditNotificationsSubmit
  578. *
  579. * @return void
  580. */
  581. function displayEditNotificationsSubmit ()
  582. {
  583. global $fcmsUser, $settingsObj;
  584. displayHeader();
  585. if ($_POST['email_updates'])
  586. {
  587. if ($_POST['email_updates'] == 'yes')
  588. {
  589. $email_updates = '1';
  590. }
  591. else
  592. {
  593. $email_updates = '0';
  594. }
  595. $sql = "UPDATE `fcms_user_settings`
  596. SET `email_updates` = '$email_updates'
  597. WHERE `user` = '$fcmsUser->id'";
  598. if (!mysql_query($sql))
  599. {
  600. displaySqlError($sql, mysql_error());
  601. displayFooter();
  602. return;
  603. }
  604. displayOkMessage();
  605. }
  606. $settingsObj->displayNotifications();
  607. displayFooter();
  608. }
  609. /**
  610. * displayEditFamilyNews
  611. *
  612. * @return void
  613. */
  614. function displayEditFamilyNews ()
  615. {
  616. global $fcmsUser, $settingsObj;
  617. displayHeader();
  618. $settingsObj->displayFamilyNews();
  619. displayFooter();
  620. return;
  621. }
  622. /**
  623. * displayEditFamilyNewsSubmit
  624. *
  625. * @return void
  626. */
  627. function displayEditFamilyNewsSubmit ()
  628. {
  629. global $fcmsUser, $settingsObj;
  630. displayHeader();
  631. $blogger = isset($_POST['blogger']) ? escape_string($_POST['blogger']) : '';
  632. $tumblr = isset($_POST['tumblr']) ? escape_string($_POST['tumblr']) : '';
  633. $wordpress = isset($_POST['wordpress']) ? escape_string($_POST['wordpress']) : '';
  634. $posterous = isset($_POST['posterous']) ? escape_string($_POST['posterous']) : '';
  635. $sql = "UPDATE `fcms_user_settings`
  636. SET `blogger` = '$blogger',
  637. `tumblr` = '$tumblr',
  638. `wordpress` = '$wordpress',
  639. `posterous` = '$posterous'
  640. WHERE `user` = '$fcmsUser->id'";
  641. if (!mysql_query($sql))
  642. {
  643. displaySqlError($sql, mysql_error());
  644. displayFooter();
  645. return;
  646. }
  647. displayOkMessage();
  648. $settingsObj->displayFamilyNews();
  649. displayFooter();
  650. }
  651. /**
  652. * displayEditMessageBoard
  653. *
  654. * @return void
  655. */
  656. function displayEditMessageBoard ()
  657. {
  658. global $fcmsUser, $settingsObj;
  659. displayHeader();
  660. $settingsObj->displayMessageBoard();
  661. displayFooter();
  662. return;
  663. }
  664. /**
  665. * displayEditMessageBoardSubmit
  666. *
  667. * @return void
  668. */
  669. function displayEditMessageBoardSubmit ()
  670. {
  671. global $fcmsUser, $settingsObj;
  672. displayHeader();
  673. if (isset($_POST['boardsort']))
  674. {
  675. $boardsort = escape_string($_POST['boardsort']);
  676. $sql = "UPDATE `fcms_user_settings`
  677. SET `boardsort` = '$boardsort'
  678. WHERE `user` = '$fcmsUser->id'";
  679. if (!mysql_query($sql))
  680. {
  681. displaySqlError($sql, mysql_error());
  682. displayFooter();
  683. return;
  684. }
  685. displayOkMessage();
  686. }
  687. $settingsObj->displayMessageBoard();
  688. displayFooter();
  689. }
  690. /**
  691. * displayImportBlogPosts
  692. *
  693. * @return void
  694. */
  695. function displayImportBlogPosts ()
  696. {
  697. global $fcmsUser, $settingsObj;
  698. displayHeader();
  699. // setup familynew obj
  700. include_once 'inc/familynews_class.php';
  701. $newsObj = new FamilyNews($fcmsUser->id);
  702. // get external ids
  703. $external_ids = $newsObj->getExternalPostIds();
  704. // Get import blog settings
  705. $sql = "SELECT `user`, `blogger`, `tumblr`, `wordpress`, `posterous`
  706. FROM `fcms_user_settings`
  707. WHERE `user` = '$fcmsUser->id'";
  708. $result = mysql_query($sql);
  709. if (!$result)
  710. {
  711. displaySqlError($sql, mysql_error());
  712. displayFooter();
  713. return;
  714. }
  715. if (mysql_num_rows($result) <= 0)
  716. {
  717. echo '<div class="error-alert">'.T_('Nothing to import.').'</div>';
  718. $settingsObj->displayFamilyNews();
  719. displayFooter();
  720. return;
  721. }
  722. $r = mysql_fetch_assoc($result);
  723. $count = 0;
  724. switch ($_GET['import'])
  725. {
  726. case 'blogger':
  727. $count = $newsObj->importBloggerPosts($r['blogger'], $fcmsUser->id, '', $external_ids);
  728. if ($count === false)
  729. {
  730. $settingsObj->displayFamilyNews();
  731. displayFooter();
  732. return;
  733. }
  734. break;
  735. case 'tumblr':
  736. $count = $newsObj->importTumblrPosts($r['tumblr'], $fcmsUser->id, '', $external_ids);
  737. if ($count === false)
  738. {
  739. $settingsObj->displayFamilyNews();
  740. displayFooter();
  741. return;
  742. }
  743. break;
  744. case 'wordpress':
  745. $count = $newsObj->importWordpressPosts($r['wordpress'], $fcmsUser->id, '', $external_ids);
  746. if ($count === false)
  747. {
  748. $settingsObj->displayFamilyNews();
  749. displayFooter();
  750. return;
  751. }
  752. break;
  753. case 'posterous':
  754. $count = $newsObj->importPosterousPosts($r['posterous'], $fcmsUser->id, '', $external_ids);
  755. if ($count === false)
  756. {
  757. $settingsObj->displayFamilyNews();
  758. displayFooter();
  759. return;
  760. }
  761. break;
  762. }
  763. displayOkMessage(sprintf(T_ngettext('%d post has been imported.', '%d posts have been imported.', $count), $count));
  764. $settingsObj->displayFamilyNews();
  765. displayFooter();
  766. return;
  767. }
  768. /**
  769. * displayDeleteThemeConfirmation
  770. *
  771. * The confirmation screen that is shown when trying to delete a theme with js turned off.
  772. *
  773. * @return void
  774. */
  775. function displayDeleteThemeConfirmation ()
  776. {
  777. $theme = basename($_GET['delete']);
  778. $theme = cleanOutput($theme);
  779. displayHeader();
  780. echo '
  781. <div class="info-alert">
  782. <form action="?view=theme&amp;delete='.$theme.'&amp;confirmed=1" method="post">
  783. <h2>'.T_('Are you sure you want to DELETE this?').'</h2>
  784. <p><b><i>'.T_('This can NOT be undone.').'</i></b></p>
  785. <div>
  786. <input style="float:left;" type="submit" id="delconfirm" name="delconfirm" value="'.T_('Yes').'"/>
  787. <a style="float:right;" href="?view=theme">'.T_('Cancel').'</a>
  788. </div>
  789. </form>
  790. </div>';
  791. displayFooter();
  792. }
  793. /**
  794. * displayInvalidAccessLevel
  795. *
  796. * @return void
  797. */
  798. function displayInvalidAccessLevel ()
  799. {
  800. displayHeader();
  801. echo '
  802. <p class="error-alert">
  803. <b>'.T_('You do not have access to view this page.').'</b><br/>
  804. <a href="contact.php">'.T_('Please contact your website\'s administrator if you feel you should have access to this page.').'</a>
  805. </p>';
  806. displayFooter();
  807. }
  808. /**
  809. * displayEditFacebook
  810. *
  811. * @return void
  812. */
  813. function displayEditFacebook ()
  814. {
  815. global $fcmsUser;
  816. displayHeader();
  817. $config = getFacebookConfigData();
  818. $accessToken = getUserFacebookAccessToken($fcmsUser->id);
  819. if (!empty($config['fb_app_id']) && !empty($config['fb_secret']))
  820. {
  821. // Setup url for callbacks
  822. $callbackUrl = getDomainAndDir();
  823. $callbackUrl .= 'settings.php?view=facebook';
  824. $facebook = new Facebook(array(
  825. 'appId' => $config['fb_app_id'],
  826. 'secret' => $config['fb_secret'],
  827. ));
  828. $facebook->setAccessToken($accessToken);
  829. // Check if the user is logged in and authed
  830. $fbUser = $facebook->getUser();
  831. $fbProfile = '';
  832. if ($fbUser)
  833. {
  834. try
  835. {
  836. $fbProfile = $facebook->api('/me');
  837. }
  838. catch (FacebookApiException $e)
  839. {
  840. $fbUser = null;
  841. }
  842. }
  843. if ($fbUser)
  844. {
  845. $user = '<a href="'.$fbProfile['link'].'">'.$fbProfile['email'].'</a>';
  846. $status = sprintf(T_('Currently connected as: %s'), $user);
  847. $status .= '<br/><br/><img src="https://graph.facebook.com/'.$fbUser.'/picture" alt="Facebook">';
  848. $link = '<a class="disconnect" href="?revoke=facebook">'.T_('Disconnect').'</a>';
  849. }
  850. else
  851. {
  852. $params = array('scope' => 'user_about_me,user_birthday,user_location,email,publish_stream,offline_access');
  853. $status = T_('Not Connected');
  854. $link = '<a href="'.$facebook->getLoginUrl($params).'">'.T_('Connect').'</a>';
  855. }
  856. }
  857. echo '
  858. <div class="social-media-connect">
  859. <img class="icon" src="ui/images/facebook.png" alt="Facebook"/>
  860. <h2>Facebook</h2>
  861. <p>'.T_('Facebook helps you connect and share with the people in your life.').'</p>
  862. <div class="status">'.$status.'</div>
  863. <div class="action">'.$link.'</div>
  864. </div>';
  865. displayFooter();
  866. }
  867. /**
  868. * displayEditFacebookSubmit
  869. *
  870. * @return void
  871. */
  872. function displayEditFacebookSubmit ()
  873. {
  874. global $fcmsUser, $settingsObj;
  875. $data = getFacebookConfigData();
  876. if (!empty($data['fb_app_id']) && !empty($data['fb_secret']))
  877. {
  878. $facebook = new Facebook(array(
  879. 'appId' => $data['fb_app_id'],
  880. 'secret' => $data['fb_secret'],
  881. ));
  882. $accessToken = $facebook->getAccessToken();
  883. $sql = "UPDATE `fcms_user_settings`
  884. SET `fb_access_token` = '$accessToken'
  885. WHERE `user` = '$fcmsUser->id'";
  886. if (!mysql_query($sql))
  887. {
  888. displayHeader();
  889. displaySqlError($sql, mysql_error());
  890. displayFooter();
  891. return;
  892. }
  893. }
  894. // Facebook isn't configured
  895. else
  896. {
  897. displayHeader();
  898. echo '
  899. <div class="info-alert">
  900. <h2>'.T_('Facebook isn\'t Configured Yet.').'</h2>
  901. <p>'.T_('Unfortunately, your website administrator has not set up Facebook yet.').'</p>
  902. </div>';
  903. displayFooter();
  904. }
  905. header("Location: settings.php?view=facebook");
  906. }
  907. /**
  908. * displayRevokeFacebookAccess
  909. *
  910. * @return void
  911. */
  912. function displayRevokeFacebookAccess ()
  913. {
  914. global $fcmsUser;
  915. $sql = "UPDATE `fcms_user_settings`
  916. SET `fb_access_token` = NULL
  917. WHERE `user` = '$fcmsUser->id'";
  918. if (!mysql_query($sql))
  919. {
  920. displayHeader();
  921. displaySqlError($sql, mysql_error());
  922. displayFooter();
  923. return;
  924. }
  925. // remove any facebook session vars
  926. foreach ($_SESSION as $key => $val)
  927. {
  928. if (substr($key, 0, 3) == 'fb_')
  929. {
  930. unset($_SESSION[$key]);
  931. }
  932. }
  933. header("Location: settings.php?view=facebook");
  934. }
  935. /**
  936. * displayEditFoursquare
  937. *
  938. * @return void
  939. */
  940. function displayEditFoursquare ()
  941. {
  942. global $fcmsUser;
  943. displayHeader();
  944. $config = getFoursquareConfigData();
  945. $user = getFoursquareUserData($fcmsUser->id);
  946. // Setup url for callbacks
  947. $callbackUrl = getDomainAndDir();
  948. $callbackUrl .= 'settings.php?view=foursquare';
  949. $fsObj = new EpiFoursquare($config['fs_client_id'], $config['fs_client_secret']);
  950. if (!empty($user['fs_user_id']) && !empty($user['fs_access_token']))
  951. {
  952. $fsObjAuth = new EpiFoursquare(
  953. $config['fs_client_id'],
  954. $config['fs_client_secret'],
  955. $user['fs_access_token']
  956. );
  957. $self = $fsObjAuth->get('/users/self');
  958. $user = '<a href="http://foursquare.com/user/'.$self->response->user->id.'">'.$self->response->user->contact->email.'</a>';
  959. $status = sprintf(T_('Currently connected as: %s'), $user);
  960. $status .= '<br/><br/><img src="'.$self->response->user->photo.'"/>';
  961. $link = '<a class="disconnect" href="?revoke=foursquare">'.T_('Disconnect').'</a>';
  962. }
  963. else
  964. {
  965. $status = '<span class="not_connected">'.T_('Not Connected').'</span>';
  966. $link = '<a href="'.$fsObj->getAuthorizeUrl($callbackUrl).'">'.T_('Connect').'</a>';
  967. }
  968. echo '
  969. <div class="social-media-connect">
  970. <img class="icon" src="ui/images/foursquare.png" alt="Foursquare"/>
  971. <h2>Foursquare</h2>
  972. <p>'.T_('A location-based social networking website for your phone.').'</p>
  973. <div class="status">'.$status.'</div>
  974. <div class="action">'.$link.'</div>
  975. </div>';
  976. displayFooter();
  977. }
  978. /**
  979. * displayFoursquareSubmit
  980. *
  981. * The submit screen for saving foursquare data.
  982. *
  983. * @return void
  984. */
  985. function displayFoursquareSubmit ()
  986. {
  987. global $fcmsUser, $settingsObj;
  988. $r = getFoursquareConfigData();
  989. $id = cleanOutput($r['fs_client_id']);
  990. $secret = cleanOutput($r['fs_client_secret']);
  991. $url = cleanOutput($r['fs_callback_url']);
  992. $fsObj = new EpiFoursquare($id, $secret);
  993. $token = $fsObj->getAccessToken($_GET['code'], $url);
  994. $fsObjAuth = new EpiFoursquare($id, $secret, $token->access_token);
  995. $self = $fsObjAuth->get('/users/self');
  996. $sql = "UPDATE `fcms_user_settings`
  997. SET `fs_user_id` = '".$self->response->user->id."',
  998. `fs_access_token` = '".$token->access_token."'
  999. WHERE `user` = '$fcmsUser->id'";
  1000. if (!mysql_query($sql))
  1001. {
  1002. displayHeader();
  1003. displaySqlError($sql, mysql_error());
  1004. displayFooter();
  1005. return;
  1006. }
  1007. header("Location: settings.php?view=foursquare");
  1008. }
  1009. /**
  1010. * displayRevokeFoursquareAccess
  1011. *
  1012. * @return void
  1013. */
  1014. function displayRevokeFoursquareAccess ()
  1015. {
  1016. global $fcmsUser;
  1017. $sql = "UPDATE `fcms_user_settings`
  1018. SET `fs_user_id` = NULL, `fs_access_token` = NULL
  1019. WHERE `user` = '$fcmsUser->id'";
  1020. if (!mysql_query($sql))
  1021. {
  1022. displayHeader();
  1023. displaySqlError($sql, mysql_error());
  1024. displayFooter();
  1025. return;
  1026. }
  1027. header("Location: settings.php?view=foursquare");
  1028. }
  1029. /**
  1030. * displayEditInstagram
  1031. *
  1032. * @return void
  1033. */
  1034. function displayEditInstagram ()
  1035. {
  1036. global $fcmsUser;
  1037. displayHeader();
  1038. $config = getInstagramConfigData();
  1039. $callbackUrl = getDomainAndDir();
  1040. $callbackUrl .= 'settings.php?view=instagram';
  1041. $accessToken = getUserInstagramAccessToken($fcmsUser->id);
  1042. $instagram = new Instagram($config['instagram_client_id'], $config['instagram_client_secret'], $accessToken);
  1043. if (!$accessToken)
  1044. {
  1045. $url = $instagram->authorizeUrl($callbackUrl, array('basic', 'comments', 'likes', 'relationships'));
  1046. $status = T_('Not Connected');
  1047. $link = '<a href="'.$url.'">'.T_('Connect').'</a>';
  1048. }
  1049. else
  1050. {
  1051. try
  1052. {
  1053. $feed = $instagram->get('users/self');
  1054. }
  1055. catch (InstagramApiError $e)
  1056. {
  1057. die($e->getMessage());
  1058. }
  1059. $status = sprintf(T_('Currently connected as: %s'), $feed->data->username);
  1060. $status .= '<br/><br/><img src="'.$feed->data->profile_picture.'"/>';
  1061. $link = '<a class="disconnect" href="?revoke=instagram">'.T_('Disconnect').'</a>';
  1062. }
  1063. echo '
  1064. <div class="social-media-connect">
  1065. <img class="icon" src="ui/images/instagram.png" alt="Instagram"/>
  1066. <h2>Instagram</h2>
  1067. <p>'.T_('Instagram is a photo sharing app for your phone.').'</p>
  1068. <div class="status">'.$status.'</div>
  1069. <div class="action">'.$link.'</div>
  1070. </div>';
  1071. displayFooter();
  1072. }
  1073. /**
  1074. * displayEditInstagramSubmit
  1075. *
  1076. * @return void
  1077. */
  1078. function displayEditInstagramSubmit ()
  1079. {
  1080. global $fcmsUser;
  1081. $config = getInstagramConfigData();
  1082. if (!empty($config['instagram_client_id']) && !empty($config['instagram_client_secret']))
  1083. {
  1084. $callbackUrl = getDomainAndDir();
  1085. $callbackUrl .= 'settings.php?view=instagram';
  1086. $instagram = new Instagram($config['instagram_client_id'], $config['instagram_client_secret'], null);
  1087. if (isset($_GET['error']) || isset($_GET['error_reason']) || isset($_GET['error_description']))
  1088. {
  1089. displayHeader();
  1090. echo '
  1091. <div class="error-alert">
  1092. <p>'.$_GET['error'].'</p>
  1093. <p>'.$_GET['error_reason'].'</p>
  1094. <p>'.$_GET['error_description'].'</p>
  1095. </div>';
  1096. displayFooter();
  1097. return;
  1098. }
  1099. $response = $instagram->getAccessToken($_GET['code'], $callbackUrl);
  1100. $accessToken = $response->access_token;
  1101. $sql = "UPDATE `fcms_user_settings`
  1102. SET `instagram_access_token` = '$accessToken'
  1103. WHERE `user` = '$fcmsUser->id'";
  1104. if (!mysql_query($sql))
  1105. {
  1106. displayHeader();
  1107. displaySqlError($sql, mysql_error());
  1108. displayFooter();
  1109. return;
  1110. }
  1111. }
  1112. // Instagram isn't configured
  1113. else
  1114. {
  1115. displayHeader();
  1116. echo '
  1117. <div class="info-alert">
  1118. <h2>'.T_('Instagram isn\'t Configured Yet.').'</h2>
  1119. <p>'.T_('Unfortunately, your website administrator has not set up Instagram yet.').'</p>
  1120. </div>';
  1121. displayFooter();
  1122. return;
  1123. }
  1124. header("Location: settings.php?view=instagram");
  1125. }
  1126. /**
  1127. * displayRevokeInstagramAccess
  1128. *
  1129. * @return void
  1130. */
  1131. function displayRevokeInstagramAccess ()
  1132. {
  1133. global $fcmsUser;
  1134. $sql = "UPDATE `fcms_user_settings`
  1135. SET `instagram_access_token` = NULL
  1136. WHERE `user` = '$fcmsUser->id'";
  1137. if (!mysql_query($sql))
  1138. {
  1139. displayHeader();
  1140. displaySqlError($sql, mysql_error());
  1141. displayFooter();
  1142. return;
  1143. }
  1144. header("Location: settings.php?view=instagram");
  1145. }
  1146. /**
  1147. * displayEditYouTube
  1148. *
  1149. * @return void
  1150. */
  1151. function displayEditYouTube ()
  1152. {
  1153. global $fcmsUser;
  1154. displayHeader();
  1155. $config = getYouTubeConfigData();
  1156. $user = getYouTubeUserData($fcmsUser->id);
  1157. // Setup url for callbacks
  1158. $callbackUrl = getDomainAndDir();
  1159. $callbackUrl .= 'settings.php?view=youtube';
  1160. if (!empty($config['youtube_key']))
  1161. {
  1162. if (!empty($user['youtube_session_token']))
  1163. {
  1164. $httpClient = getAuthSubHttpClient($config['youtube_key'], $user['youtube_session_token']);
  1165. $youTubeService = new Zend_Gdata_YouTube($httpClient);
  1166. $feed = $youTubeService->getUserProfile('default');
  1167. if (!$feed instanceof Zend_Gdata_YouTube_UserProfileEntry)
  1168. {
  1169. print '
  1170. <div class="error-alert">'.T_('Could not get YouTube data for user.').'</div>';
  1171. return;
  1172. }
  1173. $username = $feed->getUsername();
  1174. $user = '<a href="http://www.youtube.com/user/'.$username.'">'.$username.'</a>';
  1175. $status = sprintf(T_('Currently connected as: %s'), $user);
  1176. $link = '<a class="disconnect" href="?revoke=youtube">'.T_('Disconnect').'</a>';
  1177. }
  1178. else
  1179. {
  1180. $url = Zend_Gdata_AuthSub::getAuthSubTokenUri($callbackUrl, 'http://gdata.youtube.com', false, true);
  1181. $status = T_('Not Connected');
  1182. $link = '<a href="'.$url.'">'.T_('Connect').'</a>';
  1183. }
  1184. }
  1185. echo '
  1186. <div class="social-media-connect">
  1187. <img class="icon" src="ui/images/youtube.png" alt="YouTube"/>
  1188. <h2>YouTube</h2>
  1189. <p>'.T_('YouTube allows users to discover, watch and share videos.').'</p>
  1190. <div class="status">'.$status.'</div>
  1191. <div class="action">'.$link.'</div>
  1192. </div>';
  1193. displayFooter();
  1194. }
  1195. /**
  1196. * displayEditYouTubeSubmit
  1197. *
  1198. * @return void
  1199. */
  1200. function displayEditYouTubeSubmit ()
  1201. {
  1202. global $fcmsUser, $settingsObj;
  1203. $data = getYouTubeConfigData();
  1204. $singleUseToken = $_GET['token'];
  1205. if (!empty($data['youtube_key']))
  1206. {
  1207. // Exchange single use token for a session token
  1208. try
  1209. {
  1210. $sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken);
  1211. }
  1212. catch (Zend_Gdata_App_Exception $e)
  1213. {
  1214. displayHeader();
  1215. echo '
  1216. <div class="error-alert">ERROR - Token upgrade for ['.$singleUseToken.'] failed: '.$e->getMessage();
  1217. displayFooter();
  1218. return;
  1219. }
  1220. $_SESSION['sessionToken'] = $sessionToken;
  1221. $sql = "UPDATE `fcms_user_settings`
  1222. SET `youtube_session_token` = '$sessionToken'
  1223. WHERE `user` = '$fcmsUser->id'";
  1224. if (!mysql_query($sql))
  1225. {
  1226. displayHeader();
  1227. displaySqlError($sql, mysql_error());
  1228. displayFooter();
  1229. return;
  1230. }
  1231. }
  1232. // YouTube isn't configured
  1233. else
  1234. {
  1235. displayHeader();
  1236. echo '
  1237. <div class="info-alert">
  1238. <h2>'.T_('YouTube isn\'t Configured Yet.').'</h2>
  1239. <p>'.T_('Unfortunately, your website administrator has not set up YouTube yet.').'</p>
  1240. </div>';
  1241. displayFooter();
  1242. return;
  1243. }
  1244. header("Location: settings.php?view=youtube");
  1245. }
  1246. /**
  1247. * displayRevokeYouTubeAccess
  1248. *
  1249. * @return void
  1250. */
  1251. function displayRevokeYouTubeAccess ()
  1252. {
  1253. global $fcmsUser;
  1254. if (isset($_SESSION['sessionToken']))
  1255. {
  1256. unset($_SESSION['sessionToken']);
  1257. }
  1258. $sql = "UPDATE `fcms_user_settings`
  1259. SET `youtube_session_token` = NULL
  1260. WHERE `user` = '$fcmsUser->id'";
  1261. if (!mysql_query($sql))
  1262. {
  1263. displayHeader();
  1264. displaySqlError($sql, mysql_error());
  1265. displayFooter();
  1266. return;
  1267. }
  1268. header("Location: settings.php?view=youtube");
  1269. }