[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/almanac/editor/ -> AlmanacServiceEditor.php (source)

   1  <?php
   2  
   3  final class AlmanacServiceEditor
   4    extends PhabricatorApplicationTransactionEditor {
   5  
   6    public function getEditorApplicationClass() {
   7      return 'PhabricatorAlmanacApplication';
   8    }
   9  
  10    public function getEditorObjectsDescription() {
  11      return pht('Almanac Service');
  12    }
  13  
  14    public function getTransactionTypes() {
  15      $types = parent::getTransactionTypes();
  16  
  17      $types[] = AlmanacServiceTransaction::TYPE_NAME;
  18      $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
  19      $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
  20  
  21      return $types;
  22    }
  23  
  24    protected function getCustomTransactionOldValue(
  25      PhabricatorLiskDAO $object,
  26      PhabricatorApplicationTransaction $xaction) {
  27      switch ($xaction->getTransactionType()) {
  28        case AlmanacServiceTransaction::TYPE_NAME:
  29          return $object->getName();
  30      }
  31  
  32      return parent::getCustomTransactionOldValue($object, $xaction);
  33    }
  34  
  35    protected function getCustomTransactionNewValue(
  36      PhabricatorLiskDAO $object,
  37      PhabricatorApplicationTransaction $xaction) {
  38  
  39      switch ($xaction->getTransactionType()) {
  40        case AlmanacServiceTransaction::TYPE_NAME:
  41          return $xaction->getNewValue();
  42      }
  43  
  44      return parent::getCustomTransactionNewValue($object, $xaction);
  45    }
  46  
  47    protected function applyCustomInternalTransaction(
  48      PhabricatorLiskDAO $object,
  49      PhabricatorApplicationTransaction $xaction) {
  50  
  51      switch ($xaction->getTransactionType()) {
  52        case AlmanacServiceTransaction::TYPE_NAME:
  53          $object->setName($xaction->getNewValue());
  54          return;
  55        case PhabricatorTransactions::TYPE_VIEW_POLICY:
  56        case PhabricatorTransactions::TYPE_EDIT_POLICY:
  57        case PhabricatorTransactions::TYPE_EDGE:
  58          return;
  59      }
  60  
  61      return parent::applyCustomInternalTransaction($object, $xaction);
  62    }
  63  
  64    protected function applyCustomExternalTransaction(
  65      PhabricatorLiskDAO $object,
  66      PhabricatorApplicationTransaction $xaction) {
  67  
  68      switch ($xaction->getTransactionType()) {
  69        case AlmanacServiceTransaction::TYPE_NAME:
  70        case PhabricatorTransactions::TYPE_VIEW_POLICY:
  71        case PhabricatorTransactions::TYPE_EDIT_POLICY:
  72        case PhabricatorTransactions::TYPE_EDGE:
  73          return;
  74      }
  75  
  76      return parent::applyCustomExternalTransaction($object, $xaction);
  77    }
  78  
  79    protected function validateTransaction(
  80      PhabricatorLiskDAO $object,
  81      $type,
  82      array $xactions) {
  83  
  84      $errors = parent::validateTransaction($object, $type, $xactions);
  85  
  86      switch ($type) {
  87        case AlmanacServiceTransaction::TYPE_NAME:
  88          $missing = $this->validateIsEmptyTextField(
  89            $object->getName(),
  90            $xactions);
  91  
  92          if ($missing) {
  93            $error = new PhabricatorApplicationTransactionValidationError(
  94              $type,
  95              pht('Required'),
  96              pht('Service name is required.'),
  97              nonempty(last($xactions), null));
  98  
  99            $error->setIsMissingFieldError(true);
 100            $errors[] = $error;
 101          } else {
 102            foreach ($xactions as $xaction) {
 103              $message = null;
 104  
 105              $name = $xaction->getNewValue();
 106  
 107              try {
 108                AlmanacNames::validateServiceOrDeviceName($name);
 109              } catch (Exception $ex) {
 110                $message = $ex->getMessage();
 111              }
 112  
 113              if ($message !== null) {
 114                $error = new PhabricatorApplicationTransactionValidationError(
 115                  $type,
 116                  pht('Invalid'),
 117                  $message,
 118                  $xaction);
 119                $errors[] = $error;
 120              }
 121            }
 122          }
 123  
 124          if ($xactions) {
 125            $duplicate = id(new AlmanacServiceQuery())
 126              ->setViewer(PhabricatorUser::getOmnipotentUser())
 127              ->withNames(array(last($xactions)->getNewValue()))
 128              ->executeOne();
 129            if ($duplicate && ($duplicate->getID() != $object->getID())) {
 130              $error = new PhabricatorApplicationTransactionValidationError(
 131                $type,
 132                pht('Not Unique'),
 133                pht('Almanac services must have unique names.'),
 134                last($xactions));
 135              $errors[] = $error;
 136            }
 137          }
 138  
 139          break;
 140      }
 141  
 142      return $errors;
 143    }
 144  
 145  
 146  
 147  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1