Source of file ShopifyFetchExtension.php
Size: 5,306 Bytes - Last Modified: 2021-12-24T06:46:30+00:00
/var/www/docs.ssmods.com/process/src/src/Extension/ShopifyFetchExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | <?php namespace Dynamic\Shopify\Extension; use Dynamic\Shopify\Client\ShopifyClient; use Dynamic\Shopify\Page\ShopifyCollection; use Dynamic\Shopify\Page\ShopifyProduct; use Dynamic\Shopify\Task\ShopifyImportTask; use SilverStripe\Admin\LeftAndMainExtension; use SilverStripe\ORM\DataObject; use SilverStripe\Security\Security; /** * Class ShopifyFetchExtension * @package Dynamic\Shopify\Extension */ class ShopifyFetchExtension extends LeftAndMainExtension { /** * @config * @var array */ private static $allowed_actions = [ 'shopifyCollectionFetch', 'shopifyProductFetch', ]; /** * @var ShopifyClient */ private $client; /** * */ protected function setClient() { try { $client = new ShopifyClient(); } catch (\GuzzleHttp\Exception\GuzzleException $e) { exit($e->getMessage()); } catch (\Exception $e) { exit($e->getMessage()); } $this->client = $client; } /** * @return ShopifyClient */ public function getClient() { if (!$this->client) { $this->setClient(); } return $this->client; } /** * @param array $data * @param Form $form * @return \SilverStripe\Control\HTTPResponse * @throws \Exception */ public function shopifyCollectionFetch($data, $form) { $id = $data['ID']; $record = $this->getShopifyObject($id); if ($record && !$record->canEdit()) { return Security::permissionFailure(); } if (!$record || !$record->ShopifyID) { $this->owner->httpError(404, "Bad shopify ID: $record->ShopifyID"); } $importTask = ShopifyImportTask::create(); $previousSilent = $importTask->config()->get('silent'); $importTask->config()->set('silent', true); $shopifyCollection = $this->getClient()->collection($record->ShopifyID)['body']->data->collection; if ($collection = $importTask->importObject(ShopifyCollection::class, $shopifyCollection)) { // Create the image $importTask->importCollectionFiles($this->getClient(), $collection); if ($collection->isChanged()) { $collection->write(); } // Set current publish status for collection if ($collection->CollectionActive && !$collection->isLiveVersion()) { $collection->publishRecursive(); } elseif (!$collection->CollectionActive && $collection->IsPublished()) { $collection->doUnpublish(); } $importTask->config()->set('silent', $previousSilent); return $this->returnSuccess(); } $this->owner->httpError(500, "Could not create collection: $record->ShopifyID"); } /** * @param array $data * @param Form $form * @return \SilverStripe\Control\HTTPResponse * @throws \Exception */ public function shopifyProductFetch($data, $form) { $id = $data['ID']; $record = $this->getShopifyObject($id); if ($record && !$record->canEdit()) { return Security::permissionFailure(); } if (!$record || !$record->ShopifyID) { $this->owner->httpError(404, "Bad shopify ID: $record->ShopifyID"); } /** @var ShopifyImportTask $importTask */ $importTask = ShopifyImportTask::create(); $previousSilent = $importTask->config()->get('silent'); $importTask->config()->set('silent', true); $shopifyProduct = $this->getClient()->product($record->ShopifyID)['body']->data->product; if ($product = $importTask->importObject(ShopifyProduct::class, $shopifyProduct)) { $importTask->importProductFiles($this->getClient(), $product); $importTask->importVariants($this->getClient(), $product, $shopifyProduct); // Write the product record if changed if ($product->isChanged()) { $product->write(); } // Set current publish status for product if ($product->ProductActive) { $product->publishRecursive(); } elseif (!$product->ProductActive && $product->IsPublished()) { $product->doUnpublish(); } $importTask->config()->set('silent', $previousSilent); return $this->returnSuccess(); } else { $importTask->config()->set('silent', $previousSilent); $this->owner->httpError(500, "Could not create product: $record->ShopifyID"); } } /** * @param int $id * @return DataObject|ShopifyCollection|ShopifyProduct */ protected function getShopifyObject($id) { $className = $this->owner->currentPage()->getClassName(); return DataObject::get_by_id($className, $id); } /** * @return mixed */ protected function returnSuccess() { $this->owner->getResponse()->addHeader( 'X-Status', rawurlencode(_t(__CLASS__ . '.UPDATED', 'Updated.')) ); return $this->owner->getResponseNegotiator()->respond($this->owner->getRequest()); } } |