Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 1 addition & 74 deletions wcfsetup/install/files/acp/templates/contactRecipientAdd.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -14,79 +14,6 @@
</nav>
</header>

{include file='shared_formNotice'}

<form method="post" action="{if $action === 'add'}{link controller='ContactRecipientAdd'}{/link}{else}{link controller='ContactRecipientEdit' id=$recipientID}{/link}{/if}">
<div class="section">
<dl{if $errorField === 'name'} class="formError"{/if}>
<dt><label for="name">{lang}wcf.acp.contact.recipient.name{/lang}</label></dt>
<dd>
<input type="text" id="name" name="name" value="{$i18nPlainValues['name']}" autofocus class="medium">
{if $errorField === 'name'}
<small class="innerError">
{if $errorType === 'empty'}
{lang}wcf.global.form.error.empty{/lang}
{elseif $errorType === 'multilingual'}
{lang}wcf.global.form.error.multilingual{/lang}
{else}
{lang}wcf.acp.contact.recipient.name.error.{@$errorType}{/lang}
{/if}
</small>
{/if}

{include file='shared_multipleLanguageInputJavascript' elementIdentifier='name' forceSelection=false}
</dd>
</dl>

<dl{if $errorField === 'email'} class="formError"{/if}>
<dt><label for="email">{lang}wcf.user.email{/lang}</label></dt>
<dd>
{if $action === 'edit' && $recipient->isAdministrator}
<span>{$i18nPlainValues['email']}</span>
<input type="hidden" name="email" value="{$i18nPlainValues['email']}">
{else}
<input type="text" id="email" name="email" value="{$i18nPlainValues['email']}" class="medium">
{if $errorField === 'email'}
<small class="innerError">
{if $errorType === 'empty'}
{lang}wcf.global.form.error.empty{/lang}
{elseif $errorType === 'multilingual'}
{lang}wcf.global.form.error.multilingual{/lang}
{else}
{lang}wcf.user.email.error.{@$errorType}{/lang}
{/if}
</small>
{/if}

{include file='shared_multipleLanguageInputJavascript' elementIdentifier='email' forceSelection=false}
{/if}
</dd>
</dl>

<dl>
<dt><label for="showOrder">{lang}wcf.global.showOrder{/lang}</label></dt>
<dd>
<input type="number" id="showOrder" name="showOrder" value="{$showOrder}" class="tiny" min="0">
</dd>
</dl>

<dl>
<dt></dt>
<dd>
<label><input type="checkbox" name="isDisabled" value="1"{if $isDisabled} checked{/if}> {lang}wcf.acp.contact.recipient.isDisabled{/lang}</label>
</dd>
</dl>

{event name='dataFields'}
</div>

{event name='sections'}

<div class="formSubmit">
<input type="submit" value="{lang}wcf.global.button.submit{/lang}" accesskey="s">
<input type="hidden" name="action" value="{$action}">
{csrfToken}
</div>
</form>
{unsafe:$form->getHtml()}

{include file='footer'}
191 changes: 41 additions & 150 deletions wcfsetup/install/files/lib/acp/form/ContactRecipientAddForm.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,23 @@

use wcf\data\contact\recipient\ContactRecipient;
use wcf\data\contact\recipient\ContactRecipientAction;
use wcf\data\contact\recipient\ContactRecipientEditor;
use wcf\form\AbstractForm;
use wcf\system\email\Mailbox;
use wcf\system\exception\UserInputException;
use wcf\system\language\I18nHandler;
use wcf\system\request\LinkHandler;
use wcf\system\WCF;
use wcf\data\contact\recipient\ContactRecipientList;
use wcf\form\AbstractFormBuilderForm;
use wcf\system\form\builder\field\BooleanFormField;
use wcf\system\form\builder\field\EmailFormField;
use wcf\system\form\builder\field\ShowOrderFormField;
use wcf\system\form\builder\field\TextFormField;

