Skip to content

Commit 0e4b57b

Browse files
Improvements round 1
1 parent f9d710c commit 0e4b57b

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/Commands/Tag/TagCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ abstract class TagCommand extends TerminusCommand
1818
protected function getModels($site_id, $org_id)
1919
{
2020
$organization = $this->session()->getUser()->getOrganizationMemberships()->get($org_id)->getOrganization();
21-
$membership = $organization->getSiteMemberships()->get($site_id);
21+
$membership = $organization->getSiteMembership($site_id);
2222
return [$organization, $membership->getSite(), $membership->getTags(),];
2323
}
2424
}

src/Models/Organization.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Pantheon\Terminus\Collections\OrganizationUpstreams;
99
use Pantheon\Terminus\Collections\OrganizationUserMemberships;
1010
use Pantheon\Terminus\Collections\Workflows;
11+
use Pantheon\Terminus\Models\OrganizationSiteMembership;
1112
use Pantheon\Terminus\Friends\ProfileInterface;
1213
use Pantheon\Terminus\Friends\ProfileTrait;
1314
use Pantheon\Terminus\Friends\SitesInterface;
@@ -140,6 +141,39 @@ public function getSiteMemberships()
140141
return $this->site_memberships;
141142
}
142143

144+
/**
145+
* Fetch a single site membership directly by site ID or name
146+
*
147+
* @param string $site_identifier The site ID or name to fetch membership for
148+
* @return OrganizationSiteMembership
149+
* @throws \Pantheon\Terminus\Exceptions\TerminusNotFoundException
150+
*/
151+
public function getSiteMembership($site_identifier)
152+
{
153+
$site_uuid = $site_identifier;
154+
155+
// If the identifier is not a UUID, resolve the name to UUID
156+
if (!preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i', $site_identifier)) {
157+
$response = $this->request->request("site-names/{$site_identifier}");
158+
if (!isset($response['data']->id)) {
159+
throw new \Pantheon\Terminus\Exceptions\TerminusNotFoundException(
160+
"Could not find a site identified by {$site_identifier}."
161+
);
162+
}
163+
$site_uuid = $response['data']->id;
164+
}
165+
166+
$response = $this->request->request(
167+
"organizations/{$this->id}/memberships/sites/{$site_uuid}"
168+
);
169+
170+
$nickname = \uniqid(__FUNCTION__ . '-');
171+
$this->getContainer()->add($nickname, OrganizationSiteMembership::class)
172+
->addArgument($response['data'])
173+
->addArgument(['organization' => $this]);
174+
return $this->getContainer()->get($nickname);
175+
}
176+
143177
/**
144178
* @return OrganizationUpstreams
145179
*/

0 commit comments

Comments
 (0)