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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 684 by nhaye, Wed Nov 14 11:24:22 2012 UTC revision 1912 by fmichon, Mon May 27 14:06:26 2013 UTC
# Line 21  require_once "om_formulaire.class.php"; Line 21  require_once "om_formulaire.class.php";
21   *   *
22   */   */
23  class om_dbform extends dbForm {  class om_dbform extends dbForm {
24        
25      /**      /**
26       *       * Nom de la classe formulaire
27       */       */
28      var $om_formulaire = "om_formulaire";      var $om_formulaire = "om_formulaire";
29    
30            /**
       
         /**  
31       * Constructeur       * Constructeur
32       *       *
33       * @param string $id       * @param string $id
# Line 37  class om_dbform extends dbForm { Line 35  class om_dbform extends dbForm {
35       * @param boolean $DEBUG Mode debug (@deprecated)       * @param boolean $DEBUG Mode debug (@deprecated)
36       */       */
37      function constructeur($id, &$db, $DEBUG = false) {      function constructeur($id, &$db, $DEBUG = false) {
         if (defined('REST_REQUEST')) { // $this->REST  
             logger::instance()->display_log = false;  
         }  
38          //          //
39          if (isset($GLOBALS["f"])) {          if (isset($GLOBALS["f"])) {
40              $this->f = $GLOBALS["f"];              $this->f = $GLOBALS["f"];
# Line 64  class om_dbform extends dbForm { Line 59  class om_dbform extends dbForm {
59                  include $fichier;                  include $fichier;
60              }              }
61          }          }
62    
63          // Sauvegarde des actions contextuelles supplementaires          // Sauvegarde des actions contextuelles supplementaires
64          if (isset($portlet_actions)) {          if (isset($portlet_actions)) {
65              $this->actions_sup = $portlet_actions;              $this->actions_sup = $portlet_actions;
66          }          }
67          //Si le flag $archivable est posé  
         //if(isset($archivable) and $archivable){  
         //    $this->archivable=TRUE;  
         //} else {  
         //    $this->archivable=FALSE;  
         //}  
68          // Concatenation des champs pour constitution de la clause select          // Concatenation des champs pour constitution de la clause select
69          $listeChamp = "";          $listeChamp = "";
70          foreach ($champs as $elem) {          foreach ($champs as $elem) {
# Line 97  class om_dbform extends dbForm { Line 88  class om_dbform extends dbForm {
88          } else { // Si mode modification ou suppression          } else { // Si mode modification ou suppression
89              // Clause where en fonction du type de la cle primaire              // Clause where en fonction du type de la cle primaire
90              if ($this->typeCle == "A") {              if ($this->typeCle == "A") {
91                  $sql .= " where ".$this->clePrimaire." like '".$id."' ";                  $sql .= " where ".$this->table.".".$this->clePrimaire." like '".$id."' ";
92              } else {              } else {
93                  $sql .= " where ".$this->table.".".$this->clePrimaire." = ".$id." ";                  $sql .= " where ".$this->table.".".$this->clePrimaire." = ".$id." ";
94              }              }
95          }          }
96          $sql .= " ".$selection." ";          $sql .= " ".$selection." ";
         //print '$sql:'.$sql.'   ';  
97          // Execution de la requete          // Execution de la requete
98          $res = $db->limitquery($sql, 0, 1);          $res = $db->limitquery($sql, 0, 1);
99          // Logger          // Logger
# Line 153  class om_dbform extends dbForm { Line 143  class om_dbform extends dbForm {
143          }          }
144      }      }
145    
   
   
146      /**      /**
147       * Cette methode permet d'executer l'ajout (MODE 'insert') de l'objet dans       * Cette methode permet d'executer l'ajout (MODE 'insert') de l'objet dans
148       * la base de donnees.       * la base de donnees.
# Line 187  class om_dbform extends dbForm { Line 175  class om_dbform extends dbForm {
175              // l'enregistrement n'existe pas encore donc il n'a pas              // l'enregistrement n'existe pas encore donc il n'a pas
176              // d'identifiant              // d'identifiant
177              $this->triggerajouter("", $db, $val, $DEBUG);              $this->triggerajouter("", $db, $val, $DEBUG);
178              // Execution de la requete d'insertion des donnees de l'attribut              //Traitement des fichiers uploadé
179              // valF de l'objet dans l'attribut table de l'objet              $retTraitementFichier = $this->traitementFichierUpload();
180              $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_INSERT);              if($retTraitementFichier === true) {
181              // Si une erreur survient                  // Execution de la requete d'insertion des donnees de l'attribut
182              if (database::isError($res, true)) {                  // valF de l'objet dans l'attribut table de l'objet
183                  // Appel de la methode de recuperation des erreurs                  $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_INSERT);
184                  $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');                  // Si une erreur survient
185                    if (database::isError($res, true)) {
186                        // Appel de la methode de recuperation des erreurs
187                        $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
188                    } else {
189                        // Log
190                        $this->addToLog(_("Requete executee"), VERBOSE_MODE);
191                        // Log
192                        $message = _("Enregistrement")." ".$this->valF[$this->clePrimaire]." ";
193                        $message .= _("de la table")." \"".$this->table."\" ";
194                        $message .= "[ ".$db->affectedRows()." ";
195                        $message .= _("enregistrement(s) ajoute(s)")." ]";
196                        $this->addToLog($message, VERBOSE_MODE);
197                        // Message de validation
198                        $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");
199                        // Mise en place du verrou pour ne pas valider plusieurs fois
200                        // le meme formulaire
201                        $this->verrouille();
202                        // Execution du trigger 'after' specifique au MODE 'insert'
203                        // Le premier parametre est vide car en MODE 'insert'
204                        // l'enregistrement n'existe pas encore donc il n'a pas
205                        // d'identifiant
206                        $this->triggerajouterapres("", $db, $val, $DEBUG);
207                    }
208              } else {              } else {
209                  // Log                  $this->correct = false;
210                  $this->addToLog(_("Requete executee"), VERBOSE_MODE);                  $this->addToMessage($retTraitementFichier);
211                  // Log                  $this->addToMessage(_("SAISIE NON ENREGISTREE"));
                 if(isset($val[$this->clePrimaire])) // ***  
                     $id = $val[$this->clePrimaire];  
                 else  
                     $id=$this->id;  
                 $message = _("Enregistrement")."&nbsp;".$this->valF[$this->clePrimaire]."&nbsp;";  
                 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";  
                 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";  
                 $message .= _("enregistrement(s) ajoute(s)")."&nbsp;]";  
                 $this->addToLog($message, VERBOSE_MODE);  
                 // Message de validation  
                 $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");  
                 // Mise en place du verrou pour ne pas valider plusieurs fois  
                 // le meme formulaire  
                 $this->verrouille();  
               
                 // Execution du trigger 'after' specifique au MODE 'insert'  
                 // Le premier parametre est vide car en MODE 'insert'  
                 // l'enregistrement n'existe pas encore donc il n'a pas  
                 // d'identifiant  
                 $this->triggerajouterapres("", $db, $val, $DEBUG);  
212              }              }
213          } else {          } else {
214              // Message d'echec (saut d'une ligne supplementaire avant le              // Message d'echec (saut d'une ligne supplementaire avant le
# Line 228  class om_dbform extends dbForm { Line 219  class om_dbform extends dbForm {
219          $this->addToLog("ajouter() - end", EXTRA_VERBOSE_MODE);          $this->addToLog("ajouter() - end", EXTRA_VERBOSE_MODE);
220      }      }
221    
   
     /**  
      *  
      * @param array $val  
      * @param object $db Objet de connexion DB  
      */  
     function verifierAjout($val = array(), &$db = NULL) {  
   
         // Verifier [verify]  
         // la cle primaire est obligatoire  
         // [primary key is compulsory]  
         if ($this->valF[$this->clePrimaire] == "") {  
             //  
             $this->correct = false;  
             //  
             $this->addToMessage("<br/>");  
             $this->addToMessage( _("L'\"identifiant\" est obligatoire")."&nbsp;");  
             $this->addToMessage("[&nbsp;"._($this->clePrimaire)."&nbsp;]");  
         }  
         if ($this->typeCle == "A") {  
             $sql = "select count(*) from ".DB_PREFIXE.$this->table." ";      
             $sql .= "where ".$this->clePrimaire."='".$this->valF[$this->clePrimaire]."' ";  
             $nb = $db->getone($sql);  
             $this->addToLog("verifierAjout(): db->getone(\"".$sql."\");", VERBOSE_MODE);  
             if (database::isError($nb)) {  
                 $this->erreur_db($nb->getDebugInfo(), $nb->getMessage(), '');  
             }else{  
                 if ($nb > 0) {  
                     $this->correct = false;  
                     $this->addToMessage($nb." ");  
                     $this->addToMessage( _("cle primaire existante"));  
                     $this->addToMessage(" ".$this->table."<br />");  
                 }  
             }  
         }  
     }  
   
       
