PageRenderTime 52ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/admin/config.php

https://bitbucket.org/ryanhowdy/family-connections
PHP | 1499 lines | 1201 code | 171 blank | 127 comment | 109 complexity | d04531a037bfc0b4a9f3b087682e01ea MD5 | raw file
Possible License(s): Apache-2.0, GPL-2.0
  1. <?php
  2. /**
  3. * Configuration
  4. *
  5. * PHP versions 4 and 5
  6. *
  7. * @category FCMS
  8. * @package FamilyConnections
  9. * @author Ryan Haudenschilt <r.haudenschilt@gmail.com>
  10. * @copyright 2010 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 URL_PREFIX.'fcms.php';
  18. init('admin/');
  19. $fcmsUser->id = (int)$_SESSION['login_id'];
  20. $TMPL = array(
  21. 'sitename' => getSiteName(),
  22. 'nav-link' => getAdminNavLinks(),
  23. 'pagetitle' => T_('Administration: Configuration'),
  24. 'path' => URL_PREFIX,
  25. 'displayname' => $fcmsUser->displayName,
  26. 'version' => getCurrentVersion(),
  27. 'year' => date('Y')
  28. );
  29. control();
  30. exit();
  31. /**
  32. * control
  33. *
  34. * The controlling structure for this script.
  35. *
  36. * @return void
  37. */
  38. function control ()
  39. {
  40. global $fcmsUser;
  41. if (checkAccess($fcmsUser->id) > 2)
  42. {
  43. displayInvalidAccessLevel();
  44. return;
  45. }
  46. elseif (isset($_GET['view']))
  47. {
  48. $view = $_GET['view'];
  49. if ($view == 'general')
  50. {
  51. if (isset($_POST['submit-sitename']))
  52. {
  53. displayGeneralFormSubmit();
  54. }
  55. else
  56. {
  57. displayGeneralForm();
  58. }
  59. }
  60. elseif ($view == 'defaults')
  61. {
  62. if (isset($_POST['submit-defaults']))
  63. {
  64. displayDefaultsFormSubmit();
  65. }
  66. else
  67. {
  68. displayDefaultsForm();
  69. }
  70. }
  71. elseif ($view == 'plugins')
  72. {
  73. if (isset($_POST['submit-plugins']))
  74. {
  75. displayPluginsFormSubmit();
  76. }
  77. else
  78. {
  79. displayPluginsForm();
  80. }
  81. }
  82. elseif ($view == 'navigation')
  83. {
  84. if (isset($_POST['submit-navigation']))
  85. {
  86. displayNavigationFormSubmit();
  87. }
  88. else
  89. {
  90. displayNavigationForm();
  91. }
  92. }
  93. // TODO move out of here
  94. elseif ($view == 'gallery')
  95. {
  96. if (isset($_POST['submit-gallery']))
  97. {
  98. displayPhotoGalleryFormSubmit();
  99. }
  100. else
  101. {
  102. displayPhotoGalleryForm();
  103. }
  104. }
  105. else
  106. {
  107. displayGeneralForm();
  108. }
  109. }
  110. elseif (isset($_POST['submit-ajax-navigation']))
  111. {
  112. displayNavigationFormSubmit(true);
  113. }
  114. else
  115. {
  116. displayGeneralForm();
  117. }
  118. }
  119. /**
  120. * displayHeader
  121. *
  122. * @return void
  123. */
  124. function displayHeader ()
  125. {
  126. global $fcmsUser, $TMPL;
  127. $TMPL['javascript'] = '
  128. <script src="'.URL_PREFIX.'ui/js/prototype.js" type="text/javascript"></script>
  129. <script src="'.URL_PREFIX.'ui/js/scriptaculous.js" type="text/javascript"></script>
  130. <script src="'.URL_PREFIX.'ui/js/admin.js" type="text/javascript"></script>
  131. <script src="'.URL_PREFIX.'ui/js/livevalidation.js" type="text/javascript"></script>';
  132. include_once URL_PREFIX.'ui/admin/header.php';
  133. $general = '';
  134. $defaults = '';
  135. $plugins = '';
  136. $navigation = '';
  137. $gallery = '';
  138. if (!isset($_GET['view']))
  139. {
  140. $general = 'active';
  141. }
  142. else
  143. {
  144. switch ($_GET['view'])
  145. {
  146. case 'general':
  147. default:
  148. $general = 'active';
  149. break;
  150. case 'defaults':
  151. $defaults = 'active';
  152. break;
  153. case 'plugins':
  154. $plugins = 'active';
  155. break;
  156. case 'navigation':
  157. $navigation = 'active';
  158. break;
  159. case 'gallery':
  160. $gallery = 'active';
  161. break;
  162. }
  163. }
  164. echo '
  165. <div id="config" style="position:relative;">
  166. <ul class="tabs">
  167. <li class="'.$general.'"><a href="?view=general">'.T_('General').'</a></li>
  168. <li class="'.$defaults.'"><a href="?view=defaults">'.T_('Defaults').'</a></li>
  169. <li class="'.$plugins.'"><a href="?view=plugins">'.T_('Plugins').'</a></li>
  170. <li class="'.$navigation.'"><a href="?view=navigation">'.T_('Navigation').'</a></li>
  171. <li class="'.$gallery.'"><a href="?view=gallery">'.T_('Photo Gallery').'</a></li>
  172. </ul>';
  173. }
  174. /**
  175. * displayFooter
  176. *
  177. * @return void
  178. */
  179. function displayFooter ()
  180. {
  181. global $fcmsUser, $TMPL;
  182. echo '
  183. </div><!--/config-->';
  184. include_once URL_PREFIX.'ui/admin/footer.php';
  185. }
  186. /**
  187. * displayInvalidAccessLevel
  188. *
  189. * @return void
  190. */
  191. function displayInvalidAccessLevel ()
  192. {
  193. displayHeader();
  194. echo '
  195. <p class="error-alert">
  196. <b>'.T_('You do not have access to view this page.').'</b><br/>
  197. '.T_('This page requires an access level 1 (Admin).').'
  198. <a href="../contact.php">'.T_('Please contact your website\'s administrator if you feel you should have access to this page.').'</a>
  199. </p>';
  200. displayFooter();
  201. }
  202. /**
  203. * displayGeneralForm
  204. *
  205. * @return void
  206. */
  207. function displayGeneralForm ()
  208. {
  209. displayHeader();
  210. $sql = "SELECT `name`, `value`
  211. FROM `fcms_config`";
  212. $result = mysql_query($sql);
  213. if (!$result)
  214. {
  215. displaySqlError($sql, mysql_error());
  216. displayFooter();
  217. return;
  218. }
  219. $row = array();
  220. while ($r = mysql_fetch_assoc($result))
  221. {
  222. $row[$r['name']] = $r['value'];
  223. }
  224. // Activate Options
  225. $activateList = array (
  226. '0' => T_('Admin Activation'),
  227. '1' => T_('Auto Activation')
  228. );
  229. $activateOptions = buildHtmlSelectOptions($activateList, $row['auto_activate']);
  230. // Register Options
  231. $registerList = array (
  232. '0' => T_('Off'),
  233. '1' => T_('On')
  234. );
  235. $registerOptions = buildHtmlSelectOptions($registerList, $row['registration']);
  236. // Start of week
  237. $startSun = ($row['start_week'] == 0) ? 'checked' : '';;
  238. $startMon = ($row['start_week'] == 1) ? 'checked' : '';
  239. $startTue = ($row['start_week'] == 2) ? 'checked' : '';
  240. $startWed = ($row['start_week'] == 3) ? 'checked' : '';
  241. $startThr = ($row['start_week'] == 4) ? 'checked' : '';
  242. $startFri = ($row['start_week'] == 5) ? 'checked' : '';
  243. $startSat = ($row['start_week'] == 6) ? 'checked' : '';
  244. // Site Off Options
  245. // TODO - config table or file?
  246. $siteOffYes = '';
  247. $siteOffNo = '';
  248. if ($row['site_off'] == 1)
  249. {
  250. $siteOffYes = 'checked';
  251. }
  252. else
  253. {
  254. $siteOffNo = 'checked';
  255. }
  256. // Debug
  257. $debugList = array(
  258. '0' => T_('Off'),
  259. '1' => T_('On')
  260. );
  261. $debugOptions = buildHtmlSelectOptions($debugList, $row['debug']);
  262. $message = '';
  263. if (isset($_SESSION['success']))
  264. {
  265. $message = '<div class="alert-message success">';
  266. $message .= '<a class="close" href="#" onclick="$(this).up(\'div\').hide(); return false;">&times;</a>';
  267. $message .= T_('Changes Updated Successfully').'</div>';
  268. unset($_SESSION['success']);
  269. }
  270. echo '
  271. <form action="config.php?view=general" method="post">
  272. <fieldset>
  273. <legend>'.T_('General Configuration').'</legend>
  274. '.$message.'
  275. <div class="clearfix">
  276. <label for="sitename">'.T_('Site Name').'</label>
  277. <div class="input">
  278. <input class="xlarge span8" id="sitename" name="sitename" type="text" value="'.cleanOutput($row['sitename']).'">
  279. </div>
  280. </div>
  281. <div class="clearfix">
  282. <label for="contact">'.T_('Contact Email').'</label>
  283. <div class="input">
  284. <input class="xlarge span8" id="contact" name="contact" type="text" value="'.cleanOutput($row['contact']).'">
  285. </div>
  286. <script type="text/javascript">
  287. var email = new LiveValidation(\'contact\', {onlyOnSubmit: true});
  288. email.add(Validate.Email, {failureMessage: "'.T_('That\'s not a valid email address is it?').'"});
  289. email.add(Validate.Length, {minimum: 10});
  290. </script>
  291. </div>
  292. <div class="clearfix">
  293. <label for="registration">'.T_('Registration').'</label>
  294. <div class="input">
  295. <select id="registration" name="registration">
  296. '.$registerOptions.'
  297. </select>
  298. </div>
  299. </div>
  300. <div class="clearfix">
  301. <label for="activation">'.T_('Account Activation').'</label>
  302. <div class="input">
  303. <select id="activation" name="activation">
  304. '.$activateOptions.'
  305. </select>
  306. </div>
  307. </div>
  308. <div class="clearfix">
  309. <label>'.T_('Start of the Week').'</label>
  310. <div class="input">
  311. <ul class="inputs-list">
  312. <li>
  313. <label>
  314. <input type="radio" '.$startSun.' id="start_sun" name="start_week" value="0">
  315. <span>'.T_('Sunday').'</span>
  316. </label>
  317. </li>
  318. <li>
  319. <label>
  320. <input type="radio" '.$startMon.' id="start_mon" name="start_week" value="1">
  321. <span>'.T_('Monday').'</span>
  322. </label>
  323. </li>
  324. <li>
  325. <label>
  326. <input type="radio" '.$startTue.' id="start_tue" name="start_week" value="2">
  327. <span>'.T_('Tuesday').'</span>
  328. </label>
  329. </li>
  330. <li>
  331. <label>
  332. <input type="radio" '.$startWed.' id="start_wed" name="start_week" value="3">
  333. <span>'.T_('Wednesday').'</span>
  334. </label>
  335. </li>
  336. <li>
  337. <label>
  338. <input type="radio" '.$startThr.' id="start_thr" name="start_week" value="4">
  339. <span>'.T_('Thursday').'</span>
  340. </label>
  341. </li>
  342. <li>
  343. <label>
  344. <input type="radio" '.$startFri.' id="start_fri" name="start_week" value="5">
  345. <span>'.T_('Friday').'</span>
  346. </label>
  347. </li>
  348. <li>
  349. <label>
  350. <input type="radio" '.$startSat.' id="start_sat" name="start_week" value="6">
  351. <span>'.T_('Saturday').'</span>
  352. </label>
  353. </li>
  354. </ul>
  355. </div>
  356. </div>
  357. <div class="clearfix">
  358. <label>'.T_('Turn Off Site?').'</label>
  359. <div class="input">
  360. <ul class="inputs-list">
  361. <li>
  362. <label>
  363. <input type="radio" '.$siteOffYes.' id="site_off_yes" name="site_off" value="yes">
  364. <span>'.T_('Yes, turn the site off, so no one can access it.').'</span>
  365. </label>
  366. </li>
  367. <li>
  368. <label>
  369. <input type="radio" '.$siteOffNo.' id="site_off_no" name="site_off" value="no">
  370. <span>'.T_('No, keep the site on and running.').'</span>
  371. </label>
  372. </li>
  373. </ul>
  374. </div>
  375. </div>
  376. <div class="clearfix">
  377. <label for="debug">'.T_('Debug').'</label>
  378. <div class="input">
  379. <select id="debug" name="debug">
  380. '.$debugOptions.'
  381. </select>
  382. </div>
  383. </div>
  384. <div class="actions">
  385. <input type="submit" class="btn primary" id="submit-sitename" name="submit-sitename" value="'.T_('Save').'">
  386. </div>
  387. </fieldset>
  388. </form>';
  389. displayFooter();
  390. }
  391. /**
  392. * displayGeneralFormSubmit
  393. *
  394. * @return void
  395. */
  396. function displayGeneralFormSubmit ()
  397. {
  398. if (isset($_POST['sitename']))
  399. {
  400. $sitename = strip_tags($_POST['sitename']);
  401. $sitename = escape_string($sitename);
  402. $sql = "UPDATE `fcms_config`
  403. SET `value` = '$sitename'
  404. WHERE `name` = 'sitename'";
  405. if (!mysql_query($sql))
  406. {
  407. displayHeader();
  408. displaySqlError($sql, mysql_error());
  409. displayFooter();
  410. return;
  411. }
  412. }
  413. if (isset($_POST['contact']))
  414. {
  415. $contact = strip_tags($_POST['contact']);
  416. $contact = escape_string($contact);
  417. $sql = "UPDATE `fcms_config`
  418. SET `value` = '$contact'
  419. WHERE `name` = 'contact'";
  420. if (!mysql_query($sql))
  421. {
  422. displayHeader();
  423. displaySqlError($sql, mysql_error());
  424. displayFooter();
  425. return;
  426. }
  427. }
  428. if (isset($_POST['activation']))
  429. {
  430. $sql = "UPDATE `fcms_config`
  431. SET `value` = '".escape_string($_POST['activation'])."'
  432. WHERE `name` = 'auto_activate'";
  433. if (!mysql_query($sql))
  434. {
  435. displayHeader();
  436. displaySqlError($sql, mysql_error());
  437. displayFooter();
  438. return;
  439. }
  440. }
  441. if (isset($_POST['registration']))
  442. {
  443. $sql = "UPDATE `fcms_config`
  444. SET `value` = '".escape_string($_POST['registration'])."'
  445. WHERE `name` = 'registration'";
  446. if (!mysql_query($sql))
  447. {
  448. displayHeader();
  449. displaySqlError($sql, mysql_error());
  450. displayFooter();
  451. return;
  452. }
  453. }
  454. if (isset($_POST['start_week']))
  455. {
  456. $sql = "UPDATE `fcms_config`
  457. SET `value` = '".(int)$_POST['start_week']."'
  458. WHERE `name` = 'start_week'";
  459. if (!mysql_query($sql))
  460. {
  461. displayHeader();
  462. displaySqlError($sql, mysql_error());
  463. displayFooter();
  464. return;
  465. }
  466. }
  467. if (isset($_POST['site_off']))
  468. {
  469. $val = $_POST['site_off'] == 'yes' ? '1' : '0';
  470. $sql = "UPDATE `fcms_config`
  471. SET `value` = '".($_POST['site_off'] == 'yes' ? '1' : '0')."'
  472. WHERE `name` = 'site_off'";
  473. if (!mysql_query($sql))
  474. {
  475. displayHeader();
  476. displaySqlError($sql, mysql_error());
  477. displayFooter();
  478. return;
  479. }
  480. }
  481. if (isset($_POST['debug']))
  482. {
  483. $sql = "UPDATE `fcms_config`
  484. SET `value` = '".escape_string($_POST['debug'])."'
  485. WHERE `name` = 'debug'";
  486. if (!mysql_query($sql))
  487. {
  488. displayHeader();
  489. displaySqlError($sql, mysql_error());
  490. displayFooter();
  491. return;
  492. }
  493. }
  494. $_SESSION['success'] = 1;
  495. header("Location: config.php?view=general");
  496. }
  497. /**
  498. * displayDefaultsForm
  499. *
  500. * @return void
  501. */
  502. function displayDefaultsForm ()
  503. {
  504. displayHeader();
  505. // Defaults Config
  506. $sql = "DESCRIBE `fcms_user_settings`";
  507. $result = mysql_query($sql);
  508. if (!$result)
  509. {
  510. displaySqlError($sql, mysql_error());
  511. displayFooter();
  512. return;
  513. }
  514. while ($drow = mysql_fetch_assoc($result))
  515. {
  516. if ($drow['Field'] == 'theme')
  517. {
  518. $default_theme = $drow['Default'];
  519. }
  520. if ($drow['Field'] == 'displayname')
  521. {
  522. $default_displayname = $drow['Default'];
  523. }
  524. if ($drow['Field'] == 'frontpage')
  525. {
  526. $default_frontpage = $drow['Default'];
  527. }
  528. if ($drow['Field'] == 'timezone')
  529. {
  530. $default_tz = $drow['Default'];
  531. }
  532. if ($drow['Field'] == 'dst')
  533. {
  534. $default_dst = $drow['Default'];
  535. }
  536. if ($drow['Field'] == 'boardsort')
  537. {
  538. $default_boardsort = $drow['Default'];
  539. }
  540. }
  541. // Themes
  542. $themes = getThemeList();
  543. $theme_options = '';
  544. foreach($themes as $file)
  545. {
  546. $theme_options .= '<option value="'.$file.'"';
  547. if ($default_theme == $file)
  548. {
  549. $theme_options .= ' selected="selected"';
  550. }
  551. $theme_options .= ">$file</option>";
  552. }
  553. // Display Name
  554. $displayname_list = array(
  555. "1" => T_('First Name'),
  556. "2" => T_('First & Last Name'),
  557. "3" => T_('Username')
  558. );
  559. $displayname_options = buildHtmlSelectOptions($displayname_list, $default_displayname);
  560. // Frontpage
  561. $frontpage_list = array(
  562. "1" => T_('All (by date)'),
  563. "2" => T_('Last 5 (by plugin)')
  564. );
  565. $frontpage_options = buildHtmlSelectOptions($frontpage_list, $default_frontpage);
  566. // Timezone
  567. $tz_list = array(
  568. "-12 hours" => T_('(GMT -12:00) Eniwetok, Kwajalein'),
  569. "-11 hours" => T_('(GMT -11:00) Midway Island, Samoa'),
  570. "-10 hours" => T_('(GMT -10:00) Hawaii'),
  571. "-9 hours" => T_('(GMT -9:00) Alaska'),
  572. "-8 hours" => T_('(GMT -8:00) Pacific Time (US & Canada)'),
  573. "-7 hours" => T_('(GMT -7:00) Mountain Time (US & Canada)'),
  574. "-6 hours" => T_('(GMT -6:00) Central Time (US & Canada), Mexico City'),
  575. "-5 hours" => T_('(GMT -5:00) Eastern Time (US & Canada), Bogota, Lima'),
  576. "-4 hours" => T_('(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz'),
  577. "-3 hours -30 minutes" => T_('(GMT -3:30) Newfoundland'),
  578. "-3 hours" => T_('(GMT -3:00) Brazil, Buenos Aires, Georgetown'),
  579. "-2 hours" => T_('(GMT -2:00) Mid-Atlantic'),
  580. "-1 hours" => T_('(GMT -1:00) Azores, Cape Verde Islands'),
  581. "-0 hours" => T_('(GMT) Western Europe Time, London, Lisbon, Casablanca'),
  582. "+1 hours" => T_('(GMT +1:00) Brussels, Copenhagen, Madrid, Paris'),
  583. "+2 hours" => T_('(GMT +2:00) Kaliningrad, South Africa'),
  584. "+3 hours" => T_('(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburgh'),
  585. "+3 hours 30 minutes" => T_('(GMT +3:30) Tehran'),
  586. "+4 hours" => T_('(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi'),
  587. "+4 hours 30 minutes" => T_('(GMT +4:30) Kabul'),
  588. "+5 hours" => T_('(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent'),
  589. "+5 hours 30 minutes" => T_('(GMT +5:30) Bombay, Calcutta, Madras, New Delhi'),
  590. "+6 hours" => T_('(GMT +6:00) Almaty, Dhaka, Colombo'),
  591. "+7 hours" => T_('(GMT +7:00) Bangkok, Hanoi, Jakarta'),
  592. "+8 hours" => T_('(GMT +8:00) Beijing, Perth, Singapore, Hong Kong'),
  593. "+9 hours" => T_('(GMT +9:00) Tokyo, Seoul, Osaka, Spporo, Yakutsk'),
  594. "+9 hours 30 minutes" => T_('(GMT +9:30) Adeliaide, Darwin'),
  595. "+10 hours" => T_('(GMT +10:00) Eastern Australia, Guam, Vladivostok'),
  596. "+11 hours" => T_('(GMT +11:00) Magadan, Solomon Islands, New Caledonia'),
  597. "+12 hours" => T_('(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka')
  598. );
  599. $tz_options = buildHtmlSelectOptions($tz_list, $default_tz);
  600. // DST
  601. $dst_list = array(
  602. 1 => T_('On'),
  603. 0 => T_('Off')
  604. );
  605. $dst_options = buildHtmlSelectOptions($dst_list, $default_dst);
  606. // Board Sort
  607. $boardsort_list = array(
  608. "ASC" => T_('New Messages at Bottom'),
  609. "DESC" => T_('New Messages at Top')
  610. );
  611. $boardsort_options = buildHtmlSelectOptions($boardsort_list, $default_boardsort);
  612. $message = '';
  613. if (isset($_SESSION['success']))
  614. {
  615. $message = '<div class="alert-message success">';
  616. $message .= '<a class="close" href="#" onclick="$(this).up(\'div\').hide(); return false;">&times;</a>';
  617. $message .= T_('Changes Updated Successfully').'</div>';
  618. unset($_SESSION['success']);
  619. }
  620. echo '
  621. <form action="config.php?view=defaults" method="post">
  622. '.$message.'
  623. <fieldset>
  624. <legend>'.T_('New Member Default Settings').'</legend>
  625. <div class="clearfix">
  626. <label for="theme">'.T_('Theme').'</label>
  627. <div class="input">
  628. <select name="theme" id="theme">
  629. '.$theme_options.'
  630. </select>
  631. </div>
  632. </div>
  633. <div class="clearfix">
  634. <label for="displayname">'.T_('Display Name').'</label>
  635. <div class="input">
  636. <select name="displayname" id="displayname" title="'.T_('How do you want your name to display?').'">
  637. '.$displayname_options.'
  638. </select>
  639. </div>
  640. </div>
  641. <div class="clearfix">
  642. <label for="frontpage">'.T_('Front Page').'</label>
  643. <div class="input">
  644. <select name="frontpage" id="frontpage" title="'.T_('How do you want the latest information to display on the homepage?').'">
  645. '.$frontpage_options.'
  646. </select>
  647. </div>
  648. </div>
  649. <div class="clearfix">
  650. <label for="timezone">'.T_('Time Zone').'</label>
  651. <div class="input">
  652. <select class="span8" name="timezone" id="timezone" title="'.T_('What time zone do you live in?').'">
  653. '.$tz_options.'
  654. </select>
  655. </div>
  656. </div>
  657. <div class="clearfix">
  658. <label for="dst">'.T_('Daylight Savings Time').'</label>
  659. <div class="input">
  660. <select name="dst" id="dst">
  661. '.$dst_options.'
  662. </select>
  663. </div>
  664. </div>
  665. <div class="clearfix">
  666. <label for="boardsort">'.T_('Sort Messages').'</label>
  667. <div class="input">
  668. <select name="boardsort" id="boardsort" title="'.T_('How do you want messages to display on the Message Board?').'">
  669. '.$boardsort_options.'
  670. </select>
  671. </div>
  672. </div>
  673. <div class="clearfix">
  674. <label>&nbsp;</label>
  675. <div class="input">
  676. <ul class="inputs-list">
  677. <li>
  678. <label>
  679. <input type="checkbox" name="changeAll" id="changeAll"/>
  680. <span>'.T_('Update existing users?').'</span>
  681. </label>
  682. </li>
  683. </ul>
  684. </div>
  685. </div>
  686. <div class="actions">
  687. <input type="submit" id="submit-defaults" name="submit-defaults" class="btn primary" value="'.T_('Save').'"/> &nbsp;
  688. </div>
  689. </fieldset>
  690. </form>';
  691. displayFooter();
  692. }
  693. /**
  694. * displayDefaultsFormSubmit
  695. *
  696. * @return void
  697. */
  698. function displayDefaultsFormSubmit ()
  699. {
  700. $theme = basename($_POST['theme']);
  701. $theme = escape_string($theme);
  702. $sql = "ALTER TABLE `fcms_user_settings`
  703. ALTER `theme` SET DEFAULT '$theme'";
  704. if (!mysql_query($sql))
  705. {
  706. displayHeader();
  707. displaySqlError($sql, mysql_error());
  708. displayFooter();
  709. return;
  710. }
  711. $sql = "ALTER TABLE `fcms_user_settings`
  712. ALTER `displayname`
  713. SET DEFAULT '".escape_string($_POST['displayname'])."'";
  714. if (!mysql_query($sql))
  715. {
  716. displayHeader();
  717. displaySqlError($sql, mysql_error());
  718. displayFooter();
  719. return;
  720. }
  721. $sql = "ALTER TABLE `fcms_user_settings`
  722. ALTER `frontpage`
  723. SET DEFAULT '".escape_string($_POST['frontpage'])."'";
  724. if (!mysql_query($sql))
  725. {
  726. displayHeader();
  727. displaySqlError($sql, mysql_error());
  728. displayFooter();
  729. return;
  730. }
  731. $sql = "ALTER TABLE `fcms_user_settings`
  732. ALTER `timezone`
  733. SET DEFAULT '".escape_string($_POST['timezone'])."'";
  734. if (!mysql_query($sql))
  735. {
  736. displayHeader();
  737. displaySqlError($sql, mysql_error());
  738. displayFooter();
  739. return;
  740. }
  741. $sql = "ALTER TABLE `fcms_user_settings` ALTER `dst`
  742. SET DEFAULT '".escape_string($_POST['dst'])."'";
  743. if (!mysql_query($sql))
  744. {
  745. displayHeader();
  746. displaySqlError($sql, mysql_error());
  747. displayFooter();
  748. return;
  749. }
  750. $sql = "ALTER TABLE `fcms_user_settings`
  751. ALTER `boardsort`
  752. SET DEFAULT '".escape_string($_POST['boardsort'])."'";
  753. if (!mysql_query($sql))
  754. {
  755. displayHeader();
  756. displaySqlError($sql, mysql_error());
  757. displayFooter();
  758. return;
  759. }
  760. // Update existing users
  761. if (isset($_POST['changeAll']))
  762. {
  763. $avatar = isset($upfile) ? $upfile : 'no_avatar.jpg';
  764. $theme = basename($_POST['theme']);
  765. $theme = escape_string($theme);
  766. $sql = "UPDATE `fcms_user_settings`
  767. SET `theme` = '$theme',
  768. `displayname` = '".escape_string($_POST['displayname'])."',
  769. `frontpage` = '".escape_string($_POST['frontpage'])."',
  770. `timezone` = '".escape_string($_POST['timezone'])."',
  771. `dst` = '".escape_string($_POST['dst'])."',
  772. `boardsort` = '".escape_string($_POST['boardsort'])."'";
  773. if (!mysql_query($sql))
  774. {
  775. displayHeader();
  776. displaySqlError($sql, mysql_error());
  777. displayFooter();
  778. return;
  779. }
  780. }
  781. $_SESSION['success'] = 1;
  782. header("Location: config.php?view=defaults");
  783. }
  784. /**
  785. * displayPluginsForm
  786. *
  787. * @return void
  788. */
  789. function displayPluginsForm ()
  790. {
  791. displayHeader();
  792. // Get Plugin Data
  793. $plugins = array();
  794. $sql = "SELECT `id`, `link`, `col`, `order`, `req`
  795. FROM `fcms_navigation`
  796. WHERE `col` = 3
  797. OR `col` = 4
  798. ORDER BY `order`";
  799. $result = mysql_query($sql);
  800. if (!$result)
  801. {
  802. displaySqlError($sql, mysql_error());
  803. displayFooter();
  804. return;
  805. }
  806. while ($r = mysql_fetch_assoc($result))
  807. {
  808. $plugins[getPluginName($r['link'])] = $r;
  809. }
  810. ksort($plugins);
  811. $message = '';
  812. if (isset($_SESSION['success']))
  813. {
  814. $message = '<div class="alert-message success">';
  815. $message .= '<a class="close" href="#" onclick="$(this).up(\'div\').hide(); return false;">&times;</a>';
  816. $message .= T_('Changes Updated Successfully').'</div>';
  817. unset($_SESSION['success']);
  818. }
  819. echo '
  820. <h2>'.T_('Plugins').'</h2>
  821. '.$message.'
  822. <form action="config.php?view=plugins" method="post">
  823. <table class="bordered-table zebra-striped">
  824. <thead>
  825. <tr><th class="check">'.T_('Enabled').'</th><th>'.T_('Name').'</th><th>'.T_('Description').'</th></tr>
  826. </thead>
  827. <tbody>';
  828. foreach ($plugins AS $name => $plugin)
  829. {
  830. $checked = $plugin['order'] == 0 ? '' : ' checked="checked"';
  831. $disabled = $plugin['req'] == 0 ? '' : ' disabled="disabled"';
  832. echo '
  833. <tr>
  834. <td class="check"><input type="checkbox" id="'.$plugin['link'].'" name="'.$plugin['link'].'" '.$checked.$disabled.'/></td>
  835. <td><b>'.$name.'</b></td>
  836. <td>'.getPluginDescription($plugin['link']).'</td>
  837. </tr>';
  838. }
  839. echo '
  840. </tbody>
  841. </table>
  842. <p><input type="submit" class="btn primary" id="submit-plugins" name="submit-plugins" value="'.T_('Save').'"/></p>
  843. </form>';
  844. displayFooter();
  845. }
  846. /**
  847. * displayPluginsFormSubmit
  848. *
  849. * @return void
  850. */
  851. function displayPluginsFormSubmit ()
  852. {
  853. $on = array();
  854. $off = array();
  855. // Get Plugin Data
  856. $sql = "SELECT `id`, `link`, `col`, `order`, `req`
  857. FROM `fcms_navigation`
  858. WHERE (
  859. `col` = 3
  860. OR `col` = 4
  861. )
  862. AND `req` = 0
  863. ORDER BY `order`";
  864. $result = mysql_query($sql);
  865. if (!$result)
  866. {
  867. displaySqlError($sql, mysql_error());
  868. displayFooter();
  869. return;
  870. }
  871. while ($r = mysql_fetch_assoc($result))
  872. {
  873. // Turn on
  874. if (isset($_POST[$r['link']]))
  875. {
  876. if ($r['order'] == 0)
  877. {
  878. $on[] = $r;
  879. }
  880. }
  881. // Turn off
  882. else
  883. {
  884. $off[] = $r['id'];
  885. }
  886. }
  887. // Turn off all that need turned off
  888. if (count($off) > 0)
  889. {
  890. $offIds = implode(',', $off);
  891. $sql = "UPDATE `fcms_navigation`
  892. SET `order` = 0
  893. WHERE `id` IN ($offIds)";
  894. if (!mysql_query($sql))
  895. {
  896. displayHeader();
  897. displaySqlError($sql, mysql_error());
  898. displayFooter();
  899. return;
  900. }
  901. }
  902. // Turn on all that need turned on
  903. $communicateOrder = getNextNavigationOrder(3);
  904. $shareOrder = getNextNavigationOrder(4);
  905. foreach ($on as $plugin)
  906. {
  907. if ($plugin['col'] == 3)
  908. {
  909. $order = $communicateOrder;
  910. $communicateOrder++;
  911. }
  912. elseif ($plugin['col'] == 4)
  913. {
  914. $order = $shareOrder;
  915. $shareOrder++;
  916. }
  917. $id = (int)$plugin['id'];
  918. $sql = "UPDATE `fcms_navigation`
  919. SET `order` = '$order'
  920. WHERE `id` = '$id'";
  921. if (!mysql_query($sql))
  922. {
  923. displayHeader();
  924. displaySqlError($sql, mysql_error());
  925. displayFooter();
  926. return;
  927. }
  928. }
  929. $_SESSION['success'] = 1;
  930. header("Location: config.php?view=plugins");
  931. }
  932. /**
  933. * displayNavigationForm
  934. *
  935. * @return void
  936. */
  937. function displayNavigationForm ()
  938. {
  939. displayHeader();
  940. // Get Plugin Data
  941. $communicateNavj = array();
  942. $shareNav = array();
  943. $sql = "SELECT `id`, `link`, `col`, `order`, `req`
  944. FROM `fcms_navigation`
  945. WHERE `col` = 3
  946. OR `col` = 4
  947. AND `order` > 0
  948. ORDER BY `order`";
  949. $result = mysql_query($sql);
  950. if (!$result)
  951. {
  952. displaySqlError($sql, mysql_error());
  953. displayFooter();
  954. return;
  955. }
  956. while ($r = mysql_fetch_assoc($result))
  957. {
  958. if ($r['col'] == 3)
  959. {
  960. $communicateNav[] = $r;
  961. }
  962. else
  963. {
  964. $shareNav[] = $r;
  965. }
  966. }
  967. $message = '';
  968. if (isset($_SESSION['success']))
  969. {
  970. $message = '<div class="alert-message success">';
  971. $message .= '<a class="close" href="#" onclick="$(this).up(\'div\').hide(); return false;">&times;</a>';
  972. $message .= T_('Changes Updated Successfully').'</div>';
  973. unset($_SESSION['success']);
  974. }
  975. echo '
  976. <h2 id="navigation-heading">'.T_('Navigation').'</h2>
  977. '.$message.'
  978. <form action="config.php?view=navigation" method="post">
  979. <div class="row">
  980. <div class="span8">
  981. <h3>'.T_('Communicate').'</h3>
  982. <ol id="com_order" class="unstyled">';
  983. $communicateTotal = count($communicateNav);
  984. $i = 1;
  985. foreach ($communicateNav as $r)
  986. {
  987. echo '
  988. <li id="com_'.$r['id'].'">
  989. <span class="order">'.getOrderSelectBox('com', $r['id'], $communicateTotal, $r['order'], $i).'</span>
  990. <b>'.getPluginName($r['link']).'</b>
  991. </li>';
  992. $i++;
  993. }
  994. echo '
  995. </ol>
  996. </div><!-- /span8 -->
  997. <div class="span8">
  998. <h3>'.T_('Share').'</h3>
  999. <ol id="share_order" class="unstyled">';
  1000. $shareTotal = count($shareNav);
  1001. $i = 1;
  1002. foreach ($shareNav as $r)
  1003. {
  1004. echo '
  1005. <li id="share_'.$r['id'].'">
  1006. <span class="order">'.getOrderSelectBox('share', $r['id'], $shareTotal, $r['order'], $i).'</span>
  1007. <b>'.getPluginName($r['link']).'</b>
  1008. </li>';
  1009. $i++;
  1010. }
  1011. echo '
  1012. </ol>
  1013. </div><!-- /span8 -->
  1014. </div><!-- /row -->
  1015. <p><input type="submit" class="btn primary" id="submit-navigation" name="submit-navigation" value="'.T_('Save').'"/></p>
  1016. </form>
  1017. <script type="text/javascript">
  1018. $("submit-navigation").hide();
  1019. $$(".order").each(function(item) {
  1020. item.hide();
  1021. item.up("li").addClassName("sortable");
  1022. });
  1023. Sortable.create("com_order", {
  1024. onUpdate: function() {
  1025. new Ajax.Request("config.php", {
  1026. method: "post",
  1027. onSuccess: function(response) {
  1028. if (response.responseText !== "success") {
  1029. insertAlertMessage("error", "navigation-heading", "'.T_('An error occurred. Changes could not be saved.').'");
  1030. } else {
  1031. insertAlertMessage("success inline-alert", "navigation-heading", "'.T_('Changes Saved').'");
  1032. }
  1033. },
  1034. onFailure: function(response) {
  1035. insertAlertMessage("error", "navigation-heading", "'.T_('An error occurred. Changes could not be saved.').'");
  1036. },
  1037. parameters: {
  1038. "submit-ajax-navigation": "1",
  1039. data: Sortable.serialize("com_order")
  1040. }
  1041. });
  1042. }
  1043. });
  1044. Sortable.create("share_order", {
  1045. onUpdate: function() {
  1046. new Ajax.Request("config.php", {
  1047. method: "post",
  1048. onSuccess: function(response) {
  1049. if (response.responseText !== "success") {
  1050. insertAlertMessage("error", "navigation-heading", "'.T_('An error occurred. Changes could not be saved.').'");
  1051. } else {
  1052. insertAlertMessage("success inline-alert", "navigation-heading", "'.T_('Changes Saved').'");
  1053. }
  1054. },
  1055. onFailure: function(response) {
  1056. insertAlertMessage("error", "navigation-heading", "'.T_('An error occurred. Changes could not be saved.').'");
  1057. },
  1058. parameters: {
  1059. "submit-ajax-navigation": "1",
  1060. data: Sortable.serialize("share_order")
  1061. }
  1062. });
  1063. }
  1064. });
  1065. </script>';
  1066. displayFooter();
  1067. }
  1068. /**
  1069. * displayNavigationFormSubmit
  1070. *
  1071. * Handles the submit form for both ajax and regular form.
  1072. *
  1073. * @param boolean $ajax
  1074. *
  1075. * @return void
  1076. */
  1077. function displayNavigationFormSubmit ($ajax = false)
  1078. {
  1079. $communicateOrder = array();
  1080. $shareOrder = array();
  1081. // Fix the data (Ajax)
  1082. if (isset($_POST['data']))
  1083. {
  1084. parse_str($_POST['data']);
  1085. if (isset($share_order))
  1086. {
  1087. $shareOrder = $share_order;
  1088. }
  1089. if (isset($com_order))
  1090. {
  1091. $communicateOrder = $com_order;
  1092. }
  1093. }
  1094. // Fix the data (Form)
  1095. else
  1096. {
  1097. // Communciate
  1098. $i = 1;
  1099. while (isset($_POST['com-order_'.$i]))
  1100. {
  1101. $arr = explode(':', $_POST['com-order_'.$i]);
  1102. $id = $arr[0];
  1103. $order = $arr[1];
  1104. if (isset($communicateOrder[$order]))
  1105. {
  1106. displayHeader();
  1107. echo '
  1108. <div class="alert-message block-message error">
  1109. <p><b>'.T_('Can\'t have two items with the same order.').'</b></p>
  1110. <div class="alert-actions">
  1111. <a class="btn" href="config.php?view=navigation">'.T_('Please try again').'</a>
  1112. </div>
  1113. </div>';
  1114. displayFooter();
  1115. return;
  1116. }
  1117. $communicateOrder[$order] = $id;
  1118. $i++;
  1119. }
  1120. // Share
  1121. $i = 1;
  1122. while (isset($_POST['share-order_'.$i]))
  1123. {
  1124. $arr = explode(':', $_POST['share-order_'.$i]);
  1125. $id = $arr[0];
  1126. $order = $arr[1];
  1127. if (isset($shareOrder[$order]))
  1128. {
  1129. displayHeader();
  1130. echo '
  1131. <div class="alert-message block-message error">
  1132. <p><b>'.T_('Can\'t have two items with the same order.').'</b></p>
  1133. <div class="alert-actions">
  1134. <a class="btn" href="config.php?view=navigation">'.T_('Please try again').'</a>
  1135. </div>
  1136. </div>';
  1137. displayFooter();
  1138. return;
  1139. }
  1140. $shareOrder[$order] = $id;
  1141. $i++;
  1142. }
  1143. }
  1144. // Update the order of Share column
  1145. foreach ($shareOrder as $order => $id)
  1146. {
  1147. $id = (int)$id;
  1148. $order = (int)$order;
  1149. if ($ajax)
  1150. {
  1151. $order++;
  1152. }
  1153. $sql = "UPDATE `fcms_navigation`
  1154. SET `order` = '$order'
  1155. WHERE `id` = '$id'";
  1156. if (!mysql_query($sql))
  1157. {
  1158. if ($ajax)
  1159. {
  1160. echo 'error';
  1161. exit();
  1162. }
  1163. displayHeader();
  1164. displaySqlError($sql, mysql_error());
  1165. displayFooter();
  1166. return;
  1167. }
  1168. }
  1169. // Update the order of Communication column
  1170. foreach ($communicateOrder as $order => $id)
  1171. {
  1172. $id = (int)$id;
  1173. $order = (int)$order;
  1174. if ($ajax)
  1175. {
  1176. $order++;
  1177. }
  1178. $sql = "UPDATE `fcms_navigation`
  1179. SET `order` = '$order'
  1180. WHERE `id` = '$id'";
  1181. if (!mysql_query($sql))
  1182. {
  1183. if ($ajax)
  1184. {
  1185. echo 'error';
  1186. exit();
  1187. }
  1188. displayHeader();
  1189. displaySqlError($sql, mysql_error());
  1190. displayFooter();
  1191. return;
  1192. }
  1193. }
  1194. if ($ajax)
  1195. {
  1196. echo 'success';
  1197. exit();
  1198. }
  1199. $_SESSION['success'] = 1;
  1200. header("Location: config.php?view=navigation");
  1201. }
  1202. /**
  1203. * displayPhotoGalleryForm
  1204. *
  1205. * @return void
  1206. */
  1207. function displayPhotoGalleryForm ()
  1208. {
  1209. displayHeader();
  1210. $sql = "SELECT `name`, `value`
  1211. FROM `fcms_config`";
  1212. $result = mysql_query($sql);
  1213. if (!$result)
  1214. {
  1215. displaySqlError($sql, mysql_error());
  1216. displayFooter();
  1217. return;
  1218. }
  1219. $row = array();
  1220. while ($r = mysql_fetch_assoc($result))
  1221. {
  1222. $row[$r['name']] = $r['value'];
  1223. }
  1224. $full_size_list = array(
  1225. "0" => T_('Off (2 photos)'),
  1226. "1" => T_('On (3 photos)')
  1227. );
  1228. $full_size_options = buildHtmlSelectOptions($full_size_list, $row['full_size_photos']);
  1229. if (defined('UPLOADS'))
  1230. {
  1231. $protected = '<span class="label success">'.T_('Protected').'</span>';
  1232. }
  1233. else
  1234. {
  1235. $protected = '<span class="label warning">'.T_('Un-protected').'</span><br/><br/>';
  1236. $protected .= '<p><b>'.T_('Your photos can be viewed from non-authorized users.').'</b></p>';
  1237. $protected .= '<p>'.T_('In order to protect your photos so only logged in users can view them, please refer to the help document below.').'</p>';
  1238. $protected .= '<p><a href="'.URL_PREFIX.'help.php?topic=admin#adm-protect-photos">'.T_('Help Me Protect My Photos').'</a></p>';
  1239. }
  1240. $message = '';
  1241. if (isset($_SESSION['success']))
  1242. {
  1243. $message = '<div class="alert-message success">';
  1244. $message .= '<a class="close" href="#" onclick="$(this).up(\'div\').hide(); return false;">&times;</a>';
  1245. $message .= T_('Changes Updated Successfully').'</div>';
  1246. unset($_SESSION['success']);
  1247. }
  1248. echo '
  1249. <form action="config.php?view=gallery" method="post">
  1250. <fieldset>
  1251. <legend>'.T_('Photo Gallery').'</legend>
  1252. '.$message.'
  1253. <div class="clearfix">
  1254. <label for="full_size_photos">'.T_('Full Size Photos').'</label>
  1255. <div class="input">
  1256. <select name="full_size_photos">
  1257. '.$full_size_options.'
  1258. </select><br/><br/>
  1259. <span class="help-block">
  1260. '.T_('By default, Full Sized Photos is turned off to save on storage space and bandwidth. Turning this feature on can eat up significant space and bandwith.').'
  1261. </span>
  1262. </div>
  1263. </div>
  1264. <div class="clearfix">
  1265. <label for="protected">'.T_('Protected Photos').'</label>
  1266. <div class="input">
  1267. '.$protected.'
  1268. </div>
  1269. </div>
  1270. <div class="actions"><input type="submit" class="btn primary" id="submit-gallery" name="submit-gallery" value="'.T_('Save').'"/></div>
  1271. </div>
  1272. </fieldset>
  1273. </form>';
  1274. displayFooter();
  1275. }
  1276. /**
  1277. * displayPhotoGalleryFormSubmit
  1278. *
  1279. * @return void
  1280. */
  1281. function displayPhotoGalleryFormSubmit ()
  1282. {
  1283. $sql = "UPDATE `fcms_config`
  1284. SET `value` = '".escape_string($_POST['full_size_photos'])."'
  1285. WHERE `name` = 'full_size_photos'";
  1286. if (!mysql_query($sql))
  1287. {
  1288. displayHeader();
  1289. displaySqlError($sql, mysql_error());
  1290. displayFooter();
  1291. return;
  1292. }
  1293. $_SESSION['success'] = 1;
  1294. header("Location: config.php?view=gallery");
  1295. }
  1296. /**
  1297. * getOrderSelectBox
  1298. *
  1299. * @param int $name The name of the select box (comm|share)
  1300. * @param int $id The order number of the spot we are talking about
  1301. * @param int $total The total number of options for the select box
  1302. * @param int $selected Which order is currently selected
  1303. * @param int $number The number of select box on screen.
  1304. *
  1305. * @return void
  1306. */
  1307. function getOrderSelectBox ($name, $id, $total, $selected, $number)
  1308. {
  1309. $order_options = '<select class="span1" name="'.$name.'-order_'.$number.'">';
  1310. for ($i = 1; $i <= $total; $i++)
  1311. {
  1312. $order_options .= '<option value="'.$id.':'.$i.'"';
  1313. if ($i == $selected)
  1314. {
  1315. $order_options .= ' selected="selected"';
  1316. }
  1317. $order_options .= '>'.$i.'</option>';
  1318. }
  1319. $order_options .= '</select>';
  1320. return $order_options;
  1321. }