/[openfoncier]/trunk/obj/om_dbform.class.php
ViewVC logotype

Contents of /trunk/obj/om_dbform.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 691 - (show annotations)
Wed Nov 14 16:01:49 2012 UTC (12 years, 2 months ago) by nhaye
File size: 25753 byte(s)
Suppression des méthodes dont les surcharges sont plus utiles.

1 <?php
2 /**
3 * Ce fichier est destine a permettre la surcharge de certaines methodes de
4 * la classe om_dbform pour des besoins specifiques de l'application
5 *
6 * @package openmairie_exemple
7 * @version SVN : $Id$
8 */
9
10 /**
11 *
12 */
13 require_once PATH_OPENMAIRIE."om_dbform.class.php";
14
15 /**
16 *
17 */
18 require_once "om_formulaire.class.php";
19
20 /**
21 *
22 */
23 class om_dbform extends dbForm {
24
25 /**
26 *
27 */
28 var $om_formulaire = "om_formulaire";
29
30
31
32 /**
33 * Constructeur
34 *
35 * @param string $id
36 * @param object $db Objet de connexion DB
37 * @param boolean $DEBUG Mode debug (@deprecated)
38 */
39 function constructeur($id, &$db, $DEBUG = false) {
40 if (defined('REST_REQUEST')) { // $this->REST
41 logger::instance()->display_log = false;
42 }
43 //
44 if (isset($GLOBALS["f"])) {
45 $this->f = $GLOBALS["f"];
46 }
47 // Le framework REST est utilisee
48 $this->errors = array();
49
50 // Affectation de l'identifiant de base de donnees dans l'attribut db
51 // de l'objet
52 $this->db = $db;
53 // Inclusion du fichier de parametre de la table pour recuperer les
54 // trois parametres permettant de construire la requete de selection
55 // $champs - clause select
56 // $tableSelect - clause from
57 // $selection - clause where
58 $fichier = "../sql/".$this->db->phptype."/".$this->table.".form.inc.php";
59 if (file_exists($fichier)) {
60 include $fichier;
61 } else {
62 $fichier = "../sql/".$this->db->phptype."/".$this->table.".form.inc";
63 if (file_exists($fichier)) {
64 include $fichier;
65 }
66 }
67 // Sauvegarde des actions contextuelles supplementaires
68 if (isset($portlet_actions)) {
69 $this->actions_sup = $portlet_actions;
70 }
71 //Si le flag $archivable est posé
72 //if(isset($archivable) and $archivable){
73 // $this->archivable=TRUE;
74 //} else {
75 // $this->archivable=FALSE;
76 //}
77 // Concatenation des champs pour constitution de la clause select
78 $listeChamp = "";
79 foreach ($champs as $elem) {
80 $listeChamp .= $elem.",";
81 }
82 // Suppresion de la derniere virgule
83 $listeChamp = substr($listeChamp, 0, strlen($listeChamp)-1);
84 // Initialisation de la variable selection
85 if (!isset($selection)) {
86 $selection = "";
87 }
88 // Concatenation de la requete de selection
89 $sql = " select ".$listeChamp." from ".$tableSelect." ";
90 // Si mode ajout
91 if ($id == "]") {
92 // Remplacement du 'and' par 'where' dans la varibale $selection
93 $selection = ltrim($selection);
94 if (strtolower(substr($selection, 0, 3)) == "and") {
95 $selection = " where ".substr($selection, 4, strlen($selection));
96 }
97 } else { // Si mode modification ou suppression
98 // Clause where en fonction du type de la cle primaire
99 if ($this->typeCle == "A") {
100 $sql .= " where ".$this->clePrimaire." like '".$id."' ";
101 } else {
102 $sql .= " where ".$this->table.".".$this->clePrimaire." = ".$id." ";
103 }
104 }
105 $sql .= " ".$selection." ";
106 //print '$sql:'.$sql.' ';
107 // Execution de la requete
108 $res = $db->limitquery($sql, 0, 1);
109 // Logger
110 $this->addToLog("constructeur(): db->limitquery(\"".str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
111 // Si une erreur survient
112 if (database::isError($res, true)) {
113 // Appel de la methode de recuperation des erreurs
114 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), $tableSelect);
115 } else {
116 // Recuperation des informations sur la structure de la table
117 // ??? compatibilite POSTGRESQL (len = -1, type vide, flags vide)
118 $info = $res->tableInfo();
119 // Initialisation de la cle a 0
120 $i = 0;
121 // Recuperation du nom de chaque champ dans l'attribut 'champs'
122 foreach ($info as $elem) {
123 $this->champs[$i++] = $elem['name'];
124 }
125 // ??? Le $i devrait etre initialises a 0 pour chaque attribut suivant
126 // Recuperation de la taille de chaque champ dans l'attibut 'longueurMax'
127 foreach ($info as $elem) {
128 $this->longueurMax[$i++] = $elem['len'];
129 }
130 // Recuperation du type de chaque champ dans l'attribut 'type'
131 // ??? Non utilise
132 foreach ($info as $elem) {
133 $this->type[$i++] = $elem['type'];
134 }
135 // Recuperation du flag de chaque champ dans l'attribut 'flags'
136 // ??? Non utilise
137 foreach ($info as $elem) {
138 $this->flags[$i++] = $elem['flags'];
139 }
140 // Recuperation de l'enregistrement resultat de la requete
141 while ($row =& $res->fetchRow()) {
142 // Initialisation de la cle a 0
143 $i = 0;
144 // Recuperation de la valeur de chaque champ dans l'attribut 'val'
145 foreach ($row as $elem) {
146 $this->val[$i] = $elem;
147 if (defined('REST_REQUEST')) { // $this->REST
148 $this->valF[$this->champs[$i]] = $elem;
149 }
150 $i++;
151 }
152 }
153 }
154 }
155
156
157
158 /**
159 * Cette methode permet d'executer l'ajout (MODE 'insert') de l'objet dans
160 * la base de donnees.
161 *
162 * @param array $val
163 * @param object $db Objet de connexion DB
164 * @param boolean $DEBUG Mode debug (@deprecated)
165 */
166 function ajouter($val, &$db = NULL, $DEBUG = false) {
167 // Logger
168 $this->addToLog("ajouter() - begin", EXTRA_VERBOSE_MODE);
169 // Mutateur de valF
170 $this->setValF($val);
171 // Mutateur de valF specifique a l'ajout
172 $this->setValFAjout($val);
173 // Verification de la validite des donnees
174 $this->verifier($val, $db, $DEBUG);
175 // Verification specifique au MODE 'insert' de la validite des donnees
176 $this->verifierAjout($val, $db);
177 // Verification du verrou
178 $this->testverrou();
179 // Si les verifications precedentes sont correctes, on procede a
180 // l'ajout, sinon on ne fait rien et on affiche un message d'echec
181 if ($this->correct) {
182 // Appel au mutateur pour le calcul de la cle primaire (si la cle
183 // est automatique) specifique au MODE 'insert'
184 $this->setId($db);
185 // Execution du trigger 'before' specifique au MODE 'insert'
186 // Le premier parametre est vide car en MODE 'insert'
187 // l'enregistrement n'existe pas encore donc il n'a pas
188 // d'identifiant
189 $this->triggerajouter("", $db, $val, $DEBUG);
190 // Execution de la requete d'insertion des donnees de l'attribut
191 // valF de l'objet dans l'attribut table de l'objet
192 $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_INSERT);
193 // Si une erreur survient
194 if (database::isError($res, true)) {
195 // Appel de la methode de recuperation des erreurs
196 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
197 } else {
198 // Log
199 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
200 // Log
201 if(isset($val[$this->clePrimaire])) // ***
202 $id = $val[$this->clePrimaire];
203 else
204 $id=$this->id;
205 $message = _("Enregistrement")."&nbsp;".$this->valF[$this->clePrimaire]."&nbsp;";
206 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
207 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
208 $message .= _("enregistrement(s) ajoute(s)")."&nbsp;]";
209 $this->addToLog($message, VERBOSE_MODE);
210 // Message de validation
211 $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");
212 // Mise en place du verrou pour ne pas valider plusieurs fois
213 // le meme formulaire
214 $this->verrouille();
215
216 // Execution du trigger 'after' specifique au MODE 'insert'
217 // Le premier parametre est vide car en MODE 'insert'
218 // l'enregistrement n'existe pas encore donc il n'a pas
219 // d'identifiant
220 $this->triggerajouterapres("", $db, $val, $DEBUG);
221 }
222 } else {
223 // Message d'echec (saut d'une ligne supplementaire avant le
224 // message pour qu'il soit mis en evidence)
225 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
226 }
227 // Logger
228 $this->addToLog("ajouter() - end", EXTRA_VERBOSE_MODE);
229 }
230
231
232 /**
233 *
234 * @param array $val
235 * @param object $db Objet de connexion DB
236 */
237 function verifierAjout($val = array(), &$db = NULL) {
238
239 // Verifier [verify]
240 // la cle primaire est obligatoire
241 // [primary key is compulsory]
242 if ($this->valF[$this->clePrimaire] == "") {
243 //
244 $this->correct = false;
245 //
246 $this->addToMessage("<br/>");
247 $this->addToMessage( _("L'\"identifiant\" est obligatoire")."&nbsp;");
248 $this->addToMessage("[&nbsp;"._($this->clePrimaire)."&nbsp;]");
249 }
250 if ($this->typeCle == "A") {
251 $sql = "select count(*) from ".DB_PREFIXE.$this->table." ";
252 $sql .= "where ".$this->clePrimaire."='".$this->valF[$this->clePrimaire]."' ";
253 $nb = $db->getone($sql);
254 $this->addToLog("verifierAjout(): db->getone(\"".$sql."\");", VERBOSE_MODE);
255 if (database::isError($nb)) {
256 $this->erreur_db($nb->getDebugInfo(), $nb->getMessage(), '');
257 }else{
258 if ($nb > 0) {
259 $this->correct = false;
260 $this->addToMessage($nb." ");
261 $this->addToMessage( _("cle primaire existante"));
262 $this->addToMessage(" ".$this->table."<br />");
263 }
264 }
265 }
266 }
267
268
269 /**
270 * Cette methode permet d'executer la modification (MODE 'update') de
271 * l'objet dans la base de donnees.
272 *
273 * @param array $val
274 * @param object $db Objet de connexion DB
275 * @param boolean $DEBUG Mode debug (@deprecated)
276 */
277 function modifier($val = array(), &$db = NULL, $DEBUG = false) {
278
279 // Logger
280 $this->addToLog("modifier() - begin", EXTRA_VERBOSE_MODE);
281 // Recuperation de la valeur de la cle primaire de l'objet
282 if(isset($val[$this->clePrimaire]))
283 $id = $val[$this->clePrimaire];
284 else
285 $id=$this->id;
286 // Appel au mutateur de l'attribut valF de l'objet
287 $this->setValF($val);
288 // Verification de la validite des donnees
289 $this->verifier($val, $db, $DEBUG);
290 // Verification du verrou
291 $this->testverrou();
292 // Si les verifications precedentes sont correctes, on procede a
293 // la modification, sinon on ne fait rien et on affiche un message
294 // d'echec
295 if ($this->correct) {
296 // Execution du trigger 'before' specifique au MODE 'update'
297 $this->triggermodifier($id, $db, $val, $DEBUG);
298 // Execution de la requête de modification des donnees de l'attribut
299 // valF de l'objet dans l'attribut table de l'objet
300 $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_UPDATE, $this->getCle($id));
301 // Si une erreur survient
302 if (database::isError($res, true)) {
303 // Appel de la methode de recuperation des erreurs
304 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
305 } else {
306 // Log
307 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
308 // Log
309 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
310 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
311 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
312 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
313 $this->addToLog($message, VERBOSE_MODE);
314 // Message de validation
315 if ($db->affectedRows() == 0) {
316 $this->addToMessage(_("Attention vous n'avez fait aucune modification.")."<br/>");
317 } else {
318 $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");
319 }
320 // Mise en place du verrou pour ne pas valider plusieurs fois
321 // le meme formulaire
322 $this->verrouille();
323
324 // Execution du trigger 'after' specifique au MODE 'update'
325 $this->triggermodifierapres($id, $db, $val, $DEBUG);
326 }
327 } else {
328 // Message d'echec (saut d'une ligne supplementaire avant le
329 // message pour qu'il soit mis en evidence)
330 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
331 }
332 // Logger
333 $this->addToLog("modifier() - end", EXTRA_VERBOSE_MODE);
334 }
335
336
337 /**
338 * Cette methode permet d'executer la suppression (MODE 'delete') de
339 * l'objet dans la base de donnees.
340 *
341 * @param array $val
342 * @param object $db Objet de connexion DB
343 * @param boolean $DEBUG Mode debug (@deprecated)
344 */
345 function supprimer($val = array(), &$db = NULL, $DEBUG = false) {
346 // Logger
347 $this->addToLog("supprimer() - begin", EXTRA_VERBOSE_MODE);
348 // Recuperation de la valeur de la cle primaire de l'objet
349 if(isset($val[$this->clePrimaire]))
350 $id = $val[$this->clePrimaire];
351 else
352 $id=$this->id;
353 // Verification des contraintes d'integrite specifique au MODE 'delete'
354 $this->correct=true;
355 $this->cleSecondaire($id, $db, $val, $DEBUG);
356 // Verification du verrou
357 $this->testverrou();
358 // Si les verifications precedentes sont correctes, on procede a
359 // la suppression, sinon on ne fait rien et on affiche un message
360 // d'echec
361 if ($this->correct) {
362 // Execution du trigger 'before' specifique au MODE 'delete'
363 $this->triggersupprimer($id, $db, $val, $DEBUG);
364 // Construction de la requete de suppression de l'objet dans
365 // l'attribut table de l'objet
366 $sql = "delete from ".DB_PREFIXE.$this->table." where ".$this->getCle($id);
367 // Execution de la requete de suppression de l'objet
368 $res = $db->query($sql);
369 // Logger
370 $this->addToLog("supprimer(): db->query(\"".$sql."\");", VERBOSE_MODE);
371 // Si une erreur survient
372 if (database::isError($res, true)) {
373 // Appel de la methode de recuperation des erreurs
374 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
375 } else {
376 // Log
377 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
378 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
379 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
380 $message .= _("enregistrement(s) supprime(s)")."&nbsp;]";
381 $this->addToLog($message, VERBOSE_MODE);
382 // Message de validation
383 $this->addToMessage(_("La suppression a ete correctement effectuee.")."<br/>");
384 // Mise en place du verrou pour ne pas valider plusieurs fois
385 // le meme formulaire
386 $this->verrouille();
387
388 // Execution du trigger 'after' specifique au MODE 'delete'
389 $this->triggersupprimerapres($id, $db, $val, $DEBUG);
390 }
391 } else {
392 // Message d'echec (saut d'une ligne supplementaire avant le
393 // message pour qu'il soit mis en evidence)
394 $this->addToMessage("<br/>"._("SUPPRESSION NON EFFECTUEE")."<br/>");
395 }
396 // Logger
397 $this->addToLog("supprimer() - end", EXTRA_VERBOSE_MODE);
398 }
399
400 /**
401 * Methode de verification de l'unicite d'une valeur pour chaque elements du tableau unique_key,
402 * ainsi que l'unicite de la cle multiple unique_multiple_key.
403 *
404 * @param objet $db Objet Base de donnees
405 */
406 function checkUniqueKey() {
407 $unique=true;
408 //Verification des cles uniques
409 if(!empty($this->unique_key)) {
410 foreach ($this->unique_key as $constraint) {
411 if(!is_array($constraint)) {
412 if(!is_null ($this->valF[$constraint])) {
413 if(!$this->isUnique($constraint,$this->valF[$constraint])) {
414 $this->addToMessage( _("La valeur saisie dans le champ")." <span class=\"bold\">");
415 $this->addToMessage( (!defined('REST_REQUEST')) ? $this->form->lib[$constraint] : $constraint); // $this->REST
416 $this->addToMessage( "</span> "._("existe deja, veuillez saisir une nouvelle valeur.")."<br/>");
417 $unique=false;
418 }
419 }
420 } else {
421 //Verification du groupe de champs uniques
422 $oneIsNull=false;
423 if(!empty($constraint)) {
424 $valueMultiple=array();
425 foreach($constraint as $field) {
426 $valueMultiple[]=$this->valF[$field];
427 if(is_null($this->valF[$field])) {
428 $oneIsNull=true;
429 }
430 }
431 if(!$oneIsNull) {
432 if(!$this->isUnique($constraint,$valueMultiple)) {
433 foreach($constraint as $field) {
434 $temp[] = (!defined('REST_REQUEST')) ? $this->form->lib[$field] : $constraint; // $this->REST
435 }
436 $this->addToMessage( _("Les valeurs saisies dans les champs")." <span class=\"bold\">".implode("</span>, <span class=\"bold\">",$temp)."</span> "._("existent deja, veuillez saisir de nouvelles valeurs.")."<br/>");
437 $unique=false;
438 }
439 }
440 }
441 }
442 }
443 }
444 if(!$unique) {
445 $this->correct = false;
446 }
447 }
448
449
450
451 /**
452 * Methode permettant de requeter la base afin de definir la validite du champ unique
453 *
454 * @param string $champ nom du champ unique
455 * @param string $value valeur à inserer dans la colonne
456 */
457 function isUnique($champ,$value) {
458 //Test sur un groupe de champs
459 if(is_array($champ) and is_array($value)) {
460 $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".implode(" = ? AND ",$champ)." = ?";
461 } else {
462 //Test sur un champ
463 $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".$champ." = ?";
464 }
465 if($this->getParameter('maj')) {
466 $sql .= " AND ".$this->clePrimaire." \!= ".$this->valF[$this->clePrimaire];
467 }
468 $nb = $this->db->getone($sql,$value);
469 $this->addToLog("isUnique() : db->getone(\"".$sql."\");", VERBOSE_MODE);
470 if (database::isError($nb, true)) {
471 // Affichage de l'erreur
472 $this->erreur_db($nb->getDebugInfo(), $nb->getMessage(), '');
473 return true;
474 } else {
475 //Si superieur a 0, pas unique
476 if ($nb > 0) {
477 return false;
478 } else {
479 return true;
480 }
481 }
482 }
483
484
485
486 /**
487 * Methode de verification des contraintes not null,
488 * affiche une erreur si nul.
489 *
490 * @param objet $db Objet Base de donnees
491 */
492 function checkRequired() {
493 foreach($this->required_field as $field) {
494 //Ne test la cle primaire car n'a pas de valeur a l'ajout
495 // la cle primaire est automatiquement cree
496 if ($field == $this->clePrimaire) {
497 continue;
498 }
499
500 $error = false;
501
502 /* En ajout - verification des requis
503
504 Fonctionnement formel de la condition:
505
506 SI le champ n'existe pas (est 'unset')
507 OU le champ est vide
508
509 ALORS le formulaire n'est pas correct
510
511 SINON le formulaire est correct
512
513 Explication:
514
515 Les champs verifies sont les champs requis. S'ils n'existent
516 pas en ajout ou qu'ils sont vide, un message apparait a l'ecran
517 avertissant l'utilisateur que certains champs doivent etre
518 remplis.
519
520 */
521 if ($this->getParameter('maj') == 0 and
522 (!isset($this->valF[$field]) or $this->valF[$field] == '')) {
523 $error = true;
524 $this->correct = false;
525
526 /* En modification - verification des requis
527
528 Fonctionnement formel de la condition:
529
530 SI le champ existe (est 'set')
531 ET le champ est vide
532
533 ALORS le formulaire n'est pas correct
534
535 SINON le formulaire est correct
536
537 Explication:
538
539 Les champs verifies sont les champs requis. S'ils existent
540 et qu'ils sont vides alors un message apparait a l'ecran
541 avertissant l'utilisateur que certains champs doivent etre
542 remplis. Si ces champs sont tous saisis, le formulaire est
543 correctement soumis. Par contre, si l'un des champs requis
544 n'existe pas au moment de verification (il aurait ete 'unset'),
545 il ne sera pas verifie, n'entrainera pas de formulaire incorrect
546 et ne sera pas insere dans la base de donnees.
547
548 Faire un 'unset' permet de ne pas mettre a jour certaines
549 donnees sensibles en base a chaque soumission de formulaire.
550
551 Faire un 'unset' permet egalement d'outre passer cette condition
552 en mode de modification. On suppose qu'a l'ajout une valeur
553 a ete inseree dans un champ, et qu'il n'est plus necessaire
554 de verifier si ce champ est vide puisque sa valeur ne sera
555 pas modifiee en base. Elle sera donc conservee.
556
557 */
558 } elseif ($this->getParameter('maj') == 1
559 and isset($this->valF[$field])
560 and $this->valF[$field] == '') {
561 $error = true;
562 $this->correct = false;
563 }
564
565 // ajout du message d'erreur
566 if ($error == true) {
567 //$this->msg .= _('Le champ').' <span class="bold">'.($this->form->lib[$field]!=""?$this->form->lib[$field]:_($field)).'</span> '._('est obligatoire').".<br/>";
568 $this->addToMessage( _('Le champ').' <span class="bold">'.((!defined('REST_REQUEST')) ? $this->form->lib[$field] :_($field)).'</span> '._('est obligatoire').".<br/>"); // $this->REST
569 }
570 }
571 }
572
573
574
575
576
577 /**
578 *
579 */
580 function message() {
581
582 // do not output anything in case of a REST request
583 if (defined('REST_REQUEST')) {
584 return;
585 }
586
587 if ($this->msg != "") {
588
589 //
590 $m = new message();
591
592 //
593 if ($this->correct) {
594 $class = "valid";
595 } else {
596 $class = "error";
597 }
598 $m->displayMessage($class, $this->msg);
599
600 }
601
602 }
603
604
605
606 /**
607 * Cette methode ne doit plus etre appelee, c'est 'message::isError($res)'
608 * qui s'occupe d'afficher le message d'erreur et de faire le 'die()'.
609 *
610 * @deprecated
611 */
612 function erreur_db($debuginfo, $messageDB, $table) {
613 if (!defined('REST_REQUEST')) { // $this->REST
614 die(_("Erreur de base de donnees. Contactez votre administrateur."));
615 } else {
616 $this->errors['db_debuginfo'] = $debuginfo;
617 $this->errors['db_message'] = $messageDB;
618 $this->addToLog("Erreur de BD pour table ".$table ." avec message: \"".$messageDB.
619 "\" et debug info \"".$debuginfo."\"", VERBOSE_MODE);
620 }
621 }
622
623
624 /**
625 *
626 */
627 function addToLog($message, $type = DEBUG_MODE) {
628 if (defined('REST_REQUEST')) { // dans le cas d'utilisation du REST $this->REST
629 logger::instance()->log("REST request class ".get_class($this)." - ".$message, $type);
630 } else {
631 logger::instance()->log("class ".get_class($this)." - ".$message, $type);
632 }
633 }
634
635 // }}}
636
637 /**
638 * Cette methode vide les valeurs des erreurs du tableau errors.
639 */
640 function clearErrors() {
641 foreach (array_keys($this->errors) as $key) {
642 $this->errors[$key] = '';
643 }
644 }
645 }
646
647 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26