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

namespace XF\Filterer;

use
XF\Mvc\Entity\Finder;

use function
intval, is_array;

class
Template extends AbstractFilterer
{
    protected function
getFinderType(): string
   
{
        return
'XF:TemplateMap';
    }

    protected function
initFinder(Finder $finder, array $setupData)
    {
       
$styleId = $setupData['style_id'] ?? null;
        if (
$styleId === null)
        {
            throw new \
LogicException("Must pass a style_id to setup data");
        }

       
$finder->where('style_id', intval($styleId))
            ->
with('Template', true)
            ->
orderTitle()
            ->
pluckFrom('Template', 'template_id');
    }

    protected function
getFilterTypeMap(): array
    {
        return [
           
'type' => 'str',
           
'addon_id' => 'str',
           
'title' => 'str',
           
'template' => 'str',
           
'template_cs' => 'bool',
           
'state' => 'array-str',
        ];
    }

    protected function
getLookupTypeList(): array
    {
        return [
           
'type',
           
'state'
       
];
    }

    protected function
getFormDefaults(): array
    {
        return [
           
'type' => 'public',
           
'addon_id' => '_any',
           
'state' => ['default', 'inherited', 'custom']
        ];
    }

    protected function
onFinalize()
    {
        if (empty(
$this->rawFilters['type']))
        {
           
$this->rawFilters['type'] = 'public';
        }

        if (!isset(
$this->rawFilters['template']))
        {
            unset(
$this->rawFilters['template_cs']);
        }
    }

    protected function
applyFilter(string $filterName, &$value, &$displayValue): bool
   
{
       
/** @var \XF\Finder\TemplateMap $finder */
       
$finder = $this->finder;

        switch (
$filterName)
        {
            case
'type':
               
$availableTypes = $this->setupData['template_types'] ?? null;
                if (
is_array($availableTypes))
                {
                    if (!isset(
$availableTypes[$value]))
                    {
                       
$value = 'public';
                    }

                   
$displayValue = $availableTypes[$value] ?? null;
                }

               
$finder->where('type', $value);
                return
true;

            case
'addon_id':
                if (
$value == '_any')
                {
                    return
false;
                }

                if (
$value === '_none')
                {
                   
$finder->Template->where('addon_id', '');
                   
$displayValue = 'val:' . $value;
                    return
true;
                }

               
/** @var \XF\Entity\AddOn|null $addOn */
               
$addOn = $this->app()->find('XF:AddOn', $value);
                if (!
$addOn)
                {
                    return
false;
                }
               
$displayValue = $addOn->title;

               
$finder->Template->where('addon_id', $value);
                return
true;

            case
'title':
               
$finder->Template->searchTitle($value);
                return
true;

            case
'template':
               
$caseSensitive = $this->rawFilters['template_cs'] ?? false;
               
$finder->Template->searchTemplate($value, $caseSensitive);
                if (
$caseSensitive)
                {
                   
$this->addLinkParam('template_cs', 1);
                }
                return
true;

            case
'state':
               
$finder->isTemplateStateExtended($value, $allPresent);
                if (
$allPresent || empty($value))
                {
                    return
false;
                }
                return
true;

            default:
                return
false;
        }
    }
}