Correct Aphlict websocket URI construction after PHP8 compatibility changes
[phabricator.git] / src / applications / drydock / management / DrydockManagementReleaseLeaseWorkflow.php
blob0628f57b3832f4baa1c5ef33f93a07a202453076
1 <?php
3 final class DrydockManagementReleaseLeaseWorkflow
4 extends DrydockManagementWorkflow {
6 protected function didConstruct() {
7 $this
8 ->setName('release-lease')
9 ->setSynopsis(pht('Release a lease.'))
10 ->setArguments(
11 array(
12 array(
13 'name' => 'id',
14 'param' => 'id',
15 'repeat' => true,
16 'help' => pht('Lease ID to release.'),
18 array(
19 'name' => 'all',
20 'help' => pht('Release all leases. Dangerous!'),
22 ));
25 public function execute(PhutilArgumentParser $args) {
26 $is_all = $args->getArg('all');
27 $ids = $args->getArg('id');
29 if (!$ids && !$is_all) {
30 throw new PhutilArgumentUsageException(
31 pht(
32 'Select which leases you want to release. See "--help" for '.
33 'guidance.'));
36 $viewer = $this->getViewer();
38 $statuses = $this->getReleaseableLeaseStatuses();
40 $query = id(new DrydockLeaseQuery())
41 ->setViewer($viewer)
42 ->withStatuses(mpull($statuses, 'getKey'));
44 if ($ids) {
45 $query->withIDs($ids);
48 $leases = $query->execute();
50 if ($ids) {
51 $id_map = mpull($leases, null, 'getID');
53 foreach ($ids as $id) {
54 $lease = idx($id_map, $id);
55 if (!$lease) {
56 throw new PhutilArgumentUsageException(
57 pht('Lease "%s" does not exist.', $id));
61 $leases = array_select_keys($id_map, $ids);
64 if (!$leases) {
65 echo tsprintf(
66 "%s\n",
67 pht('No leases selected for release.'));
69 return 0;
72 $drydock_phid = id(new PhabricatorDrydockApplication())->getPHID();
74 PhabricatorWorker::setRunAllTasksInProcess(true);
76 foreach ($leases as $lease) {
77 if (!$lease->canRelease()) {
78 echo tsprintf(
79 "%s\n",
80 pht(
81 'Lease "%s" is not releasable.',
82 $lease->getDisplayName()));
83 continue;
86 $command = DrydockCommand::initializeNewCommand($viewer)
87 ->setTargetPHID($lease->getPHID())
88 ->setAuthorPHID($drydock_phid)
89 ->setCommand(DrydockCommand::COMMAND_RELEASE)
90 ->save();
92 $lease->scheduleUpdate();
94 echo tsprintf(
95 "%s\n",
96 pht(
97 'Scheduled release of lease "%s".',
98 $lease->getDisplayName()));
103 private function getReleaseableLeaseStatuses() {
104 $statuses = DrydockLeaseStatus::getAllStatuses();
105 foreach ($statuses as $key => $status) {
106 $statuses[$key] = DrydockLeaseStatus::newStatusObject($status);
109 foreach ($statuses as $key => $status) {
110 if (!$status->canRelease()) {
111 unset($statuses[$key]);
115 return $statuses;