Source of file WidgetEntity.php
Size: 3,451 Bytes - Last Modified: 2021-12-24T05:18:55+00:00
/var/www/docs.ssmods.com/process/src/src/Entities/WidgetEntity.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | <?php namespace IQnection\BigCommerceApp\Entities; use SilverStripe\ORM\ArrayList; use SilverStripe\View\ArrayData; use SilverStripe\ORM\Hierarchy\Hierarchy; use SilverStripe\ORM\DataObject; use IQnection\BigCommerceApp\Client; use BigCommerce\Api\v3\Model\WidgetRequest; use SilverStripe\Core\Injector\Injector; use IQnection\BigCommerceApp\Model\BigCommerceLog as BcLog; class WidgetEntity extends Entity { use \IQnection\BigCommerceApp\Traits\Entity, \IQnection\BigCommerceApp\Traits\Cacheable; private static $client_class = \BigCommerce\Api\v3\Api\WidgetApi::class; private static $cache_name = 'bigcommerce-widgets'; public function ApiData() { $data = parent::ApiData(); // $data['widget_configuration'] = $this->widget_configuration; return $data; } public function loadApiData($data) { parent::loadApiData($data); if (isset($data['widget_configuration'])) { $this->widget_configuration = $data['widget_configuration']; } return $this; } public function Sync() { $Client = $this->ApiClient(); $data = $this->ApiData(); try { $request = new WidgetRequest( $data ); BcLog::info('Widget Data for: '.$data['id'], $data); $id = ($data['uuid']) ? $data['uuid'] : ($data['id'] ? $data['id'] : ($data['BigID'] ? $data['BigID'] : null)); if ($id) { $response = $Client->updateWidget($id, $request ); BcLog::info('Updated Widget', $id); } else { $response = $Client->createWidget( $request ); BcLog::info('Created Widget ',$widget); } } catch (\Exception $e) { BcLog::error('Exception syncing widget', [$e->__toString(),$e->getResponseBody(),$data, $this]); throw $e; } $this->loadApiData($response->getData()); return $this; } public static function getById($id, $refresh = false) { if ($id) { $cacheName = self::generateCacheKey(self::Config()->get('cache_name'),__FUNCTION__,$id); $cachedData = self::fromCache($cacheName); if ( (!self::isCached($cacheName)) || (!$cachedData) || ($refresh) ) { $inst = Injector::inst()->create(static::class, []); $apiClient = $inst->ApiClient(); $apiResponse = $apiClient->getWidget($id); $inst->loadApiData($apiResponse->getData()); $cachedData = $inst; self::toCache($cacheName, $inst); } return $cachedData; } } public static function getAll($refresh = false) { $cacheName = self::generateCacheKey(self::Config()->get('cache_name'),__FUNCTION__); $cachedData = self::fromCache($cacheName); if ( (!self::isCached($cacheName)) || (!$cachedData) || ($refresh) ) { $cachedData = ArrayList::create(); $inst = self::singleton(); $apiClient = $inst->ApiClient(); $page = 1; $apiResponse = $apiClient->getWidgets(['page' => $page, 'limit' => 100]); $responseMeta = $apiResponse->getMeta(); while(($apiRecords = $apiResponse->getData()) && (count($apiRecords))) { foreach($apiRecords as $apiRecord) { $newInst = Injector::inst()->create(static::class, []); $newInst->loadApiData($apiRecord); $cachedData->push($newInst); } $page++; $apiResponse = $apiClient->getWidgets(['page' => $page, 'limit' => 100]); } self::toCache($cacheName, $cachedData); } return $cachedData; } public function delete() { if ( ($id = $this->BigID) || ($id = $this->uuid) || ($id = $this->id) ) { $apiClient = $this->ApiClient(); return $apiClient->deleteWidget($id); } } } |