/**
* Validate the form
*/
private function validateForm()
{
// is the form submitted?
if ($this->frm->isSubmitted()) {
// get the status
$status = \SpoonFilter::getPostValue('status', array('active', 'draft'), 'active');
// validate redirect
$redirectValue = $this->frm->getField('redirect')->getValue();
if ($redirectValue == 'internal') {
$this->frm->getField('internal_redirect')->isFilled(BL::err('FieldIsRequired'));
}
if ($redirectValue == 'external') {
$this->frm->getField('external_redirect')->isURL(BL::err('InvalidURL'));
}
// set callback for generating an unique URL
$this->meta->setURLCallback('Backend\\Modules\\Pages\\Engine\\Model', 'getURL', array($this->record['id'], $this->record['parent_id'], $this->frm->getField('is_action')->getChecked()));
// cleanup the submitted fields, ignore fields that were added by hackers
$this->frm->cleanupFields();
// validate fields
$this->frm->getField('title')->isFilled(BL::err('TitleIsRequired'));
// validate meta
$this->meta->validate();
// no errors?
if ($this->frm->isCorrect()) {
// init var
$data = null;
// build data
if ($this->frm->getField('is_action')->isChecked()) {
$data['is_action'] = true;
}
if ($redirectValue == 'internal') {
$data['internal_redirect'] = array('page_id' => $this->frm->getField('internal_redirect')->getValue(), 'code' => '301');
}
if ($redirectValue == 'external') {
$data['external_redirect'] = array('url' => BackendPagesModel::getEncodedRedirectURL($this->frm->getField('external_redirect')->getValue()), 'code' => '301');
}
// build page record
$page['id'] = $this->record['id'];
$page['user_id'] = BackendAuthentication::getUser()->getUserId();
$page['parent_id'] = $this->record['parent_id'];
$page['template_id'] = (int) $this->frm->getField('template_id')->getValue();
$page['meta_id'] = (int) $this->meta->save();
$page['language'] = BL::getWorkingLanguage();
$page['type'] = $this->record['type'];
$page['title'] = $this->frm->getField('title')->getValue();
$page['navigation_title'] = $this->frm->getField('navigation_title')->getValue() != '' ? $this->frm->getField('navigation_title')->getValue() : $this->frm->getField('title')->getValue();
$page['navigation_title_overwrite'] = $this->frm->getField('navigation_title_overwrite')->getActualValue();
$page['hidden'] = $this->frm->getField('hidden')->getValue();
$page['status'] = $status;
$page['publish_on'] = BackendModel::getUTCDate(null, $this->record['publish_on']);
$page['created_on'] = BackendModel::getUTCDate(null, $this->record['created_on']);
$page['edited_on'] = BackendModel::getUTCDate();
$page['allow_move'] = $this->record['allow_move'];
$page['allow_children'] = $this->record['allow_children'];
$page['allow_edit'] = $this->record['allow_edit'];
$page['allow_delete'] = $this->record['allow_delete'];
$page['sequence'] = $this->record['sequence'];
$page['data'] = $data !== null ? serialize($data) : null;
if ($this->isGod) {
$page['allow_move'] = in_array('move', (array) $this->frm->getField('allow')->getValue()) ? 'Y' : 'N';
$page['allow_children'] = in_array('children', (array) $this->frm->getField('allow')->getValue()) ? 'Y' : 'N';
$page['allow_edit'] = in_array('edit', (array) $this->frm->getField('allow')->getValue()) ? 'Y' : 'N';
$page['allow_delete'] = in_array('delete', (array) $this->frm->getField('allow')->getValue()) ? 'Y' : 'N';
}
// set navigation title
if ($page['navigation_title'] == '') {
$page['navigation_title'] = $page['title'];
}
// insert page, store the id, we need it when building the blocks
$page['revision_id'] = BackendPagesModel::update($page);
// loop blocks
foreach ($this->blocksContent as $i => $block) {
// add page revision id to blocks
$this->blocksContent[$i]['revision_id'] = $page['revision_id'];
// validate blocks, only save blocks for valid positions
if (!in_array($block['position'], $this->templates[$this->frm->getField('template_id')->getValue()]['data']['names'])) {
unset($this->blocksContent[$i]);
}
}
// insert the blocks
BackendPagesModel::insertBlocks($this->blocksContent);
// trigger an event
BackendModel::triggerEvent($this->getModule(), 'after_edit', array('item' => $page));
// save tags
BackendTagsModel::saveTags($page['id'], $this->frm->getField('tags')->getValue(), $this->URL->getModule());
// build cache
BackendPagesModel::buildCache(BL::getWorkingLanguage());
// active
if ($page['status'] == 'active') {
// init var
$text = '';
// build search-text
foreach ($this->blocksContent as $block) {
$text .= ' ' . $block['html'];
}
// add to search index
BackendSearchModel::saveIndex($this->getModule(), $page['id'], array('title' => $page['title'], 'text' => $text));
// everything is saved, so redirect to the overview
$this->redirect(BackendModel::createURLForAction('Edit') . '&id=' . $page['id'] . '&report=edited&var=' . urlencode($page['title']) . '&highlight=row-' . $page['id']);
} elseif ($page['status'] == 'draft') {
// everything is saved, so redirect to the edit action
$this->redirect(BackendModel::createURLForAction('Edit') . '&id=' . $page['id'] . '&report=saved-as-draft&var=' . urlencode($page['title']) . '&highlight=row-' . $page['id'] . '&draft=' . $page['revision_id']);
}
}
}
}