From a69d9121db54aab79d4c572a7605afafa041885d Mon Sep 17 00:00:00 2001 From: Jarrod Swift Date: Thu, 1 Jul 2021 09:42:34 +0930 Subject: [PATCH 1/4] Add a builder to make creating the RedirectTo object a bit nicer --- .../ResourceModels/Redirect/RedirectTo.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php b/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php index 62901728..82640ac0 100644 --- a/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php +++ b/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php @@ -15,5 +15,15 @@ class RedirectTo extends ResourceModel public string $type; public ?int $entity_id; - public string $url; + public ?string $url; + + public static function Build(string $type, ?int $entityId = null, ?string $url = null): RedirectTo + { + $redirectTo = new self(); + $redirectTo->type = $type; + $redirectTo->entity_id = $entityId; + $redirectTo->url = $url; + + return $redirectTo; + } } From 8db41726970ab9ba3ba85fcc5b8b62cc0a8014bd Mon Sep 17 00:00:00 2001 From: Jarrod Swift Date: Thu, 1 Jul 2021 09:42:56 +0930 Subject: [PATCH 2/4] Add convenience methods for creating redirects to products and categories --- .../ResourceModels/Redirect/Redirect.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/BigCommerce/ResourceModels/Redirect/Redirect.php b/src/BigCommerce/ResourceModels/Redirect/Redirect.php index 32859432..c95f5eef 100644 --- a/src/BigCommerce/ResourceModels/Redirect/Redirect.php +++ b/src/BigCommerce/ResourceModels/Redirect/Redirect.php @@ -5,6 +5,25 @@ use BigCommerce\ApiV3\ResourceModels\ResourceModel; use stdClass; +/** + * Redirect Resource + * + * Represents the request object for redirect objects. + * + * Contains a convenience method for simply redirecting to a product or category + * + * ```php + * $api = new BigCommerce\ApiV3\Client($_ENV['hash'], $_ENV['CLIENT_ID'], $_ENV['ACCESS_TOKEN']); + * + * $productRedirect = new Redirect(); + * $productRedirect->site_id = 1000; + * $productRedirect->from_path = '/cool-product.html'; + * $productRedirect->toProduct(123); + * + * $api->redirects()->upsert([$productRedirect]); + * ``` + * + */ class Redirect extends ResourceModel { public string $from_path; @@ -20,4 +39,14 @@ public function __construct(?stdClass $optionObject = null) parent::__construct($optionObject); } + + public function toProduct(int $productId): void + { + $this->to = RedirectTo::Build(RedirectTo::TYPE__PRODUCT, $productId); + } + + public function toCategory(int $categoryId): void + { + $this->to = RedirectTo::Build(RedirectTo::TYPE__CATEGORY, $categoryId); + } } From 8743aa80a4a3056a76761fafd26a463d45554cc3 Mon Sep 17 00:00:00 2001 From: Jarrod Swift Date: Thu, 1 Jul 2021 09:44:43 +0930 Subject: [PATCH 3/4] Update redirects test to include new helper methods --- tests/BigCommerce/Api/Redirects/RedirectsApiTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php b/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php index c646d42c..13b03a6b 100644 --- a/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php +++ b/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php @@ -14,10 +14,10 @@ public function testCanUpsertRedirects() $redirect = new Redirect(); $redirect->from_path = '/old-url'; $redirect->site_id = 0; - $redirect->to = new RedirectTo(); - $redirect->to->type = RedirectTo::TYPE__PRODUCT; - $redirect->to->entity_id = 0; - $redirect->to->url = '/new-url'; + $redirect->toProduct(1); + + $this->assertEquals(RedirectTo::TYPE__PRODUCT, $redirect->to->type); + $this->assertEquals(1, $redirect->to->entity_id); $this->getApi()->redirects()->upsert([$redirect]); $this->assertEquals('storefront/redirects', $this->getLastRequestPath()); From 8773cd7c2cacdded5cdc289b6248bed1747e9149 Mon Sep 17 00:00:00 2001 From: Jarrod Swift Date: Thu, 1 Jul 2021 09:49:19 +0930 Subject: [PATCH 4/4] Fix code style error --- src/BigCommerce/ResourceModels/Redirect/Redirect.php | 4 ++-- src/BigCommerce/ResourceModels/Redirect/RedirectTo.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/BigCommerce/ResourceModels/Redirect/Redirect.php b/src/BigCommerce/ResourceModels/Redirect/Redirect.php index c95f5eef..f9853f86 100644 --- a/src/BigCommerce/ResourceModels/Redirect/Redirect.php +++ b/src/BigCommerce/ResourceModels/Redirect/Redirect.php @@ -42,11 +42,11 @@ public function __construct(?stdClass $optionObject = null) public function toProduct(int $productId): void { - $this->to = RedirectTo::Build(RedirectTo::TYPE__PRODUCT, $productId); + $this->to = RedirectTo::buildRedirectTo(RedirectTo::TYPE__PRODUCT, $productId); } public function toCategory(int $categoryId): void { - $this->to = RedirectTo::Build(RedirectTo::TYPE__CATEGORY, $categoryId); + $this->to = RedirectTo::buildRedirectTo(RedirectTo::TYPE__CATEGORY, $categoryId); } } diff --git a/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php b/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php index 82640ac0..efa19890 100644 --- a/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php +++ b/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php @@ -17,7 +17,7 @@ class RedirectTo extends ResourceModel public ?int $entity_id; public ?string $url; - public static function Build(string $type, ?int $entityId = null, ?string $url = null): RedirectTo + public static function buildRedirectTo(string $type, ?int $entityId = null, ?string $url = null): RedirectTo { $redirectTo = new self(); $redirectTo->type = $type;