Source of file Entity.php
Size: 3,948 Bytes - Last Modified: 2021-12-24T05:18:55+00:00
/var/www/docs.ssmods.com/process/src/src/Entities/Entity.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | <?php namespace IQnection\BigCommerceApp\Entities; use SilverStripe\View\ArrayData; use SilverStripe\Core\Injector\Injector; use SilverStripe\ORM\ArrayList; use IQnection\BigCommerceApp\Client; class Entity extends ArrayData implements \JsonSerializable { use \IQnection\BigCommerceApp\Traits\Cacheable; private static $client_class; private static $api_class = \IQnection\BigCommerceApp\ClientV3::class; private static $_childEntitiesMap = []; protected $loadedData; public function ApiData() { $data = $this->toMap(); foreach($data as $key => &$value) { $value = $this->extractApiData($value); } unset($data['api_data']); if ( (!$data['id']) && ($data['BigID']) ) { $data['id'] = $data['BigID']; } $this->invokeWithExtensions('updateApiData', $data); return $data; } public function extractApiData($value) { $returnValue = $value; if (is_array($value)) { $returnValue = []; if (count($value)) { foreach($value as $key => $subValue) { $returnValue[$key] = $this->extractApiData($subValue); } } } elseif (is_object($value)) { if (method_exists($value, 'ApiData')) { $returnValue = $value->ApiData(); } elseif ($value instanceof ArrayList) { $returnValue = []; foreach($value as $subValue) { $returnValue[] = $this->extractApiData($subValue); } } } return $returnValue; } public function jsonSerialize() { return $this->ApiData(); } public function loadApiData($data) { $this->array = []; $this->loadedData = $data; if (is_object($data)) { if (method_exists($data, 'get')) { $data = $data->get(); } else { $data = (array) $data; } } $childEntitiesMap = $this->owner->Config()->get('_childEntitiesMap'); if (!is_array($data)) { return; } foreach($data as $key => $value) { if (is_object($value)) { if (method_exists($value, 'get')) { $value = $this->buildArrayData($value, $key); } elseif ($value instanceof \DateTime) { $value = $value->format('Y-m-d H:i:s'); } } elseif (is_array($value)) { // if is associative if ( (!array_key_exists(0, $value)) || (array_key_last($value) != (count($value) - 1)) ) { $childClass = Entity::class; if (array_key_exists($key, $childEntitiesMap)) { $childClass = $childEntitiesMap[$key]; } $newValue = Entity::create(); foreach($value as $subkey => $subValue) { $newSubValue = $subValue; if ( (is_array($subValue)) || (is_object($subValue)) ) { $newSubValue = Injector::inst()->create($childClass, []); $newSubValue->loadApiData($subValue); } $newValue->setField($subkey,$newSubValue); } $value = $newValue; } else { foreach($value as &$subValue) { if (is_object($subValue)) { $subValue = $this->buildArrayData($subValue, $key); } } } } if (is_string($value)) { $value = trim($value); } $this->setField($key, $value); } return $this; } protected function buildArrayData($data, $key = null) { $childEntitiesMap = $this->owner->Config()->get('_childEntitiesMap'); $childClass = Entity::class; if ( ($key) && (array_key_exists($key, $childEntitiesMap)) ) { $childClass = $childEntitiesMap[$key]; } $arrayData = Injector::inst()->create($childClass, []); $arrayData->loadApiData($data); return $arrayData; } public function dropdownTitle() { return $this->name; } public static function forDropdown() { return []; } public function delete() { user_error('delete called in '.get_class($this).', but not implemented'); } public function ApiClient() { if ( ($clientClass = $this->Config()->get('client_class')) && ($apiClass = $this->Config()->get('api_class')) ) { return $apiClass::inst()->Api(md5($clientClass), $clientClass); } } } |