diff --git a/src/Collections/Tags.php b/src/Collections/Tags.php index 068cb76a4..6740650c6 100644 --- a/src/Collections/Tags.php +++ b/src/Collections/Tags.php @@ -43,7 +43,7 @@ public function create($tag) { $params = [$tag => ['sites' => [$this->org_site_membership->getSite()->id,],],]; $this->request->request( - "organizations/{$this->org_site_membership->getOrganization()->id}/tags", + "organizations/{$this->org_site_membership->id}/tags", ['method' => 'put', 'form_params' => $params,] ); $this->getContainer()->add($this->collected_class) diff --git a/src/Commands/Tag/TagCommand.php b/src/Commands/Tag/TagCommand.php index f937d7826..c7dd374e9 100644 --- a/src/Commands/Tag/TagCommand.php +++ b/src/Commands/Tag/TagCommand.php @@ -3,22 +3,29 @@ namespace Pantheon\Terminus\Commands\Tag; use Pantheon\Terminus\Commands\TerminusCommand; +use Pantheon\Terminus\Site\SiteAwareInterface; +use Pantheon\Terminus\Site\SiteAwareTrait; /** * Class TagCommand * @package Pantheon\Terminus\Commands\Tag */ -abstract class TagCommand extends TerminusCommand +abstract class TagCommand extends TerminusCommand implements SiteAwareInterface { + use SiteAwareTrait; + /** - * @param $site_id + * @param $site_identifier * @param $org_id * @return array */ - protected function getModels($site_id, $org_id) + protected function getModels($site_identifier, $org_id) { + $site = $this->sites->get($site_identifier); + $site_id = $site->id; + $organization = $this->session()->getUser()->getOrganizationMemberships()->get($org_id)->getOrganization(); - $membership = $organization->getSiteMemberships()->get($site_id); - return [$organization, $membership->getSite(), $membership->getTags(),]; + $membership = $organization->getSiteMembership($site_id); + return [$organization, $site, $membership->getTags(),]; } } diff --git a/src/Models/Organization.php b/src/Models/Organization.php index 4d80cb633..0d758c152 100644 --- a/src/Models/Organization.php +++ b/src/Models/Organization.php @@ -8,6 +8,7 @@ use Pantheon\Terminus\Collections\OrganizationUpstreams; use Pantheon\Terminus\Collections\OrganizationUserMemberships; use Pantheon\Terminus\Collections\Workflows; +use Pantheon\Terminus\Models\OrganizationSiteMembership; use Pantheon\Terminus\Friends\ProfileInterface; use Pantheon\Terminus\Friends\ProfileTrait; use Pantheon\Terminus\Friends\SitesInterface; @@ -140,6 +141,26 @@ public function getSiteMemberships() return $this->site_memberships; } + /** + * Fetch a single site membership directly by site ID or name + * + * @param string $site_uuid The site ID fetch membership for + * @return OrganizationSiteMembership + * @throws \Pantheon\Terminus\Exceptions\TerminusNotFoundException + */ + public function getSiteMembership($site_uuid) + { + $response = $this->request->request( + "organizations/{$this->id}/memberships/sites/{$site_uuid}" + ); + + $nickname = \uniqid(__FUNCTION__ . '-'); + $this->getContainer()->add($nickname, OrganizationSiteMembership::class) + ->addArgument($response['data']) + ->addArgument(['organization' => $this]); + return $this->getContainer()->get($nickname); + } + /** * @return OrganizationUpstreams */ diff --git a/src/Models/Tag.php b/src/Models/Tag.php index 2422245cd..03186429f 100644 --- a/src/Models/Tag.php +++ b/src/Models/Tag.php @@ -20,9 +20,9 @@ public function delete() $this->request->request( sprintf( 'organizations/%s/tags/%s/sites?entity=%s', - $membership->getOrganization()->id, + $membership->attributes->organization_id, $this->id, - $membership->getSite()->id + $membership->attributes->site_id ), ['method' => 'delete',] );