68 lines
1.6 KiB
PHP
68 lines
1.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package Grav\Common\Data
|
|
*
|
|
* @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved.
|
|
* @license MIT License; see LICENSE file for details.
|
|
*/
|
|
|
|
namespace Grav\Common\Data;
|
|
|
|
use Grav\Common\Grav;
|
|
use JsonSerializable;
|
|
use RuntimeException;
|
|
|
|
/**
|
|
* Class ValidationException
|
|
* @package Grav\Common\Data
|
|
*/
|
|
class ValidationException extends RuntimeException implements JsonSerializable
|
|
{
|
|
/** @var array */
|
|
protected $messages = [];
|
|
protected $escape = true;
|
|
|
|
/**
|
|
* @param array $messages
|
|
* @return $this
|
|
*/
|
|
public function setMessages(array $messages = [])
|
|
{
|
|
$this->messages = $messages;
|
|
|
|
$language = Grav::instance()['language'];
|
|
$this->message = $language->translate('GRAV.FORM.VALIDATION_FAIL', null, true) . ' ' . $this->message;
|
|
|
|
foreach ($messages as $list) {
|
|
$list = array_unique($list);
|
|
foreach ($list as $message) {
|
|
$this->message .= '<br/>' . htmlspecialchars($message, ENT_QUOTES | ENT_HTML5, 'UTF-8');
|
|
}
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function setSimpleMessage(bool $escape = true): void
|
|
{
|
|
$first = reset($this->messages);
|
|
$message = reset($first);
|
|
|
|
$this->message = $escape ? htmlspecialchars($message, ENT_QUOTES | ENT_HTML5, 'UTF-8') : $message;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getMessages(): array
|
|
{
|
|
return $this->messages;
|
|
}
|
|
|
|
public function jsonSerialize(): array
|
|
{
|
|
return ['validation' => $this->messages];
|
|
}
|
|
}
|