Differential D9637 Diff 23125 src/applications/chronicle/controller/ChronicleTriggerViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/chronicle/controller/ChronicleTriggerViewController.php
- This file was added.
<?php | |||||
final class ChronicleTriggerViewController | |||||
extends ChronicleController { | |||||
private $id; | |||||
public function willProcessRequest(array $data) { | |||||
$this->id = $data['id']; | |||||
} | |||||
public function processRequest() { | |||||
$request = $this->getRequest(); | |||||
$viewer = $request->getUser(); | |||||
$id = $this->id; | |||||
$trigger = id(new ChronicleTriggerQuery()) | |||||
->setViewer($viewer) | |||||
->withIDs(array($id)) | |||||
->executeOne(); | |||||
if (!$trigger) { | |||||
return new Aphront404Response(); | |||||
} | |||||
$xactions = id(new ChronicleTriggerTransactionQuery()) | |||||
->setViewer($viewer) | |||||
->withObjectPHIDs(array($trigger->getPHID())) | |||||
->execute(); | |||||
$xaction_view = id(new PhabricatorApplicationTransactionView()) | |||||
->setUser($viewer) | |||||
->setObjectPHID($trigger->getPHID()) | |||||
->setTransactions($xactions) | |||||
->setShouldTerminate(true); | |||||
$title = pht('Trigger %d', $id); | |||||
$header = id(new PHUIHeaderView()) | |||||
->setHeader($trigger->getName()) | |||||
->setUser($viewer) | |||||
->setPolicyObject($trigger); | |||||
$box = id(new PHUIObjectBoxView()) | |||||
->setHeader($header); | |||||
$actions = $this->buildActionList($trigger); | |||||
$this->buildPropertyLists($box, $trigger, $actions); | |||||
$crumbs = $this->buildApplicationCrumbs(); | |||||
$crumbs->addTextCrumb($title); | |||||
return $this->buildApplicationPage( | |||||
array( | |||||
$crumbs, | |||||
$box, | |||||
$xaction_view, | |||||
), | |||||
array( | |||||
'title' => $title, | |||||
'device' => true, | |||||
)); | |||||
} | |||||
private function buildActionList(ChronicleTrigger $trigger) { | |||||
$request = $this->getRequest(); | |||||
$viewer = $request->getUser(); | |||||
$id = $trigger->getID(); | |||||
$list = id(new PhabricatorActionListView()) | |||||
->setUser($viewer) | |||||
->setObject($trigger) | |||||
->setObjectURI($this->getApplicationURI("trigger/{$id}/")); | |||||
$can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
$viewer, | |||||
$trigger, | |||||
PhabricatorPolicyCapability::CAN_EDIT); | |||||
$list->addAction( | |||||
id(new PhabricatorActionView()) | |||||
->setName(pht('Edit Trigger')) | |||||
->setHref($this->getApplicationURI("trigger/edit/{$id}/")) | |||||
->setWorkflow(!$can_edit) | |||||
->setDisabled(!$can_edit) | |||||
->setIcon('fa-pencil')); | |||||
return $list; | |||||
} | |||||
private function buildPropertyLists( | |||||
PHUIObjectBoxView $box, | |||||
ChronicleTrigger $trigger, | |||||
PhabricatorActionListView $actions) { | |||||
$request = $this->getRequest(); | |||||
$viewer = $request->getUser(); | |||||
$properties = id(new PHUIPropertyListView()) | |||||
->setUser($viewer) | |||||
->setObject($trigger) | |||||
->setActionList($actions); | |||||
$box->addPropertyList($properties); | |||||
$properties->addProperty( | |||||
pht('Epoch Type'), | |||||
ucfirst($trigger->getEpochType())); | |||||
if ($trigger->getEpochNext() == ChronicleTrigger::EPOCH_NEVER) { | |||||
$properties->addProperty( | |||||
pht('Next Epoch'), | |||||
phutil_tag('em', array(), pht('Never'))); | |||||
$properties->addProperty( | |||||
pht('Triggers In'), | |||||
phutil_tag('em', array(), pht('Never'))); | |||||
} else { | |||||
$properties->addProperty( | |||||
pht('Next Epoch'), | |||||
phabricator_datetime($trigger->getEpochNext(), $viewer)); | |||||
if (time() < $trigger->getEpochNext()) { | |||||
$properties->addProperty( | |||||
pht('Triggers In'), | |||||
phabricator_format_relative_time($trigger->getEpochNext() - time())); | |||||
} else { | |||||
$properties->addProperty( | |||||
pht('Triggers In'), | |||||
phutil_tag('em', array(), pht('Overdue'))); | |||||
} | |||||
} | |||||
$properties->addProperty( | |||||
pht('Action'), | |||||
$trigger->getActionClass()); | |||||
} | |||||
} |