<? /* * This file is part of the 'Science Fair In A Box' project * SFIAB Website: http://www.sfiab.ca * * Copyright (C) 2008 James Grant <james@lightbox.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation, version 2. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ ?> <? require ('../common.inc.php'); require_once ('../user.inc.php'); user_auth_required('committee', 'admin'); // make sure storage folder exists if (!file_exists('../data/userfiles')) mkdir('../data/userfiles'); send_header('Website Content Manager', array('Committee Main' => 'committee_main.php', 'Administration' => 'admin/index.php'), 'website_content_management'); ?> <div class="element"></div> <script type="module"> import { Editor } from 'https://esm.sh/@tiptap/core' import StarterKit from 'https://esm.sh/@tiptap/starter-kit' new Editor({ element: document.querySelector('.element'), extensions: [ StarterKit.configure({ heading: { levels: [1, 2, 3], }, }), ], }) </script> <? if (get_value_from_array($_POST, 'action') == 'save') { $err = false; foreach ($config['languages'] AS $lang => $langname) { $filename = stripslashes(get_value_from_array($_POST, 'filename', '')); // $filename=ereg_replace("[^A-Za-z0-9\.\_\/]","_",$_POST['filename']); if (substr($filename, -5) != '.html') $filename = $filename . '.html'; $textname = "text_$lang"; $titlename = "title_$lang"; $showlogoname = "showlogo_$lang"; // get the dt here to insert with ALL the languages, we cant rely on the INSERT NOW() always inserting multiple records with the same timestamp! $insertdt = date('Y-m-d H:i:s'); $text = stripslashes(get_value_from_array($_POST, $textname, '')); $q = $pdo->prepare("INSERT INTO cms (filename,dt,lang,text,title,showlogo) VALUES ( ?, ?, ?, ?, ?, ? )"); $q->execute([$filename,$insertdt,$lang,$text,get_value_from_array($_POST, $titlename, ''),get_value_from_array($_POST, $showlogoname, '')]); if ($pdo->errorInfo()) { echo error(i18n('An error occurred saving %1 in %2', array($filename, $langname))); $err = true; } } if (!$err) echo happy(i18n('%1 successfully saved', array($_POST['filename']))); } if (get_value_from_array($_GET, 'filename', '') || get_value_from_array($_GET, 'action', 'create')) { echo "<a href=\"cms.php\"><< Back to file list</a><br />\n"; echo '<form method="post" action="cms.php">'; echo "<input type=\"hidden\" name=\"action\" value=\"save\">\n"; if (get_value_from_array($_GET, 'filename', '')) echo '<input type="hidden" name="filename" value="' . htmlspecialchars($_GET['filename']) . "\">\n"; else echo 'Choose filename to create: /web/<input type="text" name="filename" size="15">.html<hr />'; echo '<table width="100%" cellpadding="3">'; echo '<tr><td valign="top">'; foreach ($config['languages'] AS $lang => $langname) { echo '<table class="tableview" width="100%">'; echo '<tr><th colspan="2">'; $q = $pdo->prepare("SELECT * FROM cms WHERE filename=? AND lang=? ORDER BY dt DESC LIMIT 1"); $q->execute([get_value_from_array($_GET, 'filename', ''),$lang]); if ($r = $q->fetch(PDO::FETCH_OBJ)) { if ($r->dt == '0000-00-00 00:00:00' || !$r->dt) $dt = 'Never'; else $dt = $r->dt; echo '<b>' . htmlspecialchars($_GET['filename']) . " - $langname</b> " . i18n('Last updated') . ": $dt<br />"; if ($_GET['dt']) { $q2 = $pdo->prepare("SELECT * FROM cms WHERE filename=? AND lang=? AND dt<=? ORDER BY dt DESC LIMIT 1"); $q2->execute([$_GET['filename'], $lang, $_GET['dt']]); $r2 = $q2->fetch(PDO::FETCH_OBJ); if ($r2->dt != $r->dt) { echo "Displaying historical file. Date: $r->dt"; $r = $r2; } } } else { echo "<b>$langname</b><br />"; // ".i18n("Last updated").": $dt<br />"; } echo "</th></tr>\n"; echo '<tr><td width="100">' . i18n('Page Title') . ":</td><td><input type=\"text\" name=\"title_$lang\" style=\"width: 99%;\" value=\"" . htmlspecialchars(get_value_property_or_default($r, 'title', '')) . "\"></td></tr>\n"; echo '<tr><td width="100">' . i18n('Show Logo') . ':</td><td>'; if (get_value_property_or_default($r, 'showlogo')) $ch = 'checked="checked"'; else $ch = ''; echo "<input $ch type=\"radio\" name=\"showlogo_$lang\" value=\"1\"> " . i18n('Yes'); echo ' '; if (!get_value_property_or_default($r, 'showlogo')) $ch = 'checked="checked"'; else $ch = ''; echo "<input $ch type=\"radio\" name=\"showlogo_$lang\" value=\"0\"> " . i18n('No'); echo "</td></tr>\n"; echo '<tr><td colspan="2">'; require_once ('../fckeditor/fckeditor.php'); $oFCKeditor = new FCKeditor("text_$lang"); $oFCKeditor->BasePath = '../fckeditor/'; $oFCKeditor->Value = get_value_property_or_default($r, 'text'); $oFCKeditor->Width = '100%'; $oFCKeditor->Height = 400; $oFCKeditor->Create(); echo "</td></tr></table>\n"; echo '<br />'; } echo '</td><td width="130" valign="top">'; echo '<table class="tableview" width="130">'; if (get_value_from_array($_GET, 'historylimit', '')) $historylimit = intval(get_value_from_array($_GET, 'historylimit', '')); else $historylimit = 30; echo '<tr><th>' . i18n('File History') . "</th></tr>\n"; $q = $pdo->prepare("SELECT DISTINCT(dt) FROM cms WHERE filename=? ORDER BY dt DESC LIMIT ?"); $q->execute([get_value_from_array($_GET, 'filename', ''),$historylimit]); $first = true; if ($q->rowCount()) { while ($r = $q->fetch(PDO::FETCH_OBJ)) { if ($r->dt == $_GET['dt']) $style = 'font-weight: bold;'; else $style = 'font-weight: normal;'; if ($first && !$_GET['dt']) $style = 'font-weight: bold;'; echo '<tr><td><a href="cms.php?filename=' . rawurlencode($_GET['filename']) . '&dt=' . rawurlencode($r->dt) . "\" style=\"font-size: 0.75em; $style\">$r->dt</a></td></tr>\n"; $first = false; } } else echo "<tr><td><i>No History</i></td></tr>\n"; echo "</table>\n"; echo "</td></tr>\n"; echo '<tr><td colspan="2">'; echo '<table><tr><td>'; echo '<input type="submit" value="' . i18n('Save Page') . "\" />\n"; echo '</form>'; echo '</td><td>'; echo '<form method="get" action="cms.php">'; echo '<input type="submit" value="' . i18n('Cancel Changes') . "\" />\n"; echo "</form>\n"; echo "</td></tr></table>\n"; echo "</td></tr></table>\n"; } else { echo i18n('Choose a web page filename to edit'); echo ' '; echo '<a href="cms.php?action=create">' . i18n('or click here to create a new file') . "</a><br />\n"; echo '<table class="summarytable">'; $q = $pdo->prepare('SELECT DISTINCT(filename) AS filename FROM cms ORDER BY filename'); echo '<tr><th>' . i18n('Filename') . '</th><th>' . i18n('Last Update') . '</th></tr>'; while ($r = $q->fetch(PDO::FETCH_ASSOC)) { echo '<tr><td><a href="cms.php?filename=' . rawurlencode($r->filename) . "\">/web/$r->filename</a></td>"; $q2 = $pdo->prepare("SELECT dt FROM cms WHERE filename=? ORDER BY dt DESC LIMIT 1"); $q->execute($r->filename); $r2 = $q2->fetch(PDO::FETCH_OBJ); if ($r2->dt == '0000-00-00 00:00:00') $dt = 'Never'; else $dt = $r2->dt; echo "<td>$dt</td>"; echo '</tr>'; } echo '</table>'; } send_footer(); ?>