Add ReactionType(Add|Edit)Form
authorJoshua Rüsweg <josh@bastelstu.be>
Wed, 1 Aug 2018 10:56:10 +0000 (12:56 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Wed, 1 Aug 2018 10:56:10 +0000 (12:56 +0200)
See #2508

wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl [new file with mode: 0644]
wcfsetup/install/files/lib/acp/form/ReactionTypeAddForm.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/acp/form/ReactionTypeEditForm.class.php [new file with mode: 0644]
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

diff --git a/wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl b/wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl
new file mode 100644 (file)
index 0000000..62a6a91
--- /dev/null
@@ -0,0 +1,25 @@
+{include file='header' pageTitle='wcf.acp.menu.link.reactionType.'|concat:$action}
+
+<header class="contentHeader">
+       <div class="contentHeaderTitle">
+               <h1 class="contentTitle">{lang}wcf.acp.menu.link.reactionType.{$action}{/lang}</h1>
+       </div>
+       
+       <nav class="contentHeaderNavigation">
+               <ul>
+                       <li><a href="{link controller='ReactionTypeList'}{/link}" class="button"><span class="icon icon16 fa-list"></span> <span>{lang}wcf.acp.menu.link.reactionType.list{/lang}</span></a></li>
+                       
+                       {event name='contentHeaderNavigation'}
+               </ul>
+       </nav>
+</header>
+
+{include file='formError'}
+
+{if $success|isset}
+       <p class="success">{lang}wcf.global.success.{$action}{/lang}</p>
+{/if}
+
+{@$form->getHtml()}
+
+{include file='footer'}
diff --git a/wcfsetup/install/files/lib/acp/form/ReactionTypeAddForm.class.php b/wcfsetup/install/files/lib/acp/form/ReactionTypeAddForm.class.php
new file mode 100644 (file)
index 0000000..4e33f95
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+namespace wcf\acp\form;
+use wcf\data\reaction\type\ReactionType;
+use wcf\data\reaction\type\ReactionTypeAction;
+use wcf\data\reaction\type\ReactionTypeList;
+use wcf\form\AbstractFormBuilderForm;
+use wcf\system\form\builder\container\FormContainer;
+use wcf\system\form\builder\field\IsDisabledFormField;
+use wcf\system\form\builder\field\RadioButtonFormField;
+use wcf\system\form\builder\field\ShowOrderFormField;
+use wcf\system\form\builder\field\TextFormField;
+use wcf\system\form\builder\field\TitleFormField;
+use wcf\system\form\builder\field\validation\FormFieldValidationError;
+use wcf\system\form\builder\field\validation\FormFieldValidator;
+
+/**
+ * Represents the reaction type add form.
+ *
+ * @author     Joshua Ruesweg
+ * @copyright  2001-2018 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\Acp\Form
+ * @since      3.2
+ */
+class ReactionTypeAddForm extends AbstractFormBuilderForm {
+       /**
+        * @inheritDoc
+        */
+       public $formAction = 'create';
+       
+       /**
+        * @inheritDoc
+        */
+       public $objectActionClass = ReactionTypeAction::class;
+       
+       /**
+        * @inheritDoc
+        */
+       public $activeMenuItem = 'wcf.acp.menu.link.reactionType.add';
+       
+       /**
+        * @inheritDoc
+        */
+       public $neededPermissions = ['admin.content.reaction.canManageReactionType'];
+       
+       /**
+        * @inheritDoc
+        */
+       public $neededModules = ['MODULE_LIKE'];
+       
+       /**
+        * @inheritDoc
+        */
+       protected function createForm() {
+               parent::createForm();
+               
+               $dataContainer = FormContainer::create('generalSection')
+                       ->appendChildren([
+                               TitleFormField::create()
+                                       ->required()
+                                       ->autoFocus()
+                                       ->maximumLength(255)
+                                       ->i18n()
+                                       ->languageItemPattern('wcf.reactionType.title\d+'),
+                               RadioButtonFormField::create('type')
+                                       ->label('wcf.acp.reactionType.type')
+                                       ->required()
+                                       ->options([
+                                               ReactionType::REACTION_TYPE_POSITIVE => 'wcf.acp.reactionType.type.positive',
+                                               ReactionType::REACTION_TYPE_NEUTRAL => 'wcf.acp.reactionType.type.neutral',
+                                               ReactionType::REACTION_TYPE_NEGATIVE => 'wcf.acp.reactionType.type.negative'
+                                       ])
+                                       ->value(ReactionType::REACTION_TYPE_POSITIVE),
+                               ShowOrderFormField::create()
+                                       ->required()
+                                       ->options(new ReactionTypeList()),
+                               IsDisabledFormField::create()
+                                       ->label('wcf.acp.reactionType.isDisabled')
+                       ]);
+               
+               $iconContainer = FormContainer::create('imageSection')
+                       ->label('wcf.acp.reactionType.image')
+                       ->appendChildren([
+                               TextFormField::create('iconFile')
+                                       ->label('wcf.acp.reactionType.image')
+                                       ->description('wcf.acp.reactionType.image.description')
+                                       ->required()
+                                       ->addValidator(new FormFieldValidator('invalidPath', function(TextFormField $field) {
+                                               if (!file_exists(WCF_DIR.'images/reaction/'.$field->getValue())) {
+                                                       $field->addValidationError(new FormFieldValidationError(
+                                                               'invalidPath',
+                                                               'wcf.acp.reactionType.image.invalidPath'
+                                                       ));
+                                               }
+                                       }))
+                       ]);
+               
+               $this->form->appendChildren([
+                       $dataContainer, 
+                       $iconContainer
+               ]);
+       }
+}
diff --git a/wcfsetup/install/files/lib/acp/form/ReactionTypeEditForm.class.php b/wcfsetup/install/files/lib/acp/form/ReactionTypeEditForm.class.php
new file mode 100644 (file)
index 0000000..ca425c9
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+namespace wcf\acp\form;
+use wcf\data\reaction\type\ReactionType;
+use wcf\system\exception\IllegalLinkException;
+
+/**
+ * Represents the reaction type add form.
+ *
+ * @author     Joshua Ruesweg
+ * @copyright  2001-2018 WoltLab GmbH
+ * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @package    WoltLabSuite\Core\Acp\Form
+ * @since      3.2
+ */
+class ReactionTypeEditForm extends ReactionTypeAddForm {
+       /**
+        * @inheritDoc
+        */
+       public $formAction = 'update';
+       
+       /**
+        * @inheritDoc
+        */
+       public function readParameters() {
+               parent::readParameters();
+               
+               if (isset($_REQUEST['id'])) {
+                       $this->formObject = new ReactionType($_REQUEST['id']);
+                       if (!$this->formObject->reactionTypeID) {
+                               throw new IllegalLinkException();
+                       }
+               }
+       }
+}
index 135d2871b173d12c8396a598c1e7a94c6cec57d2..03a4ada17d74b9756e85f3ba8e91f891ff59c3b6 100644 (file)
@@ -1770,6 +1770,13 @@ Als Benachrichtigungs-URL in der Konfiguration der sofortigen Zahlungsbestätigu
        
        <category name="wcf.acp.reactionType">
                <item name="wcf.acp.reactionType.delete.confirmMessage"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Willst du{else}Wollen Sie{/if} den Reaktions-Typen <span class="confirmationObject">{$reactionType->getTitle()}</span> wirklich löschen?]]></item>
