Differential D21691 Diff 51704 src/applications/harbormaster/controller/HarbormasterBuildableViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/harbormaster/controller/HarbormasterBuildableViewController.php
Show First 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | private function buildCurtainView(HarbormasterBuildable $buildable) { | ||||
$curtain = $this->newCurtainView($buildable); | $curtain = $this->newCurtainView($buildable); | ||||
$can_edit = PhabricatorPolicyFilter::hasCapability( | $can_edit = PhabricatorPolicyFilter::hasCapability( | ||||
$viewer, | $viewer, | ||||
$buildable, | $buildable, | ||||
PhabricatorPolicyCapability::CAN_EDIT); | PhabricatorPolicyCapability::CAN_EDIT); | ||||
$can_restart = false; | $messages = array( | ||||
$can_resume = false; | new HarbormasterBuildMessageRestartTransaction(), | ||||
$can_pause = false; | new HarbormasterBuildMessagePauseTransaction(), | ||||
$can_abort = false; | new HarbormasterBuildMessageResumeTransaction(), | ||||
new HarbormasterBuildMessageAbortTransaction(), | |||||
$command_restart = HarbormasterBuildCommand::COMMAND_RESTART; | ); | ||||
$command_resume = HarbormasterBuildCommand::COMMAND_RESUME; | |||||
$command_pause = HarbormasterBuildCommand::COMMAND_PAUSE; | |||||
$command_abort = HarbormasterBuildCommand::COMMAND_ABORT; | |||||
foreach ($messages as $message) { | |||||
// Messages are enabled if they can be sent to at least one build. | |||||
$can_send = false; | |||||
foreach ($buildable->getBuilds() as $build) { | foreach ($buildable->getBuilds() as $build) { | ||||
if ($build->canRestartBuild()) { | $can_send = $message->canSendMessage($viewer, $build); | ||||
if ($build->canIssueCommand($viewer, $command_restart)) { | if ($can_send) { | ||||
$can_restart = true; | break; | ||||
} | |||||
} | |||||
if ($build->canResumeBuild()) { | |||||
if ($build->canIssueCommand($viewer, $command_resume)) { | |||||
$can_resume = true; | |||||
} | |||||
} | |||||
if ($build->canPauseBuild()) { | |||||
if ($build->canIssueCommand($viewer, $command_pause)) { | |||||
$can_pause = true; | |||||
} | |||||
} | |||||
if ($build->canAbortBuild()) { | |||||
if ($build->canIssueCommand($viewer, $command_abort)) { | |||||
$can_abort = true; | |||||
} | |||||
} | } | ||||
} | } | ||||
$restart_uri = "buildable/{$id}/restart/"; | $message_uri = urisprintf( | ||||
$pause_uri = "buildable/{$id}/pause/"; | '/buildable/%d/%s/', | ||||
$resume_uri = "buildable/{$id}/resume/"; | $id, | ||||
$abort_uri = "buildable/{$id}/abort/"; | $message->getHarbormasterBuildMessageType()); | ||||
$message_uri = $this->getApplicationURI($message_uri); | |||||
$curtain->addAction( | |||||
id(new PhabricatorActionView()) | $action = id(new PhabricatorActionView()) | ||||
->setIcon('fa-repeat') | ->setName($message->getHarbormasterBuildableMessageName()) | ||||
->setName(pht('Restart Builds')) | ->setIcon($message->getIcon()) | ||||
->setHref($this->getApplicationURI($restart_uri)) | ->setHref($message_uri) | ||||
->setWorkflow(true) | ->setDisabled(!$can_send || !$can_edit) | ||||
->setDisabled(!$can_restart || !$can_edit)); | ->setWorkflow(true); | ||||
$curtain->addAction( | $curtain->addAction($action); | ||||
id(new PhabricatorActionView()) | } | ||||
->setIcon('fa-pause') | |||||
->setName(pht('Pause Builds')) | |||||
->setHref($this->getApplicationURI($pause_uri)) | |||||
->setWorkflow(true) | |||||
->setDisabled(!$can_pause || !$can_edit)); | |||||
$curtain->addAction( | |||||
id(new PhabricatorActionView()) | |||||
->setIcon('fa-play') | |||||
->setName(pht('Resume Builds')) | |||||
->setHref($this->getApplicationURI($resume_uri)) | |||||
->setWorkflow(true) | |||||
->setDisabled(!$can_resume || !$can_edit)); | |||||
$curtain->addAction( | |||||
id(new PhabricatorActionView()) | |||||
->setIcon('fa-exclamation-triangle') | |||||
->setName(pht('Abort Builds')) | |||||
->setHref($this->getApplicationURI($abort_uri)) | |||||
->setWorkflow(true) | |||||
->setDisabled(!$can_abort || !$can_edit)); | |||||
return $curtain; | return $curtain; | ||||
} | } | ||||
private function buildPropertyList(HarbormasterBuildable $buildable) { | private function buildPropertyList(HarbormasterBuildable $buildable) { | ||||
$viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
$properties = id(new PHUIPropertyListView()) | $properties = id(new PHUIPropertyListView()) | ||||
Show All 26 Lines | final class HarbormasterBuildableViewController | ||||
private function buildBuildList(HarbormasterBuildable $buildable) { | private function buildBuildList(HarbormasterBuildable $buildable) { | ||||
$viewer = $this->getRequest()->getUser(); | $viewer = $this->getRequest()->getUser(); | ||||
$build_list = id(new PHUIObjectItemListView()) | $build_list = id(new PHUIObjectItemListView()) | ||||
->setUser($viewer); | ->setUser($viewer); | ||||
foreach ($buildable->getBuilds() as $build) { | foreach ($buildable->getBuilds() as $build) { | ||||
$view_uri = $this->getApplicationURI('/build/'.$build->getID().'/'); | $view_uri = $this->getApplicationURI('/build/'.$build->getID().'/'); | ||||
$item = id(new PHUIObjectItemView()) | $item = id(new PHUIObjectItemView()) | ||||
->setObjectName(pht('Build %d', $build->getID())) | ->setObjectName(pht('Build %d', $build->getID())) | ||||
->setHeader($build->getName()) | ->setHeader($build->getName()) | ||||
->setHref($view_uri); | ->setHref($view_uri); | ||||
$status = $build->getBuildStatus(); | $status = $build->getBuildPendingStatusObject(); | ||||
$status_color = HarbormasterBuildStatus::getBuildStatusColor($status); | |||||
$status_name = HarbormasterBuildStatus::getBuildStatusName($status); | $item->setStatusIcon( | ||||
$item->setStatusIcon('fa-dot-circle-o '.$status_color, $status_name); | $status->getIconIcon().' '.$status->getIconColor(), | ||||
$item->addAttribute($status_name); | $status->getName()); | ||||
if ($build->isRestarting()) { | |||||
$item->addIcon('fa-repeat', pht('Restarting')); | |||||
} else if ($build->isPausing()) { | |||||
$item->addIcon('fa-pause', pht('Pausing')); | |||||
} else if ($build->isResuming()) { | |||||
$item->addIcon('fa-play', pht('Resuming')); | |||||
} | |||||
$build_id = $build->getID(); | |||||
$restart_uri = "build/restart/{$build_id}/buildable/"; | |||||
$resume_uri = "build/resume/{$build_id}/buildable/"; | |||||
$pause_uri = "build/pause/{$build_id}/buildable/"; | |||||
$abort_uri = "build/abort/{$build_id}/buildable/"; | |||||
$item->addAction( | |||||
id(new PHUIListItemView()) | |||||
->setIcon('fa-repeat') | |||||
->setName(pht('Restart')) | |||||
->setHref($this->getApplicationURI($restart_uri)) | |||||
->setWorkflow(true) | |||||
->setDisabled(!$build->canRestartBuild())); | |||||
if ($build->canResumeBuild()) { | |||||
$item->addAction( | |||||
id(new PHUIListItemView()) | |||||
->setIcon('fa-play') | |||||
->setName(pht('Resume')) | |||||
->setHref($this->getApplicationURI($resume_uri)) | |||||
->setWorkflow(true)); | |||||
} else { | |||||
$item->addAction( | |||||
id(new PHUIListItemView()) | |||||
->setIcon('fa-pause') | |||||
->setName(pht('Pause')) | |||||
->setHref($this->getApplicationURI($pause_uri)) | |||||
->setWorkflow(true) | |||||
->setDisabled(!$build->canPauseBuild())); | |||||
} | |||||
$targets = $build->getBuildTargets(); | $targets = $build->getBuildTargets(); | ||||
if ($targets) { | if ($targets) { | ||||
$target_list = id(new PHUIStatusListView()); | $target_list = id(new PHUIStatusListView()); | ||||
foreach ($targets as $target) { | foreach ($targets as $target) { | ||||
$status = $target->getTargetStatus(); | $status = $target->getTargetStatus(); | ||||
$icon = HarbormasterBuildTarget::getBuildTargetStatusIcon($status); | $icon = HarbormasterBuildTarget::getBuildTargetStatusIcon($status); | ||||
▲ Show 20 Lines • Show All 101 Lines • Show Last 20 Lines |