/[openfoncier]/branches/3.14.x/obj/instruction.class.php
ViewVC logotype

Diff of /branches/3.14.x/obj/instruction.class.php

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

trunk/obj/instruction.class.php revision 460 by nhaye, Thu Sep 27 10:19:42 2012 UTC branches/3.14.x/obj/instruction.class.php revision 3343 by vpihour, Thu Mar 19 17:34:18 2015 UTC
# Line 1  Line 1 
1  <?php  <?php
2  //$Id$  /**
3  //gen openMairie le 10/02/2011 20:34   *
4  /*   *
5  $Id: instruction.class.php,v 1.29 2010-10-27 10:52:20 fraynaud Exp $   * specific :
6  specific :   * - cle secondaire
7  - cle secondaire   *   destruction autorisée que pour le dernier evenement
8    destruction autorisée que pour le dernier evenement   *     [delete the last event ]
9    [delete the last event ]   * - variable globale [global variables]
10  - variable globale [global variables]   *     var $archive_date_depot;
11      var $archive_date_depot;   *     var $retourformulaire;
12      var $retourformulaire;   *     var $idxformulaire;
13      var $idxformulaire;   * - modification des données dans dossier trigger avant
14  - modification des données dans dossier trigger avant   * [modify dossier data with trigger function]
15    [modify dossier data with trigger function]   * - function mois_date : pour ajouter des mois a une date
16  - function moisdate : pour ajouter des mois a une date   *   [add months (delay) and calculation final date]
17    [add months (delay) and calculation final date]   * - voir script_lang.js : bible ...
18  - voir script_lang.js : bible ...   *
19  */   * @package openfoncier
20  require_once ("../gen/obj/instruction.class.php");   * @version SVN : $Id$
21     */
22    
23    //
24    require_once "../gen/obj/instruction.class.php";
25    
26    //
27    require_once "../services/outgoing/messageenqueuer.php";
28    
29    //
30  class instruction extends instruction_gen {  class instruction extends instruction_gen {
31    
32      var $archive_date_depot; // specific      var $archive_date_depot; // specific
33      var $retourformulaire;   // specific      var $retourformulaire;   // specific
34      var $idxformulaire;      // specific      var $idxformulaire;      // specific
35        var $valEvenement;
36        var $restriction_valid = null;
37        // Tableau contenant une partie des métadonnées arrêtés
38        var $metadonneesArrete;
39    
40        var $metadata = array(
41            "om_fichier_instruction" => array(
42                "dossier" => "getDossier",
43                "dossier_version" => "getDossierVersion",
44                "numDemandeAutor" => "getNumDemandeAutor",
45                "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
46                "typeInstruction" => "getTypeInstruction",
47                "statutAutorisation" => "getStatutAutorisation",
48                "typeAutorisation" => "getTypeAutorisation",
49                "dateEvenementDocument" => "getDateEvenementDocument",
50                "groupeInstruction" => 'getGroupeInstruction',
51                "title" => 'getTitle',
52            ),
53            "arrete" => array(
54                "numArrete" => "getNumArrete",
55                "ReglementaireArrete" => "getReglementaireArrete",
56                "NotificationArrete" => "getNotificationArrete",
57                "dateNotificationArrete" => "getDateNotificationArrete",
58                "controleLegalite" => "getControleLegalite",
59                "dateSignature" => "getDateSignature",
60                "nomSignataire" => "getNomSignataire",
61                "qualiteSignataire" => "getQualiteSignataire",
62                "ap_numRue" => "getAp_numRue",
63                "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
64                "ap_codePostal" => "getAp_codePostal",
65                "ap_ville" => "getAp_ville",
66                "activite" => "getActivite",
67                "dateControleLegalite" => "getDateControleLegalite",
68            ),
69        );
70    
71    
72      function instruction($id,&$db,$debug) {      function __construct($id, &$db, $debug) {
73          $this->constructeur($id,$db,$debug);          $this->constructeur($id, $db, $debug);
     }// fin constructeur  
   
     function cleSecondaire($id,&$db,$val,$DEBUG) {  
         parent::cleSecondaire($id,$db,$val,$DEBUG);  
         // controle suppression cle secondaire [secondary key delete control]  
         // ------------------------------------------------------------------------------------  
         // specifique detruire que le dernier   [specific instruction : delete the last event ]  
         // ------------------------------------------------------------------------------------  
         $dernierevenement='';  
         $sql="select max(instruction) from ".DB_PREFIXE."instruction where dossier ='".  
         $this->idxformulaire."'";  
         $dernierevenement = $db->getOne($sql);  
          if($dernierevenement==$id){  
              $this->correct=true;  
              $this->addToMessage(_('Destruction_chronologique'));  
           }else{  
              $this->addToMessage(_('Destruction_evenement')." : ".$dernierevenement);  
              $this->addToMessage(_('Destruction_chronologique'));  
              $this->correct=false;  
           }  
74      }      }
75    
76      function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){      // {{{ Gestion de la confidentialité des données spécifiques
77          if ($validation==0 and $maj<2) {  
78              if ($maj == 0){      /**
79                  $form->setVal("destinataire", $idxformulaire);       * Surcharge pour gérer les actions disponibles dans le portlet
80                  $form->setVal("dossier", $idxformulaire);       */
81                  $form->setVal("datecourrier", date('Y-m-d'));      function checkAccessibility() {
82            //
83            parent::checkAccessibility();
84            // Si l'utilisateur est un intructeur qui ne correspond pas à la
85            // division du dossier
86            if ($this->f->isUserInstructeur()
87                && isset($this->f->om_utilisateur["division"])
88                && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
89                //
90                //On cache les liens d'action
91                $this->parameters["actions"]["modifier"] = NULL;
92                $this->parameters["actions"]["supprimer"] = NULL;
93                $this->actions_sup["finalisation"] = NULL;
94            }
95            // Si une action 'lu' est présente et que le champ lu est à true
96            // on supprime l'action
97            if (isset($this->actions_sup["lu"])
98                && isset($this->val[array_search("lu", $this->champs)])
99                && $this->val[array_search("lu", $this->champs)]== "t") {
100                unset($this->actions_sup["lu"]);
101            }
102    
103            //Si pas de lettretype associée
104            if($this->getVal("lettretype") == "") {
105                // Suppression des actions sur fichier dans le portlet actions
106                $this->actions_sup["pdfetat"] = NULL;
107                $this->actions_sup["finalisation"] = NULL;
108                $this->actions_sup["definalisation"] = NULL;
109            }
110                
111            //Si le document est déjà finalisé, on affiche uniquement le lien de
112            //dé-finalisation
113            $om_final_instruction = $this->getVal("om_final_instruction");
114            if ( isset($this->actions_sup["finalisation"]) &&
115                $om_final_instruction== "t" ){
116                    
117                //On cache les liens d'action
118                $this->parameters["actions"]["modifier"] = NULL;
119                $this->parameters["actions"]["supprimer"] = NULL;
120                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
121                $this->actions_sup["finalisation"] = NULL;
122                $this->actions_sup["pdfetat"]["lien"] = "../spg/file.php?id=";
123                $this->actions_sup["pdfetat"]["id"] =
124                    "&amp;obj=instruction&amp;champ=om_fichier_instruction";
125            }
126            //Si le document n'est pas finalisé, on affiche uniquement le lien de
127            //finalisation
128            if ( isset($this->actions_sup["definalisation"]) &&
129                $om_final_instruction!= "t" ){
130                    
131                //On cache le lien de finalisation et on affiche le bon lien pour l'édition
132                $this->actions_sup["definalisation"] = NULL;
133                $this->actions_sup["pdfetat"]["lien"] = "../app/pdf_instruction.php?idx=";
134                $this->actions_sup["pdfetat"]["id"] = "";
135            }
136            
137            $idxformulaire = $this->getParameter("idxformulaire");
138            $retourformulaire = $this->getParameter("retourformulaire");
139            //Si le dossier d'instruction auquel est rattachée l'instruction est cloturé,
140            //on affiche pas les liens du portlet
141            if ( $idxformulaire != '' &&
142                (
143                    $retourformulaire == 'dossier' ||
144                    $retourformulaire == 'dossier_instruction' ||
145                    $retourformulaire == 'dossier_instruction_mes_encours' ||
146                    $retourformulaire == 'dossier_instruction_tous_encours' ||
147                    $retourformulaire == 'dossier_instruction_mes_clotures' ||
148                    $retourformulaire == 'dossier_instruction_tous_clotures'
149                )){
150    
151                //On récuppère le statut du dossier d'instruction        
152                $statut = $this->getStatutAutorisationDossier($idxformulaire);
153                // Si l'utilisateur est un instructeur, que le statut est clôturé
154                // et que l'événement n'est pas identifié comme non verrouillable
155                if ( ($this->f->isUserInstructeur()||$this->f->isUserQualificateur()) && $statut == "cloture"
156                    && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false){
157                    
158                    //On cache les liens du portlet
159                    $this->parameters["actions"]["modifier"] = NULL;
160                    $this->actions_sup["finalisation"] = NULL;
161                    $this->actions_sup["definalisation"] = NULL;
162              }              }
             $form->setVal("bible_auto","bible_auto()");  
             $form->setVal("bible","bible()");  
             $form->setVal("bible2","bible2()");  
163          }          }
         $this->retourformulaire=$retourformulaire;  
         $this->idxformulaire=$idxformulaire;  
164      }      }
165    
166      function setType(&$form,$maj) {      /**
167          parent::setType($form,$maj);       * Cette methode est à surcharger elle permet de tester dans chaque classe
168          if ($maj < 2) { //ajouter et modifier       * des droits des droits spécifiques en fonction des données
169              $form->setType('destinataire', 'hidden');       */
170              $form->setType('lettretype', 'hiddenstatic');      function canAccess() {
171              $form->setType('complement', 'textarea');          // Si l'utilisateur est un intructeur qui ne correspond pas à la
172              $form->setType('complement2', 'textarea');          // division du dossier
173              $form->setType('bible_auto', 'httpclick');          if ($this->f->isUserInstructeur()
174              $form->setType('bible', 'httpclick');              && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
175              $form->setType('bible2', 'httpclick');              && $this->getParameter("maj") != 3) {
176              $form->setType('dossier', 'hiddenstatic');                //
177              $form->setType('libelle', 'hiddenstatic');              $this->addToLog("canAccess(): utilisateur instructeur sur un dossier d'une autre division", EXTRA_VERBOSE_MODE);
178              if($maj==0){ // add              return false;
179                  $form->setType('instruction', 'hiddenstatic');          }
180                  $form->setType('evenement', 'select');  
181                  $form->setType('datecourrier', 'date2');          $retourformulaire = $this->getParameter("retourformulaire");
182              }else{ // modify          // Si l'utilisateur est un instructeur, que le dossier est cloturé,
183                  $form->setType('instruction', 'hiddenstatic');          // que l'utilisateur est dans un sous formulaire précis, que le
184                  $form->setType('evenement', 'hiddenstatic');          // formulaire n'est pas en mode consulter ou ajouter et que l'événement
185                  //$form->setType('datecourrier', 'hiddenstaticdate');          // n'est pas identifié comme non verrouillable
186                  $form->setType('datecourrier', 'date2');          if ( $this->f->isUserInstructeur() &&
187                  // necessaire pour calcul de date en modification              $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
188                  $form->setType('delai', 'hiddenstatic');              && (
189              }                  $retourformulaire == 'dossier' ||
190          } elseif($maj==2){                  $retourformulaire == 'dossier_instruction' ||
191              $form->setType('dossier', 'hiddenstatic');                  $retourformulaire == 'dossier_instruction_mes_encours' ||
192          }else {                  $retourformulaire == 'dossier_instruction_tous_encours' ||
193              $form->setType('destinataire', 'hidden');                  $retourformulaire == 'dossier_instruction_mes_clotures' ||
194              $form->setType('dossier', 'static');                  $retourformulaire == 'dossier_instruction_tous_clotures'
195                )
196                && $this->getParameter("maj") != 3
197                && $this->getParameter("maj") != 0
198                && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
199    
200                return false;
201          }          }
202          $form->setType('complement3', 'hidden');          //
203          $form->setType('bible_auto', 'hidden');          return true;
204          $form->setType('bible', 'hidden');      }
205          $form->setType('bible2', 'hidden');  
206        /**
207         * Cette variable permet de stocker le résultat de la méthode
208         * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
209         * ces appels.
210         * @var string Code de la division du dossier en cours
211         */
212        var $_division_from_dossier = NULL;
213    
214        /**
215         * Cette méthode permet de récupérer le code de division correspondant
216         * au dossier sur lequel on se trouve.
217         *
218         * @return string Code de la division du dossier en cours
219         */
220        function getDivisionFromDossier() {
221    
222            // Cette méthode peut être appelée plusieurs fois lors d'une requête.
223            // Pour éviter de refaire le traitement de recherche de la division
224            // alors on vérifie si nous ne l'avons pas déjà calculé.
225            if ($this->_division_from_dossier != NULL) {
226                // Logger
227                $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
228                // On retourne la valeur déjà calculée
229                return $this->_division_from_dossier;
230            }
231    
232            // Par défaut, on définit la valeur du dossier à NULL
233            $dossier = NULL;
234            // Test sur le mode et le contexte du formulaire
235            if ($this->getParameter("maj") == 0
236                && ($this->getParameter("retourformulaire") == "dossier"
237                    || $this->getParameter("retourformulaire") == "dossier_instruction"
238                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
239                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
240                    || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
241                    || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
242                // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
243                // n'existe pas en base de données) ET que nous nous trouvons
244                // dans le contexte d'un dossier d'instruction alors on récupère
245                // le numéro de dossier depuis le paramètre 'idxformulaire'
246                $dossier = $this->getParameter("idxformulaire");
247            } else {
248                // Sinon on récupère le numéro de dossier dans le champs dossier de
249                // l'enregistrement (en base de données)
250                $dossier = $this->getVal("dossier");
251            }
252    
253            // On appelle la méthode de la classe utils qui renvoi le code de la
254            // division d'un dossier, on la stocke pour ne pas refaire le calcul au
255            // prochain appel de cette méthode
256            $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
257            // Logger
258            $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
259            // On retourne la valeur retournée
260            return $this->_division_from_dossier;
261    
262        }
263    
264        /**
265         * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
266         */
267        function getNumDemandeAutorFromDossier($id) {
268            //
269            if (!isset($id)) {
270                return NULL;
271            }
272            //
273            $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
274            $sql .= " where dossier='".$id."'";
275            //
276            $dossier_autorisation = $this->db->getOne($sql);
277            $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
278            database::isError($dossier_autorisation);
279            //
280            return $dossier_autorisation;
281        }
282    
283        // }}}
284    
285        function setType(&$form, $maj) {
286            //
287            parent::setType($form, $maj);
288            // On cache tous les champs
289            // XXX
290            $form->setType('complement3_om_html', 'hidden');
291          $form->setType('bible3', 'hidden');          $form->setType('bible3', 'hidden');
292          $form->setType('complement4', 'hidden');          $form->setType('complement4_om_html', 'hidden');
293          $form->setType('bible4', 'hidden');          $form->setType('bible4', 'hidden');
294          $form->setType('complement5', 'hidden');          $form->setType('complement5_om_html', 'hidden');
295          $form->setType('bible5', 'hidden');          $form->setType('bible5', 'hidden');
296          $form->setType('complement6', 'hidden');          $form->setType('complement6_om_html', 'hidden');
297          $form->setType('bible6', 'hidden');          $form->setType('bible6', 'hidden');
298          $form->setType('complement7', 'hidden');          $form->setType('complement7_om_html', 'hidden');
299          $form->setType('bible7', 'hidden');          $form->setType('bible7', 'hidden');
300          $form->setType('complement8', 'hidden');          $form->setType('complement8_om_html', 'hidden');
301          $form->setType('bible8', 'hidden');          $form->setType('bible8', 'hidden');
302          $form->setType('complement9', 'hidden');          $form->setType('complement9_om_html', 'hidden');
303          $form->setType('bible9', 'hidden');          $form->setType('bible9', 'hidden');
304          $form->setType('complement10', 'hidden');          $form->setType('complement10_om_html', 'hidden');
305          $form->setType('bible10', 'hidden');          $form->setType('bible10', 'hidden');
306          $form->setType('complement11', 'hidden');          $form->setType('complement11_om_html', 'hidden');
307          $form->setType('bible11', 'hidden');          $form->setType('bible11', 'hidden');
308          $form->setType('complement12', 'hidden');          $form->setType('complement12_om_html', 'hidden');
309          $form->setType('bible12', 'hidden');          $form->setType('bible12', 'hidden');
310          $form->setType('complement13', 'hidden');          $form->setType('complement13_om_html', 'hidden');
311          $form->setType('bible13', 'hidden');          $form->setType('bible13', 'hidden');
312          $form->setType('complement14', 'hidden');          $form->setType('complement14_om_html', 'hidden');
313          $form->setType('bible14', 'hidden');          $form->setType('bible14', 'hidden');
314          $form->setType('complement15', 'hidden');          $form->setType('complement15_om_html', 'hidden');
315          $form->setType('bible15', 'hidden');          $form->setType('bible15', 'hidden');
316            //
317          $form->setType('delai', 'hidden');          $form->setType('delai', 'hidden');
318          $form->setType('etat', 'hidden');          $form->setType('etat', 'hidden');
319          $form->setType('accord_tacite', 'hidden');          $form->setType('accord_tacite', 'hidden');
320          $form->setType('action', 'hidden');          $form->setType('action', 'hidden');
321          $form->setType('delai_notification', 'hidden');          $form->setType('delai_notification', 'hidden');
322          $form->setType('avis', 'hidden');          $form->setType('avis_decision', 'hidden');
323            $form->setType('autorite_competente', 'hidden');
324            //
325          $form->setType('archive_delai', 'hidden');          $form->setType('archive_delai', 'hidden');
326          $form->setType('archive_etat', 'hidden');          $form->setType('archive_etat', 'hidden');
327          $form->setType('archive_accord_tacite', 'hidden');          $form->setType('archive_accord_tacite', 'hidden');
328          $form->setType('archive_avis', 'hidden');          $form->setType('archive_avis', 'hidden');
329          $form->setType('archive_date_complet', 'hidden');          $form->setType('archive_date_complet', 'hiddendate');
330          $form->setType('archive_date_rejet', 'hidden');          $form->setType('archive_date_dernier_depot', 'hiddendate');
331          $form->setType('archive_date_limite', 'hidden');          $form->setType('archive_date_rejet', 'hiddendate');
332          $form->setType('archive_date_notification_delai', 'hidden');          $form->setType('archive_date_limite', 'hiddendate');
333          $form->setType('archive_date_decision', 'hidden');          $form->setType('archive_date_notification_delai', 'hiddendate');
334          $form->setType('archive_date_validite', 'hidden');          $form->setType('archive_date_decision', 'hiddendate');
335          $form->setType('archive_date_achevement', 'hidden');          $form->setType('archive_date_validite', 'hiddendate');
336          $form->setType('archive_date_conformite', 'hidden');          $form->setType('archive_date_achevement', 'hiddendate');
337          $form->setType('archive_date_chantier', 'hidden');            $form->setType('archive_date_conformite', 'hiddendate');
338      }          $form->setType('archive_date_chantier', 'hiddendate');
339                $form->setType('archive_autorite_competente','hidden');
340      function setSelect(&$form, $maj,&$db,$DEBUG) {          //
341          if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))          $form->setType('numero_arrete', 'hidden');
342              include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");          //
343            $form->setType('code_barres', 'hidden');
         // *** evenement ***  
         $contenu=array();  
         // etat du dossier  
         $sql="select etat from ".DB_PREFIXE."dossier where dossier ='".  
               $this->idxformulaire."'";  
         $etat_dossier = $db->getOne($sql);  
         $nature_dossier= substr($this->idxformulaire,0,2);  
         // recherche des evenement de transition  
         $sql= $sql_transition." where transition.etat ='".$etat_dossier."' and (evenement.nature ='".  
               $nature_dossier."' or (nature ='T' and nature !='CU')) order by evenement.action";  
344                    
345          // *** attention en dur le CU          //
346            $form->setType('archive_incompletude','hidden');
347            $form->setType('archive_incomplet_notifie','hidden');
348            $form->setType('archive_evenement_suivant_tacite','hidden');
349            $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
350            $form->setType('archive_etat_pendant_incompletude','hidden');
351            $form->setType('archive_date_limite_incompletude','hiddendate');
352            $form->setType('archive_delai_incompletude','hidden');
353    
354            //
355            $form->setType('duree_validite','hidden');
356            $form->setType('duree_validite_parametrage','hidden');
357            if ($maj < 2) { //ajouter et modifier
358                $form->setType('destinataire', 'hidden');
359                $form->setType('lettretype', 'hiddenstatic');
360                $form->setType('complement_om_html', 'html');
361                $form->setType('complement2_om_html', 'html');
362                $form->setType('bible_auto', 'httpclick');
363                $form->setType('bible', 'httpclick');
364                $form->setType('bible2', 'httpclick');
365                $form->setType('dossier', 'hidden');  
366                $form->setType('libelle', 'hiddenstatic');
367                $form->setType('signataire_arrete','select');
368                $form->setType('date_envoi_signature','datedisabled');
369                $form->setType('date_retour_signature','datedisabled');
370                $form->setType('date_envoi_rar','datedisabled');
371                $form->setType('date_retour_rar','datedisabled');
372                $form->setType('date_envoi_controle_legalite','datedisabled');
373                $form->setType('date_retour_controle_legalite','datedisabled');
374                $form->setType('date_finalisation_courrier','datedisabled');
375    
376                
377    
378                if($maj==0){ // add
379                    $form->setType('instruction', 'hidden');
380                    $form->setType('lettretype', 'hidden');
381                    $form->setType('evenement', 'select');
382                    $form->setType('date_evenement', 'date2');
383                }else{ // modify
384                    $form->setType('instruction', 'hiddenstatic');
385                    $form->setType('evenement', 'selecthiddenstatic');
386                    //$form->setType('date_evenement', 'hiddenstaticdate');
387                    $form->setType('date_evenement', 'date2');
388                    // necessaire pour calcul de date en modification
389                    //$form->setType('delai', 'hiddenstatic');
390                    // les administrateurs technique et fonctionnel peuvent
391                    // modifier tous les champs de date
392                    if ($this->f->isAccredited("instruction_modification_dates")) {
393                        $form->setType('date_envoi_signature', 'date');
394                        $form->setType('date_retour_signature', 'date');
395                        $form->setType('date_envoi_rar', 'date');
396                        $form->setType('date_retour_rar', 'date');
397                        $form->setType('date_envoi_controle_legalite', 'date');
398                        $form->setType('date_retour_controle_legalite', 'date');
399                        $form->setType('date_finalisation_courrier', 'date');
400                    }
401                }
402            } elseif($maj==2){
403                $form->setType('dossier', 'hidden');
404                $form->setType('bible_auto', 'hidden');
405                $form->setType('bible', 'hidden');
406                $form->setType('bible2', 'hidden');
407            }else {
408                $form->setType('destinataire', 'hidden');
409                $form->setType('dossier', 'hidden');
410                $form->setType('bible_auto', 'hidden');
411                $form->setType('bible', 'hidden');
412                $form->setType('bible2', 'hidden');
413            }
414    
415            //Cache les champs pour la finalisation
416            $form->setType('om_fichier_instruction', 'hidden');
417            $form->setType('om_final_instruction', 'hidden');
418            // Cache le document arrêté
419            $form->setType('document_numerise', 'hidden');
420                    
421            //Masquer les champs date_envoi_controle_legalite et
422            //date_retour_controle_legalite si ce n'est pas un arrêté et si ce n'est
423            //pas un utilisateur ayant le droit spécifique
424            if ( !is_numeric($this->getVal("avis_decision"))&&
425                !$this->f->isAccredited("instruction_modification_dates")){
426                
427                $form->setType("date_envoi_controle_legalite", "hiddendate");
428                $form->setType("date_retour_controle_legalite", "hiddendate");
429            }
430        }
431    
432          $res = $db->query($sql);      function setSelect(&$form, $maj,&$db,$debug) {
433          if (database::isError($res))          /**
434              die($res->getMessage());           * On ne surcharge pas la méthode parent car une requête sur la table
435          $contenu[0][0]="";           * dossier est mauvaise pour les performances, car la requête qui
436          $contenu[1][0]=_('choisir')." "._('evenement');           * concerne evenement est plus complexe que celle générée et car les
437          $k=1;           * champs action, avis_decision et etat ne sont pas utilisés comme des
438          while ($row=& $res->fetchRow()){           * select
439              if($maj==0){ // ajouter           */
440                  $contenu[0][$k]=$row[0];          if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
441                  $contenu[1][$k]=$row[1];              include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
442                  $k++;          elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
443              }else{              include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
444                  // select hiddenstatic  
445                  $contenu[0][$k]=$row[0];          //// action
446                  $contenu[1][$k]=$row[1];          //$this->init_select($form, $db, $maj, $debug, "action",
447                  $k++;          //                   $sql_action, $sql_action_by_id, false);
448              }  
449          }          //// avis_decision
450          $form->setSelect("evenement",$contenu);          //$this->init_select($form, $db, $maj, $debug, "avis_decision",
451          // lien bible_auto  [link]          //                   $sql_avis_decision, $sql_avis_decision_by_id, false);
452          $contenu=array();  
453          $contenu[0]=" automatique ";          //// dossier
454            //$this->init_select($form, $db, $maj, $debug, "dossier",
455            //                   $sql_dossier, $sql_dossier_by_id, false);
456    
457            //// etat
458            //$this->init_select($form, $db, $maj, $debug, "etat",
459            //                   $sql_etat, $sql_etat_by_id, false);
460    
461            //// evenement
462            //$this->init_select($form, $db, $maj, $debug, "evenement",
463            //                   $sql_evenement, $sql_evenement_by_id, false);
464    
465            // signataire_arrete
466            $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
467                               $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
468    
469            /**
470             * Gestion du filtre sur les événements de workflow disponibles
471             * On récupère ici en fonction de l'état du dossier d'instruction en
472             * cours et du type du dossier d'instruction en cours la liste
473             * événements disponibles.
474             */
475            if ($maj == 0) {
476                // Récupération des événements par une jointure entre la table dossier
477                // et la table transition et la table evenement et la table
478                // lien_dossier_instruction_type_evenement en fonction de l'identifiant
479                // du dossier d'instruction en cours
480                $sql = "SELECT
481                evenement.evenement,
482                evenement.libelle as lib
483                FROM ".DB_PREFIXE."dossier
484                INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
485                    ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
486                INNER JOIN ".DB_PREFIXE."evenement
487                    ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
488                INNER JOIN ".DB_PREFIXE."transition
489                    ON evenement.evenement = transition.evenement
490                    AND dossier.etat=transition.etat
491                WHERE dossier.dossier='".$this->idxformulaire."'
492                ORDER BY evenement.libelle, evenement.action";
493                $res = $db->query($sql);
494                $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
495                if (database::isError($res)) {
496                    die($res->getMessage());
497                }
498                // Remplissage du tableau du select
499                $contenu = array(
500                    0 => array("",),
501                    1 => array(_('choisir')." "._('evenement'),)
502                );
503                while ($row=& $res->fetchRow()) {
504                    $contenu[0][] = $row[0];
505                    $contenu[1][] = $row[1];
506                }
507                $form->setSelect("evenement", $contenu);
508            } else {
509                $sql = "SELECT
510                evenement.libelle as lib
511                FROM ".DB_PREFIXE."evenement
512                WHERE evenement.evenement=".$this->getVal("evenement")."";
513                $res = $db->getone($sql);
514                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
515                if (database::isError($res)) {
516                    die($res->getMessage());
517                }
518                //
519                $contenu = array(
520                    0 => array($this->getVal("evenement"),),
521                    1 => array($res,)
522                );
523                $form->setSelect("evenement", $contenu);
524            }
525    
526            /**
527             * Gesion des liens vers la bible
528             */
529            // lien bible_auto
530            $contenu = array(_("automatique"));
531          $form->setSelect("bible_auto",$contenu);          $form->setSelect("bible_auto",$contenu);
532          // lien bible1          // lien bible1
533          $contenu=array();          $contenu = array(_("bible"));
         $contenu[0]=" Bible ";  
