Path: blob/master/src/applications/metamta/editor/PhabricatorMetaMTAApplicationEmailEditor.php
12256 views
<?php12final class PhabricatorMetaMTAApplicationEmailEditor3extends PhabricatorApplicationTransactionEditor {45public function getEditorApplicationClass() {6return pht('PhabricatorMetaMTAApplication');7}89public function getEditorObjectsDescription() {10return pht('Application Emails');11}1213public function getTransactionTypes() {14$types = parent::getTransactionTypes();1516$types[] = PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS;17$types[] = PhabricatorMetaMTAApplicationEmailTransaction::TYPE_CONFIG;1819return $types;20}2122protected function getCustomTransactionOldValue(23PhabricatorLiskDAO $object,24PhabricatorApplicationTransaction $xaction) {2526switch ($xaction->getTransactionType()) {27case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS:28return $object->getAddress();29case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_CONFIG:30$key = $xaction->getMetadataValue(31PhabricatorMetaMTAApplicationEmailTransaction::KEY_CONFIG);32return $object->getConfigValue($key);33}3435return parent::getCustomTransactionOldValue($object, $xaction);36}3738protected function getCustomTransactionNewValue(39PhabricatorLiskDAO $object,40PhabricatorApplicationTransaction $xaction) {4142switch ($xaction->getTransactionType()) {43case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS:44case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_CONFIG:45return $xaction->getNewValue();46}4748return parent::getCustomTransactionNewValue($object, $xaction);49}5051protected function applyCustomInternalTransaction(52PhabricatorLiskDAO $object,53PhabricatorApplicationTransaction $xaction) {5455$new = $xaction->getNewValue();5657switch ($xaction->getTransactionType()) {58case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS:59$object->setAddress($new);60return;61case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_CONFIG:62$key = $xaction->getMetadataValue(63PhabricatorMetaMTAApplicationEmailTransaction::KEY_CONFIG);64$object->setConfigValue($key, $new);65return;66}6768return parent::applyCustomInternalTransaction($object, $xaction);69}7071protected function applyCustomExternalTransaction(72PhabricatorLiskDAO $object,73PhabricatorApplicationTransaction $xaction) {7475switch ($xaction->getTransactionType()) {76case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS:77case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_CONFIG:78return;79}8081return parent::applyCustomExternalTransaction($object, $xaction);82}8384protected function validateTransaction(85PhabricatorLiskDAO $object,86$type,87array $xactions) {8889$errors = parent::validateTransaction($object, $type, $xactions);9091switch ($type) {92case PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS:93foreach ($xactions as $xaction) {94$email = $xaction->getNewValue();95if (!strlen($email)) {96// We'll deal with this below.97continue;98}99100if (!PhabricatorUserEmail::isValidAddress($email)) {101$errors[] = new PhabricatorApplicationTransactionValidationError(102$type,103pht('Invalid'),104pht('Email address is not formatted properly.'));105continue;106}107108$address = new PhutilEmailAddress($email);109if (PhabricatorMailUtil::isReservedAddress($address)) {110$errors[] = new PhabricatorApplicationTransactionValidationError(111$type,112pht('Reserved'),113pht(114'This email address is reserved. Choose a different '.115'address.'));116continue;117}118119// See T13234. Prevent use of user email addresses as application120// email addresses.121if (PhabricatorMailUtil::isUserAddress($address)) {122$errors[] = new PhabricatorApplicationTransactionValidationError(123$type,124pht('In Use'),125pht(126'This email address is already in use by a user. Choose '.127'a different address.'));128continue;129}130}131132$missing = $this->validateIsEmptyTextField(133$object->getAddress(),134$xactions);135136if ($missing) {137$error = new PhabricatorApplicationTransactionValidationError(138$type,139pht('Required'),140pht('You must provide an email address.'),141nonempty(last($xactions), null));142143$error->setIsMissingFieldError(true);144$errors[] = $error;145}146break;147}148149return $errors;150}151152protected function didCatchDuplicateKeyException(153PhabricatorLiskDAO $object,154array $xactions,155Exception $ex) {156157$errors = array();158$errors[] = new PhabricatorApplicationTransactionValidationError(159PhabricatorMetaMTAApplicationEmailTransaction::TYPE_ADDRESS,160pht('Duplicate'),161pht('This email address is already in use.'),162null);163164throw new PhabricatorApplicationTransactionValidationException($errors);165}166167168}169170171