222      /**      /**
223       * Cette methode permet d'executer la modification (MODE 'update') de       * Cette methode permet d'executer la modification (MODE 'update') de
224       * l'objet dans la base de donnees.       * l'objet dans la base de donnees.
# Line 275  class om_dbform extends dbForm { Line 228  class om_dbform extends dbForm {
228       * @param boolean $DEBUG Mode debug (@deprecated)       * @param boolean $DEBUG Mode debug (@deprecated)
229       */       */
230      function modifier($val = array(), &$db = NULL, $DEBUG = false) {      function modifier($val = array(), &$db = NULL, $DEBUG = false) {
   
231          // Logger          // Logger
232          $this->addToLog("modifier() - begin", EXTRA_VERBOSE_MODE);          $this->addToLog("modifier() - begin", EXTRA_VERBOSE_MODE);
233          // Recuperation de la valeur de la cle primaire de l'objet          // Recuperation de la valeur de la cle primaire de l'objet
# Line 295  class om_dbform extends dbForm { Line 247  class om_dbform extends dbForm {
247          if ($this->correct) {          if ($this->correct) {
248              // Execution du trigger 'before' specifique au MODE 'update'              // Execution du trigger 'before' specifique au MODE 'update'
249              $this->triggermodifier($id, $db, $val, $DEBUG);              $this->triggermodifier($id, $db, $val, $DEBUG);
250              // Execution de la requête de modification des donnees de l'attribut              //Traitement des fichiers uploadé
251              // valF de l'objet dans l'attribut table de l'objet              $retTraitementFichier = $this->traitementFichierUpload();
252              $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_UPDATE, $this->getCle($id));              if($retTraitementFichier === true) {
253              // Si une erreur survient                  // Execution de la requête de modification des donnees de l'attribut
254              if (database::isError($res, true)) {                  // valF de l'objet dans l'attribut table de l'objet
255                  // Appel de la methode de recuperation des erreurs                  $res = $db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_UPDATE, $this->getCle($id));
256                  $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');                  // Si une erreur survient
257              } else {                  if (database::isError($res, true)) {
258                  // Log                      // Appel de la methode de recuperation des erreurs
259                  $this->addToLog(_("Requete executee"), VERBOSE_MODE);                      $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
                 // Log  
                 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";  
                 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";  
                 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";  
                 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";  
                 $this->addToLog($message, VERBOSE_MODE);  
                 // Message de validation  
                 if ($db->affectedRows() == 0) {  
                     $this->addToMessage(_("Attention vous n'avez fait aucune modification.")."<br/>");  
260                  } else {                  } else {
261                      $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");                      // Log
262                        $this->addToLog(_("Requete executee"), VERBOSE_MODE);
263                        // Log
264                        $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
265                        $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
266                        $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
267                        $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
268                        $this->addToLog($message, VERBOSE_MODE);
269                        // Message de validation
270                        if ($db->affectedRows() == 0) {
271                            $this->addToMessage(_("Attention vous n'avez fait aucune modification.")."<br/>");
272                        } else {
273                            $this->addToMessage(_("Vos modifications ont bien ete enregistrees.")."<br/>");
274                        }
275                        // Mise en place du verrou pour ne pas valider plusieurs fois
276                        // le meme formulaire
277                        $this->verrouille();
278                        // Execution du trigger 'after' specifique au MODE 'update'
279                        $this->triggermodifierapres($id, $db, $val, $DEBUG);
280                  }                  }
281                  // Mise en place du verrou pour ne pas valider plusieurs fois              } else {
282                  // le meme formulaire                  $this->correct = false;
283                  $this->verrouille();                  $this->addToMessage($retTraitementFichier);
284                                $this->addToMessage(_("SAISIE NON ENREGISTREE"));
                 // Execution du trigger 'after' specifique au MODE 'update'  
                 $this->triggermodifierapres($id, $db, $val, $DEBUG);  
285              }              }
286          } else {          } else {
287              // Message d'echec (saut d'une ligne supplementaire avant le              // Message d'echec (saut d'une ligne supplementaire avant le
# Line 333  class om_dbform extends dbForm { Line 292  class om_dbform extends dbForm {
292          $this->addToLog("modifier() - end", EXTRA_VERBOSE_MODE);          $this->addToLog("modifier() - end", EXTRA_VERBOSE_MODE);
293      }      }
294    
   
295      /**      /**
296       * Cette methode permet d'executer la suppression (MODE 'delete') de       * Cette methode permet d'executer la suppression (MODE 'delete') de
297       * l'objet dans la base de donnees.       * l'objet dans la base de donnees.
# Line 361  class om_dbform extends dbForm { Line 319  class om_dbform extends dbForm {
319          if ($this->correct) {          if ($this->correct) {
320              // Execution du trigger 'before' specifique au MODE 'delete'              // Execution du trigger 'before' specifique au MODE 'delete'
321              $this->triggersupprimer($id, $db, $val, $DEBUG);              $this->triggersupprimer($id, $db, $val, $DEBUG);
322              // Construction de la requete de suppression de l'objet dans              //Traitement des fichiers uploadé
323              // l'attribut table de l'objet              $retTraitementFichier = $this->traitementFichierUpload();
324              $sql = "delete from ".DB_PREFIXE.$this->table." where ".$this->getCle($id);              if($retTraitementFichier === true) {
325              // Execution de la requete de suppression de l'objet                  // Construction de la requete de suppression de l'objet dans
326              $res = $db->query($sql);                  // l'attribut table de l'objet
327              // Logger                  $sql = "delete from ".DB_PREFIXE.$this->table." where ".$this->getCle($id);
328              $this->addToLog("supprimer(): db->query(\"".$sql."\");", VERBOSE_MODE);                  // Execution de la requete de suppression de l'objet
329              // Si une erreur survient                  $res = $db->query($sql);
330              if (database::isError($res, true)) {                  // Logger
331                  // Appel de la methode de recuperation des erreurs                  $this->addToLog("supprimer(): db->query(\"".$sql."\");", VERBOSE_MODE);
332                  $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');                  // Si une erreur survient
333                    if (database::isError($res, true)) {
334                        // Appel de la methode de recuperation des erreurs
335                        $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
336                    } else {
337                        // Log
338                        $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
339                        $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
340                        $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";
341                        $message .= _("enregistrement(s) supprime(s)")."&nbsp;]";
342                        $this->addToLog($message, VERBOSE_MODE);
343                        // Message de validation
344                        $this->addToMessage(_("La suppression a ete correctement effectuee.")."<br/>");
345                        // Mise en place du verrou pour ne pas valider plusieurs fois
346                        // le meme formulaire
347                        $this->verrouille();
348                        // Execution du trigger 'after' specifique au MODE 'delete'
349                        $this->triggersupprimerapres($id, $db, $val, $DEBUG);
350                    }
351              } else {              } else {
352                  // Log                  $this->correct = false;
353                  $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";                  $this->addToMessage($retTraitementFichier);
354                  $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";                  $this->addToMessage(_("SAISIE NON ENREGISTREE"));
                 $message .= "[&nbsp;".$db->affectedRows()."&nbsp;";  
                 $message .= _("enregistrement(s) supprime(s)")."&nbsp;]";  
                 $this->addToLog($message, VERBOSE_MODE);  
                 // Message de validation  
                 $this->addToMessage(_("La suppression a ete correctement effectuee.")."<br/>");  
                 // Mise en place du verrou pour ne pas valider plusieurs fois  
                 // le meme formulaire  
                 $this->verrouille();  
               
                 // Execution du trigger 'after' specifique au MODE 'delete'  
                 $this->triggersupprimerapres($id, $db, $val, $DEBUG);  
355              }              }
356          } else {          } else {
357              // Message d'echec (saut d'une ligne supplementaire avant le              // Message d'echec (saut d'une ligne supplementaire avant le
# Line 398  class om_dbform extends dbForm { Line 363  class om_dbform extends dbForm {
363      }      }
364    
365      /**      /**
      * Surcharge de la méthode formulaire afin d'y ajouter  
      * la méthode de verification d'accès à l'élément  
      *  
      */  
     function formulaire($enteteTab, $validation, $maj, &$db, $postVar, $aff,  
                         $DEBUG = false, $idx, $premier = 0, $recherche = "",  
                         $tricol = "", $idz = "", $selectioncol = "",  
                         $advs_id = "", $valide = "", $retour = "", $actions = array(),  
                         $extra_parameters = array()) {  
   
         // Mode debug desactive  
         $DEBUG = false;  
         // Affectation des parametres dans un tableau associatif pour le  
         // stocker en attribut de l'objet  
         $parameters = array(  
             "aff" => $aff,  
             "validation" => $validation,  
             "maj" => $maj,  
             "idx" => $idx,  
             "premier" => $premier,  
             "recherche" => $recherche,  
             "tricol" => $tricol,  
             "idz" => $idz,  
             "selectioncol" => $selectioncol,  
             "advs_id" => $advs_id,  
             "valide" => $valide,  
             "retour" => $retour,  
         );  
         // Affectation du tableau precedant dans l'attribut 'parameters'  
         $this->setParameters($parameters);  
         // Affectation du tableau passe en parametre dans l'attribut 'parameters'  
         $this->setParameters($extra_parameters);  
         // Ouverture de la balise form si pas en consultation  
         if($maj!=3) {  
             echo "\n<!-- ########## START DBFORM ########## -->\n";  
             echo "<form";  
             echo " method=\"post\"";  
             echo " name=\"f1\"";  
             echo " action=\"";  
             echo $this->getDataSubmit();  
             echo "\"";  
             echo ">\n";  
         }  
         // Compatibilite anterieure - On decremente la variable validation  
         $this->setParameter("validation", $this->getParameter("validation") - 1);  
         // Instanciation de l'objet formulaire  
         $this->form = new $this->om_formulaire($enteteTab, $this->getParameter("validation"), $maj, $this->champs, $this->val, $this->longueurMax);  
         // Valorisation des variables formulaires  
         $this->setVal($this->form, $maj, $this->getParameter("validation"), $this->db, $DEBUG);  
         $this->setType($this->form, $maj);  
         $this->setLib($this->form, $maj);  
         $this->setTaille($this->form, $maj);  
         $this->setMax($this->form, $maj);  
         $this->setSelect($this->form, $maj, $this->db, $DEBUG);  
         $this->setOnchange($this->form, $maj);  
         $this->setOnkeyup($this->form, $maj);  
         $this->setOnclick($this->form, $maj);  
         $this->setGroupe($this->form, $maj);  
         $this->setRegroupe($this->form, $maj);  
         $this->setLayout($this->form, $maj);  
         $this->setRequired($this->form, $maj);  
         //  
         $this->form->recupererPostvar($this->champs, $this->getParameter("validation"), $postVar, $DEBUG);  
         // Si le formulaire a ete valide  
         if ($this->getParameter("validation") > 0) {  
             // Appel des methodes en fonction du mode pour inserer, modifier ou  
             // supprimer l'objet de/dans la base de donnees.  
             if ($maj == 2) {  
                 // (MODE 'delete')  
                 $db->autoCommit(false);  
                 $this->supprimer($this->form->val, $this->db, $DEBUG);  
                 $db->commit();  
             } else {  
                 if ($maj == 1) {  
                     // (MODE 'update')  
                     $db->autoCommit(false);  
                     $this->modifier($this->form->val, $this->db, $DEBUG);  
                     $db->commit();  
                 } else {  
                     // (MODE 'insert')  
                     $db->autoCommit(false);  
                     $this->ajouter($this->form->val, $this->db, $DEBUG) ;  
                     $db->commit();  
                 }  
             }  
         }  
         // Desactivation du verrou  
         $this->deverrouille($this->getParameter("validation"));  
         // Si le formulaire a ete valide  
         if ($this->getParameter("validation") > 0) {  
             // Affichage du message avant d'afficher le formulaire  
             $this->message();  
             // Si le formulaire est valide  
             if ($this->correct) {  
                 // Affichage du bouton retour  
                 $this->retour($premier, $recherche, $tricol);  
             }  
         }  
         //Test les droits d'accès à l'élément.  
         if(!$this->canAccess() AND $maj != 0) {  
             //  
             $message_class = "error";  
             $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".  
                          "droits pour acceder a cette page.");  
             $this->f->addToMessage($message_class, $message);  
   
             //  
             $this->f->setFlag(NULL);  
             $this->f->display();  
   
             // Arrêt du script  
             die();  
         }  
         // Affichage du contenu du formulaire  
         $this->form->entete();  
   
         // Portlet d'actions contextuelles  
         if ($maj == 3 and !empty($actions)) {  
   
             // On surcharge les actions  
             if (!empty($this->actions_sup)) {  
                 $actions = array_merge($actions, $this->actions_sup);  
             }  
   
             // On retient seulement les actions de l'utilisateur  
             $user_actions = array();  
             foreach($actions as $action => $conf) {  
   
                 // Verification des droits  
                 if (!isset($conf['rights'])  
                     or $this->f->isAccredited($conf['rights']['list'],  
                                               $conf['rights']['operator'])) {  
   
                     // Preparation du tri  
                     if (!isset($conf['ordre']) or empty($conf['ordre'])) {  
   
                         $this->actions_order[] = array($action);  
                     } else if (!key_exists($conf['ordre'],  
                                            $this->actions_order)) {  
   
                         $this->actions_order[$conf['ordre']] = array($action);  
                     } else {  
   
                         $this->actions_order[$conf['ordre']][] = $action;  
                         asort($this->actions_order[$conf['ordre']]);  
                     }  
   
                     // Verification de l'action (vide ou non)  
                     if (!empty($conf['lien']) and $conf['lien'] != '#') {  
                         $user_actions[$action] = $conf;  
                     }  
                 }  
             }  
   
             ksort($this->actions_order);  
   
             // Affichage du portlet d'actions s'il existe des actions  
             if (!empty($user_actions)) {  
                 $this->form->afficher_portlet($idx, $user_actions,  
                                               $this->actions_order);  
             }  
         }  
   
         $this->form->afficher($this->champs, $this->getParameter("validation"), $DEBUG, $this->correct);  
         $this->form->enpied();  
   
         // Affichage du bouton et du bouton retour  
         echo "\n<!-- ########## START FORMCONTROLS ########## -->\n";  
         echo "<div class=\"formControls\">\n";  
         if($maj!=3) {  
             $this->bouton($maj);  
         }  
         $this->retour($premier, $recherche, $tricol);  
         echo "</div>\n";  
         echo "<!-- ########## END FORMCONTROLS ########## -->\n";  
         // Fermeture de la balise form  
         if($maj!=3) {  
             echo "</form>\n";  
             echo "<!-- ########## END DBFORM ########## -->\n";  
         }  
         // Sous formulaire interne et zone supplementaire  
         if ($maj == 1) {  
             $this->sousformulaireinterne(get_class($this), $idx, $this->db);  
         } else {  
             if ($maj == 0 and isset($this->valF[$this->clePrimaire]) and $this->valF[$this->clePrimaire] != "") {  
                 $this->sousformulaireinterne(get_class($this), $this->valF[$this->clePrimaire], $this->db);  
             }  
         }  
     }  
     /**  
      * Surcharge de la méthode sousformulaire afin d'y ajouter  
      * la méthode de verification d'accès à l'élément  
      *  
      */  
     function sousformulaire($enteteTab, $validation, $maj, &$db, $postVar,  
                             $premiersf, $DEBUG, $idx, $idxformulaire,  
                             $retourformulaire, $typeformulaire, $objsf,  
                             $tricolsf, $retour= "", $actions = array()) {  
   
         /*  
         $enteteTab: libelle d entete du formulaire  
         $styleform: style des controles du formulaires  
         $maj      : 0 ajouter / 1 mise a jour / 2 suppression  
         $db       : connexion base de donnees  
         $aff      : appel formulaire  
         $DEBUG    : 0= normal / 1= debugage  
         $idx      : valeur de l'id de la table mouvement (pour relancer la requete  
         $idxformulaire : idx du formulaire  
         $retourformulaire : nom du formulaire de retour  
         */  
         //passage tricolonne soustableau par $tricolsf  
         $DEBUG=0;  
   
         // Affectation des parametres dans un tableau associatif pour le  
         // stocker en attribut de l'objet  
         $parameters = array(  
             "validation" => $validation,  
             "maj" => $maj,  
             "idx" => $idx,  
             "idxformulaire" => $idxformulaire,  
             "premiersf" => $premiersf,  
             "tricolsf" => $tricolsf,  
             "retour" => $retour,  
             "retourformulaire" => $retourformulaire,  
             "typeformulaire" => $typeformulaire,  
             "objsf" => $objsf,  
         );  
         // Affectation du tableau precedant dans l'attribut 'parameters'  
         $this->setParameters($parameters);  
   
         //sousformulaire genere par ajax [sub form with ajax]  
         $datasubmit="";  
   
         // sans idx [without idx]  
         if ($idx=="]") {  
   
             // ajouter  [add]  
             if($maj==0) {  
                 $datasubmit="../scr/sousform.php?obj=$objsf&premiersf=$premiersf&retourformulaire=$retourformulaire&idxformulaire=$idxformulaire&trisf=$tricolsf".  
                 "&validation=$validation&retour=$retour";  
             }  
   
         // avec idx [with idx]  
         } else {  
   
             // modifier  [modify]  
             if($maj==1) {  
                 $datasubmit="../scr/sousform.php?obj=$objsf&premiersf=$premiersf&retourformulaire=$retourformulaire&idxformulaire=$idxformulaire&trisf=$tricolsf".  
                 "&validation=$validation&idx=$idx&retour=$retour";  
   
             // supprimer  [delete]  
             } else {  
                 $datasubmit="../scr/sousform.php?obj=$objsf&premiersf=$premiersf&retourformulaire=$retourformulaire&idxformulaire=$idxformulaire&trisf=$tricolsf".  
                 "&validation=$validation&ids=1&idx=$idx&retour=tab";  
             }  
         }  
         if($maj!=3) {  
             echo "<form name=\"f2\" action=\"\" methode=\"post\" ";  
             echo "onsubmit=\"affichersform('".$objsf."', '$datasubmit', this);return false;\" >";  
         }  
         $validation--; // compatibilite anterieure  
         $form = new $this->om_formulaire($enteteTab, $validation, $maj, $this->champs,$this->val,$this->longueurMax);  
         $this->form = $form;  
         //--------------------------------------------------------------------------  
         // valorisation des variables formulaires    [form variables values]  
         //--------------------------------------------------------------------------  
         $this->setValsousformulaire($form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,$db,$DEBUG);  
         $this->setType($form,$maj) ;  
         $this->setLib($form,$maj) ;  
         $this->setTaille($form,$maj) ;  
         $this->setMax($form,$maj) ;  
         $this->setSelect($form,$maj,$db,$DEBUG) ;  
         $this->setOnchange($form,$maj) ;  
         $this->setOnkeyup($form,$maj) ;  
         $this->setOnclick($form,$maj) ;  
         $this->setGroupe($form,$maj) ;  
         $this->setRegroupe($form,$maj) ;  
         $this->setLayout($form, $maj);  
         $this->setRequired($form, $maj);  
         //--------------------------------------------------------------------------  
         // affichage du formulaire  
         // -------------------------------------------------------------------------  
   
         $form->recupererPostvarsousform($this->champs,$validation,$postVar,$DEBUG);  
   
         // validation ==============================================================  
         if ($validation>0) {  
             if ($maj==2){  
                 $db->autoCommit(false);  
                 $this->supprimer($form->val,$db,$DEBUG);  
                 $db->commit() ;  
             } else {  
                 if ($maj==1) {  
                     $db->autoCommit(false);  
                     $this->modifier($form->val,$db,$DEBUG);  
                     $db->commit() ;  
                 } else {  
                     $db->autoCommit(false);  
                     $this->ajouter($form->val,$db,$DEBUG,$idx) ;  
                     $db->commit() ;  
                 }  
             }  
         }  
   
         $this->deverrouille($validation);  
         if ($validation > 0) {  
             $this->message();  
             if ($this->correct) {  
                 $this->retoursousformulaire($idxformulaire,$retourformulaire,$form->val,$objsf,$premiersf,$tricolsf, $validation, $idx,$maj, $retour);  
             }  
         }  
         //Test les droits d'accès à l'élément.  
         if(!$this->canAccess() AND $maj != 0) {  
             //  
             $message_class = "error";  
             $message = _("Droits insuffisants. Vous n'avez pas suffisament de ".  
                          "droits pour acceder a cette page.");  
             $this->f->addToMessage($message_class, $message);  
   
             //  
             $this->f->setFlag(NULL);  
             $this->f->display();  
   
             // Arrêt du script  
             die();  
         }  
         $form->entete();  
   
         // Portlet d'actions contextuelles  
         if ($maj == 3 and !empty($actions)) {  
   
             // On surcharge les actions  
             if (!empty($this->actions_sup)) {  
                 $actions = array_merge($actions, $this->actions_sup);  
             }  
   
             // On retient seulement les actions de l'utilisateur  
             $user_actions = array();  
             foreach($actions as $action => $conf) {  
   
                 // Verification des droits  
                 if (!isset($conf['rights'])  
                     or $this->f->isAccredited($conf['rights']['list'],  
                                               $conf['rights']['operator'])) {  
   
                     // Preparation du tri  
                     if (!isset($conf['ordre']) or empty($conf['ordre'])) {  
   
                         $this->actions_order[] = array($action);  
                     } else if (!key_exists($conf['ordre'],  
                                            $this->actions_order)) {  
   
                         $this->actions_order[$conf['ordre']] = array($action);  
                     } else {  
   
                         $this->actions_order[$conf['ordre']][] = $action;  
                         asort($this->actions_order[$conf['ordre']]);  
                     }  
   
                     // Verification de l'action (vide ou non)  
                     if (!empty($conf['lien']) and $conf['lien'] != '#') {  
                         $user_actions[$action] = $conf;  
                     }  
                 }  
             }  
               
             ksort($this->actions_order);  
   
             // Affichage du portlet d'actions s'il existe des actions  
             if (!empty($user_actions)) {  
                 $this->form->afficher_portlet($idx, $user_actions,  
                                               $this->actions_order, $objsf);  
             }  
         }  
   
         $form->afficher($this->champs,$validation,$DEBUG,$this->correct);  
         $form->enpied();  
   
         echo "<div class=\"formControls\">";  
         if($maj!=3) {  
             $this->boutonsousformulaire($datasubmit,$maj,$form->val);  
         }  
         $this->retoursousformulaire($idxformulaire,$retourformulaire,$form->val,$objsf,$premiersf,$tricolsf, $validation, $idx,$maj, $retour);  
         echo "</div>\n";  
         if($maj!=3) {  
             echo "</form>";  
         }  
         // ---------------------  
         // sousformulaireinterne  
         // ---------------------  
         //if($maj==1) {  
         //  $this->sousformulaireinterne(get_class($this),$idx,$db);  
         //}  
         if($maj==1) { // moyen_com  
           $this->sousformulaireinterne(get_class($this),$idx,$db);  
         }else{  
             if ($maj == 0 and isset($this->valF[$this->clePrimaire])  
                 and $this->valF[$this->clePrimaire] != "") {  
             $this->sousformulaireinterne(get_class($this),$this->valF[$this->clePrimaire],$db);  
           }  
         }  
     }  
       
     /**  
366       * Methode de verification de l'unicite d'une valeur pour chaque elements du tableau unique_key,       * Methode de verification de l'unicite d'une valeur pour chaque elements du tableau unique_key,
367       * ainsi que l'unicite de la cle multiple unique_multiple_key.       * ainsi que l'unicite de la cle multiple unique_multiple_key.
368       *       *
369       * @param objet $db Objet Base de donnees       * @param objet $db Objet Base de donnees
370       */       */
371    
372      function checkUniqueKey() {      function checkUniqueKey() {
373          $unique=true;          $unique=true;
374          //Verification des cles uniques          //Verification des cles uniques
# Line 850  class om_dbform extends dbForm { Line 412  class om_dbform extends dbForm {
412          }          }
413      }      }
414    
   
   
415      /**      /**
416       * Methode permettant de requeter la base afin de definir la validite du champ unique       * Methode permettant de requeter la base afin de definir la validite du champ unique
417       *       *
# Line 859  class om_dbform extends dbForm { Line 419  class om_dbform extends dbForm {
419       * @param string $value valeur à inserer dans la colonne       * @param string $value valeur à inserer dans la colonne
420       */       */
421      function isUnique($champ,$value) {      function isUnique($champ,$value) {
422          //Test sur un groupe de champs                  //Test sur un groupe de champs
423          if(is_array($champ) and is_array($value)) {          if(is_array($champ) and is_array($value)) {
424              $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".implode(" = ? AND ",$champ)." = ?";              $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".implode(" = ? AND ",$champ)." = ?";
425          } else {          } else {
426          //Test sur un champ                  //Test sur un champ
427              $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".$champ." = ?";              $sql = 'SELECT count(*) FROM '.DB_PREFIXE.$this->table." WHERE ".$champ." = ?";
428          }          }
429          if($this->getParameter('maj')) {          if($this->getParameter('maj')) {
# Line 885  class om_dbform extends dbForm { Line 445  class om_dbform extends dbForm {
445          }          }
446      }      }
447    
   
   
448      /**      /**
449       * Methode de verification des contraintes not null,       * Methode de verification des contraintes not null,
450       * affiche une erreur si nul.       * affiche une erreur si nul.
# Line 896  class om_dbform extends dbForm { Line 454  class om_dbform extends dbForm {
454      function checkRequired() {      function checkRequired() {
455          foreach($this->required_field as $field) {          foreach($this->required_field as $field) {
456              //Ne test la cle primaire car n'a pas de valeur a l'ajout              //Ne test la cle primaire car n'a pas de valeur a l'ajout
457    
458              // la cle primaire est automatiquement cree              // la cle primaire est automatiquement cree
459              if ($field == $this->clePrimaire) {              if ($field == $this->clePrimaire) {
460                  continue;                  continue;
# Line 924  class om_dbform extends dbForm { Line 483  class om_dbform extends dbForm {
483              */              */
484              if ($this->getParameter('maj') == 0 and              if ($this->getParameter('maj') == 0 and
485                  (!isset($this->valF[$field]) or $this->valF[$field] == '')) {                  (!isset($this->valF[$field]) or $this->valF[$field] == '')) {
486    
487                  $error = true;                  $error = true;
488                  $this->correct = false;                  $this->correct = false;
489    
# Line 962  class om_dbform extends dbForm { Line 522  class om_dbform extends dbForm {
522              } elseif ($this->getParameter('maj') == 1              } elseif ($this->getParameter('maj') == 1
523                         and isset($this->valF[$field])                         and isset($this->valF[$field])
524                         and $this->valF[$field] == '') {                         and $this->valF[$field] == '') {
525    
526                  $error = true;                  $error = true;
527                  $this->correct = false;                  $this->correct = false;
528              }              }
# Line 991  class om_dbform extends dbForm { Line 552  class om_dbform extends dbForm {
552          if ($this->msg != "") {          if ($this->msg != "") {
553    
554              //              //
             $m = new message();  
   
             //  
555              if ($this->correct) {              if ($this->correct) {
556                  $class = "valid";                  $class = "valid";
557              } else {              } else {
558                  $class = "error";                  $class = "error";
559              }              }
560              $m->displayMessage($class, $this->msg);              $this->f->displayMessage($class, $this->msg);
561    
562          }          }
563    
# Line 1024  class om_dbform extends dbForm { Line 582  class om_dbform extends dbForm {
582          }          }
583      }      }
584    
   
     /**  
      *  
      */  
     function addToLog($message, $type = DEBUG_MODE) {  
         if (defined('REST_REQUEST')) { // dans le cas d'utilisation du REST  $this->REST  
             logger::instance()->log("REST request class ".get_class($this)." - ".$message, $type);  
         } else {  
             logger::instance()->log("class ".get_class($this)." - ".$message, $type);  
         }  
     }  
   
