--- /dev/null
+{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'}
--- /dev/null
+<?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
+ ]);
+ }
+}
--- /dev/null
+<?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();
+ }
+ }
+ }
+}
<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">
<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">