primo commit
This commit is contained in:
		
							
								
								
									
										220
									
								
								libraries/vendor/tobscure/json-api/src/Parameters.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								libraries/vendor/tobscure/json-api/src/Parameters.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,220 @@ | ||||
| <?php | ||||
|  | ||||
| /* | ||||
|  * This file is part of JSON-API. | ||||
|  * | ||||
|  * (c) Toby Zerner <toby.zerner@gmail.com> | ||||
|  * | ||||
|  * For the full copyright and license information, please view the LICENSE | ||||
|  * file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| namespace Tobscure\JsonApi; | ||||
|  | ||||
| use Tobscure\JsonApi\Exception\InvalidParameterException; | ||||
|  | ||||
| class Parameters | ||||
| { | ||||
|     /** | ||||
|      * @var array | ||||
|      */ | ||||
|     protected $input; | ||||
|  | ||||
|     /** | ||||
|      * @param array $input | ||||
|      */ | ||||
|     public function __construct(array $input) | ||||
|     { | ||||
|         $this->input = $input; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the includes. | ||||
|      * | ||||
|      * @param array $available | ||||
|      * | ||||
|      * @throws \Tobscure\JsonApi\Exception\InvalidParameterException | ||||
|      * | ||||
|      * @return array | ||||
|      */ | ||||
|     public function getInclude(array $available = []) | ||||
|     { | ||||
|         if ($include = $this->getInput('include')) { | ||||
|             $relationships = explode(',', $include); | ||||
|  | ||||
|             $invalid = array_diff($relationships, $available); | ||||
|  | ||||
|             if (count($invalid)) { | ||||
|                 throw new InvalidParameterException( | ||||
|                     'Invalid includes ['.implode(',', $invalid).']', | ||||
|                     1, | ||||
|                     null, | ||||
|                     'include' | ||||
|                 ); | ||||
|             } | ||||
|  | ||||
|             return $relationships; | ||||
|         } | ||||
|  | ||||
|         return []; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get number of offset. | ||||
|      * | ||||
|      * @param int|null $perPage | ||||
|      * | ||||
|      * @throws \Tobscure\JsonApi\Exception\InvalidParameterException | ||||
|      * | ||||
|      * @return int | ||||
|      */ | ||||
|     public function getOffset($perPage = null) | ||||
|     { | ||||
|         if ($perPage && ($offset = $this->getOffsetFromNumber($perPage))) { | ||||
|             return $offset; | ||||
|         } | ||||
|  | ||||
|         $offset = (int) $this->getPage('offset'); | ||||
|  | ||||
|         if ($offset < 0) { | ||||
|             throw new InvalidParameterException('page[offset] must be >=0', 2, null, 'page[offset]'); | ||||
|         } | ||||
|  | ||||
|         return $offset; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Calculate the offset based on the page[number] parameter. | ||||
|      * | ||||
|      * @param int $perPage | ||||
|      * | ||||
|      * @throws \Tobscure\JsonApi\Exception\InvalidParameterException | ||||
|      * | ||||
|      * @return int | ||||
|      */ | ||||
|     protected function getOffsetFromNumber($perPage) | ||||
|     { | ||||
|         $page = (int) $this->getPage('number'); | ||||
|  | ||||
|         if ($page <= 1) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         return ($page - 1) * $perPage; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the limit. | ||||
|      * | ||||
|      * @param int|null $max | ||||
|      * | ||||
|      * @return int|null | ||||
|      */ | ||||
|     public function getLimit($max = null) | ||||
|     { | ||||
|         $limit = $this->getPage('limit') ?: $this->getPage('size') ?: null; | ||||
|  | ||||
|         if ($limit && $max) { | ||||
|             $limit = min($max, $limit); | ||||
|         } | ||||
|  | ||||
|         return $limit; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the sort. | ||||
|      * | ||||
|      * @param array $available | ||||
|      * | ||||
|      * @throws \Tobscure\JsonApi\Exception\InvalidParameterException | ||||
|      * | ||||
|      * @return array | ||||
|      */ | ||||
|     public function getSort(array $available = []) | ||||
|     { | ||||
|         $sort = []; | ||||
|  | ||||
|         if ($input = $this->getInput('sort')) { | ||||
|             $fields = explode(',', $input); | ||||
|  | ||||
|             foreach ($fields as $field) { | ||||
|                 if (substr($field, 0, 1) === '-') { | ||||
|                     $field = substr($field, 1); | ||||
|                     $order = 'desc'; | ||||
|                 } else { | ||||
|                     $order = 'asc'; | ||||
|                 } | ||||
|  | ||||
|                 $sort[$field] = $order; | ||||
|             } | ||||
|  | ||||
|             $invalid = array_diff(array_keys($sort), $available); | ||||
|  | ||||
|             if (count($invalid)) { | ||||
|                 throw new InvalidParameterException( | ||||
|                     'Invalid sort fields ['.implode(',', $invalid).']', | ||||
|                     3, | ||||
|                     null, | ||||
|                     'sort' | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return $sort; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the fields requested for inclusion. | ||||
|      * | ||||
|      * @return array | ||||
|      */ | ||||
|     public function getFields() | ||||
|     { | ||||
|         $fields = $this->getInput('fields'); | ||||
|  | ||||
|         if (! is_array($fields)) { | ||||
|             return []; | ||||
|         } | ||||
|  | ||||
|         return array_map(function ($fields) { | ||||
|             return explode(',', $fields); | ||||
|         }, $fields); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get a filter item. | ||||
|      * | ||||
|      * @return mixed | ||||
|      */ | ||||
|     public function getFilter() | ||||
|     { | ||||
|         return $this->getInput('filter'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get an input item. | ||||
|      * | ||||
|      * @param string $key | ||||
|      * @param null $default | ||||
|      * | ||||
|      * @return mixed | ||||
|      */ | ||||
|     protected function getInput($key, $default = null) | ||||
|     { | ||||
|         return isset($this->input[$key]) ? $this->input[$key] : $default; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the page. | ||||
|      * | ||||
|      * @param string $key | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     protected function getPage($key) | ||||
|     { | ||||
|         $page = $this->getInput('page'); | ||||
|  | ||||
|         return isset($page[$key]) ? $page[$key] : ''; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user