/[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 1910 - (show annotations)
Mon May 27 12:57:22 2013 UTC (11 years, 8 months ago) by fmichon
File size: 31999 byte(s)
Déplacement des méthodes concernant la gestion des métadonnées pour améliorer la lisibilité du fichier

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 // {{{ GESTION DES METADONNEES
26
27 /**
28 * Liste des métadonnées communes à l'ensemble des objets de l'application
29 */
30 var $metadata_global = array(
31 "code_produit" => "getCodeProduit",
32 "groupe" => "getGroupe",
33 );
34
35 /**
36 * Retourne le code produit défini dans le paramétrage
37 * @return string code produit (OpenADS)
38 */
39 protected function getCodeProduit() {
40 return $this->f->getParameter("code_produit");
41 }
42
43 /**
44 * Retourne le groupe des dossiers d'instruction géré par l'application
45 * @return string groupe (ADS)
46 */
47 protected function getGroupe() {
48 return $this->f->getParameter("groupe_instruction");
49 }
50
51 // }}}
52
53
54 /**
55 *
56 */
57 var $om_formulaire = "om_formulaire";
58
59 /**
60 * Constructeur
61 *
62 * @param string $id
63 * @param object $db Objet de connexion DB
64 * @param boolean $DEBUG Mode debug (@deprecated)
65 */
66 function constructeur($id, &$db, $DEBUG = false) {
67 if (defined('REST_REQUEST')) { // $this->REST
68 logger::instance()->display_log = false;
69 }
70 //
71 if (isset($GLOBALS["f"])) {
72 $this->f = $GLOBALS["f"];
73 }
74 // Le framework REST est utilisee
75 $this->errors = array();
76
77 // Affectation de l'identifiant de base de donnees dans l'attribut db
78 // de l'objet
79 $this->db = $db;
80 // Inclusion du fichier de parametre de la table pour recuperer les
81 // trois parametres permettant de construire la requete de selection
82 // $champs - clause select
83 // $tableSelect - clause from
84 // $selection - clause where
85 $fichier = "../sql/".$this->db->phptype."/".$this->table.".form.inc.php";
86 if (file_exists($fichier)) {
87 include $fichier;
88 } else {
89 $fichier = "../sql/".$this->db->phptype."/".$this->table.".form.inc";
90 if (file_exists($fichier)) {
91 include $fichier;
92 }
93 }
94
95 // Sauvegarde des actions contextuelles supplementaires
96 if (isset($portlet_actions)) {
97 $this->actions_sup = $portlet_actions;
98 }
99
100 // Concatenation des champs pour constitution de la clause select
101 $listeChamp = "";
102 foreach ($champs as $elem) {
103 $listeChamp .= $elem.",";
104 }
105 // Suppresion de la derniere virgule
106 $listeChamp = substr($listeChamp, 0, strlen($listeChamp)-1);
107 // Initialisation de la variable selection
108 if (!isset($selection)) {
109 $selection = "";
110 }
111 // Concatenation de la requete de selection
112 $sql = " select ".$listeChamp." from ".$tableSelect." ";
113 // Si mode ajout
114 if ($id == "]") {
115 // Remplacement du 'and' par 'where' dans la varibale $selection
116 $selection = ltrim($selection);
117 if (strtolower(substr($selection, 0, 3)) == "and") {
118 $selection = " where ".substr($selection, 4, strlen($selection));
119 }
120 } else { // Si mode modification ou suppression
121 // Clause where en fonction du type de la cle primaire
122 if ($this->typeCle == "A") {
123 $sql .= " where ".$this->table.".".$this->clePrimaire." like '".$id."' ";
124 } else {
125 $sql .= " where ".$this->table.".".$this->clePrimaire." = ".$id." ";
126 }
127 }
128 $sql .= " ".$selection." ";
129 // Execution de la requete
130 $res = $db->limitquery($sql, 0, 1);
131 // Logger
132 $this->addToLog("constructeur(): db->limitquery(\"".str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
133 // Si une erreur survient
134 if (database::isError($res, true)) {
135 // Appel de la methode de recuperation des erreurs
136 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), $tableSelect);
137 } else {
138 // Recuperation des informations sur la structure de la table
139 // ??? compatibilite POSTGRESQL (len = -1, type vide, flags vide)
140 $info = $res->tableInfo();
141 // Initialisation de la cle a 0
142 $i = 0;
143 // Recuperation du nom de chaque champ dans l'attribut 'champs'
144 foreach ($info as $elem) {
145 $this->champs[$i++] = $elem['name'];
146 }
147 // ??? Le $i devrait etre initialises a 0 pour chaque attribut suivant
148 // Recuperation de la taille de chaque champ dans l'attibut 'longueurMax'
149 foreach ($info as $elem) {
150 $this->longueurMax[$i++] = $elem['len'];
151 }
152 // Recuperation du type de chaque champ dans l'attribut 'type'
153 // ??? Non utilise
154 foreach ($info as $elem) {
155 $this->type[$i++] = $elem['type'];
156 }
157 // Recuperation du flag de chaque champ dans l'attribut 'flags'
158 // ??? Non utilise
159 foreach ($info as $elem) {
160 $this->flags[$i++] = $elem['flags'];
161 }
162 // Recuperation de l'enregistrement resultat de la requete
163 while ($row =& $res->fetchRow()) {
164 // Initialisation de la cle a 0
165 $i = 0;
166 // Recuperation de la valeur de chaque champ dans l'attribut 'val'
167 foreach ($row as $elem) {
168 $this->val[$i] = $elem;
169 if (defined('REST_REQUEST')) { // $this->REST
170 $this->valF[$this->champs[$i]] = $elem;
171 }
172 $i++;
173 }
174 }
175 }
176 }
177
178 /**
179 * Cette methode permet d'executer l'ajout (MODE 'insert') de l'objet dans
180 * la base de donnees.
181 *
182 * @param array $val
183 * @param object $db Objet de connexion DB
184 * @param boolean $DEBUG Mode debug (@deprecated)
185 */
186 function ajouter($val, &$db = NULL, $DEBUG = false) {
187 // Logger
188 $this->addToLog("ajouter() - begin", EXTRA_VERBOSE_MODE);
189 // Mutateur de valF
190 $this->setValF($val);
191 // Mutateur de valF specifique a l'ajout
192 $this->setValFAjout($val);
193 // Verification de la validite des donnees
194 $this->verifier($val, $db, $DEBUG);
195 // Verification specifique au MODE 'insert' de la validite des donnees
196 $this->verifierAjout($val, $db);
197 // Verification du verrou
198 $this->testverrou();
199 // Si les verifications precedentes sont correctes, on procede a
200 // l'ajout, sinon on ne fait rien et on affiche un message d'echec
201 if ($this->correct) {
202 // Appel au mutateur pour le calcul de la cle primaire (si la cle
203 // est automatique) specifique au MODE 'insert'
204 $this->setId($db);
205 // Execution du trigger 'before' specifique au MODE 'insert'
206 // Le premier parametre est vide car en MODE 'insert'
207 // l'enregistrement n'existe pas encore donc il n'a pas
208 // d'identifiant
209 $this->triggerajouter("", $db, $val, $DEBUG);
210 //Traitement des fichiers uploadé
211 $retTraitementFichier = $this->traitementFichierUpload();
212 if($retTraitementFichier === true) {
213 // Execution de la requete d'insertion des donnees de l'attribut
214 // valF de l'objet dans l'attribut table de l'objet
215 $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_INSERT);
216 // Si une erreur survient
217 if (database::isError($res, true)) {
218 // Appel de la methode de recuperation des erreurs
219 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
220 } else {
221 // Log
222 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
223 // Log
224 $message = _("Enregistrement")."&nbsp;".$this->valF[$this->clePrimaire]."&nbsp;";
225 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
226 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
227 $message .= _("enregistrement(s) ajoute(s)")."&nbsp;]";
228 $this->addToLog($message, VERBOSE_MODE);
229 // Message de validation
230 $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");
231 // Mise en place du verrou pour ne pas valider plusieurs fois
232 // le meme formulaire
233 $this->verrouille();
234 // Execution du trigger 'after' specifique au MODE 'insert'
235 // Le premier parametre est vide car en MODE 'insert'
236 // l'enregistrement n'existe pas encore donc il n'a pas
237 // d'identifiant
238 $this->triggerajouterapres("", $db, $val, $DEBUG);
239 }
240 } else {
241 $this->correct = false;
242 $this->addToMessage($retTraitementFichier);
243 $this->addToMessage(_("SAISIE NON ENREGISTREE"));
244 }
245 } else {
246 // Message d'echec (saut d'une ligne supplementaire avant le
247 // message pour qu'il soit mis en evidence)
248 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
249 }
250 // Logger
251 $this->addToLog("ajouter() - end", EXTRA_VERBOSE_MODE);
252 }
253
254 /**
255 * Cette methode permet d'executer la modification (MODE 'update') de
256 * l'objet dans la base de donnees.
257 *
258 * @param array $val
259 * @param object $db Objet de connexion DB
260 * @param boolean $DEBUG Mode debug (@deprecated)
261 */
262 function modifier($val = array(), &$db = NULL, $DEBUG = false) {
263 // Logger
264 $this->addToLog("modifier() - begin", EXTRA_VERBOSE_MODE);
265 // Recuperation de la valeur de la cle primaire de l'objet
266 if(isset($val[$this->clePrimaire]))
267 $id = $val[$this->clePrimaire];
268 else
269 $id=$this->id;
270 // Appel au mutateur de l'attribut valF de l'objet
271 $this->setValF($val);
272 // Verification de la validite des donnees
273 $this->verifier($val, $db, $DEBUG);
274 // Verification du verrou
275 $this->testverrou();
276 // Si les verifications precedentes sont correctes, on procede a
277 // la modification, sinon on ne fait rien et on affiche un message
278 // d'echec
279 if ($this->correct) {
280 // Execution du trigger 'before' specifique au MODE 'update'
281 $this->triggermodifier($id, $db, $val, $DEBUG);
282 //Traitement des fichiers uploadé
283 $retTraitementFichier = $this->traitementFichierUpload();
284 if($retTraitementFichier === true) {
285 // Execution de la requête de modification des donnees de l'attribut
286 // valF de l'objet dans l'attribut table de l'objet
287 $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_UPDATE, $this->getCle($id));
288 // Si une erreur survient
289 if (database::isError($res, true)) {
290 // Appel de la methode de recuperation des erreurs
291 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
292 } else {
293 // Log
294 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
295 // Log
296 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
297 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
298 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
299 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
300 $this->addToLog($message, VERBOSE_MODE);
301 // Message de validation
302 if ($db->affectedRows() == 0) {
303 $this->addToMessage(_("Attention vous n'avez fait aucune modification.")."<br/>");
304 } else {
305 $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");
306 }
307 // Mise en place du verrou pour ne pas valider plusieurs fois
308 // le meme formulaire
309 $this->verrouille();
310 // Execution du trigger 'after' specifique au MODE 'update'
311 $this->triggermodifierapres($id, $db, $val, $DEBUG);
312 }
313 } else {
314 $this->correct = false;
315 $this->addToMessage($retTraitementFichier);
316 $this->addToMessage(_("SAISIE NON ENREGISTREE"));
317 }
318 } else {
319 // Message d'echec (saut d'une ligne supplementaire avant le
320 // message pour qu'il soit mis en evidence)
321 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
322 }
323 // Logger
324 $this->addToLog("modifier() - end", EXTRA_VERBOSE_MODE);
325 }
326
327 /**
328 * Cette methode permet d'executer la suppression (MODE 'delete') de
329 * l'objet dans la base de donnees.
330 *
331 * @param array $val
332 * @param object $db Objet de connexion DB
333 * @param boolean $DEBUG Mode debug (@deprecated)
334 */
335 function supprimer($val = array(), &$db = NULL, $DEBUG = false) {
336 // Logger
337 $this->addToLog("supprimer() - begin", EXTRA_VERBOSE_MODE);
338 // Recuperation de la valeur de la cle primaire de l'objet
339 if(isset($val[$this->clePrimaire]))
340 $id = $val[$this->clePrimaire];
341 else
342 $id=$this->id;
343 // Verification des contraintes d'integrite specifique au MODE 'delete'
344 $this->correct=true;
345 $this->cleSecondaire($id, $db, $val, $DEBUG);
346 // Verification du verrou
347 $this->testverrou();
348 // Si les verifications precedentes sont correctes, on procede a
349 // la suppression, sinon on ne fait rien et on affiche un message
350 // d'echec
351 if ($this->correct) {
352 // Execution du trigger 'before' specifique au MODE 'delete'
353 $this->triggersupprimer($id, $db, $val, $DEBUG);
354 //Traitement des fichiers uploadé
355 $retTraitementFichier = $this->traitementFichierUpload();
356 if($retTraitementFichier === true) {
357 // Construction de la requete de suppression de l'objet dans
358 // l'attribut table de l'objet
359 $sql = "delete from ".DB_PREFIXE.$this->table." where ".$this->getCle($id);
360 // Execution de la requete de suppression de l'objet
361 $res = $db->query($sql);
362 // Logger
363 $this->addToLog("supprimer(): db->query(\"".$sql."\");", VERBOSE_MODE);
364 // Si une erreur survient
365 if (database::isError($res, true)) {
366 // Appel de la methode de recuperation des erreurs
367 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
368 } else {
369 // Log
370 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
371 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
372 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
373 $message .= _("enregistrement(s) supprime(s)")."&nbsp;]";
374 $this->addToLog($message, VERBOSE_MODE);
375 // Message de validation
376 $this->addToMessage(_("La suppression a ete correctement effectuee.")."<br/>");
377 // Mise en place du verrou pour ne pas valider plusieurs fois
378 // le meme formulaire
379 $this->verrouille();
380 // Execution du trigger 'after' specifique au MODE 'delete'
381 $this->triggersupprimerapres($id, $db, $val, $DEBUG);
382 }
383 } else {
384 $this->correct = false;
385 $this->addToMessage($retTraitementFichier);
386 $this->addToMessage(_("SAISIE NON ENREGISTREE"));
387 }
388 } else {
389 // Message d'echec (saut d'une ligne supplementaire avant le
390 // message pour qu'il soit mis en evidence)
391 $this->addToMessage("<br/>"._("SUPPRESSION NON EFFECTUEE")."<br/>");
392 }
393 // Logger
394 $this->addToLog("supprimer() - end", EXTRA_VERBOSE_MODE);
395 }
396
397 /**
398 * Methode de verification de l'unicite d'une valeur pour chaque elements du tableau unique_key,
399 * ainsi que l'unicite de la cle multiple unique_multiple_key.
400 *
401 * @param objet $db Objet Base de donnees
402 */
403
404 function checkUniqueKey() {
405 $unique=true;
406 //Verification des cles uniques
407 if(!empty($this->unique_key)) {
408 foreach ($this->unique_key as $constraint) {
409 if(!is_array($constraint)) {
410 if(!is_null ($this->valF[$constraint])) {
411 if(!$this->isUnique($constraint,$this->valF[$constraint])) {
412 $this->addToMessage( _("La valeur saisie dans le champ")." <span class=\"bold\">");
413 $this->addToMessage( (!defined('REST_REQUEST')) ? $this->form->lib[$constraint] : $constraint); // $this->REST
414 $this->addToMessage( "</span> "._("existe deja, veuillez saisir une nouvelle valeur.")."<br/>");
415 $unique=false;
416 }
417 }
418 } else {
419 //Verification du groupe de champs uniques
420 $oneIsNull=false;
421 if(!empty($constraint)) {
422 $valueMultiple=array();
423 foreach($constraint as $field) {
424 $valueMultiple[]=$this->valF[$field];
425 if(is_null($this->valF[$field])) {
426 $oneIsNull=true;
427 }
428 }
429 if(!$oneIsNull) {
430 if(!$this->isUnique($constraint,$valueMultiple)) {
431 foreach($constraint as $field) {
432 $temp[] = (!defined('REST_REQUEST')) ? $this->form->lib[$field] : $constraint; // $this->REST
433 }
434 $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/>");
435 $unique=false;
436 }
437 }
438 }
439 }
440 }
441 }
442 if(!$unique) {
443 $this->correct = false;
444 }
445 }
446
447 /**
448 * Methode permettant de requeter la base afin de definir la validite du champ unique
449 *
450 * @param string $champ nom du champ unique
451 * @param string $value valeur à inserer dans la colonne
452 */
453 function isUnique($champ,$value) {
454 //Test sur un groupe de champs
455 if(is_array($champ) and is_array($value)) {
456 $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".implode(" = ? AND ",$champ)." = ?";
457 } else {
458 //Test sur un champ
459 $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".$champ." = ?";
460 }
461 if($this->getParameter('maj')) {
462 $sql .= " AND ".$this->clePrimaire." \!= ".$this->valF[$this->clePrimaire];
463 }
464 $nb = $this->db->getone($sql,$value);
465 $this->addToLog("isUnique() : db->getone(\"".$sql."\");", VERBOSE_MODE);
466 if (database::isError($nb, true)) {
467 // Affichage de l'erreur
468 $this->erreur_db($nb->getDebugInfo(), $nb->getMessage(), '');
469 return true;
470 } else {
471 //Si superieur a 0, pas unique
472 if ($nb > 0) {
473 return false;
474 } else {
475 return true;
476 }
477 }
478 }
479
480 /**
481 * Methode de verification des contraintes not null,
482 * affiche une erreur si nul.
483 *
484 * @param objet $db Objet Base de donnees
485 */
486 function checkRequired() {
487 foreach($this->required_field as $field) {
488 //Ne test la cle primaire car n'a pas de valeur a l'ajout
489
490 // la cle primaire est automatiquement cree
491 if ($field == $this->clePrimaire) {
492 continue;
493 }
494
495 $error = false;
496
497 /* En ajout - verification des requis
498
499 Fonctionnement formel de la condition:
500
501 SI le champ n'existe pas (est 'unset')
502 OU le champ est vide
503
504 ALORS le formulaire n'est pas correct
505
506 SINON le formulaire est correct
507
508 Explication:
509
510 Les champs verifies sont les champs requis. S'ils n'existent
511 pas en ajout ou qu'ils sont vide, un message apparait a l'ecran
512 avertissant l'utilisateur que certains champs doivent etre
513 remplis.
514
515 */
516 if ($this->getParameter('maj') == 0 and
517 (!isset($this->valF[$field]) or $this->valF[$field] == '')) {
518
519 $error = true;
520 $this->correct = false;
521
522 /* En modification - verification des requis
523
524 Fonctionnement formel de la condition:
525
526 SI le champ existe (est 'set')
527 ET le champ est vide
528
529 ALORS le formulaire n'est pas correct
530
531 SINON le formulaire est correct
532
533 Explication:
534
535 Les champs verifies sont les champs requis. S'ils existent
536 et qu'ils sont vides alors un message apparait a l'ecran
537 avertissant l'utilisateur que certains champs doivent etre
538 remplis. Si ces champs sont tous saisis, le formulaire est
539 correctement soumis. Par contre, si l'un des champs requis
540 n'existe pas au moment de verification (il aurait ete 'unset'),
541 il ne sera pas verifie, n'entrainera pas de formulaire incorrect
542 et ne sera pas insere dans la base de donnees.
543
544 Faire un 'unset' permet de ne pas mettre a jour certaines
545 donnees sensibles en base a chaque soumission de formulaire.
546
547 Faire un 'unset' permet egalement d'outre passer cette condition
548 en mode de modification. On suppose qu'a l'ajout une valeur
549 a ete inseree dans un champ, et qu'il n'est plus necessaire
550 de verifier si ce champ est vide puisque sa valeur ne sera
551 pas modifiee en base. Elle sera donc conservee.
552
553 */
554 } elseif ($this->getParameter('maj') == 1
555 and isset($this->valF[$field])
556 and $this->valF[$field] == '') {
557
558 $error = true;
559 $this->correct = false;
560 }
561
562 // ajout du message d'erreur
563 if ($error == true) {
564 //$this->msg .= _('Le champ').' <span class="bold">'.($this->form->lib[$field]!=""?$this->form->lib[$field]:_($field)).'</span> '._('est obligatoire').".<br/>";
565 $this->addToMessage( _('Le champ').' <span class="bold">'.((!defined('REST_REQUEST')) ? $this->form->lib[$field] :_($field)).'</span> '._('est obligatoire').".<br/>"); // $this->REST
566 }
567 }
568 }
569
570
571
572
573
574 /**
575 *
576 */
577 function message() {
578
579 // do not output anything in case of a REST request
580 if (defined('REST_REQUEST')) {
581 return;
582 }
583
584 if ($this->msg != "") {
585
586 //
587 if ($this->correct) {
588 $class = "valid";
589 } else {
590 $class = "error";
591 }
592 $this->f->displayMessage($class, $this->msg);
593
594 }
595
596 }
597
598
599
600 /**
601 * Cette methode ne doit plus etre appelee, c'est 'message::isError($res)'
602 * qui s'occupe d'afficher le message d'erreur et de faire le 'die()'.
603 *
604 * @deprecated
605 */
606 function erreur_db($debuginfo, $messageDB, $table) {
607 if (!defined('REST_REQUEST')) { // $this->REST
608 die(_("Erreur de base de donnees. Contactez votre administrateur."));
609 } else {
610 $this->errors['db_debuginfo'] = $debuginfo;
611 $this->errors['db_message'] = $messageDB;
612 $this->addToLog("Erreur de BD pour table ".$table ." avec message: \"".$messageDB.
613 "\" et debug info \"".$debuginfo."\"", VERBOSE_MODE);
614 }
615 }
616
617
618 /**
619 *
620 */
621 function addToLog($message, $type = DEBUG_MODE) {
622 if (defined('REST_REQUEST')) { // dans le cas d'utilisation du REST $this->REST
623 logger::instance()->log("REST request class ".get_class($this)." - ".$message, $type);
624 } else {
625 logger::instance()->log("class ".get_class($this)." - ".$message, $type);
626 }
627 }
628
629 // }}}
630
631 /**
632 * Cette methode vide les valeurs des erreurs du tableau errors.
633 */
634 function clearErrors() {
635 foreach (array_keys($this->errors) as $key) {
636 $this->errors[$key] = '';
637 }
638 }
639
640 /**
641 * Méthode pour convertir une date Y-m-d en d/m/Y
642 */
643 function dateDBToForm($date) {
644 if($date == "") {
645 return "";
646 }
647 $dateFormat = new DateTime($date);
648 return $dateFormat->format('d/m/Y');
649 }
650
651
652 function init_select(&$form = null, &$db = null, $maj, $debug, $field, $sql,
653 $sql_by_id, $om_validite = false, $multiple = false) {
654
655 // MODE AJOUTER et MODE MODIFIER
656 if ($maj < 2) {
657
658 $contenu = array();
659 $res = $db->query($sql);
660 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
661 // verification d'une eventuelle erreur
662 if (database::isError($res)) {
663 die($res->getMessage().$sql);
664 } else {
665 // Initialisation du select
666 $contenu[0][0] = '';
667 $contenu[1][0] = _('choisir')."&nbsp;"._($field);
668 //
669 $k=1;
670 while($row =& $res->fetchRow()){
671 $contenu[0][$k] = $row[0];
672 $contenu[1][$k] = $row[1];
673 $k++;
674 }
675 // gestion des objets a date de validite
676 if ($om_validite == true) {
677
678 // ajout de la valeur manquante a $contenu si necessaire
679 if ($maj == 1) {
680
681 if (!in_array($this->form->val[$field], $contenu[0])) {
682
683 //
684 $this->getSelectOldValue($form, $maj, $db, $contenu,
685 $sql_by_id, $field);
686 } else {
687
688 $empty = true;
689 foreach ($this->form->val as $f => $value) {
690 if (!empty($value)) {
691 $empty = false;
692 }
693 }
694
695 //
696 if ($empty == true and
697 $_POST[$field] != '') {
698
699 $this->getSelectOldValue($form, $maj, $db,
700 $contenu, $sql_by_id,
701 $field,
702 $_POST[$field]);
703 }
704 }
705 }
706 }
707
708 //
709 $form->setSelect($field, $contenu);
710 }
711 }
712
713 // MODE SUPPRIMER et MODE CONSULTER
714 if ($maj == 2 or $maj == 3) {
715 // Initialisation du select
716 $contenu[0][0] = '';
717 $contenu[1][0] = '';
718
719 if (isset($this->form->val[$field]) and
720 !empty($this->form->val[$field]) and $sql_by_id) {
721 //
722 if ($multiple == true) {
723 $val_field = "'".str_replace(",", "','",$this->form->val[$field])."'";
724 } else {
725 $val_field = $this->form->val[$field];
726 }
727
728 // ajout de l'identifiant recherche a la requete
729 $sql_by_id = str_replace('<idx>', $val_field, $sql_by_id);
730
731 // execution
732 $result = $db->query($sql_by_id);
733 $this->addToLog("setSelect(): db->query(".$sql_by_id.");", VERBOSE_MODE);
734 if (database::isError($result)) {
735 die($result->getMessage().$sql_by_id);
736 }
737
738 $row =& $result->fetchRow();
739 $contenu[0][0] = $row[0];
740 $contenu[1][0] = $row[1];
741
742 $k=1;
743 while($row =& $result->fetchRow()){
744 $contenu[0][$k] = $row[0];
745 $contenu[1][$k] = $row[1];
746 $k++;
747 }
748 }
749
750 $form->setSelect($field, $contenu);
751 }
752 }
753
754 // {{{ SURCHARGES DES LIBELLES DES BOUTONS
755
756 /**
757 * Cette methode permet d'afficher le bouton de validation du formulaire
758 *
759 * @param integer $maj Mode de mise a jour
760 * @return void
761 */
762 function bouton($maj) {
763
764 if (!$this->correct) {
765 //
766 if ($maj == 2) {
767 $bouton = _("Supprimer");
768 } else {
769 if ($maj == 1) {
770 $bouton = _("Modifier");
771 } else {
772 $bouton = _("Ajouter");
773 }
774 }
775 ////
776 //$bouton .= "&nbsp;"._("l'enregistrement de la table")."&nbsp;:";
777 //$bouton .= "&nbsp;'"._($this->table)."'";
778 //
779 $params = array(
780 "value" => $bouton,
781 "class" => "btn btn-primary",
782 );
783 //
784 $this->f->layout->display_form_button($params);
785 }
786
787 }
788
789 /**
790 *
791 */
792 function boutonsousformulaire($datasubmit, $maj, $val=null) {
793
794 if (!$this->correct) {
795 //
796 switch ($maj) {
797 case 0:
798 $bouton = _("Ajouter");
799 break;
800 case 1:
801 $bouton = _("Modifier");
802 break;
803 case 2:
804 $bouton = _("Supprimer");
805 break;
806 }
807 ////
808 //$bouton .= "&nbsp;"._("l'enregistrement de la table")."&nbsp;:";
809 //$bouton .= "&nbsp;'"._($this->table)."'";
810 //
811 $params = array(
812 "class" => "",
813 "value" => $bouton,
814 "onclick" => "affichersform('".get_class($this)."', '$datasubmit', this.form);return false;",
815 );
816 //
817 $this->f->layout->display_form_button($params);
818 }
819
820 }
821 // }}}
822 }
823
824 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26