/** * 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) { if (empty($options['allowRawStatements'])) { throw $compiler->getNewCompilerException(new XenForo_Phrase('x_tags_only_used_where_full_statements_allowed', array('tag' => 'require'))); } $requirements = $compiler->getNamedAttributes($attributes, array('css', 'js')); if (!$requirements) { throw $compiler->getNewCompilerException(new XenForo_Phrase('require_tag_does_not_specify_any_known_types_css_or_js')); } if (isset($requirements['css'])) { $css = $requirements['css']; if (empty($css) || count($css) != 1 || !is_string($css[0])) { throw $compiler->getNewCompilerException(new XenForo_Phrase('only_literal_css_templates_may_be_included_by_require_tag')); } if (substr($css[0], -4) != '.css') { throw $compiler->getNewCompilerException(new XenForo_Phrase('all_required_css_templates_must_end_in_')); } $requirements['css'][0] = substr($css[0], 0, -4); } $statement = $compiler->getNewRawStatement(); foreach ($requirements as $attribute => $value) { $statement->addStatement('$this->addRequiredExternal(\'' . $compiler->escapeSingleQuotedString($attribute) . '\', ' . $compiler->compileAndCombineSegments($value) . ");\n"); } return $statement; }
/** * 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) { $controlOptions = $compiler->getNamedAttributes($attributes, array('save', 'name', 'reset', 'savekey', 'saveclass', 'resetkey', 'resetclass', 'explain')); $controlOptions = $compiler->getNamedParamsAsPhpCode($controlOptions, $options); $childOutput = $compiler->compileIntoVariable($children, $submitVar, $options); $statement = $compiler->getNewRawStatement(); $statement->addStatement($childOutput); $statement->addStatement('$' . $compiler->getOutputVar() . ' .= XenForo_Template_Helper_Admin::submitUnit($' . $submitVar . ', ' . $controlOptions . ");\n" . 'unset($' . $submitVar . ");\n"); return $statement; }
/** * Gets the control options for a given tag. * * @param XenForo_Template_Compiler $compiler * @param array $attributes Raw key-value attribues list * @param array $extraExpected Extra expected attributes, on top of the standard * @param boolean $includeStandard If true, include the standard control tags * @param boolean $allowData If true, allow all data-* attributes * * @return array Key-value pairs of expected attributes; data attributes in _data key */ protected function _getControlOptions(XenForo_Template_Compiler $compiler, array $attributes, array $extraExpected = array(), $includeStandard = true, $allowData = true) { if ($includeStandard) { $extraExpected = array_merge($extraExpected, self::$_standardControlOptions); } $controlOptions = $compiler->getNamedAttributes($attributes, $extraExpected); if ($allowData) { $data = $this->_getDataAttributes($compiler, $attributes); if ($data) { $controlOptions['_data'] = $data; } } return $controlOptions; }