534          $form->setSelect("bible",$contenu);          $form->setSelect("bible",$contenu);
535          // lien bible2          // lien bible2
536          $contenu=array();          $contenu = array(_("bible"));
         $contenu[0]=" Bible ";  
537          $form->setSelect("bible2",$contenu);          $form->setSelect("bible2",$contenu);
538      } // function select      }
539    
540        function cleSecondaire($id, &$db, $val, $DEBUG) {
541            //
542            parent::cleSecondaire($id, $db, $val, $DEBUG);
543            
544            $id = $this->getVal($this->clePrimaire);
545    
546            
547            //Requête de vérification que cet événement d'instruction n'est pas lié
548            //à la création d'un dossier d'instruction
549            $sql = "SELECT demande_type.dossier_instruction_type
550                FROM ".DB_PREFIXE."demande_type
551                LEFT JOIN ".DB_PREFIXE."demande
552                ON demande.demande_type = demande_type.demande_type
553                WHERE demande.instruction_recepisse = ".$id;
554            $res = $this->db->getOne($sql);
555            $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
556            if (database::isError($res)) {
557                die($res->getMessage());
558            }
559    
560            // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
561            //création de dossier d'instruction, l'événement d'instruction peut être
562            //supprimé
563            if ( $this->correct !== false || $res == null || $res == ""){
564    
565                // Requête de vérification que cet événement d'instruction est lié
566                // à une demande
567                $sql = "SELECT demande
568                    FROM ".DB_PREFIXE."demande
569                    WHERE instruction_recepisse = ".$id;
570                $res = $this->db->getOne($sql);
571                $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
572                if (database::isError($res)) {
573                    die($res->getMessage());
574                }
575    
576                //Si c'est un événement d'instruction lié à une demande
577                if ($res != null || $res != ""){
578                    
579                    require_once "../obj/demande.class.php";
580                    $demande = new demande($res, $this->db, DEBUG);
581    
582                    //On met à jour la demande en supprimant la liaison vers
583                    //l'événement d'instruction
584                    $demande->setParameter("maj", 1);
585                    $valF = array();
586                    foreach($demande->champs as $identifiant => $champ) {
587                        $valF[$champ] = $demande->val[$identifiant];
588                    }
589                    $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
590                    $valF['instruction_recepisse']=NULL;
591                    $ret = $demande->modifier($valF, $this->db, DEBUG);
592                }
593                    
594                /**
595                 * Vérification que l'élément supprimé est le dernier pour pouvoir
596                 * remodifier les données de manière itérative.
597                 */
598                // Initialisation
599                $dernierevenement = "";
600                // Récupération du dernier élément de la table d'instruction qui
601                // concerne le dossier en cours
602                $sql = "SELECT max(instruction)
603                FROM ".DB_PREFIXE."instruction
604                WHERE dossier ='".$this->idxformulaire."'";
605                $dernierevenement = $db->getOne($sql);
606                $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
607                if (database::isError($dernierevenement)) {
608                    die($dernierevenement->getMessage());
609                }
610                // Si on se trouve effectivement sur le dernier evenement d'instruction
611                if ($dernierevenement == $id) {
612                    // Alors on valide la suppression
613                    $this->correct = true;
614                    $this->addToMessage(_('Destruction_chronologique'));
615                } else {
616                    // Alors on annule la suppression
617                    $this->correct = false;
618                    $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
619                }
620            }
621        }
622    
623        /**
624         * Vérification de la possibilité ou non de modifier des dates de suivi
625         * @param  string $champ champ date à vérifier
626         */
627        function updateDate($champ) {
628            
629            //Si le retourformulaire est "dossier_instruction"
630            if ($this->retourformulaire == "dossier_instruction") {
631    
632                // Vérification de la possibilité de modifier les dates si déjà éditées
633                if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
634                    // si l'utilisateur n'est pas un admin
635                    if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
636                        $this->correct = false;
637                        $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
638                    }
639                }
640            }
641            
642            //
643            return true;
644        }
645    
646        // Sélectionne le signataire_arrete par défaut
647        function setVal(&$form,$maj,$validation){
648            
649            // Ajout
650            if($maj == 0) {
651                
652                // Création de la requête
653                $sql = "SELECT signataire_arrete
654                        FROM ".DB_PREFIXE."signataire_arrete
655                        WHERE defaut IS TRUE";
656                
657                // Exécution de la requête
658                $res = $this->f->db->query($sql);
659                $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
660                if ( database::isError($res)){
661                    die();
662                }
663            
664                $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
665                
666                if ( isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
667                    
668                    $form->setVal("signataire_arrete",$row['signataire_arrete']);
669                }
670            }
671        }
672    
673      function setGroupe(&$form,$maj){      /*Met des valeurs par défaut dans certains des sous-formulaire*/
674          $form->setGroupe('evenement','D');      function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
675          $form->setGroupe('libelle','G');          if ($validation==0 and $maj<2) {
676          $form->setGroupe('datecourrier','G');              if ($maj == 0){
677          $form->setGroupe('lettretype','F');                  $form->setVal("destinataire", $idxformulaire);
678      }                  $form->setVal("dossier", $idxformulaire);
679                    $form->setVal("date_evenement", date('Y-m-d'));
680      function setRegroupe(&$form,$maj){                    }
681          $form->setRegroupe('evenement','D',_('evenement'), "collapsible");              $form->setVal("bible_auto","bible_auto()");
682          $form->setRegroupe('libelle','G','');              $form->setVal("bible","bible()");
683          $form->setRegroupe('datecourrier','G','');              $form->setVal("bible2","bible2()");
684          $form->setRegroupe('lettretype','F','');          }
685          $form->setRegroupe('complement','D',_('complement'), "collapsible");          $this->retourformulaire=$retourformulaire;
686          $form->setRegroupe('bible_auto','G','');          $this->idxformulaire=$idxformulaire;
687          $form->setRegroupe('bible','F','');      }
688          $form->setRegroupe('complement2','D',_('complement2'), "startClosed");  
689          $form->setRegroupe('bible2','F','');  
690        function setLayout(&$form, $maj){
691            if ( $maj < 2 OR $maj == 3 ) {
692                            /*Champ sur lequel s'ouvre le bloc 1 */
693                $form->setBloc('evenement','D',"","col_12");
694    
695                    $form->setFieldset('evenement','D',_('Evenement'));
696                    $form->setFieldset('lettretype','F','');
697                
698                $form->setBloc('lettretype','F');
699    
700                $form->setBloc('date_finalisation_courrier','D',"","col_12");
701    
702                    $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
703                        $form->setBloc('date_finalisation_courrier','D',"","col_6");
704                        $form->setBloc('date_envoi_controle_legalite','F');
705    
706                        $form->setBloc('signataire_arrete','D',"","col_6");
707                        $form->setBloc('date_retour_controle_legalite','F');
708                    $form->setFieldset('date_retour_controle_legalite','F','');
709                
710                $form->setBloc('date_retour_controle_legalite','F');
711    
712                $form->setBloc('complement_om_html','D',"","col_12");
713                    $form->setFieldset('complement_om_html','D',_('Complement'));
714                    $form->setFieldset('bible','F','');
715                $form->setBloc('bible','F');
716    
717                $form->setBloc('complement2_om_html','D',"","col_12");
718                    $form->setFieldset('complement2_om_html','D',_('Complement 2'));
719                    $form->setFieldset('bible2','F','');
720                $form->setBloc('bible2','F');
721            }
722      }      }
723            
724      function setLib(&$form,$maj) {      function setLib(&$form, $maj) {
725          parent :: setLib($form,$maj);          //
726          $form->setLib('libelle',' ');          parent::setLib($form, $maj);
727          $form->setLib('bible_auto',"");          //
728          $form->setLib('bible',"");          $form->setLib('bible_auto', "");
729          $form->setLib('bible2',"");          $form->setLib('bible', "");
730          $form->setLib('lettretype',"->"._(" courrier "));          $form->setLib('bible2', "");
731          $form->setLib('datecourrier',_(" du "));      }
732      }  
733        function triggerajouter($id, &$db, $val, $DEBUG) {
734      // ==================================================================          /**
735      // trigger avant modification données    [trigger before modify data]           * Le code suivant permet de récupérer des valeurs des tables evenement
736      // ==================================================================           * et dossier pour les stocker dans l'instruction :
737      function triggerajouter($id,&$db,$val,$DEBUG) {           * DEPUIS L'EVENEMENT
738          // mise a jour instruction avec evenement           * - action
739          // [modify instruction with evenement]           * - delai
740          $sql= "select * from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];           * - accord_tacite
741             * - etat
742             * - avis_decision
743             * - delai_notification
744             * - lettretype
745             * - autorite_competente
746             * DEPUIS LE DOSSIER D'INSTRUCTION
747             * - archive_delai
748             * - archive_accord_tacite
749             * - archive_etat
750             * - archive_avis
751             * - date_complet
752             * - date_rejet
753             * - date_limite
754             * - date_notification_delai
755             * - date_decision
756             * - date_validite
757             * - date_achevement
758             * - date_chantier
759             * - date_conformite
760             * - avis_decision
761             * Il permet également de stocker la date_depot du dossier d'instruction
762             * dans l'attribut $this->archive_date_depot de la classe.
763             */
764            // Récupération de tous les paramètres de l'événement sélectionné
765            $sql = "SELECT * FROM ".DB_PREFIXE."evenement
766            WHERE evenement=".$this->valF['evenement'];
767          $res = $db->query($sql);          $res = $db->query($sql);
768          if (database::isError($res)) die($res->getMessage());          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
769          if ($DEBUG == 1)          if (database::isError($res)) {
770              echo " la requete ".$sql." est exécutée<br>";              die($res->getMessage());
771          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          }
772              if(isset($row['action']) and !empty($row['action'])) {          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
773                // Récupération de l'identifiant de l'action
774                // si une action est paramétrée dans l'événement
775                $this->valF['action'] = NULL;
776                if (isset($row['action']) and !empty($row['action'])) {
777                  $this->valF['action']=$row['action'];                  $this->valF['action']=$row['action'];
             } else {  
                 $this->valF['action']=NULL;  
778              }              }
779              $this->valF['delai']=$row['delai'];              // Récupération de la valeur du délai
780              if(isset($row['etat']) and !empty($row['etat'])) {              $this->valF['delai'] = $row['delai'];
781                // Récupération de l'identifiant de l'état
782                // si un état est paramétré dans l'événement
783                $this->valF['etat']=NULL;
784                if (isset($row['etat']) and !empty($row['etat'])) {
785                  $this->valF['etat']=$row['etat'];                  $this->valF['etat']=$row['etat'];
             } else {  
                 $this->valF['etat']=NULL;  
786              }              }
787                // Récupération de la valeur d'accord tacite
788              $this->valF['accord_tacite']=$row['accord_tacite'];              $this->valF['accord_tacite']=$row['accord_tacite'];
789                // Récupération de la valeur du délai de notification
790              $this->valF['delai_notification']=$row['delai_notification'];              $this->valF['delai_notification']=$row['delai_notification'];
791              if(isset($row['avis']) and !empty($row['avis'])) {              // Récupération de l'identifiant de l'avis
792                  $this->valF['avis']=$row['avis'];              // si un avis est paramétré dans l'événement
793              } else {              $this->valF['avis_decision'] = NULL;
794                  $this->valF['avis']=NULL;              if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
795                    $this->valF['avis_decision']=$row['avis_decision'];
796                }
797                // Récupération de la valeur de l'autorité compétente
798                // si l'autorité compétente est paramétré dans l'événement
799                $this->valF['autorite_competente'] = NULL;
800                if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
801                    $this->valF['autorite_competente']=$row['autorite_competente'];
802              }              }
803              if($row['lettretype']!="")              // Récupération de la valeur de la lettre type
804                  $this->valF['lettretype']=$row['lettretype'];              $this->valF['lettretype']=$row['lettretype'];
             else  
                 $this->valF['lettretype']="standard";  
