1: <?php
2:
3: /**
4: * @copyright Copyright (c) 2009-2022 ThemeCatcher (https://www.themecatcher.net)
5: */
6: abstract class Quform_Validator_Abstract implements Quform_Validator_Interface
7: {
8: /**
9: * Last failure error message
10: *
11: * @var string
12: */
13: protected $message = '';
14:
15: /**
16: * The validator settings
17: *
18: * @var array
19: */
20: protected $config = array();
21:
22: /**
23: * @param array $options
24: */
25: public function __construct(array $options = array())
26: {
27: $this->setConfig($options);
28: }
29:
30: /**
31: * Set the error message
32: *
33: * @param string $message
34: */
35: protected function setMessage($message)
36: {
37: $this->message = $message;
38: }
39:
40: /**
41: * Get the last failure error message
42: *
43: * @return string
44: */
45: public function getMessage()
46: {
47: return $this->message;
48: }
49:
50: /**
51: * Clears the error message
52: *
53: * @return $this
54: */
55: public function reset()
56: {
57: $this->message = '';
58:
59: return $this;
60: }
61:
62: /**
63: * Create and set the error message from a template
64: *
65: * @param string $key The key of the message template
66: * @param array $variables Variables that can be replaced in the error message
67: */
68: protected function error($key, array $variables = array())
69: {
70: $this->message = $this->createMessage($key, $variables);
71: }
72:
73: /**
74: * Constructs and returns a validation failure message with the given message key
75: *
76: * If a translation exists for $key, the translation will be used
77: *
78: * @param string $key The message template key
79: * @param array $variables An array of variable keys and values for replacement
80: * @return string
81: */
82: public function createMessage($key, array $variables = array())
83: {
84: $message = call_user_func(array(get_class($this), 'getMessageTemplates'), $key);
85:
86: if ($message === null) {
87: return '';
88: }
89:
90: $message = $this->getTranslation('messages.' . $key, $message);
91:
92: foreach ($variables as $variable => $value) {
93: $message = str_replace("%$variable%", $value, $message);
94: }
95:
96: return $message;
97: }
98:
99: /**
100: * Returns the config value for the given $key
101: *
102: * @param string|null $key
103: * @param null|mixed $default
104: * @return mixed The config value or $default if not set
105: */
106: public function config($key = null, $default = null)
107: {
108: $value = Quform::get($this->config, $key, $default);
109:
110: if ($value === null) {
111: $value = Quform::get(call_user_func(array(get_class($this), 'getDefaultConfig')), $key, $default);
112: }
113:
114: return $value;
115: }
116:
117: /**
118: * Set the config value for the given $key or multiple values using an array
119: *
120: * @param string|array $key Key or array of key/values
121: * @param mixed $value Value or null if $key is array
122: * @return $this
123: */
124: public function setConfig($key, $value = null)
125: {
126: if (is_array($key)) {
127: foreach ($key as $k => $v) {
128: $this->config[$k] = $v;
129: }
130: } else {
131: $this->config[$key] = $value;
132: }
133:
134: return $this;
135: }
136:
137: /**
138: * @param string $key
139: * @param string $default
140: * @return string
141: */
142: public function getTranslation($key, $default = '')
143: {
144: $string = $this->config($key);
145:
146: if (Quform::isNonEmptyString($string)) {
147: return $string;
148: }
149:
150: return $default;
151: }
152: }
153: