File manager - Edit - /home/autoph/public_html/projects/api/vendor/pecee/simple-router/src/Pecee/Http/Input/InputHandler.php
Back
<?php namespace Pecee\Http\Input; use Pecee\Exceptions\InvalidArgumentException; use Pecee\Http\Request; class InputHandler { /** * @var array */ protected $get = []; /** * @var array */ protected $post = []; /** * @var array */ protected $file = []; /** * @var Request */ protected $request; /** * Original post variables * @var array */ protected $originalPost = []; /** * Original get/params variables * @var array */ protected $originalParams = []; /** * Get original file variables * @var array */ protected $originalFile = []; /** * Input constructor. * @param Request $request */ public function __construct(Request $request) { $this->request = $request; $this->parseInputs(); } /** * Parse input values * */ public function parseInputs(): void { /* Parse get requests */ if (count($_GET) !== 0) { $this->originalParams = $_GET; $this->get = $this->parseInputItem($this->originalParams); } /* Parse post requests */ $this->originalPost = $_POST; if ($this->request->isPostBack() === true) { $contents = file_get_contents('php://input'); // Append any PHP-input json if (strpos(trim($contents), '{') === 0) { $post = json_decode($contents, true); if ($post !== false) { $this->originalPost += $post; } } } if (count($this->originalPost) !== 0) { $this->post = $this->parseInputItem($this->originalPost); } /* Parse get requests */ if (count($_FILES) !== 0) { $this->originalFile = $_FILES; $this->file = $this->parseFiles($this->originalFile); } } /** * @param array $files Array with files to parse * @param string|null $parentKey Key from parent (used when parsing nested array). * @return array */ public function parseFiles(array $files, ?string $parentKey = null): array { $list = []; foreach ($files as $key => $value) { // Parse multi dept file array if(isset($value['name']) === false && is_array($value) === true) { $list[$key] = $this->parseFiles($value, $key); continue; } // Handle array input if (is_array($value['name']) === false) { $values = ['index' => $parentKey ?? $key]; try { $list[$key] = InputFile::createFromArray($values + $value); } catch (InvalidArgumentException $e) { } continue; } $keys = [$key]; $files = $this->rearrangeFile($value['name'], $keys, $value); if (isset($list[$key]) === true) { $list[$key][] = $files; } else { $list[$key] = $files; } } return $list; } /** * Rearrange multi-dimensional file object created by PHP. * * @param array $values * @param array $index * @param array|null $original * @return array */ protected function rearrangeFile(array $values, array &$index, ?array $original): array { $originalIndex = $index[0]; array_shift($index); $output = []; foreach ($values as $key => $value) { if (is_array($original['name'][$key]) === false) { try { $file = InputFile::createFromArray([ 'index' => ($key === '' && $originalIndex !== '') ? $originalIndex : $key, 'name' => $original['name'][$key], 'error' => $original['error'][$key], 'tmp_name' => $original['tmp_name'][$key], 'type' => $original['type'][$key], 'size' => $original['size'][$key], ]); if (isset($output[$key]) === true) { $output[$key][] = $file; continue; } $output[$key] = $file; continue; } catch (InvalidArgumentException $e) { } } $index[] = $key; $files = $this->rearrangeFile($value, $index, $original); if (isset($output[$key]) === true) { $output[$key][] = $files; } else { $output[$key] = $files; } } return $output; } /** * Parse input item from array * * @param array $array * @return array */ protected function parseInputItem(array $array): array { $list = []; foreach ($array as $key => $value) { // Handle array input if (is_array($value) === true) { $value = $this->parseInputItem($value); } $list[$key] = new InputItem($key, $value); } return $list; } /** * Find input object * * @param string $index * @param array ...$methods * @return IInputItem|array|null */ public function find(string $index, ...$methods) { $element = null; if(count($methods) > 0) { $methods = is_array(...$methods) ? array_values(...$methods) : $methods; } if (count($methods) === 0 || in_array(Request::REQUEST_TYPE_GET, $methods, true) === true) { $element = $this->get($index); } if (($element === null && count($methods) === 0) || (count($methods) !== 0 && in_array(Request::REQUEST_TYPE_POST, $methods, true) === true)) { $element = $this->post($index); } if (($element === null && count($methods) === 0) || (count($methods) !== 0 && in_array('file', $methods, true) === true)) { $element = $this->file($index); } return $element; } protected function getValueFromArray(array $array): array { $output = []; /* @var $item InputItem */ foreach ($array as $key => $item) { if ($item instanceof IInputItem) { $item = $item->getValue(); } $output[$key] = is_array($item) ? $this->getValueFromArray($item) : $item; } return $output; } /** * Get input element value matching index * * @param string $index * @param string|mixed|null $defaultValue * @param array ...$methods * @return string|array */ public function value(string $index, $defaultValue = null, ...$methods) { $input = $this->find($index, ...$methods); if ($input instanceof IInputItem) { $input = $input->getValue(); } /* Handle collection */ if (is_array($input) === true) { $output = $this->getValueFromArray($input); return (count($output) === 0) ? $defaultValue : $output; } return ($input === null || (is_string($input) && trim($input) === '')) ? $defaultValue : $input; } /** * Check if a input-item exist. * If an array is as $index parameter the method returns true if all elements exist. * * @param string|array $index * @param array ...$methods * @return bool */ public function exists($index, ...$methods): bool { // Check array if(is_array($index) === true) { foreach($index as $key) { if($this->value($key, null, ...$methods) === null) { return false; } } return true; } return $this->value($index, null, ...$methods) !== null; } /** * Find post-value by index or return default value. * * @param string $index * @param mixed|null $defaultValue * @return InputItem|array|string|null */ public function post(string $index, $defaultValue = null) { return $this->post[$index] ?? $defaultValue; } /** * Find file by index or return default value. * * @param string $index * @param mixed|null $defaultValue * @return InputFile|array|string|null */ public function file(string $index, $defaultValue = null) { return $this->file[$index] ?? $defaultValue; } /** * Find parameter/query-string by index or return default value. * * @param string $index * @param mixed|null $defaultValue * @return InputItem|array|string|null */ public function get(string $index, $defaultValue = null) { return $this->get[$index] ?? $defaultValue; } /** * Get all get/post items * @param array $filter Only take items in filter * @return array */ public function all(array $filter = []): array { $output = $this->originalParams + $this->originalPost + $this->originalFile; $output = (count($filter) > 0) ? array_intersect_key($output, array_flip($filter)) : $output; foreach ($filter as $filterKey) { if (array_key_exists($filterKey, $output) === false) { $output[$filterKey] = null; } } return $output; } /** * Add GET parameter * * @param string $key * @param InputItem $item */ public function addGet(string $key, InputItem $item): void { $this->get[$key] = $item; } /** * Add POST parameter * * @param string $key * @param InputItem $item */ public function addPost(string $key, InputItem $item): void { $this->post[$key] = $item; } /** * Add FILE parameter * * @param string $key * @param InputFile $item */ public function addFile(string $key, InputFile $item): void { $this->file[$key] = $item; } /** * Get original post variables * @return array */ public function getOriginalPost(): array { return $this->originalPost; } /** * Set original post variables * @param array $post * @return static $this */ public function setOriginalPost(array $post): self { $this->originalPost = $post; return $this; } /** * Get original get variables * @return array */ public function getOriginalParams(): array { return $this->originalParams; } /** * Set original get-variables * @param array $params * @return static $this */ public function setOriginalParams(array $params): self { $this->originalParams = $params; return $this; } /** * Get original file variables * @return array */ public function getOriginalFile(): array { return $this->originalFile; } /** * Set original file posts variables * @param array $file * @return static $this */ public function setOriginalFile(array $file): self { $this->originalFile = $file; return $this; } }
| ver. 1.4 |
.
| PHP 8.0.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings