Path: blob/master/src/applications/herald/controller/HeraldRuleViewController.php
12262 views
<?php12final class HeraldRuleViewController extends HeraldController {34public function shouldAllowPublic() {5return true;6}78public function handleRequest(AphrontRequest $request) {9$viewer = $request->getViewer();10$id = $request->getURIData('id');1112$rule = id(new HeraldRuleQuery())13->setViewer($viewer)14->withIDs(array($id))15->needConditionsAndActions(true)16->needValidateAuthors(true)17->executeOne();18if (!$rule) {19return new Aphront404Response();20}2122$header = id(new PHUIHeaderView())23->setUser($viewer)24->setHeader($rule->getName())25->setPolicyObject($rule)26->setHeaderIcon('fa-bullhorn');2728if ($rule->getIsDisabled()) {29$header->setStatus('fa-ban', 'red', pht('Disabled'));30} else if (!$rule->hasValidAuthor()) {31$header->setStatus('fa-user', 'red', pht('Author Not Active'));32} else {33$header->setStatus('fa-check', 'bluegrey', pht('Active'));34}3536$curtain = $this->buildCurtain($rule);37$details = $this->buildPropertySectionView($rule);38$description = $this->buildDescriptionView($rule);3940$id = $rule->getID();4142$crumbs = $this->buildApplicationCrumbs();43$crumbs->addTextCrumb("H{$id}");44$crumbs->setBorder(true);4546$timeline = $this->buildTransactionTimeline(47$rule,48new HeraldTransactionQuery());49$timeline->setShouldTerminate(true);5051$title = $rule->getName();5253$view = id(new PHUITwoColumnView())54->setHeader($header)55->setCurtain($curtain)56->setMainColumn($timeline)57->addPropertySection(pht('Details'), $details)58->addPropertySection(pht('Description'), $description);5960return $this->newPage()61->setTitle($title)62->setCrumbs($crumbs)63->appendChild($view);64}6566private function buildCurtain(HeraldRule $rule) {67$viewer = $this->getViewer();6869$id = $rule->getID();7071$can_edit = PhabricatorPolicyFilter::hasCapability(72$viewer,73$rule,74PhabricatorPolicyCapability::CAN_EDIT);7576$curtain = $this->newCurtainView($rule);7778$curtain->addAction(79id(new PhabricatorActionView())80->setName(pht('Edit Rule'))81->setHref($this->getApplicationURI("edit/{$id}/"))82->setIcon('fa-pencil')83->setDisabled(!$can_edit)84->setWorkflow(!$can_edit));8586if ($rule->getIsDisabled()) {87$disable_uri = "disable/{$id}/enable/";88$disable_icon = 'fa-check';89$disable_name = pht('Enable Rule');90} else {91$disable_uri = "disable/{$id}/disable/";92$disable_icon = 'fa-ban';93$disable_name = pht('Disable Rule');94}9596$curtain->addAction(97id(new PhabricatorActionView())98->setHref($this->getApplicationURI($disable_uri))99->setIcon($disable_icon)100->setName($disable_name)101->setDisabled(!$can_edit)102->setWorkflow(true));103104return $curtain;105}106107private function buildPropertySectionView(108HeraldRule $rule) {109110$viewer = $this->getRequest()->getUser();111$view = id(new PHUIPropertyListView())112->setUser($viewer);113114$view->addProperty(115pht('Rule Type'),116idx(HeraldRuleTypeConfig::getRuleTypeMap(), $rule->getRuleType()));117118if ($rule->isPersonalRule()) {119$view->addProperty(120pht('Author'),121$viewer->renderHandle($rule->getAuthorPHID()));122}123124$adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());125if ($adapter) {126$view->addProperty(127pht('Applies To'),128idx(129HeraldAdapter::getEnabledAdapterMap($viewer),130$rule->getContentType()));131132if ($rule->isObjectRule()) {133$view->addProperty(134pht('Trigger Object'),135$viewer->renderHandle($rule->getTriggerObjectPHID()));136}137}138139return $view;140}141142private function buildDescriptionView(HeraldRule $rule) {143$viewer = $this->getRequest()->getUser();144$view = id(new PHUIPropertyListView())145->setViewer($viewer);146147$adapter = HeraldAdapter::getAdapterForContentType($rule->getContentType());148if ($adapter) {149$rule_text = $adapter->renderRuleAsText($rule, $viewer);150$view->addTextContent($rule_text);151return $view;152}153return null;154}155156}157158159