Вход Регистрация
Файл: library/XenForo/Template/Compiler/Tag/Admin/Popup.php
Строк: 164
<?php

/**
* Class to handle compiling template tag calls for "popup" in admin areas.
*
* @package XenForo_Template
*/
class XenForo_Template_Compiler_Tag_Admin_Popup extends XenForo_Template_Compiler_Tag_Admin_Abstract implements XenForo_Template_Compiler_Tag_Interface
{
    
/**
    * Compile the specified tag and return PHP code to handle it.
    *
    * @param XenForo_Template_Compiler The invoking compiler
    * @param string                 Name of the tag called
    * @param array                  Attributes for the tag (may be empty)
    * @param array                  Nodes (tags/curlies/text) within this tag (may be empty)
    * @param array                  Compilation options
    *
    * @return string
    */
    
public function compile(XenForo_Template_Compiler $compiler$tag, array $attributes, array $children, array $options)
    {
        return 
self::compilePopup($compiler$attributes$children$options'div');
    }

    
/**
     * Helper to compile a popup statically. Used to allow list rows to modify
     * the compilation behavior.
     *
     * @param XenForo_Template_Compiler $compiler
     * @param array $attributes
     * @param array $children Child tags
     * @param array $options Compiler option
     * @param string $wrapTag The HTML tag to wrap with (probably div or li)
     * @param string $extraMenuClass An extra menu class (or multiple to add)
     *
     * @return XenForo_Compiler_Statement_Raw
     */
    
public static function compilePopup(XenForo_Template_Compiler $compiler, array $attributes, array $children, array $options,
        
$wrapTag$extraMenuClass ''
    
)
    {
        if (!isset(
$attributes['title']))
        {
            throw 
$compiler->getNewCompilerException(new XenForo_Phrase('popups_must_specify_title'));
        }

        
$choiceOutputVar $compiler->getUniqueVar();
        
$choicesCode self::compilePopupChildren($choiceOutputVar$children$compiler$options);

        
$controlData $compiler->getNamedParamsAsPhpCode($attributes$options);

        
$statement $compiler->getNewRawStatement();
        
$statement->addStatement('$' $choiceOutputVar " = array();n");
        
$statement->addStatement($choicesCode);
        
$statement->addStatement(
            
'$' $compiler->getOutputVar() . ' .= XenForo_Template_Helper_Admin::popup('
            
$controlData ', $' $choiceOutputVar ', '' . $compiler->escapeSingleQuotedString($wrapTag)
            . '', '' . $compiler->escapeSingleQuotedString($extraMenuClass) . "'
);n"
        );
        
$statement->addStatement('unset($' . $choiceOutputVar . ");n");

        return 
$statement;
    }

    /**
     * Compiles the children of a popup.
     *
     * @param string 
$newOutputVar Name of the compiler output var
     * @param array 
$children Children of popup
     * @param XenForo_Template_Compiler 
$compiler
     * @param array 
$options Compiler options
     *
     * @return string|XenForo_Template_Statement_Raw
     */
    public static function compilePopupChildren(
$newOutputVar, array $children, XenForo_Template_Compiler $compiler, array $options)
    {
        
$oldOutputVar = $compiler->getOutputVar();
        
$compiler->setOutputVar($newOutputVar);

        
$code = array();

        foreach (
$children AS $child)
        {
            if (
$compiler->isSegmentNamedTag($child, 'foreach'))
            {
                
$inner = self::compilePopupChildren($newOutputVar$child['children'], $compiler$options);
                
$code[] = XenForo_Template_Compiler_Tag_Foreach::compileForeach($inner$compiler$child['attributes'], $options);
                continue;
            }

            
$choice = false;
            
$tempVar = false;

            if (
$compiler->isSegmentNamedTag($child, 'link'))
            {
                if (!isset(
$child['attributes']['href']))
                {
                    throw 
$compiler->getNewCompilerException(new XenForo_Phrase('popup_links_must_specify_an_href'), $child);
                }

                
$choice = array(
                    'href' => 
$compiler->compileAndCombineSegments($child['attributes']['href'], $options),
                    'text' => 
$compiler->compileAndCombineSegments($child['children'], $options),
                );
            }
            else if (
$compiler->isSegmentNamedTag($child, 'html'))
            {
                
$code[] = $compiler->compileIntoVariable($child['children'], $htmlOutputVar$options);
                
$choice = array(
                    'html' => '$' . 
$htmlOutputVar,
                );
                
$tempVar = '$' . $htmlOutputVar;
            }

            if (
$choice)
            {
                
$choiceCode = '$' . $newOutputVar . '[] = ' . $compiler->buildNamedParamCode($choice) . ";n";
                if (
$tempVar)
                {
                    
$choiceCode .= 'unset(' . $tempVar . ");n";
                }

                if (isset(
$child['attributes']['displayif']))
                {
                    
$condition = $compiler->parseConditionExpression($child['attributes']['displayif'], $options);
                    
$code[] = 'if ' . $condition . "n{n" . $choiceCode . "}n";
                }
                else
                {
                    
$code[] = $choiceCode;
                }
            }
        }

        
$compiler->setOutputVar($oldOutputVar);

        if (
$code)
        {
            
$statement = $compiler->getNewRawStatement();
            foreach (
$code AS $codeStatement)
            {
                
$statement->addStatement($codeStatement);
            }
            return 
$statement;
        }
        else
        {
            return '';
        }
    }
}
Онлайн: 0
Реклама