. */ declare(strict_types=1); namespace FireflyIII\Http\Requests; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; use Exception; use Illuminate\Foundation\Http\FormRequest; use Log; /** * Class Request. * * @codeCoverageIgnore * * @SuppressWarnings(PHPMD.NumberOfChildren) */ class Request extends FormRequest { /** * @param $array * * @return array|null */ public function arrayFromValue($array): ?array { if (is_array($array)) { return $array; } if (null === $array) { return null; } if (is_string($array)) { return explode(',', $array); } return null; } /** * Return a boolean value. * * @param string $field * * @return bool */ public function boolean(string $field): bool { if ('true' === (string)$this->input($field)) { return true; } if ('false' === (string)$this->input($field)) { return false; } return 1 === (int)$this->input($field); } /** * @param string $value * * @return bool */ public function convertBoolean(?string $value): bool { if (null === $value) { return false; } if ('true' === $value) { return true; } if ('yes' === $value) { return true; } if (1 === $value) { return true; } if ('1' === $value) { return true; } if (true === $value) { return true; } return false; } /** * @param string|null $string * * @return Carbon|null */ public function dateFromValue(?string $string): ?Carbon { if (null === $string) { return null; } if ('' === $string) { return null; } try { $carbon = new Carbon($string); } catch (Exception $e) { Log::debug(sprintf('Invalid date: %s: %s', $string, $e->getMessage())); return null; } return $carbon; } /** * Return floating value. * * @param string $field * * @return float|null */ public function float(string $field): ?float { $res = $this->get($field); if (null === $res) { return null; } return (float)$res; } /** * Return integer value. * * @param string $field * * @return int */ public function integer(string $field): int { return (int)$this->get($field); } /** * Parse to integer * * @param string|null $string * * @return int|null */ public function integerFromValue(?string $string): ?int { if (null === $string) { return null; } if ('' === $string) { return null; } return (int)$string; } /** * Return string value. * * @param string $field * * @return string * * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function string(string $field): string { return app('steam')->cleanString((string)($this->get($field) ?? '')); } /** * Parse and clean a string. * * @param string|null $string * * @return string|null */ public function stringFromValue(?string $string): ?string { if (null === $string) { return null; } $result = app('steam')->cleanString($string); return '' === $result ? null : $result; } /** * Return date or NULL. * * @param string $field * * @return Carbon|null */ protected function date(string $field): ?Carbon { $result = null; try { $result = $this->get($field) ? new Carbon($this->get($field)) : null; } catch (Exception $e) { Log::debug(sprintf('Exception when parsing date. Not interesting: %s', $e->getMessage())); } return $result; } /** * Return date time or NULL. * * @param string $field * * @return Carbon|null */ protected function dateTime(string $field): ?Carbon { if (null === $this->get($field)) { return null; } $value = (string)$this->get($field); if (10 === strlen($value)) { // probably a date format. try { $result = Carbon::createFromFormat('Y-m-d', $value); } catch (InvalidDateException $e) { Log::error(sprintf('"%s" is not a valid date: %s', $value, $e->getMessage())); return null; } return $result; } // is an atom string, I hope? try { $result = Carbon::parse($value); } catch (InvalidDateException $e) { Log::error(sprintf('"%s" is not a valid date or time: %s', $value, $e->getMessage())); return null; } return $result; } }