Backend\Core\Installer\ModuleInstaller::insertPage PHP Method

insertPage() protected method

Insert a page
protected insertPage ( array $revision, array $meta = null, array $block = null ) : integer
$revision array An array with the revision data.
$meta array The meta-data.
$block array The blocks.
return integer
    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'];
    }