805          }          }
806          $sql= "select * from ".DB_PREFIXE."dossier where dossier = '".$this->valF['dossier']."'";          // Récupération de toutes les valeurs du dossier d'instruction en cours
807            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
808            WHERE dossier='".$this->valF['dossier']."'";
809          $res = $db->query($sql);          $res = $db->query($sql);
810          if (database::isError($res))          $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
811            if (database::isError($res)) {
812              die($res->getMessage());              die($res->getMessage());
         if ($DEBUG == 1)  
             echo " la requete ".$sql." est exécutée<br>";  
         while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){  
             //  
             $this->archive_date_depot = $row['date_depot'];  
             // archive en instruction (si suppression)  
             $this->valF['archive_delai']=$row['delai'];  
             $this->valF['archive_accord_tacite']=$row['accord_tacite'];  
             $this->valF['archive_etat']=$row['etat'];  
             $this->valF['archive_avis']=$row['avis'];  
             // compatibilite pgsql  
             if($row['date_complet']!='')  
                $this->valF['archive_date_complet']=$row['date_complet'];  
             if($row['date_rejet']!='')  
                $this->valF['archive_date_rejet']= $row['date_rejet'];  
             if($row['date_limite']!='')  
                $this->valF['archive_date_limite']= $row['date_limite'];  
             if($row['date_notification_delai']!='')  
                $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];  
             if($row['date_decision']!='')  
                $this->valF['archive_date_decision']= $row['date_decision'];  
             if($row['date_validite']!='')  
                $this->valF['archive_date_validite']= $row['date_validite'];  
             if($row['date_achevement']!='')  
                $this->valF['archive_date_achevement']= $row['date_achevement'];  
             if($row['date_chantier']!='')  
                $this->valF['archive_date_chantier']= $row['date_chantier'];  
             if($row['date_conformite']!='')  
                $this->valF['archive_date_conformite']= $row['date_conformite'];    
