Path: blob/master/src/applications/drydock/management/DrydockManagementReleaseLeaseWorkflow.php
12256 views
<?php12final class DrydockManagementReleaseLeaseWorkflow3extends DrydockManagementWorkflow {45protected function didConstruct() {6$this7->setName('release-lease')8->setSynopsis(pht('Release a lease.'))9->setArguments(10array(11array(12'name' => 'id',13'param' => 'id',14'repeat' => true,15'help' => pht('Lease ID to release.'),16),17array(18'name' => 'all',19'help' => pht('Release all leases. Dangerous!'),20),21));22}2324public function execute(PhutilArgumentParser $args) {25$is_all = $args->getArg('all');26$ids = $args->getArg('id');2728if (!$ids && !$is_all) {29throw new PhutilArgumentUsageException(30pht(31'Select which leases you want to release. See "--help" for '.32'guidance.'));33}3435$viewer = $this->getViewer();3637$statuses = $this->getReleaseableLeaseStatuses();3839$query = id(new DrydockLeaseQuery())40->setViewer($viewer)41->withStatuses(mpull($statuses, 'getKey'));4243if ($ids) {44$query->withIDs($ids);45}4647$leases = $query->execute();4849if ($ids) {50$id_map = mpull($leases, null, 'getID');5152foreach ($ids as $id) {53$lease = idx($id_map, $id);54if (!$lease) {55throw new PhutilArgumentUsageException(56pht('Lease "%s" does not exist.', $id));57}58}5960$leases = array_select_keys($id_map, $ids);61}6263if (!$leases) {64echo tsprintf(65"%s\n",66pht('No leases selected for release.'));6768return 0;69}7071$drydock_phid = id(new PhabricatorDrydockApplication())->getPHID();7273PhabricatorWorker::setRunAllTasksInProcess(true);7475foreach ($leases as $lease) {76if (!$lease->canRelease()) {77echo tsprintf(78"%s\n",79pht(80'Lease "%s" is not releasable.',81$lease->getDisplayName()));82continue;83}8485$command = DrydockCommand::initializeNewCommand($viewer)86->setTargetPHID($lease->getPHID())87->setAuthorPHID($drydock_phid)88->setCommand(DrydockCommand::COMMAND_RELEASE)89->save();9091$lease->scheduleUpdate();9293echo tsprintf(94"%s\n",95pht(96'Scheduled release of lease "%s".',97$lease->getDisplayName()));98}99100}101102private function getReleaseableLeaseStatuses() {103$statuses = DrydockLeaseStatus::getAllStatuses();104foreach ($statuses as $key => $status) {105$statuses[$key] = DrydockLeaseStatus::newStatusObject($status);106}107108foreach ($statuses as $key => $status) {109if (!$status->canRelease()) {110unset($statuses[$key]);111}112}113114return $statuses;115}116117}118119120