/**
* Shows the form to create a new contact form recipient.
*
* @author Alexander Ebert
* @copyright 2001-2019 WoltLab GmbH
* @author Olaf Braun, Alexander Ebert
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
*
* @extends AbstractFormBuilderForm<ContactRecipient>
*/
class ContactRecipientAddForm extends AbstractForm
class ContactRecipientAddForm extends AbstractFormBuilderForm
{
/**
* @inheritDoc
Expand All @@ -36,166 +37,56 @@ class ContactRecipientAddForm extends AbstractForm
*/
public $neededPermissions = ['admin.contact.canManageContactForm'];

/**
* email address
* @var string
*/
public $email = '';

/**
* display name
* @var string
*/
public $name = '';

/**
* 1 if the recipient is disabled
* @var int
*/
public $isDisabled = 0;

/**
* order used to the show the recipients
* @var int
*/
public $showOrder = 0;

/**
* @inheritDoc
*/
public function readParameters()
{
parent::readParameters();

I18nHandler::getInstance()->register('email');
I18nHandler::getInstance()->register('name');
}
public $objectActionClass = ContactRecipientAction::class;

/**
* @inheritDoc
*/
public function readFormParameters()
{
parent::readFormParameters();

I18nHandler::getInstance()->readValues();

if (I18nHandler::getInstance()->isPlainValue('email')) {
$this->email = I18nHandler::getInstance()->getValue('email');
}
if (I18nHandler::getInstance()->isPlainValue('name')) {
$this->name = I18nHandler::getInstance()->getValue('name');
}

if (isset($_POST['isDisabled'])) {
$this->isDisabled = \intval($_POST['isDisabled']);
}
if (isset($_POST['showOrder'])) {
$this->showOrder = \intval($_POST['showOrder']);
}
}
public $objectEditLinkController = ContactRecipientEditForm::class;

/**
* @inheritDoc
*/
public function validate()
{
parent::validate();

if (!I18nHandler::getInstance()->validateValue('email')) {
if (I18nHandler::getInstance()->isPlainValue('email')) {
throw new UserInputException('email');
} else {
throw new UserInputException('email', 'multilingual');
}
} else {
foreach (I18nHandler::getInstance()->getValues('email') as $email) {
try {
new Mailbox($email);
} catch (\DomainException $e) {
throw new UserInputException('email', 'invalid');
}
}
}

if (!I18nHandler::getInstance()->validateValue('name')) {
if (I18nHandler::getInstance()->isPlainValue('name')) {
throw new UserInputException('name');
} else {
throw new UserInputException('name', 'multilingual');
}
}
}

/**
* @inheritDoc
*/
public function save()
#[\Override]
protected function createForm()
{
parent::save();

$this->objectAction = new ContactRecipientAction([], 'create', [
'data' => \array_merge($this->additionalFields, [
'name' => $this->name,
'email' => $this->email,
'isDisabled' => ($this->isDisabled ? 1 : 0),
'showOrder' => $this->showOrder,
]),
]);
/** @var ContactRecipient $recipient */
$recipient = $this->objectAction->executeAction()['returnValues'];
$recipientID = $recipient->recipientID;
$data = [];
parent::createForm();

if (!I18nHandler::getInstance()->isPlainValue('email')) {
I18nHandler::getInstance()->save('email', 'wcf.contact.recipient.email' . $recipientID, 'wcf.contact', 1);
$isAdministratorRecipient = $this->formAction === 'edit' && $this->formObject->isAdministrator;

$data['email'] = 'wcf.contact.recipient.email' . $recipientID;
}
if (!I18nHandler::getInstance()->isPlainValue('name')) {
I18nHandler::getInstance()->save('name', 'wcf.contact.recipient.name' . $recipientID, 'wcf.contact', 1);

$data['name'] = 'wcf.contact.recipient.name' . $recipientID;
}
$emailFormField = EmailFormField::create('email')
->label('wcf.user.email')
->immutable($isAdministratorRecipient)
->required();

// update i18n values
if (!empty($data)) {
(new ContactRecipientEditor($recipient))->update($data);
if (!$isAdministratorRecipient) {
$emailFormField->i18n()
->languageItemPattern('wcf.contact.recipient.email\d+');
}

$this->saved();

// show success message
WCF::getTPL()->assign([
'success' => true,
'objectEditLink' => LinkHandler::getInstance()->getControllerLink(
ContactRecipientEditForm::class,
['id' => $recipientID]
),
$this->form->appendChildren([
TextFormField::create('name')
->label('wcf.acp.contact.recipient.name')
->i18n()
->languageItemPattern('wcf.contact.recipient.name\d+')
->required(),
$emailFormField,
ShowOrderFormField::create()
->options($this->getContactRecipient()),
BooleanFormField::create('isDisabled')
->label('wcf.acp.contact.recipient.isDisabled'),
]);

// reset values
$this->email = $this->name = '';
$this->isDisabled = $this->showOrder = 0;

I18nHandler::getInstance()->reset();
}

/**
* @inheritDoc
* @return array<int, string>
*/
public function assignVariables()
private function getContactRecipient(): array
{
parent::assignVariables();

I18nHandler::getInstance()->assignVariables();
$recipientList = new ContactRecipientList();
$recipientList->sqlOrderBy = 'showOrder ASC';
$recipientList->readObjects();

WCF::getTPL()->assign([
'action' => 'add',
'email' => $this->email,
'name' => $this->name,
'isDisabled' => $this->isDisabled,
'showOrder' => $this->showOrder,
]);
return \array_map(static fn ($recipient) => $recipient->getName(), $recipientList->getObjects());
}
}
Loading