Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/Template.php
<?php

namespace XF\Repository;

use
XF\Mvc\Entity\Repository;

use function
count;

class
Template extends Repository
{
   
/**
     * @param \XF\Entity\Style $style
     * @param string|null $type
     *
     * @return \XF\Finder\TemplateMap
     */
   
public function findEffectiveTemplatesInStyle(\XF\Entity\Style $style, $type = null)
    {
       
/** @var \XF\Finder\TemplateMap $finder */
       
$finder = $this->finder('XF:TemplateMap');
       
$finder
           
->where('style_id', $style->style_id)
            ->
with('Template', true)
            ->
orderTitle()
            ->
pluckFrom('Template', 'template_id');

        if (
$type !== null)
        {
           
$finder->where('type', $type);
        }

        return
$finder;
    }

   
/**
     * @param \XF\Entity\Style $style
     * @param string           $title
     * @param string           $type
     *
     * @return \XF\Finder\TemplateMap
     */
   
public function findEffectiveTemplateInStyle(\XF\Entity\Style $style, $title, $type)
    {
       
/** @var \XF\Finder\TemplateMap $finder */
       
$finder = $this->finder('XF:TemplateMap');
       
$finder
           
->where('style_id', $style->style_id)
            ->
where('type', $type)
            ->
where('title', $title)
            ->
pluckFrom('Template', 'template_id')
        ;

        return
$finder;
    }

   
/**
     * @param \XF\Entity\Style $style
     * @param string|null $type
     *
     * @return \XF\Finder\Template
     */
   
public function findTemplatesInStyle(\XF\Entity\Style $style, $type = null)
    {
       
/** @var \XF\Finder\Template $templateFinder */
       
$templateFinder = $this->finder('XF:Template');
       
$templateFinder
           
->where('style_id', $style->style_id)
            ->
order('type')
            ->
orderTitle();

        if (
$type !== null)
        {
           
$templateFinder->where('type', $type);
        }

        return
$templateFinder;
    }

    public function
countOutdatedTemplates()
    {
        return
count($this->getBaseOutdatedTemplateData());
    }

    public function
getOutdatedTemplates()
    {
       
$data = $this->getBaseOutdatedTemplateData();
       
$templateIds = array_keys($data);

        if (!
$templateIds)
        {
            return [];
        }

       
$templates = $this->em->findByIds('XF:Template', $templateIds);

       
$output = [];
        foreach (
$data AS $templateId => $outdated)
        {
            if (!isset(
$templates[$templateId]))
            {
                continue;
            }

           
$outdated['template'] = $templates[$templateId];
           
$output[$templateId] = $outdated;
        }

        return
$output;
    }

    protected function
getBaseOutdatedTemplateData()
    {
       
$db = $this->db();

        return
$db->fetchAllKeyed('
            SELECT template.template_id,
                parent.version_string AS parent_version_string,
                parent.last_edit_date AS parent_last_edit_date,
                IF(parent.version_id > template.version_id, 1, 0) AS outdated_by_version,
                IF(parent.last_edit_date > 0 AND parent.last_edit_date >= template.last_edit_date, 1, 0) AS outdated_by_date
            FROM xf_template AS template
            INNER JOIN xf_style AS style ON (style.style_id = template.style_id)
            INNER JOIN xf_template_map AS map ON (
                map.style_id = style.parent_id
                AND map.type = template.type
                AND map.title = template.title
            )
            INNER JOIN xf_template AS parent ON (map.template_id = parent.template_id
                AND (
                    (parent.last_edit_date > 0 AND parent.last_edit_date >= template.last_edit_date)
                    OR parent.version_id > template.version_id
                )
            )
            WHERE template.style_id > 0
            ORDER BY template.title
        '
, 'template_id');
    }

    public function
getTemplateTypes(\XF\Entity\Style $style = null)
    {
       
$types = [
           
'public' => \XF::phrase('public'),
           
'email' => \XF::phrase('email')
        ];
        if ((
$style && !$style->style_id) || (!$style && \XF::$developmentMode))
        {
           
$types['admin'] = \XF::phrase('admin');
        }

        return
$types;
    }

    public function
pruneEditHistory($cutOff = null)
    {
        if (
$cutOff === null)
        {
           
$logLength = $this->options()->templateHistoryLength;
            if (!
$logLength)
            {
                return
0;
            }

           
$cutOff = \XF::$time - 86400 * $logLength;
        }

        return
$this->db()->delete('xf_template_history', 'log_date < ?', $cutOff);
    }
}