Development

/branches/1.1/lib/plugins/sfCompat10Plugin/lib/validator/sfValidatorManager.class.php

You must first sign up to be able to contribute.

root/branches/1.1/lib/plugins/sfCompat10Plugin/lib/validator/sfValidatorManager.class.php

Revision 10270, 7.5 kB (checked in by Carl.Vondrick, 6 years ago)

1.1: added deprecated warnings to all sfCompatPlugin classes (closes #3882)

  • Property svn:mime-type set to text/x-php
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Rev Date
Line 
1 <?php
2
3 /*
4  * This file is part of the symfony package.
5  * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6  * (c) 2004-2006 Sean Kerr <sean@code-box.org>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 /**
13  * sfValidatorManager provides management for request parameters and their
14  * associated validators.
15  *
16  * WARNING: This class is deprecated and will be removed in symfony 1.2.
17  *
18  * @package    symfony
19  * @subpackage validator
20  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
21  * @author     Sean Kerr <sean@code-box.org>
22  * @version    SVN: $Id$
23  * @deprecated Deprecated since symfony 1.1
24  */
25 class sfValidatorManager
26 {
27   protected
28     $groups  = array(),
29     $names   = array(),
30     $request = null;
31
32   /**
33    * Class constructor.
34    *
35    * @see initialize()
36    */
37   public function __construct($context)
38   {
39     $this->initialize($context);
40   }
41
42   /**
43    * Initializes this validator manager.
44    *
45    * @param sfContext A sfContext instance
46    */
47   public function initialize($context)
48   {
49     $this->request = $context->getRequest();
50   }
51
52   /**
53    * Clears this validator manager so it can be reused.
54    */
55   public function clear()
56   {
57     $this->groups = null;
58     $this->groups = array();
59     $this->names  = null;
60     $this->names  = array();
61   }
62
63   /**
64    * Executes all validators and determine the validation status.
65    *
66    * @return bool true, if validation completed successfully, otherwise false
67    */
68   public function execute()
69   {
70     if (sfConfig::get('sf_logging_enabled'))
71     {
72       sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($this, 'application.log', array('Validation execution')));
73     }
74
75     $retval = true;
76
77     // loop through the names and start our validation
78     // if 1 or more groups exist, we'll have to do a second pass
79     $pass = 1;
80
81     while (true)
82     {
83       foreach ($this->names as $name => &$data)
84       {
85         if (isset($data['_is_parent']))
86         {
87           // this is a parent
88           foreach ($data as $subname => &$subdata)
89           {
90             if ($subname == '_is_parent')
91             {
92               // this isn't an actual index, but more of a flag
93               continue;
94             }
95
96             if ($subdata['validation_status'] == true && !$this->validate($subname, $subdata, $name))
97             {
98               // validation failed
99               $retval = false;
100             }
101           }
102         }
103         else
104         {
105           // single parameter
106           if ($data['validation_status'] == true && !$this->validate($name, $data, null))
107           {
108             // validation failed
109             $retval = false;
110           }
111         }
112       }
113
114       if (count($this->groups) == 0 || $pass == 2)
115       {
116         break;
117       }
118
119       // increase our pass indicator
120       ++$pass;
121     }
122
123     return $retval;
124   }
125
126   /**
127    * Registers a file or parameter.
128    *
129    * @param string  A file or parameter name
130    * @param bool    The required status
131    * @param string  A required error message
132    * @param string  A group name
133    * @param string  A parent array
134    */
135   public function registerName($name, $required = true, $message = 'Required', $parent = null, $group = null, $isFile = false)
136   {
137     // create the entry
138     $entry                      = array();
139     $entry['group']             = null;
140     $entry['is_file']           = $isFile;
141     $entry['required']          = $required;
142     $entry['required_msg']      = $message;
143     $entry['validation_status'] = true;
144     $entry['validators']        = array();
145
146     if ($parent != null)
147     {
148       // this parameter has a parent array
149       if (!isset($this->names[$parent]))
150       {
151         // create the parent array
152         $this->names[$parent] = array('_is_parent' => true);
153       }
154
155       // register this parameter
156       $this->names[$parent][$name] =& $entry;
157     }
158     else
159     {
160       // no parent
161
162       // register this parameter
163       $this->names[$name] =& $entry;
164     }
165
166     if ($group != null)
167     {
168       // set group
169       if (!isset($this->groups[$group]))
170       {
171         // create our group
172         $this->groups[$group] = array('_force' => false);
173       }
174
175       // add this file/parameter name to the group
176       $this->groups[$group][] = $name;
177
178       // add a reference back to the group array to the file/param array
179       $entry['group'] =& $this->groups[$group];
180     }
181   }
182
183   /**
184    * Registers a validator for a file or parameter.
185    *
186    * @param string    A file or parameter name
187    * @param Validator A validator implementation instance
188    * @param string    A parent array name
189    */
190   public function registerValidator($name, $validator, $parent = null)
191   {
192     if ($parent != null)
193     {
194       // this parameter has a parent
195       $this->names[$parent][$name]['validators'][] = $validator;
196     }
197     else
198     {
199       // no parent
200       $this->names[$name]['validators'][] = $validator;
201     }
202   }
203
204   /**
205    * Validates a file or parameter.
206    *
207    * @param string A file or parameter name
208    * @param array  Data associated with the file or parameter
209    * @param string A parent name
210    *
211    * @return bool true, if validation completes successfully, otherwise false
212    */
213   protected function validate(&$name, &$data, $parent)
214   {
215     // get defaults
216     $error     = null;
217     $errorName = null;
218     $force     = null !== $data['group'] ? $data['group']['_force'] : false;
219     $retval    = true;
220     $value     = null;
221
222     // get our parameter value
223     if ($parent == null)
224     {
225       // normal file/parameter
226       $errorName = $name;
227
228       if ($data['is_file'])
229       {
230         // file
231         $value = $this->request->getFile($name);
232       }
233       else
234       {
235         // parameter
236         $value = $this->request->getParameterHolder()->get($name);
237       }
238     }
239     else
240     {
241       // we have a parent
242       $errorName = $parent.'{'.$name.'}';
243
244       if ($data['is_file'])
245       {
246         // file
247         $parent = $this->request->getFile($parent.'['.$name.']');
248
249         if ($parent != null)
250         {
251           $value = $parent;
252         }
253       }
254       else
255       {
256         // parameter
257         $parent = $this->request->getParameterHolder()->get($parent);
258
259         if ($parent != null && isset($parent[$name]))
260         {
261           $value = $parent[$name];
262         }
263       }
264     }
265
266     // now for the dirty work
267     if (
268       ($data['is_file'] && !$value['name'])
269       ||
270       (!$data['is_file'] && (is_array($value) ? sfToolkit::isArrayValuesEmpty($value) : ($value === null || strlen($value) == 0)))
271     )
272     {
273       if ($data['required'] || $force)
274       {
275         // it's empty!
276         $error  = $data['required_msg'];
277         $retval = false;
278       }
279       else
280       {
281         // we don't have to validate it
282         $retval = true;
283       }
284     }
285     else
286     {
287       // time for the fun
288       $error = null;
289
290       // get group force status
291       if ($data['group'] != null)
292       {
293         // we set this because we do have a value for a parameter in this group
294         $data['group']['_force'] = true;
295       }
296
297       if (count($data['validators']) > 0)
298       {
299         // loop through our validators
300         foreach ($data['validators'] as $validator)
301         {
302           if (!$validator->execute($value, $error))
303           {
304             $retval = false;
305
306             break;
307           }
308         }
309       }
310     }
311
312     if (!$retval)
313     {
314       // set validation status
315       $data['validation_status'] = false;
316
317       // set the request error
318       $this->request->setError($errorName, $error);
319     }
320
321     return $retval;
322   }
323 }
324
Note: See TracBrowser for help on using the browser.