ShortUrlMetaInputFilter.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. declare(strict_types=1);
  3. namespace Shlinkio\Shlink\Core\Validation;
  4. use DateTime;
  5. use Laminas\InputFilter\InputFilter;
  6. use Laminas\Validator;
  7. use Shlinkio\Shlink\Common\Validation;
  8. class ShortUrlMetaInputFilter extends InputFilter
  9. {
  10. use Validation\InputFactoryTrait;
  11. public const VALID_SINCE = 'validSince';
  12. public const VALID_UNTIL = 'validUntil';
  13. public const CUSTOM_SLUG = 'customSlug';
  14. public const MAX_VISITS = 'maxVisits';
  15. public const FIND_IF_EXISTS = 'findIfExists';
  16. public const DOMAIN = 'domain';
  17. public function __construct(?array $data = null)
  18. {
  19. $this->initialize();
  20. if ($data !== null) {
  21. $this->setData($data);
  22. }
  23. }
  24. private function initialize(): void
  25. {
  26. $validSince = $this->createInput(self::VALID_SINCE, false);
  27. $validSince->getValidatorChain()->attach(new Validator\Date(['format' => DateTime::ATOM]));
  28. $this->add($validSince);
  29. $validUntil = $this->createInput(self::VALID_UNTIL, false);
  30. $validUntil->getValidatorChain()->attach(new Validator\Date(['format' => DateTime::ATOM]));
  31. $this->add($validUntil);
  32. $customSlug = $this->createInput(self::CUSTOM_SLUG, false);
  33. $customSlug->getFilterChain()->attach(new Validation\SluggerFilter());
  34. $this->add($customSlug);
  35. $maxVisits = $this->createInput(self::MAX_VISITS, false);
  36. $maxVisits->getValidatorChain()->attach(new Validator\Digits())
  37. ->attach(new Validator\GreaterThan(['min' => 1, 'inclusive' => true]));
  38. $this->add($maxVisits);
  39. $this->add($this->createBooleanInput(self::FIND_IF_EXISTS, false));
  40. $domain = $this->createInput(self::DOMAIN, false);
  41. $domain->getValidatorChain()->attach(new Validation\HostAndPortValidator());
  42. $this->add($domain);
  43. }
  44. }