1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
<?php
/**
* KumbiaPHP web & app Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://wiki.kumbiaphp.com/Licencia
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@kumbiaphp.com so we can send you a copy immediately.
*
* Validador para ActiveRecord
*
* @category Kumbia
* @package ActiveRecord
* @copyright Copyright (c) 2005-2010 Kumbia Team (http://www.kumbiaphp.com)
* @license http://wiki.kumbiaphp.com/Licencia New BSD License
*/
// @see ValidatorInterface
require_once CORE_PATH . 'libs/ActiveRecord/active_record2/validators/validator_interface.php';
class ActiveRecordValidator
{
/**
* Validar en caso de crear
*
* @param ActiveRecord $object
* @return boolean
*/
public final static function validateOnCreate($object)
{
return self::_validate($object);
}
/**
* Validar en caso de actualizar
*
* @param ActiveRecord $object
* @return boolean
*/
public static function validateOnUpdate($object)
{
return self::_validate($object, TRUE);
}
/**
* Efectua las validaciones
*
* @param ActiveRecord $object
* @param boolean $update
* @return boolean
*/
private static function _validate($object, $update = FALSE)
{
// Obtiene los validadores
$validators = $object->validators();
// Si no hay validadores definidos
if(!$validators) {
return TRUE;
}
// Columnas con valor por defectos
$default = array();
// Verifica si existe columnas con valor por defectos
if(isset($validators['default'])) {
// @see DefaultValidator
require_once CORE_PATH . "libs/ActiveRecord/active_record2/validators/default_validator.php";
// Itera en cada definicion de validacion
foreach($validators['default'] as $v) {
// Verifica las condiciones para cuando la columna es con valor por defecto
$default[$v] = DefaultValidator::validate($object, $v, NULL, $update);
}
// Aprovecha y libera memoria :)
unset($validators['default']);
}
// Por defecto es valido
$valid = TRUE;
// Verifica si existe columnas no nulas
if(isset($validators['notNull'])) {
// @see NotNullValidator
require_once CORE_PATH . "libs/ActiveRecord/active_record2/validators/not_null_validator.php";
// Itera en cada definicion de validacion
foreach($validators['notNull'] as $v) {
// Si es una columna sin configuracion especial
if(is_string($v)) {
// Si es con valor por defecto entonces salta la validacion
if(isset($default[$v]) && $default[$v]) {
continue;
}
$column = $v;
$params = NULL;
} else {
// Si es con valor por defecto entonces salta la validacion
if(isset($default[$v[0]]) && $default[$v[0]]) {
continue;
}
$column = $v[0];
unset($v[0]);
$params = $v;
}
// Valida si el campo
$valid = NotNullValidator::validate($object, $column, $params, $update) && $valid;
}
// Aprovecha y libera memoria :)
unset($validators['notNull']);
}
// Realiza el resto de las validaciones a las columnas
foreach($validators as $validator => $validations) {
// Clase validadora
$class = $validator.'validator';
// Carga el validador de ser necesario
if(!class_exists($class, FALSE)) {
self::_load($validator);
}
// Itera en cada definicion de validacion
foreach($validations as $v) {
// Si es una columna sin configuracion especial
if(is_string($v)) {
// Si es con valor por defecto entonces salta la validacion
if(isset($default[$v]) && $default[$v]) {
continue;
}
$column = $v;
$params = NULL;
} else {
// Si es con valor por defecto entonces salta la validacion
if(is_string($v[0]) && isset($default[$v[0]]) && $default[$v[0]]) {
continue;
}
$column = $v[0];
unset($v[0]);
$params = $v;
}
if(is_array($column) || (isset($object->$column) && $object->$column != '')) {
$valid = call_user_func(array($class, 'validate'), $object, $column, $params, $update) && $valid;
}
}
}
// Resultado de validacion
return $valid;
}
/**
* Carga un validador
*
* @param string $validator
* @throw KumbiaException
*/
private static function _load($validator)
{
// Convierte a smallcase
$validatorSmall = Util::smallcase($validator);
$file = APP_PATH . "extensions/validators/{$validatorSmall}_validator.php";
if(!is_file($file)) {
$file = CORE_PATH . "libs/ActiveRecord/active_record2/validators/{$validatorSmall}_validator.php";
if(!is_file($file)) {
throw new KumbiaException("Validador $validator no encontrado");
}
}
include $file;
}
}
|