edit.php
<?php
/**
* edit.php - edit a wiki page
*
* @copyright Copyright © 2013 geekwright, LLC. All rights reserved.
* @license gwiki/docs/license.txt GNU General Public License (GPL)
* @since 1.0
* @author Richard Griffith <richard@geekwright.com>
* @package gwiki
*/
use Xmf\Request;
require_once __DIR__ . '/header.php';
require_once XOOPS_ROOT_PATH . '/class/xoopsformloader.php';
global $xoTheme, $xoopsTpl;
if (Request::hasVar('gwikiwizard', 'SESSION')) {
$wizard_parms = unserialize($_SESSION['gwikiwizard']);
$_SESSION['gwikiwizard'] = null;
unset($_SESSION['gwikiwizard']);
$valid_keys = [
'page',
'op',
'title',
'body',
'display_keyword',
'parent_page',
'page_set_home',
'page_set_order',
'meta_description',
'meta_keywords',
'show_in_index',
'leave_inactive',
];
foreach ($wizard_parms as $key => $value) {
if (in_array($key, $valid_keys)) {
$_POST[$key] = $value;
}
}
}
// $_GET and $_POST variables we use
if (Request::hasVar('page', 'GET')) {
$page = cleaner($_GET['page']);
}
if (Request::hasVar('page', 'POST')) {
$page = cleaner($_POST['page']);
}
if (Request::hasVar('op', 'GET')) {
$op = mb_strtolower(cleaner($_GET['op']));
}
if (Request::hasVar('op', 'POST')) {
$op = mb_strtolower(cleaner($_POST['op']));
}
if (empty($op) || ('preview' !== $op && 'edit' !== $op && 'insert' !== $op)) {
$op = 'edit';
} // get a valid op
// namespace id (prefix_id) is set by newpage block, turn it into a full page name
if (Request::hasVar('nsid', 'GET')) {
$page = $wikiPage->makeKeywordFromPrefix(Request::getInt('nsid', 0, 'GET'), $page);
}
if (empty($page)) {
$page = $wikiPage->wikiHomePage;
}
$normpage = $wikiPage->normalizeKeyword($page);
if (_MI_GWIKI_WIKI404 === $normpage && 0 !== strcasecmp($page, _MI_GWIKI_WIKI404)) {
redirect_header("index.php?page=$page", 2, _MI_GWIKI_WIKI404);
} else {
$page = $normpage;
}
$id = 0;
$uid = 0;
$title = '';
$body = '';
$display_keyword = '';
$parent_page = '';
$page_set_home = '';
$page_set_order = 0;
$meta_description = '';
$meta_keywords = '';
$show_in_index = 1;
$leave_inactive = 0;
if (Request::hasVar('id', 'GET')) {
$id = Request::getInt('id', 0, 'GET');
} // post value will override
// $_POST variables we use
if (Request::hasVar('id', 'POST')) {
$id = Request::getInt('id', 0, 'POST');
}
if (Request::hasVar('uid', 'POST')) {
$uid = Request::getInt('uid', 0, 'POST');
}
if (Request::hasVar('title', 'POST')) {
$title = cleaner($_POST['title']);
}
if (Request::hasVar('body', 'POST')) {
$body = cleaner($_POST['body'], false);
}
if (Request::hasVar('display_keyword', 'POST')) {
$display_keyword = cleaner($_POST['display_keyword']);
}
if (Request::hasVar('parent_page', 'POST')) {
$parent_page = cleaner($_POST['parent_page']);
}
if (Request::hasVar('page_set_home', 'POST')) {
$page_set_home = cleaner($_POST['page_set_home']);
}
if (Request::hasVar('page_set_order', 'POST')) {
$page_set_order = Request::getInt('page_set_order', 0, 'POST');
}
if (Request::hasVar('meta_description', 'POST')) {
$meta_description = cleaner($_POST['meta_description']);
}
if (Request::hasVar('meta_keywords', 'POST')) {
$meta_keywords = cleaner($_POST['meta_keywords']);
}
if (Request::hasVar('show_in_index', 'POST')) {
$show_in_index = Request::getInt('show_in_index', 0, 'POST');
}
if (Request::hasVar('leave_inactive', 'POST')) {
$leave_inactive = Request::getInt('leave_inactive', 0, 'POST');
}
global $wikiPage;
$pageX = $wikiPage->getPage($page, (0 === $id ? null : $id));
$mayEdit = $wikiPage->checkEdit();
if ($pageX) {
$pageX['author'] = $wikiPage->getUserName($wikiPage->uid);
$pageX['revisiontime'] = date($wikiPage->dateFormat, $pageX['lastmodified']);
$pageX['mayEdit'] = $mayEdit;
$pageX['pageFound'] = true;
if (!empty($highlight)) {
$pageX['body'] = $wikiPage->highlightWords($highlight);
}
} else {
$pageX = [];
$uid = $xoopsUser ? $xoopsUser->getVar('uid') : 0;
$pageX['uid'] = $uid;
$pageX['author'] = $wikiPage->getUserName($uid);
$pageX['revisiontime'] = date($wikiPage->dateFormat);
$pageX['mayEdit'] = $mayEdit;
$pageX['keyword'] = $page;
$pageX['pageFound'] = false;
}
$dir = basename(__DIR__);
$pageX['moddir'] = $dir;
$pageX['modpath'] = XOOPS_ROOT_PATH . '/modules/' . $dir;
$pageX['modurl'] = XOOPS_URL . '/modules/' . $dir;
$pageX['ineditor'] = true;
$pageX['imglib'] = $wikiPage->getImageLib($page);
$pageX['maxsize'] = $wikiPage->getMaxUploadSize();
if (!$mayEdit) {
$err_message = _MD_GWIKI_NO_PAGE_PERMISSION;
redirect_header("index.php?page=$page", 2, $err_message);
}
if ($wikiPage->admin_lock) {
redirect_header("index.php?page=$page", 2, _MD_GWIKI_PAGE_IS_LOCKED);
}
if ('insert' === $op) {
// check if this page was updated elsewhere while we were editing
// if so, we save it, but don't make it the active revision
if ($id === $wikiPage->getCurrentId($page)) {
$forced_inactive = false;
} else {
$leave_inactive = true;
$forced_inactive = true;
}
$wikiPage->keyword = $page;
$wikiPage->title = $title;
$wikiPage->display_keyword = $display_keyword;
$wikiPage->body = $body;
$wikiPage->uid = $uid;
$wikiPage->parent_page = $parent_page;
$wikiPage->page_set_home = $page_set_home;
$wikiPage->page_set_order = $page_set_order;
$wikiPage->meta_description = $meta_description;
$wikiPage->meta_keywords = $meta_keywords;
$wikiPage->show_in_index = $show_in_index;
$success = $wikiPage->addRevision($leave_inactive);
if ($success) {
if ($forced_inactive) {
$err_message = _MD_GWIKI_EDITCONFLICT;
$op = 'edit';
$id = $success;
} else {
$message = _MD_GWIKI_DBUPDATED;
if ($leave_inactive) {
$message = _MD_GWIKI_SAVED_INACTIVE;
}
$op = '';
redirect_header("index.php?page=$page", 2, $message);
}
} else {
$err_message = _MD_GWIKI_ERRORINSERT;
$op = 'edit';
}
}
$pagestatmessage = '';
$pagechanged = '';
$result = false;
if (('preview' === $op) && isset($id)) {
$result = (int)$id;
$pagestatmessage = _MD_GWIKI_PAGENOTSAVED;
$pagechanged = 'yes';
} else {
//print_r($pageX);
if ($pageX['pageFound']) {
$result = true;
} else {
$result = false;
$pagestatmessage = _MD_GWIKI_PAGENOTFOUND;
$op = 'edit';
$pageX['keyword'] = $page;
// $pageX['pageFound'] = true; // not really, but used in template only from here on
}
$gwiki_id = $wikiPage->gwiki_id;
$keyword = $wikiPage->keyword;
$display_keyword = $wikiPage->display_keyword;
$title = $wikiPage->title;
$body = $wikiPage->body;
$parent_page = $wikiPage->parent_page;
$page_set_home = $wikiPage->page_set_home;
$page_set_order = $wikiPage->page_set_order;
$meta_description = $wikiPage->meta_description;
$meta_keywords = $wikiPage->meta_keywords;
$show_in_index = $wikiPage->show_in_index;
$lastmodified = $wikiPage->lastmodified;
$uid = $wikiPage->uid;
$admin_lock = $wikiPage->admin_lock;
$active = $wikiPage->active;
}
switch ($op) {
case 'edit':
case 'preview':
//case "images":
$GLOBALS['xoopsOption']['template_main'] = 'gwiki_edit.tpl';
require_once XOOPS_ROOT_PATH . '/header.php';
$title = prepOut($title); // we need title ready to display in several places
if ('preview' === $op) {
$pageX['keyword'] = $page;
$pageX['title'] = $title;
$pageX['body'] = $wikiPage->renderPage($body);
$pageX['preview'] = true;
} else {
unset($pageX['title'], $pageX['body']);
$pageX['preview'] = false;
}
$uid = $xoopsUser ? $xoopsUser->getVar('uid') : 0;
$form = new \XoopsThemeForm(_MD_GWIKI_EDITPAGE . ": $page", 'gwikiform', "edit.php?page=$page");
if (empty($display_keyword)) {
$display_keyword = $page;
}
$form->addElement(new \XoopsFormHidden('op', 'insert'));
$form->addElement(new \XoopsFormHidden('page', $page));
$form->addElement(new \XoopsFormHidden('id', $wikiPage->getCurrentId($page)));
$form->addElement(new \XoopsFormHidden('uid', $uid));
$form->addElement(new \XoopsFormHidden('pagechanged', $pagechanged));
$form->addElement(new \XoopsFormText(_MD_GWIKI_TITLE, 'title', 40, 250, $title));
$form->addElement(new \XoopsFormLabel('', '', 'gwikieditbuttons')); // edit buttons added in template
$form_edit_body = new \XoopsFormTextArea(_MD_GWIKI_BODY, 'body', htmlspecialchars($body, ENT_QUOTES | ENT_HTML5), 20, 80);
$form_edit_body->setExtra("onclick='setWikiChanged();'");
$form->addElement($form_edit_body);
$btn_tray = new \XoopsFormElementTray('', ' ', 'gwikiformpage1');
$submit_btn = new \XoopsFormButton('', 'submit', _SUBMIT, 'submit');
$submit_btn->setExtra("onclick='prepForSubmit();'");
$btn_tray->addElement($submit_btn);
$metadata_btn = new \XoopsFormButton('', 'metaedit', _MD_GWIKI_EDIT_SHOW_META, 'button');
$metadata_btn->setExtra('onclick=' . "'var ele = document.getElementById(\"gwikiformmetaedit\"); ele.style.display = \"inherit\";" . " var ele2 = document.getElementById(\"gwikiformbodyedit\"); ele2.style.display = \"none\";'");
$btn_tray->addElement($metadata_btn);
$preview_btn = new \XoopsFormButton('', 'preview', _PREVIEW, 'button');
$preview_btn->setExtra("onclick='prepForPreview();'");
$btn_tray->addElement($preview_btn);
$cancel_btn = new \XoopsFormButton('', 'cancel', _CANCEL, 'button');
$cancel_btn->setExtra("onclick='" . (('edit' === $op) ? 'history.back();' : 'document.location.href="index.php' . ($result ? "?page=$page" : '') . '";') . "'");
$btn_tray->addElement($cancel_btn);
$btn_tray->addElement(new \XoopsFormLabel('', " - <strong>{$pagestatmessage}</strong>"));
$form->addElement($btn_tray);
$form->addElement(new \XoopsFormText(_MD_GWIKI_DISPLAY_KEYWORD, 'display_keyword', 40, 250, htmlspecialchars($display_keyword, ENT_QUOTES | ENT_HTML5)));
$form->addElement(new \XoopsFormText(_MD_GWIKI_PARENT_PAGE, 'parent_page', 40, 250, htmlspecialchars($parent_page, ENT_QUOTES | ENT_HTML5)));
$form->addElement(new \XoopsFormText(_MD_GWIKI_PAGE_SET_HOME, 'page_set_home', 40, 250, htmlspecialchars($page_set_home, ENT_QUOTES | ENT_HTML5)));
$form->addElement(new \XoopsFormText(_MD_GWIKI_PAGE_SET_ORDER, 'page_set_order', 4, 10, htmlspecialchars($page_set_order, ENT_QUOTES | ENT_HTML5)));
$form->addElement(new \XoopsFormText(_MD_GWIKI_META_KEYWORDS, 'meta_keywords', 80, 500, htmlspecialchars($meta_keywords, ENT_QUOTES | ENT_HTML5)));
$form->addElement(new \XoopsFormTextArea(_MD_GWIKI_META_DESCRIPTION, 'meta_description', htmlspecialchars($meta_description, ENT_QUOTES | ENT_HTML5), 6, 80));
$form->addElement(new \XoopsFormRadioYN(_MD_GWIKI_SHOW_IN_INDEX, 'show_in_index', $show_in_index));
$form->addElement(new \XoopsFormRadioYN(_MD_GWIKI_LEAVE_INACTIVE, 'leave_inactive', (int)$leave_inactive));
$btn_tray2 = new \XoopsFormElementTray('', ' ', 'gwikiformpage2');
$submit_btn2 = new \XoopsFormButton('', 'submit2', _SUBMIT, 'submit');
$submit_btn2->setExtra("onclick='prepForSubmit();'");
$btn_tray2->addElement($submit_btn2);
$bodydata_btn = new \XoopsFormButton('', 'bodyedit', _MD_GWIKI_EDIT_SHOW_BODY, 'button');
$bodydata_btn->setExtra('onclick=' . "'var ele = document.getElementById(\"gwikiformmetaedit\"); ele.style.display = \"none\"; " . " var ele2 = document.getElementById(\"gwikiformbodyedit\"); ele2.style.display = \"inherit\";'");
$btn_tray2->addElement($bodydata_btn);
$preview_btn2 = new \XoopsFormButton('', 'preview2', _PREVIEW, 'button');
$preview_btn2->setExtra("onclick='prepForPreview();'");
$btn_tray2->addElement($preview_btn2);
$cancel_btn2 = new \XoopsFormButton('', 'cancel2', _CANCEL, 'button');
$cancel_btn2->setExtra("onclick='" . (('edit' === $op) ? 'history.back();' : 'document.location.href="index.php' . ($result ? "?page=$page" : '') . '";') . "'");
$btn_tray2->addElement($cancel_btn2);
$btn_tray2->addElement(new \XoopsFormLabel('', " - <strong>{$pagestatmessage}</strong>"));
$form->addElement($btn_tray2);
$form->assign($xoopsTpl);
$xoopsTpl->assign('gwiki', $pageX);
$xoopsTpl->assign('showwizard', empty($body));
break;
}
$xoTheme->addStylesheet(XOOPS_URL . '/modules/gwiki/assets/css/module.css');
if (empty($title)) {
$title = $xoopsModule->name();
}
$xoopsTpl->assign('xoops_pagetitle', $title);
if (!empty($message)) {
$xoopsTpl->assign('message', htmlspecialchars($message, ENT_QUOTES | ENT_HTML5));
}
if (!empty($err_message)) {
$xoopsTpl->assign('err_message', htmlspecialchars($err_message, ENT_QUOTES | ENT_HTML5));
}
require_once XOOPS_ROOT_PATH . '/footer.php';