/[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 1924 - (show annotations)
Mon May 27 18:08:53 2013 UTC (11 years, 8 months ago) by softime
File size: 31736 byte(s)
Oubli d'enlever une référence à la métédata groupe_instruction

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26