813          }          }
814            $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
815            $this->updateArchiveData($row);
816            $this->archive_date_depot = $row['date_depot'];
817                    
818            // Récupération de la duree de validite du dossier d'autorisation
819            $sql = "SELECT duree_validite_parametrage
820                    FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
821                    LEFT JOIN ".DB_PREFIXE."dossier_autorisation
822                        ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
823                    LEFT JOIN ".DB_PREFIXE."dossier
824                        ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
825            WHERE dossier.dossier='".$this->valF['dossier']."'";
826            $duree_validite_parametrage = $db->getOne($sql);
827            $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
828            database::isError($duree_validite_parametrage);
829            if ($duree_validite_parametrage != '') {
830                $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
831            }
832    
833            // Identifiant du type de courrier
834            $idTypeCourrier = '11';
835            $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
836            // Code barres
837            $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
838      }      }
839            
840      function regle($regle){      // Test si une restriction est valide
841          $temp = explode ("+",$regle);      // return boolean
842          //echo '|'.$regle;      function restrictionIsValid($restriction){
843          // cas rejet          if($this->restriction_valid != null) {
844          if($regle=="null") // 1 dimension -> null              return $this->restriction_valid;
845            }
846            if(empty($restriction)) {
847                $this->restriction_valid = true;
848                return $this->restriction_valid;
849            }
850            // Liste des opérateurs possible
851            $operateurs = array(">=", "<=", "+", "-");
852            // Liste des opérateurs avec espace
853            $operateurs_blank = array(" >= ", " <= ", " + ", " - ");
854    
855            // Supprime tous les espaces de la chaîne de caractère
856            $restriction = str_replace(' ', '', $restriction);
857            
858            // Met des espace avant et après les opérateurs puis transforme la
859            // chaine en un tableau
860            $tabRestriction = str_replace($operateurs, $operateurs_blank,
861                $restriction);
862            $tabRestriction = explode(" ", $tabRestriction);
863    
864            // Tableau comprenant les résultat
865            $res = array();
866            // Compteur pour les résultat
867            // commence à 1 car le 0 doit rester inchangé tout au long du traitement
868            $j = 1;
869            // Comparateur du calcul
870            $comparateur = '';
871            // Booléen retourné
872            $res_bool = true;
873    
874            // S'il y a un comparateur
875            if (in_array(">=", $tabRestriction)
876                || in_array("<=", $tabRestriction)) {
877    
878                // Si le tableau n'est pas vide
879                if (count($tabRestriction) > 0) {
880    
881                    // Boucle dans le tableau pour récupérer seulement les valeurs
882                    foreach ($tabRestriction as $key => $value) {
883                        
884                        //
885                        if (!in_array($value, $operateurs)) {
886                            if ($this->getRestrictionValue($value) != false) {
887                                $res[] = $this->getRestrictionValue($value);
888                            } else {
889                                // Message d'erreur
890                                $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
891                                $this->addToMessage($error_message);
892                                // Arrête le traitement
893                                return false;
894                            }
895                        }
896                    }
897    
898                    // Boucle dans le tableau
899                    // commence à 1 car le 0 doit rester inchangé tout au long du
900                    // traitement
901                    for ($i = 1; $i<count($tabRestriction); $i++) {
902                        
903                        // Récupère le comparateur
904                        if ($tabRestriction[$i] === ">="
905                            || $tabRestriction[$i] === "<=") {
906                            $comparateur = $tabRestriction[$i];
907                        }
908    
909                        // Si l'opérateur qui suit est un "+"
910                        if ($tabRestriction[$i] === "+") {
911                            $dateDep = $res[$j];
912                            unset($res[$j]);$j++;
913                            $duree = $res[$j];
914                            unset($res[$j]);
915                            $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
916                        }
917    
918                        // Si l'opérateur qui suit est un "-"
919                        if ($tabRestriction[$i] === "-") {
920                            $dateDep = $res[$j];
921                            unset($res[$j]);$j++;
922                            $duree = $res[$j];
923                            unset($res[$j]);
924                            $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
925                        }
926                    }
927                    
928                }
929    
930                // Si les tableau des résultats n'est pas vide
931                if (count($res) > 0) {
932                    //
933                    $res_bool = false;
934                    // Effectue le test
935                    if ($comparateur === ">=") {
936                        //
937                        if (strtotime($res[0]) >= strtotime($res[$j])) {
938                            $res_bool = true;
939                        }
940                    }
941                    if ($comparateur === "<=") {
942    
943                        if (strtotime($res[0]) <= strtotime($res[$j])) {
944                            $res_bool = true;
945                        }
946                    }
947                }
948            // Sinon une erreur s'affiche
949            } else {
950    
951                // Message d'erreur
952                $error_message = _("Mauvais parametrage de la restriction.")." ".
953                    _("Contactez votre administrateur");
954                $this->addToMessage($error_message);
955                // Arrête le traitement
956                return false;
957            }
958            
959            return $res_bool;
960    
961        }
962    
963        /**
964         * Permet de définir si l'événement passé en paramètre est un événement retour.
965         * @param integer $evenement événement à tester
966         *
967         * @return boolean retourne true si événement retour sinon false
968         */
969        function is_evenement_retour($evenement) {
970            if(empty($evenement) || !is_numeric($evenement)) {
971                return "";
972            }
973            $sql = "SELECT retour
974                FROM ".DB_PREFIXE."evenement
975                WHERE evenement = ".$evenement;
976            $retour = $this->db->getOne($sql);
977            $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
978            if (database::isError($retour)) {
979                die($retour->getMessage());
980            }
981            if ($retour == 't') {
982                return true;
983            } else {
984                return false;
985            }
986        }
987    
988        /**
989         * Retourne le champ restriction de l'événement passé en paramètre.
990         *
991         * @param integer $evenement id de l'événement sur lequel récupérer la restriction
992         *
993         * @return string             contenu du champ restriction
994         */
995        function get_restriction($evenement) {
996            if(empty($evenement) || !is_numeric($evenement)) {
997                return "";
998            }
999            //Récupère la restriction
1000            $sql= "SELECT
1001                      restriction
1002                  FROM
1003                      ".DB_PREFIXE."evenement
1004                  WHERE
1005                      evenement =".$evenement;
1006    
1007            $restriction = $this->db->getOne($sql);
1008            $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1009            if (database::isError($restriction)) {
1010                die($restriction->getMessage());
1011            }        
1012            return $restriction;
1013        }
1014    
1015        /**
1016         * Récupère la valeur du champ dans la restriction
1017         * @param  string   $restrictionValue   Nom du champ
1018         * @return mixed                        Valeur du champ
1019         */
1020        function getRestrictionValue($restrictionValue){
1021    
1022            // Initialisation de la valeur de retour
1023            $return = false;
1024    
1025            // Récupére les valeurs du dossier
1026            $value_dossier = $this->get_dossier_actual();
1027    
1028            //
1029            if (is_numeric($restrictionValue)) {
1030                $return = $restrictionValue;
1031            }elseif (isset($value_dossier[$restrictionValue])) {
1032                $return = $value_dossier[$restrictionValue];
1033            }elseif (isset($this->valF[$restrictionValue])) {
1034                $return = $this->valF[$restrictionValue];
1035            }
1036    
1037            // Retourne la valeur du champ
1038            return $return;
1039        }
1040    
1041        /**
1042         * Calcul des règle d'action.
1043         * @param string $rule      Règle d'action
1044         * @param string $rule_name Nom de la règle
1045         * @param string $type      Type de la règle
1046         *
1047         * @return mixed            Résultat de la règle
1048         */
1049        function regle($rule, $rule_name, $type = null) {
1050    
1051            // Supprime tous les espaces de la chaîne de caractère
1052            $rule = str_replace(' ', '', $rule);
1053            // Coupe la chaîne au niveau de l'opérateur
1054            $operands = explode ("+", $rule);
1055            // Nombre d'opérande
1056            $nb_operands = count($operands);
1057    
1058            // Règle à null
1059            if ($rule == "null") {
1060              return null;              return null;
         if(sizeof($temp)==1) // 1 dimension  
             if($temp[0]=="archive_date_depot") // initialisation avec le depot  
                 return $this->$regle;  
             else // cas general  
                 return $this->valF[$regle];  
         if(sizeof($temp)==2){ // 2 dimensions  
             if($temp[0]=="archive_date_depot") //initialisation avec le depot  
                 if(is_numeric($temp[1]))  
                     return  $this->moisdate($this->$temp[0], $temp[1]);    
                 else  
                     return  $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);  
             if($temp[0]=="archive_delai") // majoration de delai  
                 return  $this->valF[$temp[0]]+$this->valF[$temp[1]];  
             // cas general 2 dimensions  
             if(is_numeric($temp[1]))  
                 return $this->moisdate($this->valF[$temp[0]], $temp[1]);  
             else                
                return  $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);  
         }  
         if(sizeof($temp)==3){ // 3 dimensions  
             // cas date de validite de sursis  
             if(is_numeric($temp[1]))  
                 $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);  
             else                
                 $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);  
             if(is_numeric($temp[2]))  
                 return $this->moisdate($temp1, $temp[2]);  
             else  
                 return $this->moisdate($temp1, $this->valF[$temp[2]]);  
1061          }          }
1062    
1063            // Si c'est une règle spécifique
1064            if ($rule_name == "regle_autorite_competente"
1065                || $rule_name == "regle_etat"
1066                || $rule_name == "regle_accord_tacite"
1067                || $rule_name == "regle_avis") {
1068                //
1069                return $this->valF[$rule];
1070            }
1071    
1072            // Tableau des champs de type date
1073            $rule_type_date = array(
1074                "regle_date_limite",
1075                "regle_date_notification_delai",
1076                "regle_date_complet",
1077                "regle_date_validite",
1078                "regle_date_decision",
1079                "regle_date_chantier",
1080                "regle_date_achevement",
1081                "regle_date_conformite",
1082                "regle_date_rejet",
1083                "regle_date_dernier_depot",
1084                "regle_date_limite_incompletude",
1085            );
1086            // Tableau des champs de type numérique
1087            $rule_type_numeric = array(
1088                "regle_delai",
1089                "regle_delai_incompletude",
1090            );
1091    
1092            // Définit le type du champ
1093            if (in_array($rule_name, $rule_type_date) == true) {
1094                $type = "date";
1095            }
1096            if (in_array($rule_name, $rule_type_numeric) == true) {
1097                $type = "numeric";
1098            }
1099    
1100            // Initialisation des variables
1101            $key_date = 0;
1102            $total_numeric = 0;
1103    
1104            // Pour chaque opérande
1105            foreach ($operands as $key => $operand) {
1106    
1107                // Si c'est une règle de type date
1108                if ($type == 'date') {
1109                    // Vérifie si au moins une des opérandes est une date
1110                    if (!is_numeric($operand)
1111                        && isset($this->valF[$operand])
1112                        && $this->f->check_date($this->valF[$operand]) == true) {
1113                        // Récupère la position de la date
1114                        $key_date = $key;
1115                    }
1116                    // Les autres opérandes doivent être que des numériques
1117                    if (is_numeric($operand) == true) {
1118                        // Ajoute l'opérande au total
1119                        $total_numeric += $operand;
1120                    }
1121                    if (!is_numeric($operand)
1122                        && isset($this->valF[$operand])
1123                        && is_numeric($this->valF[$operand]) == true) {
1124                        // Ajoute l'opérande au total
1125                        $total_numeric += $this->valF[$operand];
1126                    }
1127                }
1128    
1129                // Si c'est une règle de type numérique
1130                if ($type == 'numeric') {
1131                    // Les opérandes doivent être que des numériques
1132                    if (is_numeric($operand) == true) {
1133                        // Ajoute l'opérande au total
1134                        $total_numeric += $operand;
1135                    }
1136                    if (!is_numeric($operand)
1137                        && isset($this->valF[$operand])
1138                        && is_numeric($this->valF[$operand]) == true) {
1139                        // Ajoute l'opérande au total
1140                        $total_numeric += $this->valF[$operand];
1141                    }
1142                }
1143            }
1144    
1145            // Résultat pour une règle de type date
1146            if ($type == 'date') {
1147                // Retourne le calcul de la date
1148                return $this->f->mois_date($this->valF[$operands[$key_date]],
1149                    $total_numeric, "+");
1150            }
1151    
1152            // Résultat pour une règle de type numérique
1153            if ($type == 'numeric') {
1154                // Retourne le calcul
1155                return $total_numeric;
1156            }
1157            
1158      }      }
1159        
       
       
     // ==================================================================  
     // valeur dossier  apres modification   [values dossier after action]  
     // ==================================================================  
