Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Navigation/CallbackType.php
<?php

namespace XF\Navigation;

class
CallbackType extends AbstractType
{
    public function
getTitle()
    {
        return \
XF::phrase('callback');
    }
   
    public function
validateConfigInput(\XF\Entity\Navigation $nav, array $config, Compiler $compiler, &$error = null, &$errorField = null)
    {
       
$input = \XF::app()->inputFilterer()->filterArray($config, [
           
'callback_class' => 'str',
           
'callback_method' => 'str',
           
'context' => 'str',
        ]);

        if (!\
XF\Util\Php::validateCallbackPhrased($input['callback_class'], $input['callback_method'], $error))
        {
           
$errorField = 'callback_class';
            return
false;
        }

        return [
           
'callback' => [$input['callback_class'], $input['callback_method']],
           
'context' => $input['context']
        ];
    }

    public function
compileCode(\XF\Entity\Navigation $nav, Compiler $compiler)
    {
       
$config = $nav->type_config;

       
$class = $config['callback'][0];
        if (
$class && $class[0] != '\\')
        {
           
$class = "\\" . $class;
        }
       
$method = $config['callback'][1];

       
$tempVar = '$__callbackTemp';

       
$setupCode = "\t{$tempVar} = [" . $compiler->getStringCode($class) . ', ' . $compiler->getStringCode($method) . "];";

       
$contextCode = $compiler->getStringCode($config['context']);
       
$navDataCode = var_export([
           
'navigation_id' => $nav->navigation_id
       
], true);
       
$selectedVar = $compiler->getSelectedVar();
       
$dataExpression = "is_callable({$tempVar}) ? call_user_func({$tempVar}, {$navDataCode}, {$contextCode}, {$selectedVar}) : null";

        return new
CompiledEntry($nav->navigation_id, $dataExpression, $setupCode);
    }
}