ValidationException.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. /**
  3. * @package Grav\Common\Data
  4. *
  5. * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Data;
  9. use Grav\Common\Grav;
  10. use JsonSerializable;
  11. use RuntimeException;
  12. /**
  13. * Class ValidationException
  14. * @package Grav\Common\Data
  15. */
  16. class ValidationException extends RuntimeException implements JsonSerializable
  17. {
  18. /** @var array */
  19. protected $messages = [];
  20. protected $escape = true;
  21. /**
  22. * @param array $messages
  23. * @return $this
  24. */
  25. public function setMessages(array $messages = [])
  26. {
  27. $this->messages = $messages;
  28. $language = Grav::instance()['language'];
  29. $this->message = $language->translate('GRAV.FORM.VALIDATION_FAIL', null, true) . ' ' . $this->message;
  30. foreach ($messages as $list) {
  31. $list = array_unique($list);
  32. foreach ($list as $message) {
  33. $this->message .= '<br/>' . htmlspecialchars($message, ENT_QUOTES | ENT_HTML5, 'UTF-8');
  34. }
  35. }
  36. return $this;
  37. }
  38. public function setSimpleMessage(bool $escape = true): void
  39. {
  40. $first = reset($this->messages);
  41. $message = reset($first);
  42. $this->message = $escape ? htmlspecialchars($message, ENT_QUOTES | ENT_HTML5, 'UTF-8') : $message;
  43. }
  44. /**
  45. * @return array
  46. */
  47. public function getMessages(): array
  48. {
  49. return $this->messages;
  50. }
  51. public function jsonSerialize(): array
  52. {
  53. return ['validation' => $this->messages];
  54. }
  55. }