+               <item name="wcf.acp.reactionType.type"><![CDATA[Reaktions-Typ]]></item>
+               <item name="wcf.acp.reactionType.type.positive"><![CDATA[Positiv]]></item>
+               <item name="wcf.acp.reactionType.type.negative"><![CDATA[Negativ]]></item>
+               <item name="wcf.acp.reactionType.type.neutral"><![CDATA[Neutral]]></item>
+               <item name="wcf.acp.reactionType.isDisabled"><![CDATA[Reaktion deaktivieren]]></item>
+               <item name="wcf.acp.reactionType.image"><![CDATA[Reaktions-Datei]]></item>
+               <item name="wcf.acp.reactionType.image.description"><![CDATA[Der Pfad wird relativ zu „{$__wcf->getPath()}/images/reaction/“ interpretiert.]]></item>
        </category>
        
        <category name="wcf.acp.rebuildData">
index 5797de581abe72c92696b90303f50ec24b225acf..82d04e2147499cb6f5b028e31c33e55d4b9e97b5 100644 (file)
@@ -1709,6 +1709,13 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
        
        <category name="wcf.acp.reactionType">
                <item name="wcf.acp.reactionType.delete.confirmMessage"><![CDATA[Do you really want to delete the reaction type <span class="confirmationObject">{$reactionType->getTitle()}</span>?]]></item>
+               <item name="wcf.acp.reactionType.type"><![CDATA[Reaction Type]]></item>
+               <item name="wcf.acp.reactionType.type.positive"><![CDATA[Positiv]]></item>
+               <item name="wcf.acp.reactionType.type.negative"><![CDATA[Negativ]]></item>
+               <item name="wcf.acp.reactionType.type.neutral"><![CDATA[Neutral]]></item>
+               <item name="wcf.acp.reactionType.isDisabled"><![CDATA[Disable Reaction]]></item>
+               <item name="wcf.acp.reactionType.image"><![CDATA[Reaction File]]></item>
+               <item name="wcf.acp.reactionType.image.description"><![CDATA[The smiley path is relative to “{$__wcf->getPath()}/images/reaction/”.]]></item>
        </category>
        
        <category name="wcf.acp.rebuildData">