/[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 684 - (hide annotations)
Wed Nov 14 11:24:22 2012 UTC (12 years, 2 months ago) by nhaye
File size: 42521 byte(s)
Correction du parrent de virtual_dbform,
la méthode canAccess est maintenant appellée dans la méthode formulaire.

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    
25     /**
26     *
27     */
28     var $om_formulaire = "om_formulaire";
29    
30 mlimic 515
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 mlimic 516 //print '$sql:'.$sql.' ';
107 mlimic 515 // 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 nhaye 684 /**
401     * Surcharge de la méthode formulaire afin d'y ajouter
402     * la méthode de verification d'accès à l'élément
403     *
404     */
405     function formulaire($enteteTab, $validation, $maj, &$db, $postVar, $aff,
406     $DEBUG = false, $idx, $premier = 0, $recherche = "",
407     $tricol = "", $idz = "", $selectioncol = "",
408     $advs_id = "", $valide = "", $retour = "", $actions = array(),
409     $extra_parameters = array()) {
410    
411     // Mode debug desactive
412     $DEBUG = false;
413     // Affectation des parametres dans un tableau associatif pour le
414     // stocker en attribut de l'objet
415     $parameters = array(
416     "aff" => $aff,
417     "validation" => $validation,
418     "maj" => $maj,
419     "idx" => $idx,
420     "premier" => $premier,
421     "recherche" => $recherche,
422     "tricol" => $tricol,
423     "idz" => $idz,
424     "selectioncol" => $selectioncol,
425     "advs_id" => $advs_id,
426     "valide" => $valide,
427     "retour" => $retour,
428     );
429     // Affectation du tableau precedant dans l'attribut 'parameters'
430     $this->setParameters($parameters);
431     // Affectation du tableau passe en parametre dans l'attribut 'parameters'
432     $this->setParameters($extra_parameters);
433     // Ouverture de la balise form si pas en consultation
434     if($maj!=3) {
435     echo "\n<!-- ########## START DBFORM ########## -->\n";
436     echo "<form";
437     echo " method=\"post\"";
438     echo " name=\"f1\"";
439     echo " action=\"";
440     echo $this->getDataSubmit();
441     echo "\"";
442     echo ">\n";
443     }
444     // Compatibilite anterieure - On decremente la variable validation
445     $this->setParameter("validation", $this->getParameter("validation") - 1);
446     // Instanciation de l'objet formulaire
447     $this->form = new $this->om_formulaire($enteteTab, $this->getParameter("validation"), $maj, $this->champs, $this->val, $this->longueurMax);
448     // Valorisation des variables formulaires
449     $this->setVal($this->form, $maj, $this->getParameter("validation"), $this->db, $DEBUG);
450     $this->setType($this->form, $maj);
451     $this->setLib($this->form, $maj);
452     $this->setTaille($this->form, $maj);
453     $this->setMax($this->form, $maj);
454     $this->setSelect($this->form, $maj, $this->db, $DEBUG);
455     $this->setOnchange($this->form, $maj);
456     $this->setOnkeyup($this->form, $maj);
457     $this->setOnclick($this->form, $maj);
458     $this->setGroupe($this->form, $maj);
459     $this->setRegroupe($this->form, $maj);
460     $this->setLayout($this->form, $maj);
461     $this->setRequired($this->form, $maj);
462     //
463     $this->form->recupererPostvar($this->champs, $this->getParameter("validation"), $postVar, $DEBUG);
464     // Si le formulaire a ete valide
465     if ($this->getParameter("validation") > 0) {
466     // Appel des methodes en fonction du mode pour inserer, modifier ou
467     // supprimer l'objet de/dans la base de donnees.
468     if ($maj == 2) {
469     // (MODE 'delete')
470     $db->autoCommit(false);
471     $this->supprimer($this->form->val, $this->db, $DEBUG);
472     $db->commit();
473     } else {
474     if ($maj == 1) {
475     // (MODE 'update')
476     $db->autoCommit(false);
477     $this->modifier($this->form->val, $this->db, $DEBUG);
478     $db->commit();
479     } else {
480     // (MODE 'insert')
481     $db->autoCommit(false);
482     $this->ajouter($this->form->val, $this->db, $DEBUG) ;
483     $db->commit();
484     }
485     }
486     }
487     // Desactivation du verrou
488     $this->deverrouille($this->getParameter("validation"));
489     // Si le formulaire a ete valide
490     if ($this->getParameter("validation") > 0) {
491     // Affichage du message avant d'afficher le formulaire
492     $this->message();
493     // Si le formulaire est valide
494     if ($this->correct) {
495     // Affichage du bouton retour
496     $this->retour($premier, $recherche, $tricol);
497     }
498     }
499     //Test les droits d'accès à l'élément.
500     if(!$this->canAccess() AND $maj != 0) {
501     //
502     $message_class = "error";
503     $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
504     "droits pour acceder a cette page.");
505     $this->f->addToMessage($message_class, $message);
506    
507     //
508     $this->f->setFlag(NULL);
509     $this->f->display();
510    
511     // Arrêt du script
512     die();
513     }
514     // Affichage du contenu du formulaire
515     $this->form->entete();
516    
517     // Portlet d'actions contextuelles
518     if ($maj == 3 and !empty($actions)) {
519    
520     // On surcharge les actions
521     if (!empty($this->actions_sup)) {
522     $actions = array_merge($actions, $this->actions_sup);
523     }
524    
525     // On retient seulement les actions de l'utilisateur
526     $user_actions = array();
527     foreach($actions as $action => $conf) {
528    
529     // Verification des droits
530     if (!isset($conf['rights'])
531     or $this->f->isAccredited($conf['rights']['list'],
532     $conf['rights']['operator'])) {
533    
534     // Preparation du tri
535     if (!isset($conf['ordre']) or empty($conf['ordre'])) {
536    
537     $this->actions_order[] = array($action);
538     } else if (!key_exists($conf['ordre'],
539     $this->actions_order)) {
540    
541     $this->actions_order[$conf['ordre']] = array($action);
542     } else {
543    
544     $this->actions_order[$conf['ordre']][] = $action;
545     asort($this->actions_order[$conf['ordre']]);
546     }
547    
548     // Verification de l'action (vide ou non)
549     if (!empty($conf['lien']) and $conf['lien'] != '#') {
550     $user_actions[$action] = $conf;
551     }
552     }
553     }
554    
555     ksort($this->actions_order);
556    
557     // Affichage du portlet d'actions s'il existe des actions
558     if (!empty($user_actions)) {
559     $this->form->afficher_portlet($idx, $user_actions,
560     $this->actions_order);
561     }
562     }
563    
564     $this->form->afficher($this->champs, $this->getParameter("validation"), $DEBUG, $this->correct);
565     $this->form->enpied();
566    
567     // Affichage du bouton et du bouton retour
568     echo "\n<!-- ########## START FORMCONTROLS ########## -->\n";
569     echo "<div class=\"formControls\">\n";
570     if($maj!=3) {
571     $this->bouton($maj);
572     }
573     $this->retour($premier, $recherche, $tricol);
574     echo "</div>\n";
575     echo "<!-- ########## END FORMCONTROLS ########## -->\n";
576     // Fermeture de la balise form
577     if($maj!=3) {
578     echo "</form>\n";
579     echo "<!-- ########## END DBFORM ########## -->\n";
580     }
581     // Sous formulaire interne et zone supplementaire
582     if ($maj == 1) {
583     $this->sousformulaireinterne(get_class($this), $idx, $this->db);
584     } else {
585     if ($maj == 0 and isset($this->valF[$this->clePrimaire]) and $this->valF[$this->clePrimaire] != "") {
586     $this->sousformulaireinterne(get_class($this), $this->valF[$this->clePrimaire], $this->db);
587     }
588     }
589     }
590     /**
591     * Surcharge de la méthode sousformulaire afin d'y ajouter
592     * la méthode de verification d'accès à l'élément
593     *
594     */
595     function sousformulaire($enteteTab, $validation, $maj, &$db, $postVar,
596     $premiersf, $DEBUG, $idx, $idxformulaire,
597     $retourformulaire, $typeformulaire, $objsf,
598     $tricolsf, $retour= "", $actions = array()) {
599    
600     /*
601     $enteteTab: libelle d entete du formulaire
602     $styleform: style des controles du formulaires
603     $maj : 0 ajouter / 1 mise a jour / 2 suppression
604     $db : connexion base de donnees
605     $aff : appel formulaire
606     $DEBUG : 0= normal / 1= debugage
607     $idx : valeur de l'id de la table mouvement (pour relancer la requete
608     $idxformulaire : idx du formulaire
609     $retourformulaire : nom du formulaire de retour
610     */
611     //passage tricolonne soustableau par $tricolsf
612     $DEBUG=0;
613    
614     // Affectation des parametres dans un tableau associatif pour le
615     // stocker en attribut de l'objet
616     $parameters = array(
617     "validation" => $validation,
618     "maj" => $maj,
619     "idx" => $idx,
620     "idxformulaire" => $idxformulaire,
621     "premiersf" => $premiersf,
622     "tricolsf" => $tricolsf,
623     "retour" => $retour,
624     "retourformulaire" => $retourformulaire,
625     "typeformulaire" => $typeformulaire,
626     "objsf" => $objsf,
627     );
628     // Affectation du tableau precedant dans l'attribut 'parameters'
629     $this->setParameters($parameters);
630    
631     //sousformulaire genere par ajax [sub form with ajax]
632     $datasubmit="";
633    
634     // sans idx [without idx]
635     if ($idx=="]") {
636    
637     // ajouter [add]
638     if($maj==0) {
639     $datasubmit="../scr/sousform.php?obj=$objsf&premiersf=$premiersf&retourformulaire=$retourformulaire&idxformulaire=$idxformulaire&trisf=$tricolsf".
640     "&validation=$validation&retour=$retour";
641     }
642    
643     // avec idx [with idx]
644     } else {
645    
646     // modifier [modify]
647     if($maj==1) {
648     $datasubmit="../scr/sousform.php?obj=$objsf&premiersf=$premiersf&retourformulaire=$retourformulaire&idxformulaire=$idxformulaire&trisf=$tricolsf".
649     "&validation=$validation&idx=$idx&retour=$retour";
650    
651     // supprimer [delete]
652     } else {
653     $datasubmit="../scr/sousform.php?obj=$objsf&premiersf=$premiersf&retourformulaire=$retourformulaire&idxformulaire=$idxformulaire&trisf=$tricolsf".
654     "&validation=$validation&ids=1&idx=$idx&retour=tab";
655     }
656     }
657     if($maj!=3) {
658     echo "<form name=\"f2\" action=\"\" methode=\"post\" ";
659     echo "onsubmit=\"affichersform('".$objsf."', '$datasubmit', this);return false;\" >";
660     }
661     $validation--; // compatibilite anterieure
662     $form = new $this->om_formulaire($enteteTab, $validation, $maj, $this->champs,$this->val,$this->longueurMax);
663     $this->form = $form;
664     //--------------------------------------------------------------------------
665     // valorisation des variables formulaires [form variables values]
666     //--------------------------------------------------------------------------
667     $this->setValsousformulaire($form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,$db,$DEBUG);
668     $this->setType($form,$maj) ;
669     $this->setLib($form,$maj) ;
670     $this->setTaille($form,$maj) ;
671     $this->setMax($form,$maj) ;
672     $this->setSelect($form,$maj,$db,$DEBUG) ;
673     $this->setOnchange($form,$maj) ;
674     $this->setOnkeyup($form,$maj) ;
675     $this->setOnclick($form,$maj) ;
676     $this->setGroupe($form,$maj) ;
677     $this->setRegroupe($form,$maj) ;
678     $this->setLayout($form, $maj);
679     $this->setRequired($form, $maj);
680     //--------------------------------------------------------------------------
681     // affichage du formulaire
682     // -------------------------------------------------------------------------
683    
684     $form->recupererPostvarsousform($this->champs,$validation,$postVar,$DEBUG);
685    
686     // validation ==============================================================
687     if ($validation>0) {
688     if ($maj==2){
689     $db->autoCommit(false);
690     $this->supprimer($form->val,$db,$DEBUG);
691     $db->commit() ;
692     } else {
693     if ($maj==1) {
694     $db->autoCommit(false);
695     $this->modifier($form->val,$db,$DEBUG);
696     $db->commit() ;
697     } else {
698     $db->autoCommit(false);
699     $this->ajouter($form->val,$db,$DEBUG,$idx) ;
700     $db->commit() ;
701     }
702     }
703     }
704    
705     $this->deverrouille($validation);
706     if ($validation > 0) {
707     $this->message();
708     if ($this->correct) {
709     $this->retoursousformulaire($idxformulaire,$retourformulaire,$form->val,$objsf,$premiersf,$tricolsf, $validation, $idx,$maj, $retour);
710     }
711     }
712     //Test les droits d'accès à l'élément.
713     if(!$this->canAccess() AND $maj != 0) {
714     //
715     $message_class = "error";
716     $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".
717     "droits pour acceder a cette page.");
718     $this->f->addToMessage($message_class, $message);
719    
720     //
721     $this->f->setFlag(NULL);
722     $this->f->display();
723    
724     // Arrêt du script
725     die();
726     }
727     $form->entete();
728    
729     // Portlet d'actions contextuelles
730     if ($maj == 3 and !empty($actions)) {
731    
732     // On surcharge les actions
733     if (!empty($this->actions_sup)) {
734     $actions = array_merge($actions, $this->actions_sup);
735     }
736    
737     // On retient seulement les actions de l'utilisateur
738     $user_actions = array();
739     foreach($actions as $action => $conf) {
740    
741     // Verification des droits
742     if (!isset($conf['rights'])
743     or $this->f->isAccredited($conf['rights']['list'],
744     $conf['rights']['operator'])) {
745    
746     // Preparation du tri
747     if (!isset($conf['ordre']) or empty($conf['ordre'])) {
748    
749     $this->actions_order[] = array($action);
750     } else if (!key_exists($conf['ordre'],
751     $this->actions_order)) {
752    
753     $this->actions_order[$conf['ordre']] = array($action);
754     } else {
755    
756     $this->actions_order[$conf['ordre']][] = $action;
757     asort($this->actions_order[$conf['ordre']]);
758     }
759    
760     // Verification de l'action (vide ou non)
761     if (!empty($conf['lien']) and $conf['lien'] != '#') {
762     $user_actions[$action] = $conf;
763     }
764     }
765     }
766    
767     ksort($this->actions_order);
768    
769     // Affichage du portlet d'actions s'il existe des actions
770     if (!empty($user_actions)) {
771     $this->form->afficher_portlet($idx, $user_actions,
772     $this->actions_order, $objsf);
773     }
774     }
775    
776     $form->afficher($this->champs,$validation,$DEBUG,$this->correct);
777     $form->enpied();
778    
779     echo "<div class=\"formControls\">";
780     if($maj!=3) {
781     $this->boutonsousformulaire($datasubmit,$maj,$form->val);
782     }
783     $this->retoursousformulaire($idxformulaire,$retourformulaire,$form->val,$objsf,$premiersf,$tricolsf, $validation, $idx,$maj, $retour);
784     echo "</div>\n";
785     if($maj!=3) {
786     echo "</form>";
787     }
788     // ---------------------
789     // sousformulaireinterne
790     // ---------------------
791     //if($maj==1) {
792     // $this->sousformulaireinterne(get_class($this),$idx,$db);
793     //}
794     if($maj==1) { // moyen_com
795     $this->sousformulaireinterne(get_class($this),$idx,$db);
796     }else{
797     if ($maj == 0 and isset($this->valF[$this->clePrimaire])
798     and $this->valF[$this->clePrimaire] != "") {
799     $this->sousformulaireinterne(get_class($this),$this->valF[$this->clePrimaire],$db);
800     }
801     }
802     }
803 mlimic 515
804     /**
805     * Methode de verification de l'unicite d'une valeur pour chaque elements du tableau unique_key,
806     * ainsi que l'unicite de la cle multiple unique_multiple_key.
807     *
808     * @param objet $db Objet Base de donnees
809     */
810     function checkUniqueKey() {
811     $unique=true;
812     //Verification des cles uniques
813     if(!empty($this->unique_key)) {
814     foreach ($this->unique_key as $constraint) {
815     if(!is_array($constraint)) {
816     if(!is_null ($this->valF[$constraint])) {
817     if(!$this->isUnique($constraint,$this->valF[$constraint])) {
818     $this->addToMessage( _("La valeur saisie dans le champ")." <span class=\"bold\">");
819     $this->addToMessage( (!defined('REST_REQUEST')) ? $this->form->lib[$constraint] : $constraint); // $this->REST
820     $this->addToMessage( "</span> "._("existe deja, veuillez saisir une nouvelle valeur.")."<br/>");
821     $unique=false;
822     }
823     }
824     } else {
825     //Verification du groupe de champs uniques
826     $oneIsNull=false;
827     if(!empty($constraint)) {
828     $valueMultiple=array();
829     foreach($constraint as $field) {
830     $valueMultiple[]=$this->valF[$field];
831     if(is_null($this->valF[$field])) {
832     $oneIsNull=true;
833     }
834     }
835     if(!$oneIsNull) {
836     if(!$this->isUnique($constraint,$valueMultiple)) {
837     foreach($constraint as $field) {
838     $temp[] = (!defined('REST_REQUEST')) ? $this->form->lib[$field] : $constraint; // $this->REST
839     }
840     $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/>");
841     $unique=false;
842     }
843     }
844     }
845     }
846     }
847     }
848     if(!$unique) {
849     $this->correct = false;
850     }
851     }
852    
853    
854    
855     /**
856     * Methode permettant de requeter la base afin de definir la validite du champ unique
857     *
858     * @param string $champ nom du champ unique
859     * @param string $value valeur à inserer dans la colonne
860     */
861     function isUnique($champ,$value) {
862 nhaye 684 //Test sur un groupe de champs
863 mlimic 515 if(is_array($champ) and is_array($value)) {
864     $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".implode(" = ? AND ",$champ)." = ?";
865     } else {
866 nhaye 684 //Test sur un champ
867 mlimic 515 $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".$champ." = ?";
868     }
869     if($this->getParameter('maj')) {
870     $sql .= " AND ".$this->clePrimaire." \!= ".$this->valF[$this->clePrimaire];
871     }
872     $nb = $this->db->getone($sql,$value);
873     $this->addToLog("isUnique() : db->getone(\"".$sql."\");", VERBOSE_MODE);
874     if (database::isError($nb, true)) {
875     // Affichage de l'erreur
876     $this->erreur_db($nb->getDebugInfo(), $nb->getMessage(), '');
877     return true;
878     } else {
879     //Si superieur a 0, pas unique
880     if ($nb > 0) {
881     return false;
882     } else {
883     return true;
884     }
885     }
886     }
887    
888    
889    
890     /**
891     * Methode de verification des contraintes not null,
892     * affiche une erreur si nul.
893     *
894     * @param objet $db Objet Base de donnees
895     */
896     function checkRequired() {
897     foreach($this->required_field as $field) {
898     //Ne test la cle primaire car n'a pas de valeur a l'ajout
899     // la cle primaire est automatiquement cree
900     if ($field == $this->clePrimaire) {
901     continue;
902     }
903    
904     $error = false;
905    
906     /* En ajout - verification des requis
907    
908     Fonctionnement formel de la condition:
909    
910     SI le champ n'existe pas (est 'unset')
911     OU le champ est vide
912    
913     ALORS le formulaire n'est pas correct
914    
915     SINON le formulaire est correct
916    
917     Explication:
918    
919     Les champs verifies sont les champs requis. S'ils n'existent
920     pas en ajout ou qu'ils sont vide, un message apparait a l'ecran
921     avertissant l'utilisateur que certains champs doivent etre
922     remplis.
923    
924     */
925     if ($this->getParameter('maj') == 0 and
926     (!isset($this->valF[$field]) or $this->valF[$field] == '')) {
927     $error = true;
928     $this->correct = false;
929    
930     /* En modification - verification des requis
931    
932     Fonctionnement formel de la condition:
933    
934     SI le champ existe (est 'set')
935     ET le champ est vide
936    
937     ALORS le formulaire n'est pas correct
938    
939     SINON le formulaire est correct
940    
941     Explication:
942    
943     Les champs verifies sont les champs requis. S'ils existent
944     et qu'ils sont vides alors un message apparait a l'ecran
945     avertissant l'utilisateur que certains champs doivent etre
946     remplis. Si ces champs sont tous saisis, le formulaire est
947     correctement soumis. Par contre, si l'un des champs requis
948     n'existe pas au moment de verification (il aurait ete 'unset'),
949     il ne sera pas verifie, n'entrainera pas de formulaire incorrect
950     et ne sera pas insere dans la base de donnees.
951    
952     Faire un 'unset' permet de ne pas mettre a jour certaines
953     donnees sensibles en base a chaque soumission de formulaire.
954    
955     Faire un 'unset' permet egalement d'outre passer cette condition
956     en mode de modification. On suppose qu'a l'ajout une valeur
957     a ete inseree dans un champ, et qu'il n'est plus necessaire
958     de verifier si ce champ est vide puisque sa valeur ne sera
959     pas modifiee en base. Elle sera donc conservee.
960    
961     */
962     } elseif ($this->getParameter('maj') == 1
963     and isset($this->valF[$field])
964     and $this->valF[$field] == '') {
965     $error = true;
966     $this->correct = false;
967     }
968    
969     // ajout du message d'erreur
970     if ($error == true) {
971     //$this->msg .= _('Le champ').' <span class="bold">'.($this->form->lib[$field]!=""?$this->form->lib[$field]:_($field)).'</span> '._('est obligatoire').".<br/>";
972     $this->addToMessage( _('Le champ').' <span class="bold">'.((!defined('REST_REQUEST')) ? $this->form->lib[$field] :_($field)).'</span> '._('est obligatoire').".<br/>"); // $this->REST
973     }
974     }
975     }
976    
977    
978    
979    
980    
981     /**
982     *
983     */
984     function message() {
985    
986     // do not output anything in case of a REST request
987     if (defined('REST_REQUEST')) {
988     return;
989     }
990    
991     if ($this->msg != "") {
992    
993     //
994     $m = new message();
995    
996     //
997     if ($this->correct) {
998     $class = "valid";
999     } else {
1000     $class = "error";
1001     }
1002     $m->displayMessage($class, $this->msg);
1003    
1004     }
1005    
1006     }
1007    
1008    
1009    
1010     /**
1011     * Cette methode ne doit plus etre appelee, c'est 'message::isError($res)'
1012     * qui s'occupe d'afficher le message d'erreur et de faire le 'die()'.
1013     *
1014     * @deprecated
1015     */
1016     function erreur_db($debuginfo, $messageDB, $table) {
1017     if (!defined('REST_REQUEST')) { // $this->REST
1018     die(_("Erreur de base de donnees. Contactez votre administrateur."));
1019     } else {
1020     $this->errors['db_debuginfo'] = $debuginfo;
1021     $this->errors['db_message'] = $messageDB;
1022     $this->addToLog("Erreur de BD pour table ".$table ." avec message: \"".$messageDB.
1023     "\" et debug info \"".$debuginfo."\"", VERBOSE_MODE);
1024     }
1025     }
1026    
1027    
1028     /**
1029     *
1030     */
1031     function addToLog($message, $type = DEBUG_MODE) {
1032     if (defined('REST_REQUEST')) { // dans le cas d'utilisation du REST $this->REST
1033     logger::instance()->log("REST request class ".get_class($this)." - ".$message, $type);
1034     } else {
1035     logger::instance()->log("class ".get_class($this)." - ".$message, $type);
1036     }
1037     }
1038    
1039     // }}}
1040    
1041     /**
1042     * Cette methode vide les valeurs des erreurs du tableau errors.
1043     */
1044     function clearErrors() {
1045     foreach (array_keys($this->errors) as $key) {
1046     $this->errors[$key] = '';
1047     }
1048     }
1049 nhaye 682
1050     /**
1051     * Cette methode est à surcharger elle permet de tester dans chaque classe
1052     * des droits des droits spécifiques en fonction des données
1053     */
1054     function canAccess() {
1055     return true;
1056     }
1057 mlimic 515
1058 atreal 305 }
1059    
1060     ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26