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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1911 - (hide annotations)
Mon May 27 13:34:18 2013 UTC (11 years, 8 months ago) by fmichon
File size: 32027 byte(s)
Déplacement des méthodes de gestion des métadonnées pour améliorer la lisibilité

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26