Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Entity/Page.php
<?php

namespace XF\Entity;

use
XF\Mvc\Entity\Structure;

/**
 * COLUMNS
 * @property int $node_id
 * @property int $publish_date
 * @property int $modified_date
 * @property int $view_count
 * @property bool $log_visits
 * @property bool $list_siblings
 * @property bool $list_children
 * @property string $callback_class
 * @property string $callback_method
 * @property bool $advanced_mode
 *
 * GETTERS
 * @property string|null $node_name
 * @property string|null $title
 * @property string|null $description
 * @property int $depth
 *
 * RELATIONS
 * @property \XF\Entity\Template $MasterTemplate
 * @property \XF\Entity\Node $Node
 */
class Page extends AbstractNode
{
    public function
getNodeTemplateRenderer($depth)
    {
        return [
           
'template' => 'node_list_page',
           
'macro' => $depth <= 2 ? 'depth' . $depth : 'depthN'
       
];
    }

    public function
getTemplateName()
    {
        return
'_page_node.' . $this->node_id;
    }

   
/**
     * @return Template
     */
   
public function getMasterTemplate()
    {
       
$template = $this->MasterTemplate;
        if (!
$template)
        {
           
$template = $this->_em->create('XF:Template');
           
$template->title = $this->_getDeferredValue(function() { return $this->getTemplateName(); }, 'save');
           
$template->type = 'public';
           
$template->style_id = 0;
           
$template->addon_id = '';
        }

        return
$template;
    }

    protected function
_preSave()
    {
        if (
           
$this->isChanged(['callback_class', 'callback_method'])
            && (
$this->callback_class || $this->callback_method)
        )
        {
            if (!\
XF\Util\Php::validateCallbackPhrased($this->callback_class, $this->callback_method, $error))
            {
               
$this->error($error, 'callback_method');
            }
        }
    }

    protected function
_postSave()
    {
    }

    protected function
_postDelete()
    {
        if (
$this->MasterTemplate)
        {
           
$this->MasterTemplate->delete();
        }
    }

    public function
getNodeTypeApiData($verbosity = self::VERBOSITY_NORMAL, array $options = [])
    {
       
$result = parent::getNodeTypeApiData();

       
$result->content = $this->app()->templater()->renderTemplate('public:' . $this->getTemplateName());

        return
$result;
    }

    public static function
getStructure(Structure $structure)
    {
       
$structure->table = 'xf_page';
       
$structure->shortName = 'XF:Page';
       
$structure->contentType = 'page';
       
$structure->primaryKey = 'node_id';
       
$structure->columns = [
           
'node_id' => ['type' => self::UINT, 'required' => true],
           
'publish_date' => ['type' => self::UINT, 'default' => \XF::$time, 'api' => true],
           
'modified_date' => ['type' => self::UINT, 'default' => \XF::$time],
           
'view_count' => ['type' => self::UINT, 'default' => 0, 'api' => true],
           
'log_visits' => ['type' => self::BOOL, 'default' => false],
           
'list_siblings' => ['type' => self::BOOL, 'default' => false],
           
'list_children' => ['type' => self::BOOL, 'default' => false],
           
'callback_class' => ['type' => self::STR, 'maxLength' => 100, 'default' => ''],
           
'callback_method' => ['type' => self::STR, 'maxLength' => 75, 'default' => ''],
           
'advanced_mode' => ['type' => self::BOOL, 'default' => false]
        ];
       
$structure->getters = [];
       
$structure->behaviors = [
           
'XF:Indexable' => [
               
'checkForUpdates' => ['modified_date']
            ],
        ];
       
$structure->relations = [
           
'MasterTemplate' => [
               
'entity' => 'XF:Template',
               
'type' => self::TO_ONE,
               
'conditions' => [
                    [
'style_id', '=', 0],
                    [
'type', '=', 'public'],
                    [
'title', '=', '_page_node.', '$node_id']
                ]
            ]
        ];

        static::
addDefaultNodeElements($structure);

        return
$structure;
    }
}