Path: blob/master/src/applications/nuance/controller/NuanceQueueWorkController.php
12262 views
<?php12final class NuanceQueueWorkController3extends NuanceQueueController {45public function handleRequest(AphrontRequest $request) {6$viewer = $this->getViewer();78$queue = id(new NuanceQueueQuery())9->setViewer($viewer)10->withIDs(array($request->getURIData('id')))11->executeOne();12if (!$queue) {13return new Aphront404Response();14}1516$title = $queue->getName();1718$crumbs = $this->buildApplicationCrumbs();19$crumbs->addTextCrumb(pht('Queues'), $this->getApplicationURI('queue/'));20$crumbs->addTextCrumb($queue->getName(), $queue->getURI());21$crumbs->addTextCrumb(pht('Work'));22$crumbs->setBorder(true);2324// For now, just pick the first open item.2526$items = id(new NuanceItemQuery())27->setViewer($viewer)28->withQueuePHIDs(29array(30$queue->getPHID(),31))32->withStatuses(33array(34NuanceItem::STATUS_OPEN,35))36->requireCapabilities(37array(38PhabricatorPolicyCapability::CAN_VIEW,39PhabricatorPolicyCapability::CAN_EDIT,40))41->setLimit(5)42->execute();4344if (!$items) {45return $this->newDialog()46->setTitle(pht('Queue Empty'))47->appendParagraph(48pht(49'This queue has no open items which you have permission to '.50'work on.'))51->addCancelButton($queue->getURI());52}5354$item = head($items);5556$curtain = $this->buildCurtain($queue, $item);5758$timeline = $this->buildTransactionTimeline(59$item,60new NuanceItemTransactionQuery());61$timeline->setShouldTerminate(true);6263$impl = $item->getImplementation()64->setViewer($viewer);6566$commands = $this->buildCommands($item);67$work_content = $impl->buildItemWorkView($item);6869$view = id(new PHUITwoColumnView())70->setCurtain($curtain)71->setMainColumn(72array(73$commands,74$work_content,75$timeline,76));7778return $this->newPage()79->setTitle($title)80->setCrumbs($crumbs)81->appendChild($view);82}8384private function buildCurtain(NuanceQueue $queue, NuanceItem $item) {85$viewer = $this->getViewer();86$id = $queue->getID();8788$curtain = $this->newCurtainView();8990$impl = $item->getImplementation();91$commands = $impl->buildWorkCommands($item);9293foreach ($commands as $command) {94$command_key = $command->getCommandKey();9596$item_id = $item->getID();9798$action_uri = "queue/action/{$id}/{$command_key}/{$item_id}/";99$action_uri = $this->getApplicationURI($action_uri);100101$curtain->addAction(102id(new PhabricatorActionView())103->setName($command->getName())104->setIcon($command->getIcon())105->setHref($action_uri)106->setWorkflow(true));107}108109$curtain->addAction(110id(new PhabricatorActionView())111->setType(PhabricatorActionView::TYPE_DIVIDER));112113$curtain->addAction(114id(new PhabricatorActionView())115->setType(PhabricatorActionView::TYPE_LABEL)116->setName(pht('Queue Actions')));117118$curtain->addAction(119id(new PhabricatorActionView())120->setName(pht('Manage Queue'))121->setIcon('fa-cog')122->setHref($this->getApplicationURI("queue/view/{$id}/")));123124return $curtain;125}126127private function buildCommands(NuanceItem $item) {128$viewer = $this->getViewer();129130$commands = id(new NuanceItemCommandQuery())131->setViewer($viewer)132->withItemPHIDs(array($item->getPHID()))133->withStatuses(134array(135NuanceItemCommand::STATUS_ISSUED,136NuanceItemCommand::STATUS_EXECUTING,137NuanceItemCommand::STATUS_FAILED,138))139->execute();140$commands = msort($commands, 'getID');141142if (!$commands) {143return null;144}145146$rows = array();147foreach ($commands as $command) {148$icon = $command->getStatusIcon();149$color = $command->getStatusColor();150151$rows[] = array(152$command->getID(),153id(new PHUIIconView())154->setIcon($icon, $color),155$viewer->renderHandle($command->getAuthorPHID()),156$command->getCommand(),157phabricator_datetime($command->getDateCreated(), $viewer),158);159}160161$table = id(new AphrontTableView($rows))162->setHeaders(163array(164pht('ID'),165null,166pht('Actor'),167pht('Command'),168pht('Date'),169))170->setColumnClasses(171array(172null,173'icon',174null,175'pri',176'wide right',177));178179return id(new PHUIObjectBoxView())180->setHeaderText(pht('Pending Commands'))181->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)182->setTable($table);183}184185}186187188