@@ -1,246 +0,0 @@
3− * Created by PhpStorm.
9−namespace TANIOS\Airtable;
12−class Response implements \ArrayAccess
16− * @var Airtable Instance of Airtable
21− * @var Request Instance or Request
26− * @var string Response content
28− private $content = "";
31− * @var bool|\stdClass Response
33− private $parsedContent = false;
36− * Response constructor.
37− * @param Airtable $airtable Instance of Airtable
38− * @param Request $request Instance of Request
39− * @param string $content Content string
41− public function __construct( $airtable, $request, $content, $relations = false )
44− $this->airtable = $airtable;
46− $this->request = $request;
48− $this->content = $content;
52− $this->parsedContent = json_decode( $content );
54− catch ( \Exception $e )
56− $this->parsedContent = false;
59− if( is_array( $relations ) && count( $relations ) > 0 )
62− if( array_keys( $relations ) !== range( 0, count( $relations ) - 1 ) )
64− foreach ( $relations as $related_field => $related_table )
66− $this->processRelatedField( $related_field, $related_table );
71− foreach ( $relations as $related_field )
73− $this->processRelatedField( $related_field );
81− private function processRelatedField( $related_field, $related_table = false )
84− if( isset( $this->parsedContent->records ) && is_array( $this->parsedContent->records ) && count( $this->parsedContent->records ) > 0 )
86− foreach ( $this->parsedContent->records as $record_key => $record )
88− $this->parsedContent->records[ $record_key ] = $this->loadRelatedField( $related_field, $related_table, $record );
93− $this->parsedContent = $this->loadRelatedField( $related_field, $related_table, $this->parsedContent );
98− private function loadRelatedField( $related_field, $related_table, $record )
102− if( ! isset( $record->fields ) || ! isset( $record->fields->$related_field ) )
107− if( empty( $related_table ) )
109− $related_table = $related_field;
112− $relation_ids = $record->fields->$related_field;
114− if( ! is_array( $relation_ids ) )
116− $relation_ids = [ $relation_ids ];
119− $relation_formula = "OR(";
120− $relation_formula .= implode( ', ', array_map( function( $id ) { return "RECORD_ID() = '$id'"; }, $relation_ids ) );
121− $relation_formula .= ")";
123− if( ! is_array( $related_table ) )
125− $relation_request = $this->airtable->getContent( "$related_table", [
126− 'filterByFormula' => $relation_formula
131− $related_table_relations = isset( $related_table[ 'relations' ] ) && is_array( $related_table[ 'relations' ] )
132− ? $related_table[ 'relations' ]
135− $related_table_name = ! empty( $related_table[ 'table' ] ) ? $related_table[ 'table' ] : $related_field;
137− $relation_request = $this->airtable->getContent( "$related_table_name", [
138− 'filterByFormula' => $relation_formula
139− ], $related_table_relations );
143− $related_records = [];
147− $relation_response = $relation_request->getResponse();
149− if( ! is_array( $relation_response->records ) || count( $relation_response->records ) < 0 )
154− foreach ( $relation_response->records as $related_record )
156− $formatted_record = $related_record->fields;
157− $formatted_record->id = $related_record->id;
159− $related_records[] = $formatted_record;
162− while( $relation_request = $relation_response->next() );
164− if( is_array( $record->fields->$related_field ) )
166− $record->fields->$related_field = $related_records;
170− $record->fields->$related_field = count( $related_records ) > 0
171− ? $related_records[ 0 ]
179− public function next()
182− if( ! $this->parsedContent )
188− if( ! isset( $this[ 'offset' ] ) )
193− $this->request->offset = $this[ 'offset' ];
195− return $this->request;
199− public function __get( $key )
201− if( ! $this->parsedContent || ! isset( $this->parsedContent->$key ) )
206− return $this->parsedContent->$key;
209− public function __toString()
211− return $this->content;
214− public function __isset( $key )
216− return $this->parsedContent && isset( $this->parsedContent->$key );
219− public function offsetExists($offset)
221− return $this->parsedContent && isset( $this->parsedContent->$offset );
224− public function offsetGet($offset)
226− return $this->parsedContent && isset( $this->parsedContent->$offset )
227− ? $this->parsedContent->$offset
231− public function offsetSet($offset, $value)
233− if( $this->parsedContent )
235− $this->parsedContent->$offset = $value;
239− public function offsetUnset($offset)
241− if( $this->parsedContent && isset( $this->parsedContent->$offset ) )
243− unset( $this->parsedContent->$offset );