1160      function triggerajouterapres($id,&$db,$val,$DEBUG) {      function triggerajouterapres($id,&$db,$val,$DEBUG) {
1161          // mise a null au lieu de "" / voir compatibilite mysql          /**
1162          // voir parametrage CU en dur           * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1163          // voir parametrage des actions en dur           * par l'action
1164          $param=1;           */
1165          if($param==1){          $this->getValEvenement();
1166          $sql="select * from ".DB_PREFIXE."action where action = '".$this->valF['action']."'";          // Initialisation
1167            $valF = "";
1168            // état de complétude actuel du dossier
1169            $incompletude =  $this->dossierIncomplet();
1170    
1171            if($incompletude === FALSE) {
1172                // Si l'événement d'instruction est de type incompletude
1173                if($this->valEvenement['type'] == "incompletude") {
1174                    // On marque le dossier en incomplétude pour application des actions
1175                    $incompletude = TRUE;
1176                    // Set du flag incomplétude de la table dossier
1177                    $valF['incompletude'] = TRUE;
1178                    // Enregistrement de l'état dans la variable provisoire
1179                    $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1180                }
1181            } else {
1182                // Si l'evenement d'instruction est de type retour ou contient une
1183                // decision, on sort d'incomplétude
1184                if($this->valEvenement['type'] == "retour" OR
1185                   $this->valEvenement['avis_decision'] != NULL) {
1186                    // On enlève la marque d'incomplétude pour application des actions
1187                    $incompletude = FALSE;
1188                    // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1189                    $valF['incompletude'] = FALSE;
1190                    $valF['incomplet_notifie'] = FALSE;
1191                     // Restauration de l'état depuis l'état provisoire
1192                    $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1193                    // On vide la variable provisoire ainsi que le délai de complétude
1194                    // et la date limite de complétude
1195                    $valF['etat_pendant_incompletude'] = NULL;
1196                    $valF['delai_incompletude'] = NULL;
1197                    $valF['date_limite_incompletude'] = NULL;
1198                    $valF['evenement_suivant_tacite_incompletude'] = NULL;
1199                }
1200            }
1201            // Récupération des paramètres de l'action
1202            $sql = "SELECT * FROM ".DB_PREFIXE."action
1203            WHERE action='".$this->valF['action']."'";
1204          $res = $db->query($sql);          $res = $db->query($sql);
1205          if (database::isError($res))          $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1206            if (database::isError($res)) {
1207              die($res->getMessage());              die($res->getMessage());
1208          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          }
1209              if($row['regle_etat']!=''){          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1210                  $valF['etat']= $this->regle($row['regle_etat']);  
1211              }              // pour chacune des regles, on applique la regle
1212              if($row['regle_delai']!=''){              if($row['regle_delai']!=''){
1213                  $valF['delai']= $this->regle($row['regle_delai']);                  $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1214              }              }
1215              if($row['regle_accord_tacite']!=''){              if($row['regle_accord_tacite']!=''){
1216                  $valF['accord_tacite']= $this->regle($row['regle_accord_tacite']);                  $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1217              }              }
1218              if($row['regle_avis']!=''){              if($row['regle_avis']!=''){
1219                  $valF['avis']= $this->regle($row['regle_avis']);                  $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1220              }              }
1221              if($row['regle_date_limite']!=''){              if($row['regle_date_limite']!=''){
1222                  $valF['date_limite']= $this->regle($row['regle_date_limite']);                  $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1223              }              }
1224              if($row['regle_date_complet']!=''){              if($row['regle_date_complet']!=''){
1225                  $valF['date_complet']= $this->regle($row['regle_date_complet']);                  $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1226                }
1227                if($row['regle_date_dernier_depot']!=''){
1228                    $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1229              }              }
1230              if($row['regle_date_notification_delai']!=''){              if($row['regle_date_notification_delai']!=''){
1231                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1232              }              }
1233              if($row['regle_date_decision']!=''){              if($row['regle_date_decision']!=''){
1234                  $valF['date_decision']= $this->regle($row['regle_date_decision']);                  $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1235              }              }
1236              if($row['regle_date_rejet']!=''){              if($row['regle_date_rejet']!=''){
1237                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);                  $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1238              }              }
1239             if($row['regle_date_validite']!=''){              if($row['regle_date_validite']!=''){
1240                  $valF['date_validite']= $this->regle($row['regle_date_validite']);                  $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1241              }              }
1242             if($row['regle_date_chantier']!=''){              if($row['regle_date_chantier']!=''){
1243                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);                  $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1244              }              }
1245             if($row['regle_date_achevement']!=''){              if($row['regle_date_achevement']!=''){
1246                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);                  $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1247              }              }
1248             if($row['regle_date_conformite']!=''){              if($row['regle_date_conformite']!=''){
1249                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);                  $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1250              }              }
1251          }              if($row['regle_date_limite_incompletude']!=''){
1252          }else{                  $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1253              switch ($this->valF['action']) {              }
1254              case "initialisation" :              if($row['regle_delai_incompletude']!=''){
1255                  $valF['delai']= $this->valF['delai'];                  $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1256                  $valF['etat']= $this->valF['etat'];              }
1257                  $valF['accord_tacite']= $this->valF['accord_tacite'];              if($row['regle_autorite_competente']!=''){
1258                  // la date_complet est la date de depot                  $valF['autorite_competente']= $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1259                  $valF['date_complet']= $this->archive_date_depot; // ****              }
1260                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              if($row['regle_etat']!=''){
1261                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);                  // Si on est dans le cas général ou qu'on est en incomplétude et
1262                  break;                  // qu'on a un événement de type incomplétude alors : on stocke
1263              case "notification" :                  // l'état dans la variable courante
1264                  $valF['delai']= $this->valF['delai'];                  if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1265                  $valF['etat']= $this->valF['etat'];                      $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1266                  $valF['accord_tacite']= $this->valF['accord_tacite'];                  } else {
1267                  // la date_complet est celle precedemment saisie                      $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1268                  $valF['date_complet']=$this->valF['archive_date_complet'];                  }
1269                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              }
1270                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);          }
1271                  // la date du courrier ne doit pas etre depasse par rapport au delai de          if($this->valEvenement['evenement_suivant_tacite'] != '') {
1272                  // notification    [verify notification date]              // Si on est pas en incomplétude on stocke l'événement tacite
1273                  if($this->valF['archive_date_notification_delai']<$this->valF['datecourrier'])                  //de l'événement dans la variable courante
1274                      $this->msg=$this->msg."<br><img src='../img/erreur.gif'> "._("date_notification_delai")." ".                  
1275                      $this->valF['archive_date_notification_delai']." < "._('datecourrier');                  if ($incompletude == FALSE OR $this->valEvenement['type'] != "incompletude") {
1276                  //                      $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1277                  break;                  } else {
1278              case "retour" :                      $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1279                  $valF['delai']= $this->valF['delai'];                  }
1280                  $valF['etat']= $this->valF['etat'];          }
1281                  $valF['accord_tacite']= $this->valF['accord_tacite'];          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1282                  // la date_complet est celle de l evenement          if ($valF != "") {
1283                  $valF['date_complet']= $this->valF['datecourrier'];              // On met à jour le dossier
1284                  $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);              $cle = " dossier='".$this->valF['dossier']."'";
1285                  $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);              $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1286                  break;              $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1287              case "rejet" :              if (database::isError($res1)) {
                 //$valF['delai']=0;   // *** delai a garder pour etat dpc  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 // la date rejet est initialisee  
                 $valF['date_rejet']= $this->valF['datecourrier'];  
                 // les dates de depart et fin d instruction sont annulées  
                 $valF['date_limite'] =null;  
                 $valF['date_notification_delai'] =null;  
                 $valF['date_complet']=null;  
                 break;  
             case "majoration" :  
                 $valF['delai']= $this->valF['archive_delai']+$this->valF['delai'];  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 $valF['date_complet']=$this->valF['archive_date_complet'];  
                 // majoration de la date limite  
                 $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);  
                 $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);  
                 // la date du courrier ne doit pas etre depasse par rapport au delai de  
                 // notification  
                 if($this->valF['archive_date_notification_delai']<$this->valF['datecourrier'])  
                     $this->msg=$this->msg."<br><img src='../img/erreur.gif'>"._("date_notification_delai").  
                 $this->valF['archive_date_notification_delai']." < "._('datecourrier');  
                 break;  
             case "acceptation" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_decision']= $this->valF['datecourrier'];  
                 $valF['avis']= $this->valF['avis'];  
                 // date de validite = date de l evenement + delai  
                 $valF['date_validite'] =  $this->moisdate($this->valF['datecourrier'],$this->valF['delai']);  
                    break;  
             case "refus" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_decision']= $this->valF['datecourrier'];  
                 $valF['avis']= $this->valF['avis'];  
                 break;  
             case "prolongation" :  
                 $valF['date_validite'] =  $this->moisdate($this->valF['archive_date_validite'],$this->valF['delai']);  
                 break;  
             case "sursis" :  
                 $valF['date_limite'] =  $this->moisdate($this->valF['datecourrier'],$this->valF['delai']);  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['accord_tacite']= $this->valF['accord_tacite'];  
                 $valF['avis']= $this->valF['avis'];  
                 $valF['date_decision']= $this->valF['datecourrier'];  
                 $temp = $valF['date_limite'];  
                 $valF['date_validite']= $this->moisdate($temp,2);  
                 break;  
             case "execution" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_chantier'] =  $this->valF['datecourrier'];  
                 //echo $this->msg=$this->msg.$valF['date_chantier']."";  
                 break;  
             case "achevement" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_achevement'] = $this->valF['datecourrier'];  
                 break;  
             case "archivage" :  
                 $valF['etat']= $this->valF['etat'];  
                 $valF['date_conformite'] = $this->valF['datecourrier'];  
                 break;  
       
             default:  
             if ($this->valF['etat']!="")  
                $valF['etat']= $this->valF['etat'];  
             }// end switch  
         } // end param  
         if($valF!=""){  
             $cle= " dossier = '".$this->valF['dossier']."'";  
             $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);  
             if (database::isError($res1))  
1288                  die($res->getMessage());                  die($res->getMessage());
1289              if ($DEBUG == 1)              }
1290                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
1291              $this->msg=$this->msg."<br>"._('enregistrement')." ".              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
             $this->valF['dossier']." "._('table')." dossier [".  
             $db->affectedRows()." "._('enregistrement').  
             " "._('mis_a_jour')."]" ;  
1292          }          }
1293      }  
1294            /**
1295             * REFERENTIEL ERP
1296             */
1297            // verification si envoi vers ERP est active
1298            if ($this->f->getParameter('option_erp') === 'true') {
1299                // la nature du dossier
1300                $nature_dossier = substr($this->idxformulaire,0,2);
1301                //
1302                $sql = "SELECT erp
1303                FROM ".DB_PREFIXE."dossier
1304                WHERE dossier='".$this->valF['dossier']."'";
1305                $dossier_erp = $this->db->getone($sql);
1306                $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1307                if (database::isError($res)) {
1308                    die($res->getMessage());
1309                }
1310                //
1311                $sql = "SELECT libelle
1312                FROM ".DB_PREFIXE."evenement
1313                WHERE evenement='".$this->valF['evenement']."'";
1314                $evenement_libelle = $this->db->getone($sql);
1315                $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1316                if (database::isError($res)) {
1317                    die($res->getMessage());
1318                }
1319                //
1320                if ($dossier_erp == 't') {
1321                    // envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1322                    // d'acceptation etait fait
1323                    if ($nature_dossier ==
1324                            $this->f->getParameter('erp_evenement_accepter_dossier_PC')
1325                        && $this->valF['evenement'] ==
1326                            $this->f->getParameter('erp_evenement_accepter_sans_reserve')) {
1327                        $msgenque = new MessageEnqueuer();
1328                        $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1329                        $msgenque->setDecision($evenement_libelle);
1330                        $return = $msgenque->enqueueMessage($msgenque::$ERP_ARRETE_PC_EFFECTUE);
1331                        //Si une erreur s'est produite on arrête le traitement et on
1332                        //retourne une erreur
1333                        if ($return !== 0){
1334                            
1335                            $this->addToMessage(_("Une erreur s'est produite lors de ".
1336                                "l'envoi du message au referentiel ERP. Merci de ".
1337                                "contacter votre administrateur"));
1338                            //On ne valide pas le formulaire
1339                            $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1340                            $this->correct = false;
1341                            return false;
1342                        }
1343                        else {
1344                            $this->addToMessage(_("Le message a ete transmis au ".
1345                                "referentiel ERP."));
1346                        }
1347                    }
1348                    if ($this->valF['evenement'] ==
1349                            $this->f->getParameter('erp_evenement_refuser_dossier')) {
1350                        $msgenque = new MessageEnqueuer();
1351                        $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
1352                        $return = $msgenque->enqueueMessage($msgenque::$ERP_DECISION_CONFORMITE_EFFECTUE);
1353                        //Si une erreur s'est produite on arrête le traitement et on
1354                        //retourne une erreur
1355                        if ($return !== 0){
1356                            
1357                            $this->addToMessage(_("Une erreur s'est produite lors de ".
1358                                "l'envoi du message au referentiel ERP. Merci de ".
1359                                "contacter votre administrateur"));
1360                            //On ne valide pas le formulaire
1361                            $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1362                            $this->correct = false;
1363                            return false;
1364                        }
1365                        else {
1366                            $this->addToMessage(_("Le message a ete transmis au ".
1367                                "referentiel ERP."));
1368                        }                
1369                    }
1370                }
1371            } // fin de if ($this->f->getParameter('option_erp') === 'true')
1372    
1373            // Mise à jour des données du dossier d'autorisation
1374            require_once "../obj/dossier_autorisation.class.php";
1375            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1376            if($da->majDossierAutorisation() === false) {
1377                $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1378                $this->correct = false;
1379                return false;
1380            }
1381        }    
1382    
1383      function triggermodifierapres($id,&$db,$val,$DEBUG) {      function triggermodifierapres($id,&$db,$val,$DEBUG) {
1384          /*          /**
1385           * cette fonction apour objet de permettre de modifier la date courrier           * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1386          */           * si la date de l'evenement est modifiee
1387          $valF=array();           */
1388          $sql= "select action from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];          // Initialisation
1389            $valF = "";
1390            // Initialisation du type d'événement
1391            $type_evmt = "";
1392            // Récupération de l'action correspondante à l'événement
1393            $sql = "SELECT action
1394            FROM ".DB_PREFIXE."evenement
1395            WHERE evenement=".$this->valF['evenement'];
1396          $action = $db->getOne($sql);          $action = $db->getOne($sql);
1397          if (database::isError($action)) die($action->getMessage().$sql);          $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1398          $sql="select * from ".DB_PREFIXE."action where action = '".$action."'";          if (database::isError($action)) {
1399                die($action->getMessage());
1400            }
1401    
1402            // Récupération des paramètres de l'action
1403            $sql = "SELECT * FROM ".DB_PREFIXE."action
1404            WHERE action='".$action."'";
1405          $res = $db->query($sql);          $res = $db->query($sql);
1406          if (database::isError($res)) die($res->getMessage().$sql);          $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1407            if (database::isError($res)) {
1408                die($res->getMessage());
1409            }
1410          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){          while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1411              // application des regles sur le courrier + delai              // application des regles sur le courrier + delai
1412              if(preg_match("/datecourrier/",$row['regle_date_limite'])){              if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1413                  $valF['date_limite']= $this->regle($row['regle_date_limite']);                  $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1414              }              }
1415              if(preg_match("/datecourrier/",$row['regle_date_complet'])){              if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1416                  $valF['date_complet']= $this->regle($row['regle_date_complet']);                  $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1417              }              }
1418              if(preg_match("/datecourrier/",$row['regle_date_notification_delai'])){              if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1419                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);                  $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1420              }              }
1421              if(preg_match("/datecourrier/",$row['regle_date_decision'])){              if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1422                  $valF['date_decision']= $this->regle($row['regle_date_decision']);                  $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1423              }              }
1424              if(preg_match("/datecourrier/",$row['regle_date_rejet'])){              if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1425                  $valF['date_rejet']= $this->regle($row['regle_date_rejet']);                  $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1426              }              }
1427              if(preg_match("/datecourrier/",$row['regle_date_validite'])){              if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1428                  $valF['date_validite']= $this->regle($row['regle_date_validite']);                  $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1429              }              }
1430              if(preg_match("/datecourrier/",$row['regle_date_chantier'])){              if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1431                  $valF['date_chantier']= $this->regle($row['regle_date_chantier']);                  $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1432              }              }
1433              if(preg_match("/datecourrier/",$row['regle_date_achevement'])){              if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1434                  $valF['date_achevement']= $this->regle($row['regle_date_achevement']);                  $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1435              }              }
1436              if(preg_match("/datecourrier/",$row['regle_date_conformite'])){              if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1437                  $valF['date_conformite']= $this->regle($row['regle_date_conformite']);                  $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1438              }              }
1439          } // while              if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1440          if($valF!=array()){                  $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1441              $cle= " dossier = '".$this->valF['dossier']."'";              }
1442              $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);          }
1443              if (database::isError($res1))          // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1444            if ($valF != "") {
1445                // On met à jour le dossier
1446                $cle = " dossier='".$this->valF['dossier']."'";
1447                $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1448                $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1449                if (database::isError($res1)) {
1450                  die($res->getMessage());                  die($res->getMessage());
1451              if ($DEBUG == 1)              }
1452                echo "La requête de mise à jour est effectuée.<br>";              // Affichage d'informations à l'utilisateur
1453              $this->msg=$this->msg."<br>"._('enregistrement')." ".              $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1454              $this->valF['dossier']." "._('table')." dossier [".          }
1455              $db->affectedRows()." "._('enregistrement').  
1456              " "._('mis_a_jour')."]" ;          $restriction = $this->get_restriction($val['evenement']);
1457            $this->restriction_valid = $this->restrictionIsValid($restriction);
1458    
1459            if($restriction == "" || $this->restriction_valid ){
1460                // Récupération de tous les paramètres de l'événement sélectionné
1461                $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1462                WHERE evenement=".$this->valF['evenement'];
1463                $res = $db->query($sql);
1464                $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1465                if (database::isError($res)) {
1466                    die($res->getMessage());
1467                }
1468                while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1469                    // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1470                    if ($this->getVal('date_retour_signature') == "" AND
1471                        $this->valF['date_retour_signature'] != "" AND
1472                        $row['evenement_retour_signature'] != "") {
1473                        $new_instruction = new instruction("]", $db, $DEBUG);
1474                        // Création d'un tableau avec la liste des champs de l'instruction
1475                        foreach($new_instruction->champs as $champ) {
1476                            $valNewInstr[$champ] = "";
1477                        }
1478                        // Définition des valeurs de la nouvelle instruction
1479                        $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1480                        $valNewInstr["destinataire"] = $this->valF['destinataire'];
1481                        $valNewInstr["dossier"] = $this->valF['dossier'];
1482                        $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1483                        $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1484                        $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1485                        $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1486                        $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1487                        $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1488                        $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1489                        $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1490                        
1491                        //Si une erreur s'est produite et qu'il s'agit d'un problème
1492                        //de restriction
1493                        if ($retour == false && !$new_instruction->restriction_valid){
1494                            $this->msg .= $new_instruction->msg;
1495                            $this->addToLog("triggermodifierapres() : evenement retour ".
1496                                "instruction ".$this->valF[$this->clePrimaire]." : ".
1497                                $new_instruction->msg);
1498                        }
1499                        //Si une erreur s'est produite après le test de la restriction
1500                        elseif ($retour == false && $new_instruction->restriction_valid){
1501                            $this->correct = false ;
1502                            $this->msg .= $new_instruction->msg;
1503                            return false;
1504                        }
1505                    }
1506                    // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1507                    if ($this->getVal('date_retour_rar') == "" AND
1508                        $this->valF['date_retour_rar'] != "") {
1509                        
1510                        if($row['evenement_retour_ar'] != "") {
1511                            $new_instruction = new instruction("]", $db, $DEBUG);
1512                            // Création d'un tableau avec la liste des champs de l'instruction
1513                            foreach($new_instruction->champs as $champ) {
1514                                $valNewInstr[$champ] = "";
1515                            }
1516                            // Définition des valeurs de la nouvelle instruction
1517                            $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1518                            $valNewInstr["destinataire"] = $this->valF['destinataire'];
1519                            $valNewInstr["dossier"] = $this->valF['dossier'];
1520                            $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1521                            $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1522                            $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1523                            $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1524                            $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1525                            $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1526                            $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1527                            $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1528    
1529                                            //Si une erreur s'est produite et qu'il s'agit d'un problème
1530                            //de restriction
1531                            if ($retour == false && !$new_instruction->restriction_valid){
1532                                $this->msg .= $new_instruction->msg;
1533                                $this->addToLog("triggermodifierapres() : evenement retour ".
1534                                    "instruction ".$this->valF[$this->clePrimaire]." : ".
1535                                    $new_instruction->msg);
1536                            }
1537                            //Si une erreur s'est produite après le test de la restriction
1538                            elseif ($retour == false && $new_instruction->restriction_valid){
1539                                $this->correct = false ;
1540                                $this->msg .= $new_instruction->msg;
1541                                return false;
1542                            }
1543                        }
1544                        // Mise à jour du flag incomplet_notifie dans dossier si la
1545                        // date limite d'instruction n'est pas dépassée
1546                        if($row['type']=='incompletude' &&
1547                            ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
1548                            $this->valF['archive_date_notification_delai'] == "")) {
1549                            $valFIncomp['incomplet_notifie'] = true;
1550                            $cle = " dossier='".$val['dossier']."'";
1551                            $resIncomp = $db->autoExecute(
1552                                DB_PREFIXE.'dossier',
1553                                $valFIncomp,
1554                                DB_AUTOQUERY_UPDATE,
1555                                $cle
1556                            );
1557                            $this->addToLog(
1558                                "triggersupprimer(): db->autoexecute(\"".
1559                                    DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
1560                                    ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
1561                                VERBOSE_MODE
1562                            );
1563                            if (database::isError($resIncomp)) {
1564                                die($resIncomp->getMessage());
1565                            }
1566                        }
1567                    }
1568                }
1569          }          }
     }  
