protected function insertPage(array $revision, array $meta = null, array $block = null)
{
$revision = (array) $revision;
$meta = (array) $meta;
// deactived previous revisions
if (isset($revision['id']) && isset($revision['language'])) {
$this->getDB()->update('pages', array('status' => 'archive'), 'id = ? AND language = ?', array($revision['id'], $revision['language']));
}
// build revision
if (!isset($revision['language'])) {
throw new \SpoonException('language is required for installing pages');
}
if (!isset($revision['title'])) {
throw new \SpoonException('title is required for installing pages');
}
if (!isset($revision['id'])) {
$revision['id'] = (int) $this->getDB()->getVar('SELECT MAX(id) + 1 FROM pages WHERE language = ?', array($revision['language']));
}
if (!$revision['id']) {
$revision['id'] = 1;
}
if (!isset($revision['user_id'])) {
$revision['user_id'] = $this->getDefaultUserID();
}
if (!isset($revision['template_id'])) {
$revision['template_id'] = $this->getTemplateId('default');
}
if (!isset($revision['type'])) {
$revision['type'] = 'page';
}
if (!isset($revision['parent_id'])) {
$revision['parent_id'] = $revision['type'] == 'page' ? 1 : 0;
}
if (!isset($revision['navigation_title'])) {
$revision['navigation_title'] = $revision['title'];
}
if (!isset($revision['navigation_title_overwrite'])) {
$revision['navigation_title_overwrite'] = 'N';
}
if (!isset($revision['hidden'])) {
$revision['hidden'] = 'N';
}
if (!isset($revision['status'])) {
$revision['status'] = 'active';
}
if (!isset($revision['publish_on'])) {
$revision['publish_on'] = gmdate('Y-m-d H:i:s');
}
if (!isset($revision['created_on'])) {
$revision['created_on'] = gmdate('Y-m-d H:i:s');
}
if (!isset($revision['edited_on'])) {
$revision['edited_on'] = gmdate('Y-m-d H:i:s');
}
if (!isset($revision['data'])) {
$revision['data'] = null;
}
if (!isset($revision['allow_move'])) {
$revision['allow_move'] = 'Y';
}
if (!isset($revision['allow_children'])) {
$revision['allow_children'] = 'Y';
}
if (!isset($revision['allow_edit'])) {
$revision['allow_edit'] = 'Y';
}
if (!isset($revision['allow_delete'])) {
$revision['allow_delete'] = 'Y';
}
if (!isset($revision['sequence'])) {
$revision['sequence'] = (int) $this->getDB()->getVar('SELECT MAX(sequence) + 1 FROM pages WHERE language = ? AND parent_id = ? AND type = ?', array($revision['language'], $revision['parent_id'], $revision['type']));
}
// meta needs to be inserted
if (!isset($revision['meta_id'])) {
// build meta
if (!isset($meta['keywords'])) {
$meta['keywords'] = $revision['title'];
}
if (!isset($meta['keywords_overwrite'])) {
$meta['keywords_overwrite'] = false;
}
if (!isset($meta['description'])) {
$meta['description'] = $revision['title'];
}
if (!isset($meta['description_overwrite'])) {
$meta['description_overwrite'] = false;
}
if (!isset($meta['title'])) {
$meta['title'] = $revision['title'];
}
if (!isset($meta['title_overwrite'])) {
$meta['title_overwrite'] = false;
}
if (!isset($meta['url'])) {
$meta['url'] = $revision['title'];
}
if (!isset($meta['url_overwrite'])) {
$meta['url_overwrite'] = false;
}
if (!isset($meta['custom'])) {
$meta['custom'] = null;
}
if (!isset($meta['data'])) {
$meta['data'] = null;
}
// insert meta
$revision['meta_id'] = $this->insertMeta($meta['keywords'], $meta['description'], $meta['title'], $meta['url'], $meta['keywords_overwrite'], $meta['description_overwrite'], $meta['title_overwrite'], $meta['url_overwrite'], $meta['custom'], $meta['data']);
}
// insert page
$revision['revision_id'] = $this->getDB()->insert('pages', $revision);
// array of positions and linked blocks (will be used to automatically set block sequence)
$positions = array();
// loop blocks: get arguments (this function has a variable length
// argument list, to allow multiple blocks to be added)
for ($i = 0; $i < func_num_args() - 2; ++$i) {
// get block
$block = @func_get_arg($i + 2);
if ($block === false) {
$block = array();
} else {
$block = (array) $block;
}
// save block position
if (!isset($block['position'])) {
$block['position'] = 'main';
}
$positions[$block['position']][] = $block;
// build block
if (!isset($block['revision_id'])) {
$block['revision_id'] = $revision['revision_id'];
}
if (!isset($block['html'])) {
$block['html'] = '';
} elseif (file_exists($block['html'])) {
$block['html'] = file_get_contents($block['html']);
}
if (!isset($block['created_on'])) {
$block['created_on'] = gmdate('Y-m-d H:i:s');
}
if (!isset($block['edited_on'])) {
$block['edited_on'] = gmdate('Y-m-d H:i:s');
}
if (!isset($block['extra_id'])) {
$block['extra_id'] = null;
}
if (!isset($block['visible'])) {
$block['visible'] = 'Y';
}
if (!isset($block['sequence'])) {
$block['sequence'] = count($positions[$block['position']]) - 1;
}
$this->getDB()->insert('pages_blocks', $block);
}
// return page id
return $revision['id'];
}