[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/herald/controller/ -> HeraldRuleViewController.php (source)

   1  <?php
   2  
   3  final class HeraldRuleViewController extends HeraldController {
   4  
   5    private $id;
   6  
   7    public function willProcessRequest(array $data) {
   8      $this->id = $data['id'];
   9    }
  10  
  11    public function processRequest() {
  12      $request = $this->getRequest();
  13      $viewer = $request->getUser();
  14  
  15      $rule = id(new HeraldRuleQuery())
  16        ->setViewer($viewer)
  17        ->withIDs(array($this->id))
  18        ->needConditionsAndActions(true)
  19        ->executeOne();
  20      if (!$rule) {
  21        return new Aphront404Response();
  22      }
  23  
  24      $header = id(new PHUIHeaderView())
  25        ->setUser($viewer)
  26        ->setHeader($rule->getName())
  27        ->setPolicyObject($rule);
  28  
  29      if ($rule->getIsDisabled()) {
  30        $header->setStatus(
  31          'fa-ban',
  32          'dark',
  33          pht('Disabled'));
  34      } else {
  35        $header->setStatus(
  36          'fa-check',
  37          'bluegrey',
  38          pht('Active'));
  39      }
  40  
  41      $actions = $this->buildActionView($rule);
  42      $properties = $this->buildPropertyView($rule, $actions);
  43  
  44      $id = $rule->getID();
  45  
  46      $crumbs = $this->buildApplicationCrumbs();
  47      $crumbs->addTextCrumb("H{$id}");
  48      $crumbs->setActionList($actions);
  49  
  50      $object_box = id(new PHUIObjectBoxView())
  51        ->setHeader($header)
  52        ->addPropertyList($properties);
  53  
  54      $timeline = $this->buildTimeline($rule);
  55  
  56      return $this->buildApplicationPage(
  57        array(
  58          $crumbs,
  59          $object_box,
  60          $timeline,
  61        ),
  62        array(
  63          'title' => $rule->getName(),
  64        ));
  65    }
  66  
  67    private function buildActionView(HeraldRule $rule) {
  68      $viewer = $this->getRequest()->getUser();
  69      $id = $rule->getID();
  70  
  71      $view = id(new PhabricatorActionListView())
  72        ->setUser($viewer)
  73        ->setObject($rule)
  74        ->setObjectURI($this->getApplicationURI("rule/{$id}/"));
  75  
  76      $can_edit = PhabricatorPolicyFilter::hasCapability(
  77        $viewer,
  78        $rule,
  79        PhabricatorPolicyCapability::CAN_EDIT);
  80  
  81      $view->addAction(
  82        id(new PhabricatorActionView())
  83          ->setName(pht('Edit Rule'))
  84          ->setHref($this->getApplicationURI("edit/{$id}/"))
  85          ->setIcon('fa-pencil')
  86          ->setDisabled(!$can_edit)
  87          ->setWorkflow(!$can_edit));
  88  
  89      if ($rule->getIsDisabled()) {
  90        $disable_uri = "disable/{$id}/enable/";
  91        $disable_icon = 'fa-check-circle-o';
  92        $disable_name = pht('Enable Rule');
  93      } else {
  94        $disable_uri = "disable/{$id}/disable/";
  95        $disable_icon = 'fa-ban';
  96        $disable_name = pht('Disable Rule');
  97      }
  98  
  99      $view->addAction(
 100        id(new PhabricatorActionView())
 101          ->setName(pht('Disable Rule'))
 102          ->setHref($this->getApplicationURI($disable_uri))
 103          ->setIcon($disable_icon)
 104          ->setName($disable_name)
 105          ->setDisabled(!$can_edit)
 106          ->setWorkflow(true));
 107  
 108      return $view;
 109    }
 110  
 111    private function buildPropertyView(
 112      HeraldRule $rule,
 113      PhabricatorActionListView $actions) {
 114  
 115      $viewer = $this->getRequest()->getUser();
 116  
 117      $this->loadHandles(HeraldAdapter::getHandlePHIDs($rule));
 118  
 119      $view = id(new PHUIPropertyListView())
 120        ->setUser($viewer)
 121        ->setObject($rule)
 122        ->setActionList($actions);
 123  
 124      $view->addProperty(
 125        pht('Rule Type'),
 126        idx(HeraldRuleTypeConfig::getRuleTypeMap(), $rule->getRuleType()));
 127  
 128      if ($rule->isPersonalRule()) {
 129        $view->addProperty(
 130          pht('Author'),
 131          $this->getHandle($rule->getAuthorPHID())->renderLink());
 132      }
 133  
 134  
 135      $adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());
 136      if ($adapter) {
 137        $view->addProperty(
 138          pht('Applies To'),
 139          idx(
 140            HeraldAdapter::getEnabledAdapterMap($viewer),
 141            $rule->getContentType()));
 142  
 143        if ($rule->isObjectRule()) {
 144          $view->addProperty(
 145            pht('Trigger Object'),
 146            $this->getHandle($rule->getTriggerObjectPHID())->renderLink());
 147        }
 148  
 149        $view->invokeWillRenderEvent();
 150  
 151        $view->addSectionHeader(
 152          pht('Rule Description'),
 153          PHUIPropertyListView::ICON_SUMMARY);
 154        $view->addTextContent(
 155          $adapter->renderRuleAsText($rule, $this->getLoadedHandles()));
 156      }
 157  
 158      return $view;
 159    }
 160  
 161    private function buildTimeline(HeraldRule $rule) {
 162      $viewer = $this->getRequest()->getUser();
 163  
 164      $xactions = id(new HeraldTransactionQuery())
 165        ->setViewer($viewer)
 166        ->withObjectPHIDs(array($rule->getPHID()))
 167        ->needComments(true)
 168        ->execute();
 169  
 170      $engine = id(new PhabricatorMarkupEngine())
 171        ->setViewer($viewer);
 172      foreach ($xactions as $xaction) {
 173        if ($xaction->getComment()) {
 174          $engine->addObject(
 175            $xaction->getComment(),
 176            PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT);
 177        }
 178      }
 179      $engine->process();
 180  
 181      return id(new PhabricatorApplicationTransactionView())
 182        ->setUser($viewer)
 183        ->setObjectPHID($rule->getPHID())
 184        ->setTransactions($xactions)
 185        ->setMarkupEngine($engine);
 186    }
 187  
 188  }


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