1570    
1571            //Récupération du type de l'événement
1572            $sql = "SELECT type
1573            FROM ".DB_PREFIXE."evenement
1574            WHERE evenement=".$this->valF['evenement'];
1575            $type_evmt = $db->getOne($sql);
1576            $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1577            if (database::isError($type_evmt)) {
1578                die($type_evmt->getMessage());
1579            }
1580    
1581            /**
1582             * REFERENTIEL ARRETE
1583             */
1584            // Si l'option référentiel arrêté est activé et l'événement est de type
1585            // arrêté
1586            
1587            if ($this->f->getParameter('option_referentiel_arrete') === 'true' AND
1588                $type_evmt == "arrete") {
1589                if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1590                    $msgenque = new MessageEnqueuer();
1591                    $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1592                                        signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1593                                        signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1594                                        signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1595                                        instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1596                                        '' as \"ws_DA_In_lieu_Redac\",
1597                                        instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1598                                        '' as \"ws_DA_In_Sigle\",
1599                                        instruction.etat as \"ws_DA_In_Decision\",
1600                                        dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1601                                        dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1602                                        '' as \"ws_DA_In_Type_Voie\",
1603                                        dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1604                                        dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1605                                        dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1606                                        dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1607                                        dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1608                                        '' as \"ws_DA_In_Detail_Parcelle\",
1609                                        CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1610                                        '' as \"ws_DA_In_Destination_Trvx\",
1611                                        dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1612                                        COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1613                                        COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1614                                        '' as \"ws_DA_In_Piece_GED\",
1615                                        instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1616                                FROM ".DB_PREFIXE."instruction
1617                                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1618                                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
1619                                LEFT JOIN ".DB_PREFIXE."dossier ON
1620                                    instruction.dossier = dossier.dossier
1621                                LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1622                                    lien_dossier_demandeur.dossier = dossier.dossier
1623                                LEFT JOIN ".DB_PREFIXE."demandeur ON
1624                                    lien_dossier_demandeur.demandeur = demandeur.demandeur
1625                                LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1626                                    dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1627                                LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1628                                    dossier_instruction_type.dossier_autorisation_type_detaille =
1629                                        dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1630                                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1631                                        donnees_techniques.dossier_instruction = dossier.dossier
1632                                WHERE instruction.instruction = ".$this->valF['instruction'];
1633                    $resArrete = $this->db->query($sqlArrete);
1634                    $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1635                    if ( database::isError($resArrete)){
1636                        die();
1637                    }
1638            
1639      // trigger before delete                  $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1640                    $msgenque->setArreteInfo($rowArrete);
1641                    $return = $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1642                    //Si une erreur s'est produite on arrête le traitement et on
1643                    //retourne une erreur
1644                    if ($return !== 0){
1645                        
1646                        //On supprime les messages précédents
1647                        $this->msg = '';
1648                        $this->addToMessage(_("Une erreur s'est produite lors de ".
1649                            "l'envoi du message au referentiel arrêté. Merci de ".
1650                            "contacter votre administrateur."));
1651                        //On ne valide pas le formulaire
1652                        $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1653                        $this->correct = false;
1654                        return false;
1655                    }
1656                    else {
1657                        $this->addToMessage(_("Le message a ete transmis au ".
1658                            "referentiel arrêté."));
1659                    }
1660                }
1661            }
1662    
1663            // Mise à jour des données du dossier d'autorisation
1664            require_once "../obj/dossier_autorisation.class.php";
1665            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1666            if($da->majDossierAutorisation() === false) {
1667                $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1668                $this->correct = false;
1669                return false;
1670            }
1671        }
1672    
1673      function triggersupprimer($id,&$db,$val,$DEBUG) {      function triggersupprimer($id,&$db,$val,$DEBUG) {
1674          // archive en instruction (si suppression) [archive if delete instruction]          /**
1675          $valF['delai']=$val['archive_delai'];           * L'objectif ici est de repositionner les valeurs récupérées en
1676          $valF['accord_tacite']=$val['archive_accord_tacite'];           * archive dans le dossier d'instruction avant de supprimer l'événement
1677          $valF['etat']=$val['archive_etat'];           * d'instruction
1678          if($val['archive_avis']=='')           */
1679              $valF['avis']= null;          
1680                // Mise à jour des 4 valeurs modifiées par l'action
1681                $valF['delai'] = $val['archive_delai'];
1682                $valF['accord_tacite'] = $val['archive_accord_tacite'];
1683                $valF['etat'] = $val['archive_etat'];
1684                if ($val['archive_avis'] != '') {
1685                    $valF['avis_decision'] = $val['archive_avis'];
1686                } else {
1687                    $valF['avis_decision'] = NULL;
1688                }
1689                // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1690                // de suppression. Si la valeur de la date est vide alors on fixe
1691                // à la valeur NULL
1692                //
1693                if ($val['archive_date_complet'] != '') {
1694                    $valF['date_complet'] = $val['archive_date_complet'];
1695                } else {
1696                    $valF['date_complet'] = NULL;
1697                }
1698                if ($val['archive_date_dernier_depot'] != '') {
1699                    $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1700                } else {
1701                    $valF['date_dernier_depot'] = NULL;
1702                }
1703                if ($val['archive_date_rejet'] != '') {
1704                    $valF['date_rejet'] = $val['archive_date_rejet'];
1705                } else {
1706                    $valF['date_rejet'] = NULL;
1707                }
1708                if ($val['archive_date_limite'] != '') {
1709                    $valF['date_limite'] = $val['archive_date_limite'];
1710                } else {
1711                    $valF['date_limite'] = NULL;
1712                }
1713                if ($val['archive_date_notification_delai'] != '') {
1714                    $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1715                } else {
1716                    $valF['date_notification_delai'] = NULL;
1717                }
1718                if ($val['archive_date_decision'] != '') {
1719                    $valF['date_decision'] = $val['archive_date_decision'];
1720                } else {
1721                    $valF['date_decision'] = NULL;
1722                }
1723                if ($val['archive_date_validite'] != '') {
1724                    $valF['date_validite'] = $val['archive_date_validite'];
1725                } else {
1726                    $valF['date_validite'] = NULL;
1727                }
1728                if ($val['archive_date_achevement'] != '') {
1729                    $valF['date_achevement'] = $val['archive_date_achevement'];
1730                } else {
1731                    $valF['date_achevement'] = NULL;
1732                }
1733                if ($val['archive_date_chantier'] != '') {
1734                    $valF['date_chantier'] = $val['archive_date_chantier'];
1735                } else {
1736                    $valF['date_chantier'] = NULL;
1737                }
1738                if ($val['archive_date_conformite'] != '') {
1739                    $valF['date_conformite'] = $val['archive_date_conformite'];
1740                } else {
1741                    $valF['date_conformite'] = NULL;
1742                }
1743                if ($val['archive_incompletude'] != '') {
1744                    $valF['incompletude'] = $val['archive_incompletude'];
1745                } else {
1746                    $valF['incompletude'] = NULL;
1747                }
1748                if ($val['archive_incomplet_notifie'] != '') {
1749                    $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
1750                } else {
1751                    $valF['incomplet_notifie'] = NULL;
1752                }
1753                if ($val['archive_evenement_suivant_tacite'] != '') {
1754                    $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1755                } else {
1756                    $valF['evenement_suivant_tacite'] = NULL;
1757                }
1758                if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1759                    $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1760                } else {
1761                    $valF['evenement_suivant_tacite_incompletude'] = NULL;
1762                }
1763                if ($val['archive_etat_pendant_incompletude'] != '') {
1764                    $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1765                } else {
1766                    $valF['etat_pendant_incompletude'] = NULL;
1767                }
1768                if ($val['archive_date_limite_incompletude'] != '') {
1769                    $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1770                } else {
1771                    $valF['date_limite_incompletude'] = NULL;
1772                }
1773                if ($val['archive_delai_incompletude'] != '') {
1774                    $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1775                } else {
1776                    $valF['delai_incompletude'] = NULL;
1777                }
1778                if ($val['archive_autorite_competente'] != '') {
1779                    $valF['autorite_competente'] = $val['archive_autorite_competente'];
1780                } else {
1781                    $valF['autorite_competente'] = NULL;
1782                }
1783                // On met à jour le dossier
1784                $cle = " dossier='".$val['dossier']."'";
1785                $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1786                $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1787                if (database::isError($res)) {
1788                    die($res->getMessage());
1789                }
1790                // Affichage d'informations à l'utilisateur
1791                $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1792        
1793                // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1794        }
1795    
1796        function triggersupprimerapres($id,&$db,$val,$DEBUG) {
1797    
1798            // Mise à jour des données du dossier d'autorisation
1799            require_once "../obj/dossier_autorisation.class.php";
1800            $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
1801            if($da->majDossierAutorisation() === false) {
1802                $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1803                $this->correct = false;
1804                return false;
1805            }
1806        }
1807    
1808        // Vérifie la restriction sur l'événement
1809        function verifier($val = array(), &$db, $DEBUG){
1810            parent::verifier($val, $db, $DEBUG);
1811    
1812            if ( isset($val['evenement']) && is_numeric($val['evenement'])){
1813                $restriction = $this->get_restriction($val['evenement']);
1814        
1815                //Test qu'une restriction est présente
1816                if ($restriction != "" ){
1817                    
1818                    //Test si la restriction est valide
1819                    $this->restriction_valid = $this->restrictionIsValid($restriction);
1820                    if ( !$this->restriction_valid ){
1821                        
1822                        $this->addToMessage(_("Restriction non valide"));
1823                        $this->correct = false;
1824                        return false;
1825                    }
1826    
1827                    // Liste des opérateurs possible
1828                    $operateurs = array(">=", "<=", "+", "-");
1829    
1830                    // Supprime tous les espaces de la chaîne de caractère
1831                    $restriction = str_replace(' ', '', $restriction);
1832                    
1833                    // Met des espace avant et après les opérateurs puis transforme la
1834                    // chaine en un tableau
1835                    $tabRestriction = str_replace($operateurs, " ", $restriction);
1836                    // Tableau des champ
1837                    $tabRestriction = explode(" ", $tabRestriction);
1838                    // Supprime les numériques du tableau
1839                    foreach ($tabRestriction as $key => $value) {
1840                        if (is_numeric($value)) {
1841                            unset($tabRestriction[$key]);
1842                        }
1843                    }
1844    
1845                    // Vérifie les champs utilisés pour la restriction
1846                    $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
1847                    if ($check_field_exist !== true) {
1848    
1849                        // Liste des champs en erreur
1850                        $string_error_fields = implode(", ", $check_field_exist);
1851    
1852                        // Message d'erreur
1853                        $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
1854                        if (count($check_field_exist) > 1) {
1855                            $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
1856                        }
1857    
1858                        // Affiche l'erreur
1859                        $this->correct=false;
1860                        $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
1861                        $this->addToMessage(_("Veuillez contacter votre administrateur."));
1862                    }
1863                }
1864    
1865            }
1866            if(!$this->updateDate("date_envoi_signature")) {
1867                return false;
1868            }
1869            if(!$this->updateDate("date_retour_signature")) {
1870                return false;
1871            }
1872            if(!$this->updateDate("date_envoi_rar")) {
1873                return false;
1874            }
1875            if(!$this->updateDate("date_retour_rar")) {
1876                return false;
1877            }
1878            if(!$this->updateDate("date_envoi_controle_legalite")) {
1879                return false;
1880            }
1881            if(!$this->updateDate("date_retour_controle_legalite")) {
1882                return false;
1883            }
1884    
1885        }
1886    
1887        /**
1888         * Méthode permettant de récupérer toutes les valeurs de l'événement
1889         * sélectionné après validation du formulaire d'instruction
1890         *
1891         * @return array() veleurs de l'événement lié
1892         */
1893    
1894        private function getValEvenement() {
1895            if(!empty($this->valEvenement)) {
1896                return $this->valEvenement;
1897            } else {
1898                $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1899                    WHERE evenement=".$this->valF['evenement'];
1900                $res = $this->db->query($sql);
1901                $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
1902                if (database::isError($res)) {
1903                    die($res->getMessage());
1904                }
1905                $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
1906                return $this->valEvenement;
1907            }
1908        }
1909    
1910        /**
1911         * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
1912         * incompletude à true après validation du formulaire d'instruction
1913         *
1914         * @return boolean
1915         */
1916        private function dossierIncomplet() {
1917            $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
1918                    WHERE dossier='".$this->valF['dossier']."'";
1919            $incompletude = $this->db->getOne($sql);
1920            $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
1921            if (database::isError($incompletude)) {
1922                die($incompletude->getMessage());
1923            }
1924            if ($incompletude == 't') {
1925                return true;
1926            } else {
1927                return false;
1928            }
1929        }
1930        
1931        /**
1932         * Finalisation des documents.
1933         * @param  string $champ    champ du fichier à finaliser
1934         * @param  booleen $status  permet de définir si on finalise ou définalise
1935         * @param  string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
1936         */
1937        function finaliser( $champ = '', $status, $sousform, $retourformulaire){
1938                    
1939                    
1940            // Recuperation de la valeur de la cle primaire de l'objet
1941            if($this->getVal($this->clePrimaire) != '')
1942                $id = $this->getVal($this->clePrimaire);
1943          else          else
1944              $valF['avis']=$val['archive_avis'];              $id=$this->id;
1945          // if= compatibilite pgsql                  
1946          if($val['archive_date_complet']!='')          //Si on finalise le document
1947              $valF['date_complet']=$val['archive_date_complet'];          if ( $status == 1 ){
1948          if($val['archive_date_rejet']!='')              
1949              $valF['date_rejet']= $val['archive_date_rejet'];              //Génération du PDF
1950          if($val['archive_date_limite']!='')              $_GET['output'] = "string";
1951              $valF['date_limite']= $val['archive_date_limite'];              $f = $this->f;
1952          if($val['archive_date_notification_delai']!='')              include '../app/pdf_instruction.php';
1953              $valF['date_notification_delai']= $val['archive_date_notification_delai'];              
1954          if($val['archive_date_decision']!='')              //Métadonnées du document
1955              $valF['date_decision']= $val['archive_date_decision'];              $metadata = array(
1956          if($val['archive_date_validite']!='')                  'filename' => 'instruction_'.$idx.'.pdf',
1957              $valF['date_validite']= $val['archive_date_validite'];                  'mimetype' => 'application/pdf',
1958          if($val['archive_date_achevement']!='')                  'size' => strlen($pdf_output)
1959              $valF['date_achevement']= $val['archive_date_achevement'];              );
1960          if($val['archive_date_chantier']!='')  
1961              $valF['date_chantier']= $val['archive_date_chantier'];              // Récupération des métadonnées calculées après validation
1962          if($val['archive_date_conformite']!='')              $spe_metadata = $this->getMetadata("om_fichier_instruction");
1963              $valF['date_conformite']= $val['archive_date_conformite'];  
1964                        //On vérifie si l'instruction à finaliser a un événement de type arrete
1965          $cle= " dossier = '".$val['dossier']."'";              $sql = "SELECT type
1966          $res= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);                  FROM ".DB_PREFIXE."evenement
1967          if (database::isError($res))                  WHERE evenement = ".$this->getVal("evenement");
1968              die($res->getMessage());              $typeEvenement = $this->db->getOne($sql);
1969                $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1970                if (database::isError($typeEvenement)) {
1971                    die();
1972                }
1973    
1974                //Initialisation de la variable
1975                $arrete_metadata = array();
1976                // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
1977                if ( $typeEvenement === 'arrete' ){
1978                    $arrete_metadata = $this->getMetadata("arrete");
1979                }
1980    
1981                $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
1982                //Si le document a déjà été finalisé
1983                //on met à jour le document mais pas son uid
1984                if ( $this->getVal("om_fichier_instruction") != '' ){
1985                    $uid = $this->f->storage->update(
1986                        $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
1987                }
1988                //Sinon, on joute le document et on récupère son uid
1989                else {
1990                    //Stockage du PDF
1991                    $uid = $this->f->storage->create($pdf_output, $metadata);
1992                }
1993            }
1994            else {
1995                //Récupération de l'uid du document finalisé
1996                $uid = $this->getVal("om_fichier_instruction");
1997                
1998                //On dé-finalise avant de finaliser
1999                if ( $uid == '' || $uid == 'OP_FAILURE' ){
2000                    
2001                                    // Message d'echec (saut d'une ligne supplementaire avant le
2002                    // message pour qu'il soit mis en evidence)
2003                    $this->addToLog(
2004                        _("Finalisation non enregistree")." - ".
2005                        _("id instruction")." = ".$id." - ".
2006                        _("uid fichier")." = ".$uid
2007                    );
2008                    return -1;
2009                }
2010            }
2011                    
2012            //Mise à jour des données
2013            if ( $uid != '' && $uid != 'OP_FAILURE' ){
2014                // Logger
2015                $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);
2016                
2017                $actions = array();
2018                //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
2019                //à jour de l'interface
2020                if ( $status == 0 ){
2021                    $lien = '../app/pdf_instruction.php?idx='.$id;
2022                    
2023                    //Ajout des actions
2024                    //Si l'utilisateur a le droit de modifier l'objet
2025                    if ( $this->f->isAccredited('instruction') ||
2026                        $this->f->isAccredited('instruction_modifier') ){
2027                            
2028                        $actions["modifier"] = ($sousform!='')?
2029                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
2030                            \'../scr/sousform.php?obj=instruction&amp;action=1&amp;idx='.
2031                            $this->getVal($this->clePrimaire).
2032                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
2033                            $this->getVal("dossier").
2034                            '&amp;retour=form\');">
2035                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
2036                            _('Modifier').'">'.
2037                            _('Modifier').
2038                            '</span></a></li>':
2039                            '<li>
2040                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
2041                            $this->getVal($this->clePrimaire).
2042                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
2043                            <span class="om-prev-icon om-icon-16 edit-16" title="'.
2044                            _('Modifier').'">'.
2045                            _('Modifier').
2046                            '</span></a></li>';
2047                    }
2048                    //Si l'utilisateur a le droit de supprimer l'objet
2049                    if ( $this->f->isAccredited('instruction') ||
2050                        $this->f->isAccredited('instruction_supprimer') ){
2051                            
2052                        $actions["supprimer"] = ($sousform!='')?
2053                            '<li><a href="#" onclick="ajaxIt(\'instruction\',
2054                            \'../scr/sousform.php?obj=instruction&amp;action=2&amp;idx='.
2055                            $this->getVal($this->clePrimaire).
2056                            '&amp;premiersf=0&amp;trisf=&amp;retourformulaire='.$retourformulaire.'&amp;idxformulaire='.
2057                            $this->getVal("dossier").
2058                            '&amp;retour=form\');">
2059                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
2060                            _('Supprimer').'">'.
2061                            _('Supprimer').
2062                            '</span></a></li>':
2063                            '<li>
2064                            <a href="form.php?obj=instruction&amp;action=1'.'&amp;idx='.
2065                            $this->getVal($this->clePrimaire).
2066                            '&amp;premier=&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=form">
2067                            <span class="om-prev-icon om-icon-16 delete-16" title="'.
2068                            _('Supprimer').'">'.
2069                            _('Supprimer').
2070                            '</span></a></li>';
2071                    }
2072                }
2073                else {
2074                    $lien = '../spg/file.php?obj=instruction&'.
2075                        'champ=om_fichier_instruction&id='.$id;
2076                }
2077    
2078               $retour = array(
2079                    "portlet"=> "<a href=\"#\" onclick=\"finalizeDocument(".
2080                        $id.", 'instruction', '".$sousform."', ".(($status==0)?1:0).")\">
2081                        <span class=\"om-prev-icon om-icon-16 om-icon-fix "
2082                        .(($status==1)?"de":"")."finalise\" title=\"".
2083                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."\">".
2084                        (($status==1)?_("Reprendre la redaction du document"):_("Finaliser le document"))."</span>
2085                        </a>",
2086                    "pdf" => $lien,
2087                    "actions" => $actions
2088                );
2089    
2090                foreach ( $this->champs as $key=>$value )
2091                    $val[$value] = $this->val[$key];
2092                $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2093                $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2094                $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2095                $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2096                $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2097                $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2098                $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2099                $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2100                $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2101                $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2102                $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2103                $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2104                $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2105                $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2106                $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2107                $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2108                $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2109                $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2110                $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2111                
2112                $this->setvalF($val);
2113    
2114                // Verification de la validite des donnees
2115                $this->verifier($this->val, $this->db, DEBUG);
2116                // Verification du verrou
2117                $this->testverrou();
2118                // Si les verifications precedentes sont correctes, on procede a
2119                // la modification, sinon on ne fait rien et on retourne une erreur
2120                if ($this->correct) {
2121                    // Execution du trigger 'before' specifique au MODE 'update'
2122                    $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
2123                    $valF = array(
2124                            "om_final_instruction"=> ($status==1)?TRUE:FALSE,
2125                            "om_fichier_instruction"=>$uid,
2126                            "date_finalisation_courrier"=>date('Y-m-d'));
2127                    // Execution de la requête de modification des donnees de l'attribut
2128                    // valF de l'objet dans l'attribut table de l'objet
2129                    $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2130                        DB_AUTOQUERY_UPDATE, $this->getCle($id));
2131                     $this->addToLog("finaliser() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2132                    // Si une erreur survient
2133                    if (database::isError($res)) {
2134                        // Appel de la methode de recuperation des erreurs
2135                        $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2136                    } else {
2137                        // Log
2138                        $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2139                        // Log
2140                        $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2141                        $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2142                        $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2143                        $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2144                        $this->addToLog($message, VERBOSE_MODE);
2145                        // Mise en place du verrou pour ne pas finaliser plusieurs fois
2146                        // le meme document
2147                        $this->verrouille();
2148                        // Execution du trigger 'after' specifique au MODE 'update'
2149                        //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2150    
2151                        return $retour;
2152                    }
2153                } else {
2154                    // Message d'echec (saut d'une ligne supplementaire avant le
2155                    // message pour qu'il soit mis en evidence)
2156                    $this->addToLog(
2157                        _("Finalisation non enregistree")." - ".
2158                        _("id instruction")." = ".$id." - ".
2159                        _("uid fichier")." = ".$uid
2160                    );
2161                    return -1;
2162                }
2163            }
2164            // Si le document n'a pas été stocké
2165          else{          else{
2166              if ($DEBUG == 1)              $this->addToLog(
2167                  echo "La requête de mise à jour est effectuée.<br>";                  _("Finalisation non enregistree")." - ".
2168                    _("id instruction")." = ".$id." - ".
2169                    _("uid fichier")." = ".$uid
2170                );
2171                return -1;
2172            }
2173        }
2174    
2175        /**
2176         * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2177         * @return string numéro de dossier d'instruction
2178         */
2179        protected function getDossier() {
2180            if(empty($this->specificMetadata)) {
2181                $this->getSpecificMetadata();
2182            }
2183            return $this->specificMetadata->dossier;
2184        }
2185        /**
2186         * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2187         * @return int Version
2188         */
2189        protected function getDossierVersion() {
2190            if(empty($this->specificMetadata)) {
2191                $this->getSpecificMetadata();
2192            }
2193            return $this->specificMetadata->version;
2194        }
2195        /**
2196         * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2197         * @return string numéro de dossier d'autorisation
2198         */
2199        protected function getNumDemandeAutor() {
2200            if(empty($this->specificMetadata)) {
2201                $this->getSpecificMetadata();
2202            }
2203            return $this->specificMetadata->dossier_autorisation;
2204        }
2205        /**
2206         * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2207         * @return date de la demande initiale
2208         */
2209        protected function getAnneemoisDemandeAutor() {
2210            if(empty($this->specificMetadata)) {
2211                $this->getSpecificMetadata();
2212            }
2213            return $this->specificMetadata->date_demande_initiale;
2214        }
2215        /**
2216         * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2217         * @return string type du dossier d'instruction
2218         */
2219        protected function getTypeInstruction() {
2220            if(empty($this->specificMetadata)) {
2221                $this->getSpecificMetadata();
2222            }
2223            return $this->specificMetadata->dossier_instruction_type;
2224        }
2225        /**
2226         * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2227         * @return string avis
2228         */
2229        protected function getStatutAutorisation() {
2230            if(empty($this->specificMetadata)) {
2231                $this->getSpecificMetadata();
2232            }
2233            return $this->specificMetadata->statut;
2234        }
2235        /**
2236         * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2237         * @return string type du dossier d'autorisation
2238         */
2239        protected function getTypeAutorisation() {
2240            if(empty($this->specificMetadata)) {
2241                $this->getSpecificMetadata();
2242            }
2243            return $this->specificMetadata->dossier_autorisation_type;
2244        }
2245        /**
2246         * Récupération de la date d'ajout de document à ajouter aux métadonnées
2247         * @return date de l'évènement
2248         */
2249        protected function getDateEvenementDocument() {
2250            return date("Y-m-d");
2251        }
2252        /**
2253         * Récupération du groupe d'instruction à ajouter aux métadonnées
2254         * @return string Groupe d'instruction
2255         */
2256        protected function getGroupeInstruction() {
2257            if(empty($this->specificMetadata)) {
2258                $this->getSpecificMetadata();
2259            }
2260            return $this->specificMetadata->groupe_instruction;
2261        }
2262        /**
2263         * Récupération du libellé du type du document à ajouter aux métadonnées
2264         * @return string Groupe d'instruction
2265         */
2266        protected function getTitle() {
2267    
2268            // Récupère le champ événement
2269            if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2270                $evenement = $this->valF["evenement"];
2271            } else {
2272                $evenement = $this->getVal("evenement");
2273            }
2274    
2275            // Requête sql
2276            $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2277                    WHERE evenement=".$evenement;
2278            $evenement_libelle = $this->db->getOne($sql);
2279            $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2280            if (database::isError($evenement_libelle)) {
2281                die();
2282            }
2283    
2284            // Retourne le libelle de l'événement
2285            return $evenement_libelle;
2286        }
2287    
2288        /**
2289         * Cette méthode permet de stocker en attribut toutes les métadonnées
2290         * nécessaire à l'ajout d'un document.
2291         */
2292        public function getSpecificMetadata() {
2293            if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2294                $dossier = $this->valF["dossier"];
2295            } else {
2296                $dossier = $this->getVal("dossier");
2297            }
2298            //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2299            $sql = "SELECT dossier.dossier as dossier,
2300                            dossier_autorisation.dossier_autorisation as dossier_autorisation,
2301                            to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2302                            dossier_instruction_type.code as dossier_instruction_type,
2303                            etat_dossier_autorisation.libelle as statut,
2304                            dossier_autorisation_type.code as dossier_autorisation_type,
2305                            groupe.code as groupe_instruction
2306                    FROM ".DB_PREFIXE."dossier
2307                        LEFT JOIN ".DB_PREFIXE."dossier_instruction_type  
2308                            ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2309                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2310                            ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2311                        LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2312                            ON  dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2313                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2314                            ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2315                        LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2316                            ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2317                        LEFT JOIN ".DB_PREFIXE."groupe
2318                            ON dossier_autorisation_type.groupe = groupe.groupe
2319                    WHERE dossier.dossier = '".$dossier."'";
2320            $res = $this->db->query($sql);
2321            $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2322            if ( database::isError($res)){
2323                die();
2324            }
2325            
2326            //Le résultat est récupéré dans un objet
2327            $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2328    
2329            //Si il y a un résultat
2330            if ($row !== null) {
2331                    
2332                //Génération du numéro de version
2333                $sql = "SELECT
2334                            count(*)
2335                    FROM
2336                        ".DB_PREFIXE."dossier
2337                    LEFT JOIN
2338                        ".DB_PREFIXE."dossier_autorisation
2339                        ON
2340                            dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2341                    LEFT JOIN
2342                        ".DB_PREFIXE."dossier_instruction_type
2343                        ON
2344                            dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
2345                    WHERE
2346                        dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
2347                        AND
2348                        dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
2349                $row->version = $this->db->getOne($sql);
2350                $this->f->addToLog("getSpecificMetadata(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2351                if ( database::isError($row->version)){
2352                    $this->f->addToError("", $row->version, $row->version);
2353                    return false;
2354                }
2355                
2356                //Formatage du numéro de version
2357                $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
2358    
2359                //Alors on créé l'objet dossier_instruction
2360                $this->specificMetadata = $row;
2361    
2362            }
2363        }
2364        
2365        /**
2366         * Retourne le statut du dossier d'instruction
2367         * @param string $idx Identifiant du dossier d'instruction
2368         * @return string Le statut du dossier d'instruction
2369         */
2370        function getStatutAutorisationDossier($idx){
2371            
2372            $statut = '';
2373            
2374            //Si l'identifiant du dossier d'instruction fourni est correct
2375            if ( $idx != '' ){
2376                
2377                //On récupère le statut de l'état du dossier à partir de l'identifiant du
2378                //dossier
2379                $sql = "SELECT etat.statut
2380                    FROM ".DB_PREFIXE."dossier
2381                    LEFT JOIN
2382                        ".DB_PREFIXE."etat
2383                        ON
2384                            dossier.etat = etat.etat
2385                    WHERE dossier ='".$idx."'";
2386                $statut = $this->db->getOne($sql);
2387                $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2388                if ( database::isError($statut)){
2389                    die();
2390                }
2391            }
2392            return $statut;
2393        }
2394    
2395        /**
2396         * Récupère les données du dossier
2397         * @return array
2398         */
2399        function get_dossier_actual() {
2400    
2401            // Initialisation de la valeur de retour
2402            $return = array();
2403    
2404            // Récupération de toutes les valeurs du dossier d'instruction en cours
2405            $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2406            WHERE dossier='".$this->valF['dossier']."'";
2407            $res = $this->db->query($sql);
2408            $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2409            $this->f->isDatabaseError($res);
2410    
2411            //
2412            while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2413    
2414                // Récupération de la valeur actuelle du délai, de l'accord tacite,
2415                // de l'état et de l'avis du dossier d'instruction
2416                $return['archive_delai']=$row['delai'];
2417                $return['archive_accord_tacite']=$row['accord_tacite'];
2418                $return['archive_etat']=$row['etat'];
2419                $return['archive_avis']=$row['avis_decision'];
2420                // Récupération de la valeur actuelle des 9 dates du dossier
2421                // d'instruction
2422                $return['archive_date_complet']=$row['date_complet'];
2423                $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2424                $return['archive_date_rejet']= $row['date_rejet'];
2425                $return['archive_date_limite']= $row['date_limite'];
2426                $return['archive_date_notification_delai']= $row['date_notification_delai'];
2427                $return['archive_date_decision']= $row['date_decision'];
2428                $return['archive_date_validite']= $row['date_validite'];
2429                $return['archive_date_achevement']= $row['date_achevement'];
2430                $return['archive_date_chantier']= $row['date_chantier'];
2431                $return['archive_date_conformite']= $row['date_conformite'];
2432                $return['archive_incompletude']= $row['incompletude'];
2433                $return['archive_incomplet_notifie']= $row['incomplet_notifie'];
2434                $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2435                $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2436                $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2437                $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2438                $return['archive_delai_incompletude']= $row['delai_incompletude'];
2439                $return['archive_autorite_competente']= $row['autorite_competente'];
2440                $return['duree_validite']= $row['duree_validite'];
2441            }
2442    
2443            // Retour de la fonction
2444            return $return;
2445    
2446        }
2447    
2448        /**
2449         * Permet de vérifier qu'un événement est verrouillable
2450         * @param  integer $idx     Identifiant de l'instruction
2451         * @return boolean          
2452         */
2453        function checkEvenementNonVerrouillable($idx) {
2454    
2455            // Initialisation du résultat
2456            $non_verrouillable = false;
2457    
2458            // Si la condition n'est pas vide
2459            if ($idx != "") {
2460    
2461                // Requête SQL
2462                $sql = "SELECT evenement.non_verrouillable
2463                        FROM ".DB_PREFIXE."evenement
2464                        LEFT JOIN ".DB_PREFIXE."instruction
2465                            ON instruction.evenement = evenement.evenement
2466                        WHERE instruction.instruction = $idx";
2467                $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2468                $res = $this->db->getOne($sql);
2469                $this->f->isDatabaseError($res);
2470    
2471                // Si le retour de la requête est true
2472                if ($res == 't') {
2473                    //
2474                    $non_verrouillable = true;
2475                }
2476            }
2477    
2478            // Retourne résultat
2479            return $non_verrouillable;
2480        }
2481        
2482        /**
2483         * Mise à jour des champs archive_*
2484         * @param mixed $row La ligne de données
2485         */
2486        public function updateArchiveData($row){
2487            
2488            // Récupération de la valeur actuelle du délai, de l'accord tacite,
2489            // de l'état et de l'avis du dossier d'instruction
2490            $this->valF['archive_delai']=$row['delai'];
2491            $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2492            $this->valF['archive_etat']=$row['etat'];
2493            $this->valF['archive_avis']=$row['avis_decision'];
2494            // Récupération de la valeur actuelle des 9 dates du dossier
2495            // d'instruction
2496            if ($row['date_complet'] != '') {
2497                $this->valF['archive_date_complet']=$row['date_complet'];
2498            }
2499            if ($row['date_dernier_depot'] != '') {
2500                $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2501            }
2502            if ($row['date_rejet']!='') {
2503                $this->valF['archive_date_rejet']= $row['date_rejet'];
2504            }
2505            if ($row['date_limite']!='') {
2506                $this->valF['archive_date_limite']= $row['date_limite'];
2507            }
2508            if ($row['date_notification_delai']!='') {
2509                $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2510            }
2511            if ($row['date_decision']!='') {
2512                $this->valF['archive_date_decision']= $row['date_decision'];
2513            }
2514            if ($row['date_validite']!='') {
2515                $this->valF['archive_date_validite']= $row['date_validite'];
2516            }
2517            if ($row['date_achevement']!='') {
2518                $this->valF['archive_date_achevement']= $row['date_achevement'];
2519            }
2520            if ($row['date_chantier']!='') {
2521                $this->valF['archive_date_chantier']= $row['date_chantier'];
2522            }
2523            if ($row['date_conformite']!='') {
2524                $this->valF['archive_date_conformite']= $row['date_conformite'];  
2525            }
2526            if ($row['incompletude']!='') {
2527                $this->valF['archive_incompletude']= $row['incompletude'];  
2528            }
2529            if ($row['incomplet_notifie']!='') {
2530                $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];  
2531            }
2532            if ($row['evenement_suivant_tacite']!='') {
2533                $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];  
2534            }
2535            if ($row['evenement_suivant_tacite_incompletude']!='') {
2536                $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];  
2537            }
2538            if ($row['etat_pendant_incompletude']!='') {
2539                $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];  
2540            }
2541            if ($row['date_limite_incompletude']!='') {
2542                $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];  
2543            }
2544            if ($row['delai_incompletude']!='') {
2545                $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];  
2546            }
2547            if ($row['autorite_competente']!='') {
2548                $this->valF['archive_autorite_competente']= $row['autorite_competente'];  
2549            }
2550            if ($row['duree_validite']!='') {
2551                $this->valF['duree_validite']= $row['duree_validite'];  
2552          }          }
2553      }      }
2554      // =============================================  
2555      // calcul de date avec ajout de mois (delais)      // {{{
2556      // [add months (delay) and calculation final date]      // Méthodes de récupération des métadonnées arrêté
2557      // LIMITE DE LA FONCTION si delai >24 MOIS      /**
2558      // [limit : delay < 24 month]       * @return string Retourne le numéro d'arrêté
2559      // =============================================       */
2560      function moisdate($date,$delaimois) {      function getNumArrete() {
2561         $temp = explode("-" , $date);          return $this->getVal("numero_arrete");
2562         $jour = (int) $temp[2];      }
2563         $mois = (int) $temp[1];      /**
2564         $annee = (int) $temp[0];       * @return chaîne vide
2565         // calcul si delai superieur à 12 (limite 24) [delay > 24 month]       */
2566         if($delaimois>=12){      function getReglementaireArrete() {
2567             $delaimois=$delaimois-12;          return 'true';
2568             $annee=$annee+1;      }
2569         }      /**
2570         if($delaimois>=12){       * @return boolean de notification au pétitionnaire
2571             $delaimois=$delaimois-12;       */
2572             $annee=$annee+1;      function getNotificationArrete() {
2573         }          return 'true';
2574         // mois      }
2575         $mois=$mois+$delaimois;      /**
2576         // calcul mois annee  [calculation number of years if > 12 month]       * @return date de notification au pétitionnaire
2577         // nb de mois > à 12       */
2578         if ($mois>12){      function getDateNotificationArrete() {
2579             $mois=$mois-12;          if (empty($this->metadonneesArrete)) {
2580             $annee=$annee+1;              $this->getArreteMetadata();
2581         }          }
2582         // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]          return $this->metadonneesArrete["datenotification"];
2583          switch($mois) {      }
2584              case "2":      /**
2585                if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)       * @return boolean check si le document est passé au contrôle de légalité
2586                    $jourmax = 29;       */
2587                else      function getControleLegalite() {
2588                    $jourmax = 28;          return 'true';
2589              break;      }
2590              case "4":      /**
2591              case "6":       * @return date de signature de l'arrêté
2592              case "9":       */
2593              case "11":      function getDateSignature() {
2594               $jourmax = 30;          if (empty($this->metadonneesArrete)) {
2595               break;              $this->getArreteMetadata();
2596              default:          }
2597               $jourmax = 31;          return $this->metadonneesArrete["datesignaturearrete"];
2598          }      }
2599          if ($jour > $jourmax)      /**
2600             $jour = $jourmax;       * @return string nom du signataire
2601      //$dateretour=$annee."-".$mois."-".$jour;       */
2602      return $annee."-".$mois."-".$jour ;      function getNomSignataire() {
2603            if (empty($this->metadonneesArrete)) {
2604                $this->getArreteMetadata();
2605            }
2606            return $this->metadonneesArrete["nomsignataire"];
2607        }
2608        /**
2609         * @return string qualité du signataire
2610         */
2611        function getQualiteSignataire() {
2612            if (empty($this->metadonneesArrete)) {
2613                $this->getArreteMetadata();
2614            }
2615            return $this->metadonneesArrete["qualitesignataire"];
2616        }
2617        /**
2618         * @return string numéro du terrain
2619         */
2620        function getAp_numRue() {
2621            if (empty($this->metadonneesArrete)) {
2622                $this->getArreteMetadata();
2623            }
2624            return $this->metadonneesArrete["ap_numrue"];
2625        }
2626        /**
2627         * @return string nom de la rue du terrain
2628         */
2629        function getAp_nomDeLaVoie() {
2630            if (empty($this->metadonneesArrete)) {
2631                $this->getArreteMetadata();
2632            }
2633            return $this->metadonneesArrete["ap_nomdelavoie"];
2634        }
2635        /**
2636         * @return string code postal du terrain
2637         */
2638        function getAp_codePostal() {
2639            if (empty($this->metadonneesArrete)) {
2640                $this->getArreteMetadata();
2641            }
2642            return $this->metadonneesArrete["ap_codepostal"];
2643        }
2644        /**
2645         * @return string ville du terrain
2646         */
2647        function getAp_ville() {
2648            if (empty($this->metadonneesArrete)) {
2649                $this->getArreteMetadata();
2650            }
2651            return $this->metadonneesArrete["ap_ville"];
2652        }
2653        /**
2654         * @return string activité
2655         */
2656        function getActivite() {
2657            return "Droit du sol";
2658        }
2659        /**
2660         * @return string date du retour de controle légalité
2661         */
2662        function getDateControleLegalite() {
2663            if (empty($this->metadonneesArrete)) {
2664                $this->getArreteMetadata();
2665            }
2666            return $this->metadonneesArrete["datecontrolelegalite"];
2667        }
2668    
2669        // Fin des méthodes de récupération des métadonnées
2670        // }}}
2671    
2672        /**
2673         * Méthode de récupération des métadonnées arrêtés dans la base de données,
2674         * les données sont stockés dans l'attribut $this->metadonneesArrete
2675         */
2676        function getArreteMetadata() {
2677    
2678        //Récupération de la dernière instruction dont l'événement est de type 'arrete'
2679        $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
2680            "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
2681            "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
2682            "ap_codepostal"=>"", "ap_ville"=>"");
2683    
2684            $sqlArrete = "SELECT    signataire_arrete.nom as \"nomsignataire\",
2685                    signataire_arrete.qualite as \"qualitesignataire\",
2686                    instruction.etat as \"decisionarrete\",
2687                    instruction.date_retour_rar as \"datenotification\",
2688                    instruction.date_retour_signature as \"datesignaturearrete\",
2689                    instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
2690                    dossier.terrain_adresse_voie_numero as \"ap_numrue\",
2691                    dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
2692                    dossier.terrain_adresse_code_postal as \"ap_codepostal\",
2693                    dossier.terrain_adresse_localite as \"ap_ville\"
2694                FROM ".DB_PREFIXE."instruction
2695                LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
2696                    instruction.signataire_arrete = signataire_arrete.signataire_arrete
2697                LEFT JOIN ".DB_PREFIXE."dossier ON
2698                    instruction.dossier = dossier.dossier
2699                LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
2700                        donnees_techniques.dossier_instruction = dossier.dossier
2701                WHERE instruction.instruction = ".$this->getVal("instruction");
2702            $resArrete = $this->db->query($sqlArrete);
2703            $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
2704            if ( database::isError($resArrete)){
2705                die();
2706            }
2707    
2708            $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
2709      }      }
2710    
2711  }// fin classe  }// fin classe

Legend:
Removed from v.460  
changed lines
  Added in v.3343

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26