[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/dashboard/editor/ -> PhabricatorDashboardTransactionEditor.php (source)

   1  <?php
   2  
   3  final class PhabricatorDashboardTransactionEditor
   4    extends PhabricatorApplicationTransactionEditor {
   5  
   6    public function getEditorApplicationClass() {
   7      return 'PhabricatorDashboardApplication';
   8    }
   9  
  10    public function getEditorObjectsDescription() {
  11      return pht('Dashboards');
  12    }
  13  
  14    public static function addPanelToDashboard(
  15      PhabricatorUser $actor,
  16      PhabricatorContentSource $content_source,
  17      PhabricatorDashboardPanel $panel,
  18      PhabricatorDashboard $dashboard,
  19      $column) {
  20  
  21      $xactions = array();
  22      $xactions[] = id(new PhabricatorDashboardTransaction())
  23        ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
  24        ->setMetadataValue(
  25          'edge:type',
  26          PhabricatorEdgeConfig::TYPE_DASHBOARD_HAS_PANEL)
  27        ->setNewValue(
  28          array(
  29            '+' => array(
  30              $panel->getPHID() => $panel->getPHID(),
  31            ),
  32          ));
  33  
  34      $layout_config = $dashboard->getLayoutConfigObject();
  35      $layout_config->setPanelLocation($column, $panel->getPHID());
  36      $dashboard->setLayoutConfigFromObject($layout_config);
  37  
  38      $editor = id(new PhabricatorDashboardTransactionEditor())
  39        ->setActor($actor)
  40        ->setContentSource($content_source)
  41        ->setContinueOnMissingFields(true)
  42        ->setContinueOnNoEffect(true)
  43        ->applyTransactions($dashboard, $xactions);
  44    }
  45  
  46    public function getTransactionTypes() {
  47      $types = parent::getTransactionTypes();
  48  
  49      $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
  50      $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
  51      $types[] = PhabricatorTransactions::TYPE_EDGE;
  52  
  53      $types[] = PhabricatorDashboardTransaction::TYPE_NAME;
  54      $types[] = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
  55  
  56      return $types;
  57    }
  58  
  59    protected function getCustomTransactionOldValue(
  60      PhabricatorLiskDAO $object,
  61      PhabricatorApplicationTransaction $xaction) {
  62      switch ($xaction->getTransactionType()) {
  63        case PhabricatorDashboardTransaction::TYPE_NAME:
  64          if ($this->getIsNewObject()) {
  65            return null;
  66          }
  67          return $object->getName();
  68        case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
  69          if ($this->getIsNewObject()) {
  70            return null;
  71          }
  72          $layout_config = $object->getLayoutConfigObject();
  73          return $layout_config->getLayoutMode();
  74      }
  75  
  76      return parent::getCustomTransactionOldValue($object, $xaction);
  77    }
  78  
  79    protected function getCustomTransactionNewValue(
  80      PhabricatorLiskDAO $object,
  81      PhabricatorApplicationTransaction $xaction) {
  82      switch ($xaction->getTransactionType()) {
  83        case PhabricatorDashboardTransaction::TYPE_NAME:
  84        case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
  85          return $xaction->getNewValue();
  86      }
  87      return parent::getCustomTransactionNewValue($object, $xaction);
  88    }
  89  
  90    protected function applyCustomInternalTransaction(
  91      PhabricatorLiskDAO $object,
  92      PhabricatorApplicationTransaction $xaction) {
  93      switch ($xaction->getTransactionType()) {
  94        case PhabricatorDashboardTransaction::TYPE_NAME:
  95          $object->setName($xaction->getNewValue());
  96          return;
  97        case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
  98          $old_layout = $object->getLayoutConfigObject();
  99          $new_layout = clone $old_layout;
 100          $new_layout->setLayoutMode($xaction->getNewValue());
 101          if ($old_layout->isMultiColumnLayout() !=
 102              $new_layout->isMultiColumnLayout()) {
 103            $panel_phids = $object->getPanelPHIDs();
 104            $new_locations = $new_layout->getDefaultPanelLocations();
 105            foreach ($panel_phids as $panel_phid) {
 106              $new_locations[0][] = $panel_phid;
 107            }
 108            $new_layout->setPanelLocations($new_locations);
 109          }
 110          $object->setLayoutConfigFromObject($new_layout);
 111          return;
 112        case PhabricatorTransactions::TYPE_VIEW_POLICY:
 113          $object->setViewPolicy($xaction->getNewValue());
 114          return;
 115        case PhabricatorTransactions::TYPE_EDIT_POLICY:
 116          $object->setEditPolicy($xaction->getNewValue());
 117          return;
 118        case PhabricatorTransactions::TYPE_EDGE:
 119          return;
 120      }
 121  
 122      return parent::applyCustomInternalTransaction($object, $xaction);
 123    }
 124  
 125    protected function applyCustomExternalTransaction(
 126      PhabricatorLiskDAO $object,
 127      PhabricatorApplicationTransaction $xaction) {
 128  
 129      switch ($xaction->getTransactionType()) {
 130        case PhabricatorDashboardTransaction::TYPE_NAME:
 131        case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
 132        case PhabricatorTransactions::TYPE_VIEW_POLICY:
 133        case PhabricatorTransactions::TYPE_EDIT_POLICY:
 134          return;
 135        case PhabricatorTransactions::TYPE_EDGE:
 136          return;
 137      }
 138  
 139      return parent::applyCustomExternalTransaction($object, $xaction);
 140    }
 141  
 142    protected function validateTransaction(
 143      PhabricatorLiskDAO $object,
 144      $type,
 145      array $xactions) {
 146  
 147      $errors = parent::validateTransaction($object, $type, $xactions);
 148  
 149      switch ($type) {
 150        case PhabricatorDashboardTransaction::TYPE_NAME:
 151          $missing = $this->validateIsEmptyTextField(
 152            $object->getName(),
 153            $xactions);
 154  
 155          if ($missing) {
 156            $error = new PhabricatorApplicationTransactionValidationError(
 157              $type,
 158              pht('Required'),
 159              pht('Dashboard name is required.'),
 160              nonempty(last($xactions), null));
 161  
 162            $error->setIsMissingFieldError(true);
 163            $errors[] = $error;
 164          }
 165          break;
 166      }
 167  
 168      return $errors;
 169    }
 170  
 171  
 172  }


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