9namespace TANIOS\Airtable;
12class 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 );
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list