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: