Path: blob/master/src/applications/dashboard/controller/panel/PhabricatorDashboardPanelViewController.php
12242 views
<?php12final class PhabricatorDashboardPanelViewController3extends PhabricatorDashboardController {45public function shouldAllowPublic() {6return true;7}89public function handleRequest(AphrontRequest $request) {10$viewer = $request->getViewer();11$id = $request->getURIData('id');1213$panel = id(new PhabricatorDashboardPanelQuery())14->setViewer($viewer)15->withIDs(array($id))16->executeOne();17if (!$panel) {18return new Aphront404Response();19}2021$can_edit = PhabricatorPolicyFilter::hasCapability(22$viewer,23$panel,24PhabricatorPolicyCapability::CAN_EDIT);2526$title = $panel->getMonogram().' '.$panel->getName();27$crumbs = $this->buildApplicationCrumbs();28$crumbs->addTextCrumb(29pht('Panels'),30$this->getApplicationURI('panel/'));31$crumbs->addTextCrumb($panel->getMonogram());32$crumbs->setBorder(true);3334$header = $this->buildHeaderView($panel);35$curtain = $this->buildCurtainView($panel);3637$usage_box = $this->newUsageView($panel);3839$timeline = $this->buildTransactionTimeline(40$panel,41new PhabricatorDashboardPanelTransactionQuery());42$timeline->setShouldTerminate(true);4344$rendered_panel = id(new PhabricatorDashboardPanelRenderingEngine())45->setViewer($viewer)46->setPanel($panel)47->setContextObject($panel)48->setPanelPHID($panel->getPHID())49->setParentPanelPHIDs(array())50->setEditMode(true)51->renderPanel();5253$preview = id(new PHUIBoxView())54->addClass('dashboard-preview-box')55->appendChild($rendered_panel);5657$view = id(new PHUITwoColumnView())58->setHeader($header)59->setCurtain($curtain)60->setMainColumn(array(61$rendered_panel,62$usage_box,63$timeline,64));6566return $this->newPage()67->setTitle($title)68->setCrumbs($crumbs)69->appendChild($view);70}7172private function buildHeaderView(PhabricatorDashboardPanel $panel) {73$viewer = $this->getViewer();74$id = $panel->getID();7576$header = id(new PHUIHeaderView())77->setUser($viewer)78->setHeader($panel->getName())79->setPolicyObject($panel)80->setHeaderIcon('fa-window-maximize');8182if (!$panel->getIsArchived()) {83$header->setStatus('fa-check', 'bluegrey', pht('Active'));84} else {85$header->setStatus('fa-ban', 'red', pht('Archived'));86}87return $header;88}8990private function buildCurtainView(PhabricatorDashboardPanel $panel) {91$viewer = $this->getViewer();92$id = $panel->getID();9394$curtain = $this->newCurtainView($panel);9596$can_edit = PhabricatorPolicyFilter::hasCapability(97$viewer,98$panel,99PhabricatorPolicyCapability::CAN_EDIT);100101$curtain->addAction(102id(new PhabricatorActionView())103->setName(pht('Edit Panel'))104->setIcon('fa-pencil')105->setHref($this->getApplicationURI("panel/edit/{$id}/"))106->setDisabled(!$can_edit)107->setWorkflow(!$can_edit));108109if (!$panel->getIsArchived()) {110$archive_text = pht('Archive Panel');111$archive_icon = 'fa-ban';112} else {113$archive_text = pht('Activate Panel');114$archive_icon = 'fa-check';115}116117$curtain->addAction(118id(new PhabricatorActionView())119->setName($archive_text)120->setIcon($archive_icon)121->setHref($this->getApplicationURI("panel/archive/{$id}/"))122->setDisabled(!$can_edit)123->setWorkflow(true));124125return $curtain;126}127128private function newUsageView(PhabricatorDashboardPanel $panel) {129$viewer = $this->getViewer();130131$object_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(132$panel->getPHID(),133PhabricatorDashboardPanelUsedByObjectEdgeType::EDGECONST);134135if ($object_phids) {136$handles = $viewer->loadHandles($object_phids);137} else {138$handles = array();139}140141$rows = array();142foreach ($object_phids as $object_phid) {143$handle = $handles[$object_phid];144145$icon = $handle->getIcon();146147$rows[] = array(148id(new PHUIIconView())->setIcon($icon),149$handle->getTypeName(),150$handle->renderLink(),151);152}153154$usage_table = id(new AphrontTableView($rows))155->setNoDataString(156pht(157'This panel is not used on any dashboard or inside any other '.158'panel container.'))159->setColumnClasses(160array(161'center',162'',163'pri wide',164));165166$header_view = id(new PHUIHeaderView())167->setHeader(pht('Panel Used By'));168169$usage_box = id(new PHUIObjectBoxView())170->setTable($usage_table)171->setHeader($header_view);172173return $usage_box;174}175}176177178