diff options
Diffstat (limited to 'src/DTS')
| -rw-r--r-- | src/DTS/Errors.php | 30 | ||||
| -rw-r--r-- | src/DTS/Session.php | 6 | ||||
| -rw-r--r-- | src/DTS/Validated.php | 14 | ||||
| -rw-r--r-- | src/DTS/Validator.php | 81 | 
4 files changed, 128 insertions, 3 deletions
diff --git a/src/DTS/Errors.php b/src/DTS/Errors.php new file mode 100644 index 0000000..3c1dd5d --- /dev/null +++ b/src/DTS/Errors.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +namespace DTS; + +class Errors +{ +    private $errors = []; + +    public function add(string $key, string $value): void +    { +        $this->errors[$key][] = $value; +    } + +    public function get(string $key): array +    { +        return $this->errors[$key]; +    } + +    public function has(string $key): bool +    { +        return array_key_exists($key, $this->errors); +    } + +    public function count(): int +    { +        return count($this->errors); +    } +} diff --git a/src/DTS/Session.php b/src/DTS/Session.php index 956f4e5..e5da42f 100644 --- a/src/DTS/Session.php +++ b/src/DTS/Session.php @@ -29,13 +29,13 @@ class Session          }      } -    public function set(string $key, string $value): void +    public function set(string $key, mixed $value): void      {          $this->session[$key] = $_SESSION[$key] = $value;      } -    public function get(string $key): ?string +    public function get(string $key, mixed $default = null): mixed      { -        return $this->session[$key] ?? null; +        return $this->session[$key] ?? $default;      }  } diff --git a/src/DTS/Validated.php b/src/DTS/Validated.php new file mode 100644 index 0000000..5df8af7 --- /dev/null +++ b/src/DTS/Validated.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +namespace DTS; + +class Validated +{ +    public ?string $url; + +    public ?string $title; + +    public ?string $tag; +} diff --git a/src/DTS/Validator.php b/src/DTS/Validator.php new file mode 100644 index 0000000..7629e3b --- /dev/null +++ b/src/DTS/Validator.php @@ -0,0 +1,81 @@ +<?php + +declare(strict_types=1); + +namespace DTS; + +use DTS\Errors; +use DTS\Validated; + +class Validator +{ +    public Errors $errors; + +    public Validated $validated; + +    function __construct(array $request) { +        $this->errors = new Errors(); + +        $this->validated = new Validated(); + +        $this->validateUrl($request['url'], 8, 512); + +        $this->validateTitle($request['title'], 8, 256); + +        $this->validateTag($request['tag'], 2, 8); +    } + +    private function validateUrl(string $url, int $minLength, int $maxLength): void +    { +        $url = trim($url); + +        if (filter_var($url, FILTER_VALIDATE_URL) === false) { +            $this->errors->add('url', 'Must be a URL'); +        } + +        if (strlen($url) < $minLength  || strlen($url) > $maxLength) { +            $this->errors->add('url', "Must be between $minLength and $maxLength in characters in length"); +        } + +        if (!$this->errors->has('url')) { +            $this->validated->url = $url; +        } +    } + +    private function validateTitle(string $title, int $minLength, int $maxLength): void +    { +        $title = trim($title); + +        if ($title === '') { +            return; +        } + +        if (strlen($title) < $minLength  || strlen($title) > $maxLength) { +            $this->errors->add('title', "Must be between $minLength and $maxLength in characters in length"); +        } + +        if (!$this->errors->has('tite')) { +            $this->validated->title = $title; +        } +    } + +    private function validateTag(string $tag, int $minLength, int $maxLength): void +    { +        $tag = trim($tag); + +        if ($tag === '') { +            return; +        } + +        if (strlen($tag) < $minLength  || strlen($tag) > $maxLength) { +            $this->errors->add('tag', "Must be between $minLength and $maxLength in characters in length"); +        } +        if (preg_match('/\W/', $tag) === 1) { +            $this->errors->add('tag', 'May only contain word characters'); +        } + +        if (!$this->errors->has('tag')) { +            $this->validated->tag = strtolower($tag); +        } +    } +}  | 
