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

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

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

revision 3907 by nmeucci, Mon Apr 11 08:16:06 2016 UTC revision 4108 by nmeucci, Wed May 11 10:26:54 2016 UTC
# Line 237  class instruction extends instruction_ge Line 237  class instruction extends instruction_ge
237              "view" => "view_generate_bordereau_envoi_maire",              "view" => "view_generate_bordereau_envoi_maire",
238              "permission_suffix" => "bordereau_envoi_maire",              "permission_suffix" => "bordereau_envoi_maire",
239          );          );
240    
241            // ACTION - 210 - notifier_commune
242            // Notifie la commune par mail d'un évément d'instruction finalisé
243            $this->class_actions[210] = array(
244                "identifier" => "notifier_commune",
245                "portlet" => array(
246                    "type" => "action-direct-with-confirmation",
247                    "libelle" => _("Notifier la commune par courriel"),
248                    "order" => 210,
249                    "class" => "notifier_commune-16",
250                ),
251                "view" => "formulaire",
252                "method" => "notifier_commune",
253                "permission_suffix" => "notifier_commune",
254                "condition" => "is_notifiable",
255            );
256      }      }
257    
258      /**      /**
# Line 495  class instruction extends instruction_ge Line 511  class instruction extends instruction_ge
511              $form->setType("date_retour_controle_legalite", "hiddendate");              $form->setType("date_retour_controle_legalite", "hiddendate");
512          }          }
513    
514          // Pour les actions finalize et unfinalize          // Pour les actions finalize, unfinalize et notifier_commune
515          if($maj == 100 || $maj == 110) {          if($maj == 100 || $maj == 110 || $maj == 210) {
516              //              //
517              foreach ($this->champs as $value) {              foreach ($this->champs as $value) {
518                  // Cache tous les champs                  // Cache tous les champs
# Line 1575  class instruction extends instruction_ge Line 1591  class instruction extends instruction_ge
1591              $this->correct = false;              $this->correct = false;
1592              return false;              return false;
1593          }          }
1594          return $this->add_log_to_dossier('ajouter', $id, $val);          return $this->add_log_to_dossier($id, array_merge($val, $this->valF));
1595      }      }
1596    
1597      function triggermodifierapres($id,&$db,$val,$DEBUG) {      function triggermodifierapres($id,&$db,$val,$DEBUG) {
# Line 1663  class instruction extends instruction_ge Line 1679  class instruction extends instruction_ge
1679              if (database::isError($res)) {              if (database::isError($res)) {
1680                  die($res->getMessage());                  die($res->getMessage());
1681              }              }
1682                $current_id = $this->getVal($this->clePrimaire);
1683              while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {              while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1684                  // Si la date de retour signature est éditée on vérifie si il existe un événement automatique                  // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1685                  if ($this->getVal('date_retour_signature') == "" AND                  if ($this->getVal('date_retour_signature') == "" AND
# Line 1684  class instruction extends instruction_ge Line 1701  class instruction extends instruction_ge
1701                      $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);                      $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1702                      $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);                      $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1703                      $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);                      $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1704                        $new_instruction->setParameter("maj", 0);
1705                        $new_instruction->class_actions[0]["identifier"] =
1706                            "retour signature de l'instruction $current_id";
1707                      $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);                      $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1708                                            
1709                      //Si une erreur s'est produite et qu'il s'agit d'un problème                      //Si une erreur s'est produite et qu'il s'agit d'un problème
# Line 1723  class instruction extends instruction_ge Line 1743  class instruction extends instruction_ge
1743                          $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);                          $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1744                          $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);                          $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1745                          $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);                          $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1746                          $new_instruction->setParameter("maj", $this->getParameter("maj"));                          $new_instruction->setParameter("maj", 0);
1747                            $new_instruction->class_actions[0]["identifier"] =
1748                                "retour RAR de l'instruction $current_id";
1749                          $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);                          $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1750    
1751                          //Si une erreur s'est produite et qu'il s'agit d'un problème                          //Si une erreur s'est produite et qu'il s'agit d'un problème
# Line 1871  class instruction extends instruction_ge Line 1893  class instruction extends instruction_ge
1893              $this->correct = false;              $this->correct = false;
1894              return false;              return false;
1895          }          }
1896          return $this->add_log_to_dossier('modifier', $id, $val);          return $this->add_log_to_dossier($id, $val);
1897      }      }
1898    
1899      function triggersupprimer($id,&$db,$val,$DEBUG) {      function triggersupprimer($id,&$db,$val,$DEBUG) {
# Line 2007  class instruction extends instruction_ge Line 2029  class instruction extends instruction_ge
2029              $this->correct = false;              $this->correct = false;
2030              return false;              return false;
2031          }          }
2032          return $this->add_log_to_dossier('supprimer', $id, $val);          $val['evenement'] = $this->getVal('evenement');
2033            return $this->add_log_to_dossier($id, $val);
2034      }      }
2035    
2036      /**      /**
# Line 2310  class instruction extends instruction_ge Line 2333  class instruction extends instruction_ge
2333    
2334          // Verification de la validite des donnees          // Verification de la validite des donnees
2335          $this->verifier($this->val, $this->db, DEBUG);          $this->verifier($this->val, $this->db, DEBUG);
         // Verification du verrou  
         $this->testverrou();  
2336          // Si les verifications precedentes sont correctes, on procede a          // Si les verifications precedentes sont correctes, on procede a
2337          // la modification, sinon on ne fait rien et on retourne une erreur          // la modification, sinon on ne fait rien et on retourne une erreur
2338          if ($this->correct) {          if ($this->correct) {
# Line 2364  class instruction extends instruction_ge Line 2385  class instruction extends instruction_ge
2385                  $message .= "[ ".$this->db->affectedRows()." ";                  $message .= "[ ".$this->db->affectedRows()." ";
2386                  $message .= _("enregistrement(s) mis a jour")." ]";                  $message .= _("enregistrement(s) mis a jour")." ]";
2387                  $this->addToLog($message, VERBOSE_MODE);                  $this->addToLog($message, VERBOSE_MODE);
                 // Mise en place du verrou pour ne pas finaliser plusieurs fois  
                 // le meme document  
                 $this->verrouille();  
2388                  // Execution du trigger 'after' specifique au MODE 'update'                  // Execution du trigger 'after' specifique au MODE 'update'
2389                  //$this->triggermodifierapres($id, $this->db, $val, DEBUG);                  //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2390    
# Line 2378  class instruction extends instruction_ge Line 2396  class instruction extends instruction_ge
2396                  $this->msg = "";                  $this->msg = "";
2397                  $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));                  $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2398    
2399                  return true;                  return $this->add_log_to_dossier($id, $val);
2400              }              }
2401          } else {          } else {
2402              // Message d'echec (saut d'une ligne supplementaire avant le              // Message d'echec (saut d'une ligne supplementaire avant le
# Line 3867  class instruction extends instruction_ge Line 3885  class instruction extends instruction_ge
3885                                      // correspondant au code barres                                      // correspondant au code barres
3886                                      if($instr->getVal("om_final_instruction") === 't') {                                      if($instr->getVal("om_final_instruction") === 't') {
3887                                          $instr->setParameter('maj', 1);                                          $instr->setParameter('maj', 1);
3888                                            $instr->class_actions[1]["identifier"] =
3889                                                "envoi lettre RAR (depuis le menu suivi des pièces)";
3890                                          if ($instr->modifier($valF, $f->db, DEBUG) == true) {                                          if ($instr->modifier($valF, $f->db, DEBUG) == true) {
3891                                              $id4Gen[] = $code_barres;                                              $id4Gen[] = $code_barres;
3892                                              $nbLettres ++;                                              $nbLettres ++;
# Line 4079  class instruction extends instruction_ge Line 4099  class instruction extends instruction_ge
4099                                                            
4100                              //On modifie les valeurs de l'instruction                              //On modifie les valeurs de l'instruction
4101                              $instr->setParameter('maj', 170);                              $instr->setParameter('maj', 170);
4102                                $instr->class_actions[170]["identifier"] =
4103                                "mise à jour des dates (depuis le menu suivi des pièces)";
4104                              $retour = $instr->modifier($valF, $f->db, DEBUG);                              $retour = $instr->modifier($valF, $f->db, DEBUG);
4105                                                            
4106                              //Si une erreur s'est produite, on défait les modifications                              //Si une erreur s'est produite, on défait les modifications
# Line 4728  class instruction extends instruction_ge Line 4750  class instruction extends instruction_ge
4750          return $this->get_inst_common("dossier", $dossier);          return $this->get_inst_common("dossier", $dossier);
4751      }      }
4752    
4753    
4754      /**      /**
4755       * Logue l'action de l'instruction dans son DI       * Logue l'action de l'instruction dans son DI.
4756       * @param  string $action ajouter/modifer/supprimer       *
4757       * @param  string $id     clé primaire de l'instruction       * @param string $id  Clé primaire de l'instruction.
4758       * @param  array  $val    valeurs de l'instruction       * @param array  $val Valeurs de l'instruction.
4759       * @return bool           vrai si traitement effectué avec succès       *
4760         * @return bool Vrai si traitement effectué avec succès
4761       */       */
4762      private function add_log_to_dossier($action, $id, $val) {      private function add_log_to_dossier($id, array $val) {
4763            $maj = $this->getParameter("maj");
4764            // Action = Trace par défaut
4765            $action = $this->get_backtrace();
4766            // Action = Identifant de l'action si contexte connu
4767            if (empty($maj) === false
4768                || (empty($maj) === true && $maj === 0)) {
4769                $action = $this->get_action_param($maj, 'identifier');
4770                if ($action === 'modifier_suivi') {
4771                    $action = "modifier (via l'action suivi des dates)";
4772                }
4773                if ($action === 'notifier_commune'
4774                    && isset($val['mails_destinataires']) === true) {
4775                    $action = "notification de la commune (courriels : ";
4776                    $action .= $val['mails_destinataires'].")";
4777                }
4778            }
4779          // Création du log          // Création du log
4780          $log = array(          $log = array(
4781              'date' => date('Y-m-d H:i:s'),              'date' => date('Y-m-d H:i:s'),
# Line 4747  class instruction extends instruction_ge Line 4787  class instruction extends instruction_ge
4787                  'date_retour_signature' => $this->dateDB($val['date_retour_signature']),                  'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
4788                  'evenement' => $val['evenement'],                  'evenement' => $val['evenement'],
4789                  'action' => $val['action'],                  'action' => $val['action'],
4790                  'instruction' => $id ,                  'instruction' => $id,
4791                  'etat' => $val['etat'],                  'etat' => $val['etat'],
4792                  ),                  ),
4793          );          );
4794          // Ajout du log          // Ajout du log
4795          $di = $this->get_inst_common("dossier", $val['dossier']);          $di = $this->get_inst_dossier($val['dossier']);
4796          $ret = $di->add_log_instructions($log);          $ret = $di->add_log_instructions($log);
4797          if ($ret === false) {          if ($ret === false) {
4798              $this->correct = false;              $this->correct = false;
# Line 4761  class instruction extends instruction_ge Line 4801  class instruction extends instruction_ge
4801          }          }
4802          return $ret;          return $ret;
4803      }      }
4804    
4805    
4806        /**
4807         * Retourne le contexte de déboguage formaté en HTML.
4808         *
4809         * @return string Une ligne par trace
4810         */
4811        private function get_backtrace() {
4812            $trace = debug_backtrace();
4813            $backtrace = '';
4814            $i = 1;
4815            foreach ($trace as $key => $value) {
4816                $func = $trace[$key]['function'];
4817                // On ne s'autolog pas
4818                if ($func === 'get_backtrace'
4819                    || $func === 'add_log_to_dossier') {
4820                    continue;
4821                }
4822                $backtrace .= $i.') ';
4823                // Si dans une classe
4824                if (isset($trace[$key]['class']) === true
4825                    && empty($trace[$key]['class']) === false) {
4826                    $backtrace .= $trace[$key]['class'].'->'.$func;
4827                }
4828                // Si procédural
4829                else {
4830                    $file = $trace[$key]['file'];
4831                    $line = $trace[$key]['line'];
4832                    $truncated_file = $this->f->get_relative_path($file);
4833                    if ($truncated_file !== false) {
4834                        $file = $truncated_file;
4835                    }
4836                    $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
4837                }
4838                $backtrace .= '<br/>';
4839                $i++;
4840            }
4841            return $backtrace;
4842        }
4843    
4844        /**
4845         * CONDITION - is_notifiable.
4846         *
4847         * Condition pour afficher l'action notifier_commune.
4848         *
4849         * @return boolean
4850         */
4851        public function is_notifiable() {
4852            // L'instruction doit être finalisée, ce qui revient à dire
4853            // définalisable sans bypass
4854            if ($this->is_unfinalizable_without_bypass() === false) {
4855                return false;
4856            }
4857            // La collectivité de l'utilisateur doit être de niveau multi
4858            if ($this->f->has_collectivite_multi() === false) {
4859                return false;
4860            }
4861            // Le paramètre multi de l'objet du courriel doit exister
4862            if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
4863                return false;
4864            }
4865            // Le paramètre multi du modèle du courriel doit exister
4866            if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
4867                return false;
4868            }
4869            // A ce stade toutes les conditions sont satisfaites
4870            return true;
4871        }
4872    
4873        /**
4874         * TREATMENT - notifier_commune.
4875         *
4876         * Notifie aux communes et par courriel la finalisation d'une instruction.
4877         *
4878         * @return boolean
4879         */
4880        public function notifier_commune() {
4881            // Cette méthode permet d'exécuter une routine en début des méthodes
4882            // dites de TREATMENT.
4883            $this->begin_treatment(__METHOD__);
4884            // Définition des paramètres
4885            $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
4886            $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
4887            $p_courriel = 'param_courriel_de_notification_commune';
4888            // Définition des variables de substitution
4889            $id_di = $this->getVal('dossier');
4890            $id_inst = $this->getVal($this->clePrimaire);
4891            // Instanciation du DI
4892            $di = $this->get_inst_dossier($id_di);
4893            // Récupération du paramétrage de la collectivité du dossier
4894            $collectivite_di = $di->getVal('om_collectivite');
4895            $params_mono = $this->f->getCollectivite($collectivite_di);
4896            // Récupération du paramétrage de la collectivité multi
4897            $collectivite_multi = $this->f->get_idx_collectivite_multi();
4898            $params_multi = $this->f->getCollectivite($collectivite_multi);
4899            // Vérification de l'objet (obligatoirement multi)
4900            $objet = null;
4901            if (isset($params_multi[$p_objet]) === true
4902                && $params_multi[$p_objet] !== '') {
4903                $objet = $params_multi[$p_objet];
4904            }
4905            // Vérification du modèle mono en priorité
4906            $modele = null;
4907            if (isset($params_mono[$p_modele]) === true
4908                && $params_mono[$p_modele] !== '') {
4909                $modele = $params_mono[$p_modele];
4910                
4911            }
4912            // Sinon vérification du modèle multi
4913            if ($modele === null
4914                && isset($params_multi[$p_modele]) === true
4915                && $params_multi[$p_modele] !== '') {
4916                $modele = $params_multi[$p_modele];
4917            }
4918            // Vérification des adresses de courriel mono
4919            $courriels_valides = array();
4920            $courriels_invalides = array();
4921            if (isset($params_mono[$p_courriel]) === true
4922                && $params_mono[$p_courriel] !== '') {
4923                // Un mail par ligne
4924                $adresses = explode("\n", $params_mono[$p_courriel]);
4925                // Vérification de la validité de chaque mail avec preg_match
4926                foreach ($adresses as $adresse) {
4927                    $adresse = trim($adresse);
4928                    if ($this->f->checkValidEmailAddress($adresse) === 1) {
4929                        $courriels_valides[] = $adresse;
4930                    } else {
4931                        $courriels_invalides[] = $adresse;
4932                    }
4933                }
4934            }
4935            // Vérification du paramétrage global :
4936            // on stoppe le traitement si au moins un paramètre est incorrect
4937            if ($objet === null
4938                || $modele === null
4939                || count($courriels_valides) === 0
4940                || count($courriels_invalides) > 0) {
4941                // On construit le message d'erreur adéquat
4942                $this->addToMessage(_('Erreur de paramétrage :'));
4943                if ($objet === null) {
4944                    $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
4945                }
4946                if ($modele === null) {
4947                    $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
4948                }
4949                if (count($courriels_valides) === 0) {
4950                    $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
4951                }
4952                if (count($courriels_invalides) > 0) {
4953                    $courriels_invalides = implode(', ', $courriels_invalides);
4954                    $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
4955                }
4956                $this->addToMessage(_("Veuillez contacter votre administrateur."));
4957                return $this->end_treatment(__METHOD__, false);
4958            }
4959            // Remplacement des variables de substitution
4960            $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
4961            $modele = $this->formater_modele($modele, $id_di, $id_inst);
4962            // Exécution du traitement d'envoi du/des mail(s)
4963            $fails = array();
4964            foreach ($courriels_valides as $email) {
4965                if ($this->f->sendMail(
4966                    iconv("UTF-8", "CP1252", $objet),
4967                    iconv("UTF-8", "CP1252", $modele),
4968                    iconv("UTF-8", "CP1252", $email)) === false) {
4969                    $fails[] = $email;
4970                }
4971            }
4972            // Si échec message d'erreur et arrêt du traitement
4973            if (count($fails) > 0) {
4974                $fails = implode(', ', $fails);
4975                $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
4976                $this->addToMessage(_("Veuillez contacter votre administrateur."));
4977                return $this->end_treatment(__METHOD__, false);
4978            }
4979            // Ajout du log
4980            $this->setValFFromVal();
4981            $val_inst = $this->valF;
4982            $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
4983            if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
4984                $this->addToMessage(_("Erreur lors de la notification."));
4985                $this->addToMessage(_("Veuillez contacter votre administrateur."));
4986                return $this->end_treatment(__METHOD__, false);
4987            }
4988            // Message de validation
4989            $this->addToMessage(_('La commune a été notifiée.'));
4990            return $this->end_treatment(__METHOD__, true);
4991        }
4992    
4993        /**
4994         * Formatte le corps du courriel notifié aux communes
4995         *
4996         * @param   string  $modele   template du modèle du courriel
4997         * @param   string  $id_di    clé primaire du DI
4998         * @param   string  $id_inst  clé primaire de l'instruction
4999         * @return  string            corps du mail au format HTML
5000         */
5001        public function formater_modele($modele, $id_di, $id_inst) {
5002            // Création du lien d'accès direct à l'instruction
5003            $url_inst = PATH_BASE_URL.'spg/direct_link.php?obj=dossier_instruction&action=3'.
5004                '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
5005            $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
5006            // Remplacement des champs de fusion
5007            $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
5008            $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
5009            $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
5010            // Encodage HTML des sauts de ligne
5011            $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
5012            //
5013            return $modele;
5014        }
5015  }// fin classe  }// fin classe
5016    
5017  ?>  ?>

Legend:
Removed from v.3907  
changed lines
  Added in v.4108

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26