585      // }}}      // }}}
586            
587      /**      /**
# Line 1046  class om_dbform extends dbForm { Line 592  class om_dbform extends dbForm {
592              $this->errors[$key] = '';              $this->errors[$key] = '';
593          }          }
594      }      }
595    
596        /**
597         * Méthode pour convertir une date Y-m-d en d/m/Y
598         */
599        function dateDBToForm($date) {
600            if($date == "") {
601                return "";
602            }
603            $dateFormat = new DateTime($date);
604            return $dateFormat->format('d/m/Y');
605        }
606        
607            
608        function init_select(&$form = null, &$db = null, $maj, $debug, $field, $sql,
609                             $sql_by_id, $om_validite = false, $multiple = false) {
610    
611            // MODE AJOUTER et MODE MODIFIER
612            if ($maj < 2) {
613    
614                $contenu = array();
615                $res = $db->query($sql);
616                $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
617                // verification d'une eventuelle erreur
618                if (database::isError($res)) {
619                    die($res->getMessage().$sql);
620                } else {
621                    // Initialisation du select
622                    $contenu[0][0] = '';
623                    $contenu[1][0] = _('choisir')."&nbsp;"._($field);
624                    //
625                    $k=1;
626                    while($row =& $res->fetchRow()){
627                        $contenu[0][$k] = $row[0];
628                        $contenu[1][$k] = $row[1];
629                        $k++;
630                    }
631                    // gestion des objets a date de validite
632                    if ($om_validite == true) {
633    
634                        // ajout de la valeur manquante a $contenu si necessaire
635                        if ($maj == 1) {
636    
637                            if (!in_array($this->form->val[$field], $contenu[0])) {
638    
639                                //
640                                $this->getSelectOldValue($form, $maj, $db, $contenu,
641                                                         $sql_by_id, $field);
642                            } else {
643    
644                                $empty = true;
645                                foreach ($this->form->val as $f => $value) {
646                                    if (!empty($value)) {
647                                        $empty = false;
648                                    }
649                                }
650    
651                                //
652                                if ($empty == true and
653                                    $_POST[$field] != '') {
654    
655                                    $this->getSelectOldValue($form, $maj, $db,
656                                                             $contenu, $sql_by_id,
657                                                             $field,
658                                                             $_POST[$field]);
659                                }
660                            }
661                        }
662                    }
663    
664                    //
665                    $form->setSelect($field, $contenu);
666                }
667            }
668    
669            // MODE SUPPRIMER et MODE CONSULTER
670            if ($maj == 2 or $maj == 3) {
671                // Initialisation du select
672                $contenu[0][0] = '';
673                $contenu[1][0] = '';
674    
675                if (isset($this->form->val[$field]) and
676                    !empty($this->form->val[$field]) and $sql_by_id) {
677                    //
678                    if ($multiple == true) {
679                        $val_field = "'".str_replace(",", "','",$this->form->val[$field])."'";
680                    } else {
681                        $val_field = $this->form->val[$field];
682                    }
683    
684                    // ajout de l'identifiant recherche a la requete
685                    $sql_by_id = str_replace('<idx>', $val_field, $sql_by_id);
686    
687                    // execution
688                    $result = $db->query($sql_by_id);
689                    $this->addToLog("setSelect(): db->query(".$sql_by_id.");", VERBOSE_MODE);
690                    if (database::isError($result)) {
691                       die($result->getMessage().$sql_by_id);
692                    }
693    
694                    $row =& $result->fetchRow();
695                    $contenu[0][0] = $row[0];
696                    $contenu[1][0] = $row[1];
697                    
698                    $k=1;
699                    while($row =& $result->fetchRow()){
700                        $contenu[0][$k] = $row[0];
701                        $contenu[1][$k] = $row[1];
702                        $k++;
703                    }
704                }
705    
706                $form->setSelect($field, $contenu);
707            }
708        }
709    
710        // {{{ SURCHARGES DES LIBELLES DES BOUTONS
711    
712                           /**
713         * Cette methode permet d'afficher le bouton de validation du formulaire
714         *
715         * @param integer $maj Mode de mise a jour
716         * @return void
717         */
718        function bouton($maj) {
719    
720            if (!$this->correct) {
721                //
722                if ($maj == 2) {
723                    $bouton = _("Supprimer");
724                } else {
725                    if ($maj == 1) {
726                        $bouton = _("Modifier");
727                    } else {
728                        $bouton = _("Ajouter");
729                    }
730                }
731                ////
732                //$bouton .= "&nbsp;"._("l'enregistrement de la table")."&nbsp;:";
733                //$bouton .= "&nbsp;'"._($this->table)."'";
734                //
735                $params = array(
736                    "value" => $bouton,
737                    "class" => "btn btn-primary",
738                );
739                //
740                $this->f->layout->display_form_button($params);
741            }
742    
743        }
744    
745        /**
746         *
747         */
748        function boutonsousformulaire($datasubmit, $maj, $val=null) {
749    
750            if (!$this->correct) {
751                //
752                switch ($maj) {
753                    case 0:
754                        $bouton = _("Ajouter");
755                        break;
756                    case 1:
757                        $bouton = _("Modifier");
758                        break;
759                    case 2:
760                        $bouton = _("Supprimer");
761                        break;
762                }
763                ////
764                //$bouton .= "&nbsp;"._("l'enregistrement de la table")."&nbsp;:";
765                //$bouton .= "&nbsp;'"._($this->table)."'";
766                //
767                $params = array(
768                    "class" => "",
769                    "value" => $bouton,
770                    "onclick" => "affichersform('".get_class($this)."', '$datasubmit', this.form);return false;",
771                );
772                //
773                $this->f->layout->display_form_button($params);
774            }
775    
776        }
777        // }}}
778    
779        // {{{ GESTION DES METADONNEES
780    
781        /**
782         * Liste des métadonnées communes à l'ensemble des objets de l'application
783         */
784        var $metadata_global = array(
785            "code_produit" => "getCodeProduit",
786            "groupe" => "getGroupe",
787        );
788    
789      /**      /**
790       * Cette methode est à surcharger elle permet de tester dans chaque classe       * Retourne le code produit défini dans le paramétrage
791       * des droits des droits spécifiques en fonction des données       * @return string code produit (OpenADS)
792       */       */
793      function canAccess() {      protected function getCodeProduit() {
794          return true;          return $this->f->getParameter("code_produit");
795      }      }
796    
797        /**
798         * Retourne le groupe des dossiers d'instruction géré par l'application
799         * @return string groupe (ADS)
800         */
801        protected function getGroupe() {
802            return $this->f->getParameter("groupe_instruction");
803        }
804    
805        // }}}
806    
807  }  }
808    
809  ?>  ?>

Legend:
Removed from v.684  
changed lines
  Added in v.1912

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26