Source of file ApiObject.php
Size: 5,439 Bytes - Last Modified: 2021-12-24T05:18:55+00:00
/var/www/docs.ssmods.com/process/src/src/Model/ApiObject.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 | <?php namespace IQnection\BigCommerceApp\Model; use SilverStripe\ORM\DataExtension; use SilverStripe\Forms; use SilverStripe\Control\Director; use SilverStripe\View\ArrayData; use SilverStripe\Core\Injector\Injector; use IQnection\BigCommerceApp\Entities\Entity; use IQnection\BigCommerceApp\Cron\BackgroundJob; use SilverStripe\ORM\ArrayList; class ApiObject extends DataExtension { private static $db = [ 'BigID' => 'Varchar(255)', 'Title' => 'Varchar(255)', 'RawData' => 'Text', 'NeedsSync' => 'Boolean', 'LastSynced' => 'Datetime' ]; private static $defaults = [ 'Active' => true ]; private static $indexes = [ 'BigID' => true, 'Title' => true ]; private static $readonly_fields = [ 'BigID', // 'Title' ]; private static $remove_fields = [ 'RawData', 'NeedsSync', 'LastSynced' ]; private static $entity_class; private static $frontend_required_fields = []; public function updateCMSFields($fields) { if ($removeFields = $this->owner->Config()->get('remove_fields')) { $fields->removeByName($removeFields); } foreach($this->owner->Config()->get('readonly_fields') as $fieldName) { if ($field = $fields->dataFieldByName($fieldName)) { $fields->replaceField($fieldName, $field->performReadonlyTransformation()); } } if ($this->owner->Exists()) { $fields->addFieldToTab('Root.RawData', \IQnection\Forms\RawDataField::create('RawData',$this->owner->RawData)); } } public function updateFrontEndFields($fields) { if ($removeFields = $this->owner->Config()->get('remove_fields')) { $fields->removeByName($removeFields); } foreach($this->owner->Config()->get('readonly_fields') as $fieldName) { if ($field = $fields->dataFieldByName($fieldName)) { $field->setAttribute('disabled','disabled'); //$fields->replaceField($fieldName, $field->performReadonlyTransformation()); } } $fields->removeByName(['RawData','BigID','Active','ID']); if (Director::isDev()) { if ($this->owner->BigID) { $fields->unshift( Forms\TextField::create('_BigID','id',$this->owner->BigID)->setAttribute('disabled','disabled') ); } if ($this->owner->Exists()) { $fields->push( Forms\HiddenField::Create('_ID','') ->setValue($this->owner->ID) ); } } if ($this->owner->Exists()) { $fields->unshift( Forms\LabelField::create('_LastSynced','Last Synced: '.$this->owner->dbObject('LastSynced')->Ago()) ->addExtraClass('border-0') ); } } public function getFrontEndRequiredFields(Forms\FieldList $fields) { $requiredFields = []; foreach($this->owner->Config()->get('frontend_required_fields') as $requiredField) { if ($field = $fields->dataFieldByName($requiredField)) { $requiredFields[] = $requiredField; $fields->dataFieldByName($requiredField)->addExtraClass('required'); } } $requiredFields = Forms\RequiredFields::create($requiredFields); $this->owner->extend('updateFrontEndRequiredFields', $requiredFields); return $requiredFields; } public function RawApiData() { if ($data = json_decode($this->owner->RawData)) { return ArrayData::create($data); } } public function debugRawData() { return print_r(json_decode($this->owner->RawData),1); } /** * BigCommerce Model method to remove the object from BigCommerce, but not from our local database */ public function Unlink() { if ($entity = $this->Entity()) { $entity->delete(); } } public function ApiClient() { if ($inst = $this->owner->Entity()) { return $inst->ApiClient(); } } public function loadApiData($data) { $this->owner->invokeWithExtensions('updateLoadApiData',$data); return $this->owner; } public function updateLoadApiData($data) { if ( (is_object($data)) && (method_exists($data,'toMap')) ) { $data = $data->toMap(); } $this->owner->RawData = json_encode($data); $this->owner->LastSynced = date('Y-m-d H:i:s'); $this->owner->NeedsSync = false; } public function Sync() { $Entity = $this->owner->Entity(); $this->owner->invokeWithExtensions('onBeforeSync', $Entity); $Entity->Sync(); $this->owner->invokeWithExtensions('onAfterSync', $Entity); $this->owner->loadApiData($Entity); $this->owner->LastSynced = date('Y-m-d H:i:s'); $this->owner->NeedsSync = false; $this->owner->write(); return $Entity; } public function QueueSync() { BackgroundJob::CreateJob($this->owner->getClassName(), 'Sync', ['ID' => $this->owner->ID], 'QueuedSync [BigID:'.$this->owner->BigID.'|ID:'.$this->owner->ID.']'); return $this; } public function Pull() { user_error('The method Pull is not implemented on '.static::class); } public function NewEntity() { if ($class = $this->owner->Config()->get('entity_class')) { return Injector::inst()->create($class, []); } } public function Entity() { if ($class = $this->owner->Config()->get('entity_class')) { if (is_null($this->owner->_entity)) { $this->owner->_entity = $this->owner->NewEntity(); $this->owner->_entity->loadApiData($this->owner->ApiData()); } } return $this->owner->_entity; } public function RelatedObjects() { $relations = ArrayList::create(); $this->owner->invokeWithExtensions('updateRelatedObjects', $relations); return $relations; } public function StripImageVersions($html) { return preg_replace('/(img[^>]+src=[\'\"][^\'\"\?]+)\?.*?([\'\"])/','$1$2',$html); } } |