1
1
<?php namespace RestExtension ;
2
+
2
3
use CodeIgniter \HTTP \IncomingRequest ;
3
4
use CodeIgniter \HTTP \Request ;
5
+ use RestExtension \Fields \QueryField ;
4
6
use RestExtension \Filter \Operators ;
5
7
use RestExtension \Filter \QueryFilter ;
6
8
use RestExtension \Includes \QueryInclude ;
17
19
* @property QueryFilter[][] $searchFilters
18
20
* @property QueryInclude[] $includes
19
21
* @property QueryOrder[] $ordering
22
+ * @property QueryField[] $fields
20
23
* @property int $limit
21
24
* @property int $offset
22
25
* @property int $count
@@ -116,11 +119,21 @@ public function parseRequest(Request $request) {
116
119
117
120
if ($ request instanceof IncomingRequest) {
118
121
$ includes = $ request ->getGet ('include ' );
119
- if ($ includes ) $ this ->parseInclude ($ request ->getGet ('include ' ));
122
+ if ($ includes ) {
123
+ $ this ->parseInclude ($ request ->getGet ('include ' ));
124
+ }
120
125
$ filter = $ request ->getGet ('filter ' );
121
- if ($ filter ) $ this ->parseFilter ($ request ->getGet ('filter ' ));
126
+ if ($ filter ) {
127
+ $ this ->parseFilter ($ request ->getGet ('filter ' ));
128
+ }
122
129
$ ordering = $ request ->getGet ('ordering ' );
123
- if ($ ordering ) $ this ->parseOrdering ($ request ->getGet ('ordering ' ));
130
+ if ($ ordering ) {
131
+ $ this ->parseOrdering ($ request ->getGet ('ordering ' ));
132
+ }
133
+ $ fields = $ request ->getGet ('fields ' );
134
+ if ($ fields ) {
135
+ $ this ->parseFields ($ request ->getGet ('fields ' ));
136
+ }
124
137
125
138
$ this ->limit = $ request ->getGet ('limit ' );
126
139
$ this ->offset = $ request ->getGet ('offset ' );
@@ -132,52 +145,72 @@ public static function parse($line) {
132
145
$ item = new QueryParser ();
133
146
parse_str ($ line , $ params );
134
147
135
- if (isset ($ params ['include ' ])) $ item ->parseInclude ($ params ['include ' ]);
136
- if (isset ($ params ['filter ' ])) $ item ->parseFilter ($ params ['filter ' ]);
137
- if (isset ($ params ['ordering ' ])) $ item ->parseOrdering ($ params ['ordering ' ]);
148
+ if (isset ($ params ['include ' ])) {
149
+ $ item ->parseInclude ($ params ['include ' ]);
150
+ }
151
+ if (isset ($ params ['filter ' ])) {
152
+ $ item ->parseFilter ($ params ['filter ' ]);
153
+ }
154
+ if (isset ($ params ['ordering ' ])) {
155
+ $ item ->parseOrdering ($ params ['ordering ' ]);
156
+ }
157
+ if (isset ($ params ['fields ' ])) {
158
+ $ item ->parseFields ($ params ['fields ' ]);
159
+ }
138
160
139
- if (isset ($ params ['limit ' ])) $ item ->limit = $ params ['limit ' ];
140
- if (isset ($ params ['offset ' ])) $ item ->offset = $ params ['offset ' ];
141
- if (isset ($ params ['count ' ])) $ item ->count = $ params ['count ' ];
161
+ if (isset ($ params ['limit ' ])) {
162
+ $ item ->limit = $ params ['limit ' ];
163
+ }
164
+ if (isset ($ params ['offset ' ])) {
165
+ $ item ->offset = $ params ['offset ' ];
166
+ }
167
+ if (isset ($ params ['count ' ])) {
168
+ $ item ->count = $ params ['count ' ];
169
+ }
142
170
143
171
return $ item ;
144
172
}
145
173
146
174
147
175
public function parseInclude (string $ value ) {
148
- foreach (explode (', ' , $ value ) as $ line ) {
176
+ foreach (explode (', ' , $ value ) as $ line ) {
149
177
$ this ->includes [] = QueryInclude::parse ($ line );
150
178
}
151
179
}
152
180
153
181
public function parseOrdering (string $ value ) {
154
- foreach (explode (', ' , $ value ) as $ line ) {
182
+ foreach (explode (', ' , $ value ) as $ line ) {
155
183
$ this ->ordering [] = QueryOrder::parse ($ line );
156
184
}
157
185
}
158
186
187
+ public function parseFields (string $ value ) {
188
+ foreach (explode (', ' , $ value ) as $ line ) {
189
+ $ this ->fields [] = QueryField::parse ($ line );
190
+ }
191
+ }
159
192
160
193
public function parseFilter (string $ line ) {
161
194
$ filters = [];
162
195
$ buffer = '' ;
163
196
$ inSquareBracket = false ;
164
197
$ inString = false ;
165
- for ($ i = 0 ; $ i < strlen ($ line ) ; $ i ++) {
198
+ for ($ i = 0 ; $ i < strlen ($ line ); $ i ++) {
166
199
$ char = substr ($ line , $ i , 1 );
167
200
168
- if (in_array ($ char , ['[ ' , '] ' ])) $ inSquareBracket = !$ inSquareBracket ;
169
- if (in_array ($ char , ['" ' , "' " ])) $ inString = !$ inString ;
201
+ if (in_array ($ char , ['[ ' , '] ' ])) $ inSquareBracket = !$ inSquareBracket ;
202
+ if (in_array ($ char , ['" ' , "' " ])) $ inString = !$ inString ;
170
203
171
- if ($ char == ', ' &! $ inSquareBracket &! $ inString ) {
204
+ if ($ char == ', ' & ! $ inSquareBracket & ! $ inString ) {
172
205
$ filters [] = $ buffer ;
173
206
$ buffer = '' ;
174
207
} else
175
208
$ buffer .= $ char ;
176
209
}
177
- if (strlen ($ buffer ))
210
+ if (strlen ($ buffer ))
178
211
$ filters [] = $ buffer ;
179
212
180
- foreach ($ filters as $ filter ) {
213
+ foreach ($ filters as $ filter ) {
181
214
$ item = QueryFilter::parse ($ filter );
182
215
$ this ->pushFilter ($ item ->property , $ item );
183
216
}
@@ -188,13 +221,13 @@ public function parseFilter(string $line) {
188
221
* @param Filter\QueryFilter $filter
189
222
*/
190
223
private function pushFilter ($ name , $ filter ) {
191
- switch ($ filter ->operator ) {
224
+ switch ($ filter ->operator ) {
192
225
case Operators::Search:
193
- if (!isset ($ this ->searchFilters [$ name ])) $ this ->searchFilters [$ name ] = [];
226
+ if (!isset ($ this ->searchFilters [$ name ])) $ this ->searchFilters [$ name ] = [];
194
227
$ this ->searchFilters [$ name ][] = $ filter ;
195
228
break ;
196
229
default :
197
- if (!isset ($ this ->filters [$ name ])) $ this ->filters [$ name ] = [];
230
+ if (!isset ($ this ->filters [$ name ])) $ this ->filters [$ name ] = [];
198
231
$ this ->filters [$ name ][] = $ filter ;
199
232
}
200
233
}
@@ -220,8 +253,8 @@ public function getFilter($name) {
220
253
*/
221
254
public function getFilters () {
222
255
$ all = [];
223
- foreach ($ this ->filters as $ name => $ filters )
224
- foreach ($ filters as $ filter )
256
+ foreach ($ this ->filters as $ name => $ filters )
257
+ foreach ($ filters as $ filter )
225
258
$ all [] = $ filter ;
226
259
return $ all ;
227
260
}
@@ -231,8 +264,8 @@ public function getFilters() {
231
264
*/
232
265
public function getSearchFilters () {
233
266
$ all = [];
234
- foreach ($ this ->searchFilters as $ name => $ filters )
235
- foreach ($ filters as $ filter )
267
+ foreach ($ this ->searchFilters as $ name => $ filters )
268
+ foreach ($ filters as $ filter )
236
269
$ all [] = $ filter ;
237
270
return $ all ;
238
271
}
@@ -286,25 +319,45 @@ public function getOrdering() {
286
319
return $ this ->ordering ;
287
320
}
288
321
322
+ public function getFields () {
323
+ return $ this ->fields ;
324
+ }
325
+
326
+ public function getFieldsArray () {
327
+ $ fields_arr = [];
328
+ foreach ($ this ->getFields () as $ field ) {
329
+ $ fields_arr [] = $ field ->fieldName ;
330
+ }
331
+ return $ fields_arr ;
332
+ }
333
+
334
+ public function getFieldsImplode () {
335
+ $ fields_arr = array ();
336
+ foreach ($ this ->getFields () as $ field ) {
337
+ $ fields_arr [] = $ field ->fieldName ;
338
+ }
339
+ return implode (', ' , $ fields_arr );
340
+ }
341
+
289
342
public function hasInclude (string $ name ): bool {
290
- foreach ($ this ->includes as $ include ) {
291
- if ($ include ->property == $ name )
343
+ foreach ($ this ->includes as $ include ) {
344
+ if ($ include ->property == $ name )
292
345
return true ;
293
346
}
294
347
return false ;
295
348
}
296
349
297
350
public function getInclude (string $ name ): ?QueryInclude {
298
- foreach ($ this ->includes as $ include ) {
299
- if ($ include ->property == $ name )
351
+ foreach ($ this ->includes as $ include ) {
352
+ if ($ include ->property == $ name )
300
353
return $ include ;
301
354
}
302
355
return null ;
303
356
}
304
357
305
358
public function delInclude (string $ name ) {
306
- for ($ i = 0 ; $ i < count ($ this ->includes ) ; $ i ++) {
307
- if ($ this ->includes [$ i ]->property == $ name ) {
359
+ for ($ i = 0 ; $ i < count ($ this ->includes ); $ i ++) {
360
+ if ($ this ->includes [$ i ]->property == $ name ) {
308
361
array_splice ($ this ->includes , $ i , 1 );
309
362
return ;
310
363
}
0 commit comments