/** * Assigns element values to template. Using request data once reading * initial database data is explicitly disallowed. * * @param boolean $useRequestData */ public function assignVariables($useRequestData = true) { $elementValues = array(); $elementValuesI18n = array(); foreach ($this->elementIDs as $elementID) { $value = ''; $i18nValues = array(); // use POST values instead of querying database if ($useRequestData) { if ($this->isPlainValue($elementID)) { $value = $this->getValue($elementID); } else { if ($this->hasI18nValues($elementID)) { $i18nValues = $this->i18nValues[$elementID]; // encoding the entries for javascript foreach ($i18nValues as $languageID => $value) { $i18nValues[$languageID] = StringUtil::encodeJS(StringUtil::unifyNewlines($value)); } } else { $i18nValues = array(); } } } else { $isI18n = Regex::compile('^' . $this->elementOptions[$elementID]['pattern'] . '$')->match($this->elementOptions[$elementID]['value']); if (!$isI18n) { // check if it's a regular language variable $isI18n = Regex::compile('^([a-zA-Z0-9-_]+\\.)+[a-zA-Z0-9-_]+$')->match($this->elementOptions[$elementID]['value']); } if ($isI18n) { // use i18n values from language items $sql = "SELECT\tlanguageID, languageItemValue\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_language_item\n\t\t\t\t\t\tWHERE\tlanguageItem = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->elementOptions[$elementID]['value'])); while ($row = $statement->fetchArray()) { $languageItemValue = StringUtil::unifyNewlines($row['languageItemValue']); $i18nValues[$row['languageID']] = StringUtil::encodeJS($languageItemValue); if ($row['languageID'] == LanguageFactory::getInstance()->getDefaultLanguageID()) { $value = $languageItemValue; } } // item appeared to be a language item but either is not or does not exist if (empty($i18nValues) && empty($value)) { $value = $this->elementOptions[$elementID]['value']; } } else { // use data provided by setOptions() $value = $this->elementOptions[$elementID]['value']; } } $elementValues[$elementID] = $value; $elementValuesI18n[$elementID] = $i18nValues; } WCF::getTPL()->assign(array('availableLanguages' => $this->availableLanguages, 'i18nPlainValues' => $elementValues, 'i18nValues' => $elementValuesI18n)); }
/** * @see wcf\system\template\IModifierTemplatePlugin::execute() */ public function execute($tagArgs, TemplateEngine $tplObj) { return StringUtil::encodeJS($tagArgs[0]); }