[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/project/editor/ -> PhabricatorProjectColumnTransactionEditor.php (source)

   1  <?php
   2  
   3  final class PhabricatorProjectColumnTransactionEditor
   4    extends PhabricatorApplicationTransactionEditor {
   5  
   6    public function getEditorApplicationClass() {
   7      return 'PhabricatorProjectApplication';
   8    }
   9  
  10    public function getEditorObjectsDescription() {
  11      return pht('Workboard Columns');
  12    }
  13  
  14    public function getTransactionTypes() {
  15      $types = parent::getTransactionTypes();
  16  
  17      $types[] = PhabricatorProjectColumnTransaction::TYPE_NAME;
  18      $types[] = PhabricatorProjectColumnTransaction::TYPE_STATUS;
  19      $types[] = PhabricatorProjectColumnTransaction::TYPE_LIMIT;
  20  
  21      return $types;
  22    }
  23  
  24    protected function getCustomTransactionOldValue(
  25      PhabricatorLiskDAO $object,
  26      PhabricatorApplicationTransaction $xaction) {
  27  
  28      switch ($xaction->getTransactionType()) {
  29        case PhabricatorProjectColumnTransaction::TYPE_NAME:
  30          return $object->getName();
  31        case PhabricatorProjectColumnTransaction::TYPE_STATUS:
  32          return $object->getStatus();
  33        case PhabricatorProjectColumnTransaction::TYPE_LIMIT:
  34          return $object->getPointLimit();
  35  
  36      }
  37  
  38      return parent::getCustomTransactionOldValue($object, $xaction);
  39    }
  40  
  41    protected function getCustomTransactionNewValue(
  42      PhabricatorLiskDAO $object,
  43      PhabricatorApplicationTransaction $xaction) {
  44  
  45      switch ($xaction->getTransactionType()) {
  46        case PhabricatorProjectColumnTransaction::TYPE_NAME:
  47        case PhabricatorProjectColumnTransaction::TYPE_STATUS:
  48          return $xaction->getNewValue();
  49        case PhabricatorProjectColumnTransaction::TYPE_LIMIT:
  50          if ($xaction->getNewValue()) {
  51            return (int)$xaction->getNewValue();
  52          }
  53          return null;
  54      }
  55  
  56      return parent::getCustomTransactionNewValue($object, $xaction);
  57    }
  58  
  59    protected function applyCustomInternalTransaction(
  60      PhabricatorLiskDAO $object,
  61      PhabricatorApplicationTransaction $xaction) {
  62  
  63      switch ($xaction->getTransactionType()) {
  64        case PhabricatorProjectColumnTransaction::TYPE_NAME:
  65          $object->setName($xaction->getNewValue());
  66          return;
  67        case PhabricatorProjectColumnTransaction::TYPE_STATUS:
  68          $object->setStatus($xaction->getNewValue());
  69          return;
  70        case PhabricatorProjectColumnTransaction::TYPE_LIMIT:
  71          $object->setPointLimit($xaction->getNewValue());
  72          return;
  73      }
  74  
  75      return parent::applyCustomInternalTransaction($object, $xaction);
  76    }
  77  
  78    protected function applyCustomExternalTransaction(
  79      PhabricatorLiskDAO $object,
  80      PhabricatorApplicationTransaction $xaction) {
  81  
  82      switch ($xaction->getTransactionType()) {
  83        case PhabricatorProjectColumnTransaction::TYPE_NAME:
  84        case PhabricatorProjectColumnTransaction::TYPE_STATUS:
  85        case PhabricatorProjectColumnTransaction::TYPE_LIMIT:
  86          return;
  87      }
  88  
  89      return parent::applyCustomExternalTransaction($object, $xaction);
  90    }
  91  
  92    protected function validateTransaction(
  93      PhabricatorLiskDAO $object,
  94      $type,
  95      array $xactions) {
  96  
  97      $errors = parent::validateTransaction($object, $type, $xactions);
  98  
  99      switch ($type) {
 100        case PhabricatorProjectColumnTransaction::TYPE_LIMIT:
 101          foreach ($xactions as $xaction) {
 102            $value = $xaction->getNewValue();
 103            if (strlen($value) && !preg_match('/^\d+\z/', $value)) {
 104              $errors[] = new PhabricatorApplicationTransactionValidationError(
 105                $type,
 106                pht('Invalid'),
 107                pht('Column point limit must be empty, or a positive integer.'),
 108                $xaction);
 109            }
 110          }
 111          break;
 112        case PhabricatorProjectColumnTransaction::TYPE_NAME:
 113          $missing = $this->validateIsEmptyTextField(
 114            $object->getName(),
 115            $xactions);
 116  
 117          // The default "Backlog" column is allowed to be unnamed, which
 118          // means we use the default name.
 119  
 120          if ($missing && !$object->isDefaultColumn()) {
 121            $error = new PhabricatorApplicationTransactionValidationError(
 122              $type,
 123              pht('Required'),
 124              pht('Column name is required.'),
 125              nonempty(last($xactions), null));
 126  
 127            $error->setIsMissingFieldError(true);
 128            $errors[] = $error;
 129          }
 130          break;
 131      }
 132  
 133      return $errors;
 134    }
 135  
 136  
 137    protected function requireCapabilities(
 138      PhabricatorLiskDAO $object,
 139      PhabricatorApplicationTransaction $xaction) {
 140  
 141      switch ($xaction->getTransactionType()) {
 142        case PhabricatorProjectColumnTransaction::TYPE_NAME:
 143        case PhabricatorProjectColumnTransaction::TYPE_STATUS:
 144          PhabricatorPolicyFilter::requireCapability(
 145            $this->requireActor(),
 146            $object,
 147            PhabricatorPolicyCapability::CAN_EDIT);
 148          return;
 149      }
 150  
 151      return parent::requireCapabilities($object, $xaction);
 152    }
 153  
 154  }


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