Adds missing validation of UserOptionAddForm::$outputClass
authorMatthias Schmidt <gravatronics@live.com>
Fri, 3 May 2013 08:32:56 +0000 (10:32 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Fri, 3 May 2013 08:32:56 +0000 (10:32 +0200)
Fixes #1258

wcfsetup/install/files/acp/templates/userOptionAdd.tpl
wcfsetup/install/files/lib/acp/form/UserOptionAddForm.class.php
wcfsetup/install/files/lib/acp/form/UserOptionEditForm.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 3bf9bc2a5a30325d778a922d2cfb115a47dca48c..d0bc3ab8619733418699d0ef8945ff5e4eebf99a 100644 (file)
                
                <fieldset>
                        <legend>{lang}wcf.acp.user.option.access{/lang}</legend>
-               
+                       
                        <dl>
                                <dt><label for="editable">{lang}wcf.acp.user.option.editable{/lang}</label></dt>
                                <dd>
index db0ae7a381a6667c7da26a86050d342aabff776d..b639a4379536834a91824321c82b5e8cedcff1b7 100644 (file)
@@ -4,7 +4,6 @@ use wcf\data\user\option\category\UserOptionCategoryList;
 use wcf\data\user\option\UserOptionAction;
 use wcf\data\user\option\UserOptionEditor;
 use wcf\form\AbstractForm;
-use wcf\system\cache\builder\UserOptionCacheBuilder;
 use wcf\system\exception\UserInputException;
 use wcf\system\language\I18nHandler;
 use wcf\system\WCF;
@@ -138,7 +137,7 @@ class UserOptionAddForm extends AbstractForm {
         */
        public function readParameters() {
                parent::readParameters();
-       
+               
                I18nHandler::getInstance()->register('optionName');
                I18nHandler::getInstance()->register('optionDescription');
                
@@ -154,7 +153,7 @@ class UserOptionAddForm extends AbstractForm {
         */
        public function readFormParameters() {
                parent::readFormParameters();
-       
+               
                I18nHandler::getInstance()->readValues();
                
                if (I18nHandler::getInstance()->isPlainValue('optionName')) $this->optionName = I18nHandler::getInstance()->getValue('optionName');
@@ -178,7 +177,7 @@ class UserOptionAddForm extends AbstractForm {
         */
        public function validate() {
                parent::validate();
-       
+               
                // option name
                if (!I18nHandler::getInstance()->validateValue('optionName', true)) {
                        throw new UserInputException('optionName');
@@ -207,6 +206,10 @@ class UserOptionAddForm extends AbstractForm {
                        throw new UserInputException('selectOptions');
                }
                
+               if ($this->outputClass && !class_exists($this->outputClass)) {
+                       throw new UserInputException('outputClass', 'doesNotExist');
+               }
+               
                if ($this->editable < 1 || $this->editable > 3) {
                        $this->editable = 3;
                }
@@ -217,7 +220,7 @@ class UserOptionAddForm extends AbstractForm {
         */
        public function save() {
                parent::save();
-       
+               
                $this->objectAction = new UserOptionAction(array(), 'create', array('data' => array(
                        'optionName' => StringUtil::getRandomID(),
                        'categoryName' => $this->categoryName,
@@ -236,7 +239,7 @@ class UserOptionAddForm extends AbstractForm {
                        'additionalData' => ($this->optionType == 'select' ? serialize(array('allowEmptyValue' => true)) : '')
                )));
                $this->objectAction->executeAction();
-       
+               
                $returnValues = $this->objectAction->getReturnValues();
                $userOption = $returnValues['returnValues'];
                
@@ -248,7 +251,7 @@ class UserOptionAddForm extends AbstractForm {
                        'optionName' => 'option'.$userOption->optionID
                ));
                $this->saved();
-       
+               
                // reset values
                $this->optionName = $this->optionDescription = $this->categoryName = $this->optionType = $this->defaultValue = $this->validationPattern = $this->optionType = $this->selectOptions = $this->outputClass = '';
                $this->required = $this->searchable = $this->showOrder = $this->askDuringRegistration = 0;
@@ -266,7 +269,7 @@ class UserOptionAddForm extends AbstractForm {
         */
        public function assignVariables() {
                parent::assignVariables();
-       
+               
                I18nHandler::getInstance()->assignVariables();
                
                WCF::getTPL()->assign(array(
index e4bdc302a062c189793881f2e7396706d3de05ee..91ebf25f4c836827db027792057d51d499d16ccb 100644 (file)
@@ -3,7 +3,6 @@ namespace wcf\acp\form;
 use wcf\data\user\option\UserOption;
 use wcf\data\user\option\UserOptionAction;
 use wcf\form\AbstractForm;
-use wcf\system\cache\builder\UserOptionCacheBuilder;
 use wcf\system\exception\IllegalLinkException;
 use wcf\system\language\I18nHandler;
 use wcf\system\WCF;
@@ -41,7 +40,7 @@ class UserOptionEditForm extends UserOptionAddForm {
         */
        public function readParameters() {
                parent::readParameters();
-       
+               
                if (isset($_REQUEST['id'])) $this->optionID = intval($_REQUEST['id']);
                $this->userOption = new UserOption($this->optionID);
                if (!$this->userOption->optionID) {
@@ -54,10 +53,10 @@ class UserOptionEditForm extends UserOptionAddForm {
         */
        public function save() {
                AbstractForm::save();
-       
+               
                I18nHandler::getInstance()->save('optionName', 'wcf.user.option.'.$this->userOption->optionName, 'wcf.user.option');
                I18nHandler::getInstance()->save('optionDescription', 'wcf.user.option.'.$this->userOption->optionName.'.description', 'wcf.user.option');
-       
+               
                $this->objectAction = new UserOptionAction(array($this->userOption), 'update', array('data' => array(
                        'categoryName' => $this->categoryName,
                        'optionType' => $this->optionType,
@@ -74,7 +73,7 @@ class UserOptionEditForm extends UserOptionAddForm {
                )));
                $this->objectAction->executeAction();
                $this->saved();
-       
+               
                WCF::getTPL()->assign('success', true);
        }
        
@@ -83,11 +82,11 @@ class UserOptionEditForm extends UserOptionAddForm {
         */
        public function readData() {
                parent::readData();
-       
+               
                I18nHandler::getInstance()->setOptions('optionName', 1, 'wcf.user.option.'.$this->userOption->optionName, 'wcf.user.option.option\d+');
                I18nHandler::getInstance()->setOptions('optionDescription', 1, 'wcf.user.option.'.$this->userOption->optionName.'.description', 'wcf.user.option.option\d+.description');
                
-               if (!count($_POST)) {
+               if (empty($_POST)) {
                        $this->categoryName = $this->userOption->categoryName;
                        $this->optionType = $this->userOption->optionType;
                        $this->defaultValue = $this->userOption->defaultValue;
@@ -108,7 +107,7 @@ class UserOptionEditForm extends UserOptionAddForm {
         */
        public function assignVariables() {
                parent::assignVariables();
-       
+               
                I18nHandler::getInstance()->assignVariables(!empty($_POST));
                
                WCF::getTPL()->assign(array(
index 48948bba98979721004c2c9312c5600a214da343..d65057636cc9a1b6512dbec3f587470e05e7ecbd 100644 (file)
                <item name="wcf.acp.user.option.typeData"><![CDATA[Eigenschaften]]></item>
                <item name="wcf.acp.user.option.outputClass"><![CDATA[PHP-Klasse für Ausgabe]]></item>
                <item name="wcf.acp.user.option.outputClass.description"><![CDATA[Erlaubt die Angabe einer speziellen PHP-Klasse für die Ausgabeformatierung bei der Anzeige des Feldes.]]></item>
+               <item name="wcf.acp.user.option.outputClass.error.doesNotExist"><![CDATA[Eine Klasse mit dem angegeben Namen existiert nicht.]]></item>
        </category>
        
        <category name="wcf.ajax">
index 7dc991b309e255940059510a41288dca322219d3..e7af0540fa0e553df3f5b6134ab36947662d28db 100644 (file)
                <item name="wcf.acp.user.option.typeData"><![CDATA[TODO: Eigenschaften]]></item>
                <item name="wcf.acp.user.option.outputClass"><![CDATA[TODO: PHP-Klasse für Ausgabe]]></item>
                <item name="wcf.acp.user.option.outputClass.description"><![CDATA[TODO: Erlaubt die Angabe einer speziellen PHP-Klasse für die Ausgabeformatierung bei der Anzeige des Feldes.]]></item>
+               <item name="wcf.acp.user.option.outputClass.error.doesNotExist"><![CDATA[Unable to find the specified class.]]></item>
        </category>
        
        <category name="wcf.ajax">