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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7996 - (hide annotations)
Fri Jul 20 17:12:33 2018 UTC (6 years, 6 months ago) by softime
File size: 72438 byte(s)
* Merge de la branche d'intégration 4.7.0 vers le trunk

1 mbroquet 3730 <?php
2     /**
3     * Ce fichier est destine a permettre la surcharge de certaines methodes de
4     * la classe om_application pour des besoins specifiques de l'application
5     *
6     * @package openmairie_exemple
7     * @version SVN : $Id: utils.class.php 6132 2016-03-09 09:18:18Z stimezouaght $
8     */
9    
10     /**
11     *
12     */
13     require_once "../dyn/locales.inc.php";
14    
15     /**
16     *
17     */
18     require_once "../dyn/include.inc.php";
19    
20     /**
21     *
22     */
23     require_once "../dyn/debug.inc.php";
24    
25     /**
26     *
27     */
28     (defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
29    
30     /**
31     *
32     */
33     require_once PATH_OPENMAIRIE."om_application.class.php";
34    
35     /**
36     *
37     */
38     class utils extends application {
39    
40 fmichon 4471 /**
41     * Gestion du favicon de l'application.
42     *
43     * @var mixed Configuration niveau application.
44     */
45     var $html_head_favicon = '../app/img/favicon.ico';
46    
47 mbroquet 3730 // {{{
48    
49     /**
50     * SURCHARGE DE LA CLASSE OM_APPLICATION.
51     *
52     * @see Documentation sur la méthode parent 'om_application:getCollectivite'.
53     */
54     function getCollectivite($om_collectivite_idx = null) {
55     // On vérifie si une valeur a été passée en paramètre ou non.
56     if ($om_collectivite_idx === null) {
57     // Cas d'utilisation n°1 : nous sommes dans le cas où on
58     // veut récupérer les informations de la collectivité de
59     // l'utilisateur et on stocke l'info dans un flag.
60     $is_get_collectivite_from_user = true;
61     // On initialise l'identifiant de la collectivité
62     // à partir de la variable de session de l'utilisateur.
63     $om_collectivite_idx = $_SESSION['collectivite'];
64     } else {
65     // Cas d'utilisation n°2 : nous sommes dans le cas où on
66     // veut récupérer les informations de la collectivité
67     // passée en paramètre et on stocke l'info dans le flag.
68     $is_get_collectivite_from_user = false;
69     }
70     //
71     $collectivite_parameters = parent::getCollectivite($om_collectivite_idx);
72    
73     //// BEGIN - SURCHARGE OPENADS
74    
75     // Ajout du paramétrage du sig pour la collectivité
76     if (file_exists("../dyn/var.inc")) {
77     include "../dyn/var.inc";
78     }
79     if (file_exists("../dyn/sig.inc.php")) {
80     include "../dyn/sig.inc.php";
81     }
82 softime 4760 if (!isset($sig_externe)) {
83     $sig_externe = "sig-default";
84     }
85 mbroquet 3730 $idx_multi = $this->get_idx_collectivite_multi();
86    
87 softime 4749 if (isset($collectivite_parameters['om_collectivite_idx'])
88     && isset($conf[$sig_externe][$collectivite_parameters['om_collectivite_idx']])
89     && isset($conf[$sig_externe]["sig_treatment_mod"])
90     && isset($collectivite_parameters["option_sig"])
91     && $collectivite_parameters["option_sig"] == "sig_externe"
92 mbroquet 3730 ) {
93    
94     // Cas numéro 1 : conf sig définie sur la collectivité et option sig active
95     $collectivite_parameters["sig"] = $conf[$sig_externe][$collectivite_parameters['om_collectivite_idx']];
96 nhaye 4099 $collectivite_parameters["sig"]["sig_treatment_mod"] = $conf[$sig_externe]["sig_treatment_mod"];
97 mbroquet 3730
98 softime 4749 } elseif($idx_multi != ''
99     && isset($conf[$sig_externe][$idx_multi])
100     && isset($conf[$sig_externe]["sig_treatment_mod"])
101     && isset($collectivite_parameters["option_sig"])
102     && $collectivite_parameters["option_sig"] == "sig_externe") {
103 mbroquet 3730 // Cas numéro : conf sig définie sur la collectivité multi et
104     // option_sig activé pour la collectivité mono
105     $collectivite_parameters["sig"] = $conf[$sig_externe][$idx_multi];
106 nhaye 4099 $collectivite_parameters["sig"]["sig_treatment_mod"] = $conf[$sig_externe]["sig_treatment_mod"];
107 mbroquet 3730 }
108    
109     //// END - SURCHARGE OPENADS
110    
111     // Si on se trouve dans le cas d'utilisation n°1
112     if ($is_get_collectivite_from_user === true) {
113     // Alors on stocke dans l'attribut collectivite le tableau de
114     // paramètres pour utilisation depuis la méthode 'getParameter'.
115     $this->collectivite = $collectivite_parameters;
116     }
117     // On retourne le tableau de paramètres.
118     return $collectivite_parameters;
119     }
120    
121     /**
122     * Retourne l'identifiant de la collectivité multi ou l'identifiant de la
123     * seule collectivité dans le cas d'une installation mono.
124     *
125     * @return integer Identifiant de la collectivité multi.
126     */
127     public function get_idx_collectivite_multi() {
128     // Récupère l'identifiant de la collectivité de niveau 2
129     $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."om_collectivite WHERE niveau = '2'";
130     $idx = $this->db->getOne($sql);
131     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
132     $this->isDatabaseError($idx);
133    
134     // S'il n'y a pas de collectivité de niveau 2
135     if ($idx == null || $idx == '') {
136    
137     // Compte le nombre de collectivité
138     $sql = "SELECT count(om_collectivite) FROM ".DB_PREFIXE."om_collectivite";
139     $count = $this->db->getOne($sql);
140     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
141     $this->isDatabaseError($count);
142    
143     // S'il y qu'une collectivité
144     if ($count == 1) {
145    
146     // Récupère l'identifiant de la seule collectivité
147     $sql = "SELECT om_collectivite FROM ".DB_PREFIXE."om_collectivite WHERE niveau = '1'";
148     $idx = $this->db->getOne($sql);
149     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
150     $this->isDatabaseError($idx);
151     }
152    
153     }
154    
155     // Retourne l'identifiant
156     return $idx;
157     }
158    
159    
160     /**
161     * Retourne l'identifiant de la collectivité de l'element de la table passée
162     * en paramètre.
163     *
164     * @param string $table Table de l'element.
165     * @param mixed $id Identifiant de l'element.
166     *
167     * @return string identifiant de la collectivite ou false si l'element n'existe pas.
168     */
169     public function get_collectivite_of_element($table, $id) {
170 softime 7996 $instance = $this->get_inst__om_dbform(array(
171     "obj" => $table,
172     "idx" => $id,
173     ));
174 mbroquet 3730 if($instance->getVal($instance->clePrimaire) != '') {
175     return $instance->getVal('om_collectivite');
176     }
177     return false;
178     }
179    
180    
181     /**
182 softime 6929 * Retourne vrai si la collectivité passée en paramètre ou la collectivité
183     * de l'utilisateur connecté est mono.
184     *
185     * @param string $id Identifiant de la collectivité.
186     *
187     * @return boolean
188 mbroquet 3730 */
189 softime 6929 public function isCollectiviteMono($id = null) {
190     // Si on ne passe pas de collectivité en argument
191     if ($id == null) {
192     // On vérifie la collectivité stockée en session de l'utilisateur
193     // connecté
194     $res = false;
195     if ($_SESSION['niveau'] === '1') {
196     //
197     $res = true;
198     }
199     //
200     return $res;
201     }
202    
203     // Requête SQL
204 mbroquet 3730 $sql = "SELECT niveau FROM ".DB_PREFIXE."om_collectivite WHERE om_collectivite = ".$id;
205     $niveau = $this->db->getOne($sql);
206     $this->addToLog(__METHOD__.": db->getOne(\"".$sql."\");", VERBOSE_MODE);
207     $this->isDatabaseError($niveau);
208 softime 6929
209     //
210     if ($niveau === '1') {
211     //
212 mbroquet 3730 return true;
213     }
214 softime 6929 //
215 mbroquet 3730 return false;
216     }
217    
218 softime 6929
219 mbroquet 3730 // }}}
220    
221     // {{{
222    
223     var $om_utilisateur = array();
224     var $user_is_instr = NULL;
225     var $user_is_service = NULL;
226     var $user_is_admin = NULL;
227     var $user_is_service_ext = NULL;
228     var $user_is_qualificateur = NULL;
229     var $user_is_chef = NULL;
230     var $user_is_divisionnaire = NULL;
231     var $user_is_service_int = NULL;
232    
233     /**
234     * Méthode de récupération des informations de l'utilisateur connecté.
235     */
236     function getUserInfos() {
237    
238     // Si l'utilisateur est loggé $_SESSION existe
239     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
240    
241     // Récupération des infos utilisateur
242     $sqlUser = "SELECT om_utilisateur, nom, email, login, om_collectivite, om_profil ".
243     "FROM ".DB_PREFIXE."om_utilisateur WHERE login = '".$_SESSION['login']."'";
244     $resUser=$this->db->query($sqlUser);
245     $this->addToLog("getUserInfos(): db->query(\"".$sqlUser."\");", VERBOSE_MODE);
246     if ( database::isError($resUser)){
247     die();
248     }
249     $this->om_utilisateur=&$resUser->fetchRow(DB_FETCHMODE_ASSOC);
250    
251     // Récupère le profil et test si c'est un
252     $sqlProfil = "SELECT libelle FROM ".DB_PREFIXE."om_profil WHERE om_profil = ".$this->om_utilisateur['om_profil'];
253     $resProfil=$this->db->getOne($sqlProfil);
254     $this->addToLog("getUserInfos(): db->getOne(\"".$sqlProfil."\");", VERBOSE_MODE);
255     if (database::isError($resProfil)){
256     die();
257     }
258     // Sauvegarde le libelle du profil
259     $this->om_utilisateur["libelle_profil"] = $resProfil;
260    
261     // si c'est un administrateur technique
262     // XXX Mauvaise méthode, il faut utiliser isAccredited
263     if ($resProfil == "ADMINISTRATEUR TECHNIQUE"
264     || $resProfil == "ADMINISTRATEUR FONCTIONNEL") {
265     $this->user_is_admin = true;
266     } else {
267     $this->user_is_admin = false;
268     }
269    
270     //si c'est un service externe
271     if ($resProfil == "SERVICE CONSULTÉ") {
272     $this->user_is_service_ext = true;
273     } else {
274     $this->user_is_service_ext = false;
275     }
276    
277     //si c'est un service interne
278     if ($resProfil == "SERVICE CONSULTÉ INTERNE") {
279     $this->user_is_service_int = true;
280     } else {
281     $this->user_is_service_int = false;
282     }
283    
284     // si c'est un qualificateur
285     if ($resProfil == "QUALIFICATEUR") {
286     $this->user_is_qualificateur = true;
287     } else {
288     $this->user_is_qualificateur = false;
289     }
290    
291     // si c'est un chef de service
292     if ($resProfil == "CHEF DE SERVICE") {
293     $this->user_is_chef = true;
294     } else {
295     $this->user_is_chef = false;
296     }
297    
298     // si c'est un divisionnaire
299     if ($resProfil == "DIVISIONNAIRE") {
300     $this->user_is_divisionnaire = true;
301     } else {
302     $this->user_is_divisionnaire = false;
303     }
304    
305     // Récupération des infos instructeur
306     $sqlInstr = "SELECT instructeur.instructeur, instructeur.nom, instructeur.telephone,
307     division.division, division.code, division.libelle ".
308     "FROM ".DB_PREFIXE."instructeur INNER JOIN ".DB_PREFIXE."division ON division.division=instructeur.division ".
309     "WHERE instructeur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
310     $resInstr=$this->db->query($sqlInstr);
311     $this->addToLog("getUserInfos(): db->query(\"".$sqlInstr."\");", VERBOSE_MODE);
312     if ( database::isError($resInstr)){
313     die();
314     }
315     $tempInstr=&$resInstr->fetchRow(DB_FETCHMODE_ASSOC);
316     // Si il y a un resultat c'est un instructeur
317     if(count($tempInstr)>0) {
318     $this->user_is_instr=true;
319     $this->om_utilisateur = array_merge($this->om_utilisateur,$tempInstr);
320     } else {
321     $this->user_is_instr=false;
322     }
323    
324     // Récupération des infos de services consultés
325     $sqlServ = "SELECT service.service, service.abrege, service.libelle ".
326     "FROM ".DB_PREFIXE."service ".
327     "INNER JOIN ".DB_PREFIXE."lien_service_om_utilisateur ON lien_service_om_utilisateur.service=service.service ".
328     "WHERE lien_service_om_utilisateur.om_utilisateur = ".$this->om_utilisateur['om_utilisateur'];
329     $resServ=$this->db->query($sqlServ);
330     $this->addToLog("getUserInfos(): db->query(\"".$sqlServ."\");", VERBOSE_MODE);
331     if ( database::isError($resServ)){
332     die();
333     }
334    
335     while ($tempServ=&$resServ->fetchRow(DB_FETCHMODE_ASSOC)) {
336     $this->om_utilisateur['service'][]=$tempServ;
337     }
338     // Si il y a un resultat c'est un utilisateur de service
339     if(isset($this->om_utilisateur['service'])) {
340     $this->user_is_service=true;
341     } else {
342     $this->user_is_service=false;
343     }
344     }
345     }
346    
347     /**
348     * getter user_is_service
349     */
350     function isUserService() {
351     //
352     if (is_null($this->user_is_service)) {
353     //
354     $this->getUserInfos();
355     }
356     //
357     return $this->user_is_service;
358     }
359    
360     /**
361     * getter user_is_instr
362     */
363     function isUserInstructeur() {
364     //
365     if (is_null($this->user_is_instr)) {
366     //
367     $this->getUserInfos();
368     }
369     //
370     return $this->user_is_instr;
371     }
372    
373     function isUserAdministrateur() {
374     //
375     if (is_null($this->user_is_admin)) {
376     //
377     $this->getUserInfos();
378     }
379     //
380     return $this->user_is_admin;
381     }
382    
383     /**
384     * getter user_is_service_ext
385     */
386     function isUserServiceExt() {
387     //
388     if (is_null($this->user_is_service_ext)) {
389     //
390     $this->getUserInfos();
391     }
392     //
393     return $this->user_is_service_ext;
394     }
395    
396     /**
397     * getter user_is_service_int
398     */
399     function isUserServiceInt() {
400     //
401     if (is_null($this->user_is_service_int)) {
402     //
403     $this->getUserInfos();
404     }
405     //
406     return $this->user_is_service_int;
407     }
408    
409     /**
410     * getter user_is_qualificateur
411     */
412     function isUserQualificateur() {
413     //
414     if (is_null($this->user_is_qualificateur)) {
415     //
416     $this->getUserInfos();
417     }
418     //
419     return $this->user_is_qualificateur;
420     }
421    
422     /**
423     * getter user_is_chef
424     */
425     function isUserChef() {
426     //
427     if (is_null($this->user_is_chef)) {
428     //
429     $this->getUserInfos();
430     }
431     //
432     return $this->user_is_chef;
433     }
434    
435     /**
436     * getter user_is_divisionnaire
437     */
438     function isUserDivisionnaire() {
439     //
440     if (is_null($this->user_is_divisionnaire)) {
441     //
442     $this->getUserInfos();
443     }
444     //
445     return $this->user_is_divisionnaire;
446     }
447    
448     /**
449     * Méthode permettant de définir si l'utilisateur connecté peut ajouter un
450     * événement d'instruction
451     *
452     * @param integer $idx identifiant du dossier
453     * @param string $obj objet
454     *
455     * @return boolean true si il peut false sinon
456     */
457     function isUserCanAddObj($idx, $obj) {
458     // Si il à le droit "bypass" il peut ajouter
459     if($this->isAccredited($obj."_ajouter_bypass") === true) {
460     return true;
461     }
462     if($this->isAccredited(array($obj."_ajouter", $obj), "OR") === false) {
463     return false;
464     }
465 softime 6565 $return = false;
466    
467 softime 7996 $object_instance = $this->get_inst__om_dbform(array(
468     "obj" => $obj,
469     "idx" => "]",
470     ));
471 mbroquet 3730 // Si il n'est pas dans la même division on défini le retour comme faux
472     // à moins qu'il ai un droit de changement de decision
473 softime 6565 if($this->isUserInstructeur() === true &&
474     ($object_instance->getDivisionFromDossier($idx) == $_SESSION["division"] or
475     ($obj == "instruction" &&
476     $object_instance->isInstrCanChangeDecision($idx) === true))) {
477 mbroquet 3730
478 softime 6565 $return = true;
479 mbroquet 3730 }
480    
481     return $return;
482     }
483    
484 softime 6565
485 mbroquet 3730 /**
486 softime 6565 * Ajout de variables de session contenant la division pour permettre une
487     * utilisation plus efficace dans les requetes.
488 mbroquet 3730 *
489 softime 6565 * @param array $utilisateur Tableau d'informations de l'utilisateur.
490 mbroquet 3730 */
491 softime 6929 function triggerAfterLogin($utilisateur = NULL) {
492 softime 6565 // Récupération de la division de l'utilisateur.
493 mbroquet 3730 $sql = "SELECT instructeur.division, division.code
494 softime 6565 FROM ".DB_PREFIXE."instructeur
495     LEFT JOIN ".DB_PREFIXE."division
496     ON instructeur.division = division.division
497     WHERE instructeur.om_utilisateur='".$utilisateur["om_utilisateur"]."'";
498 mbroquet 3730 $res = $this->db->query($sql);
499 softime 6565 $this->addToLog(
500     "triggerAfterLogin(): db->query(\"".$sql."\");",
501     VERBOSE_MODE
502     );
503     if (database::isError($res)) {
504 mbroquet 3730 die();
505     }
506     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
507 softime 6565 // Enregistrement de la division en session
508 mbroquet 3730 if (isset($row["division"]) && $row["division"] != NULL) {
509     $_SESSION["division"] = $row["division"];
510     $_SESSION["division_code"] = $row["code"];
511     } else {
512     $_SESSION["division"] = "0";
513     $_SESSION["division_code"] = "";
514     }
515 softime 6565 // Récupération du paramétrage des groupes de l'utilisateur.
516     $sqlGroupes = "SELECT groupe.code, lien_om_utilisateur_groupe.confidentiel, lien_om_utilisateur_groupe.enregistrement_demande, groupe.libelle
517     FROM ".DB_PREFIXE."groupe
518     RIGHT JOIN ".DB_PREFIXE."lien_om_utilisateur_groupe ON
519     lien_om_utilisateur_groupe.groupe = groupe.groupe
520 softime 6674 WHERE lien_om_utilisateur_groupe.login = '".$utilisateur["login"] ."'
521 softime 6565 ORDER BY libelle";
522     $resGroupes = $this->db->query($sqlGroupes);
523     $this->addToLog(
524     "triggerAfterLogin(): db->query(\"".$sqlGroupes."\");",
525     VERBOSE_MODE
526     );
527     if (database::isError($resGroupes)) {
528     die();
529     }
530     // Si aucun résultat alors récupération du paramétrage des groupes du profil
531     if ($resGroupes->numRows() === 0) {
532     $sqlGroupes = "SELECT groupe.code, lien_om_profil_groupe.confidentiel, lien_om_profil_groupe.enregistrement_demande, groupe.libelle
533     FROM ".DB_PREFIXE."groupe
534     RIGHT JOIN ".DB_PREFIXE."lien_om_profil_groupe ON
535     lien_om_profil_groupe.groupe = groupe.groupe
536     AND om_profil = ".$utilisateur["om_profil"] ."
537     ORDER BY libelle";
538     $resGroupes = $this->db->query($sqlGroupes);
539     $this->addToLog(
540     "triggerAfterLogin(): db->query(\"".$sqlGroupes."\");",
541     VERBOSE_MODE
542     );
543     if (database::isError($resGroupes)) {
544     die();
545     }
546     }
547     $_SESSION["groupe"] = array();
548     // Enregistrement des groupe en session
549     while ($row = $resGroupes->fetchrow(DB_FETCHMODE_ASSOC)) {
550     if ($row["confidentiel"] === 't') {
551     $row["confidentiel"] = true;
552     } else {
553     $row["confidentiel"] = false;
554     }
555     if ($row["enregistrement_demande"] === 't') {
556     $row["enregistrement_demande"] = true;
557     } else {
558     $row["enregistrement_demande"] = false;
559     }
560     $_SESSION["groupe"][$row["code"]] = array(
561     "confidentiel" => $row["confidentiel"],
562     "enregistrement_demande" => $row["enregistrement_demande"],
563     "libelle" => $row["libelle"],
564     );
565     }
566     }
567 mbroquet 3730
568     // Affichage des actions supplémentaires
569     function displayActionExtras() {
570     // Affichage de la division si l'utilisateur en possède une
571     if ($_SESSION["division"] != 0) {
572     echo "\t\t\t<li class=\"action-division\">";
573     echo "(".$_SESSION['division_code'].")";
574     echo "</li>\n";
575     }
576     }
577    
578     // }}}
579    
580    
581     // {{{ GESTION DES FICHIERS
582    
583     /**
584     *
585     */
586     function notExistsError ($explanation = NULL) {
587     // message
588     $message_class = "error";
589     $message = _("Cette page n'existe pas.");
590     $this->addToMessage ($message_class, $message);
591     //
592     $this->setFlag(NULL);
593     $this->display();
594    
595     //
596     die();
597     }
598    
599     // }}}
600     /**
601     * Retourne le statut du dossier d'instruction
602     * @param string $idx Identifiant du dossier d'instruction
603     * @return string Le statut du dossier d'instruction
604     */
605     function getStatutDossier($idx){
606    
607     $statut = '';
608    
609     //Si l'identifiant du dossier d'instruction fourni est correct
610     if ( $idx != '' ){
611    
612     //On récupère le statut de l'état du dossier à partir de l'identifiant du
613     //dossier d'instruction
614     $sql = "SELECT etat.statut
615     FROM ".DB_PREFIXE."dossier
616     LEFT JOIN
617     ".DB_PREFIXE."etat
618     ON
619     dossier.etat = etat.etat
620     WHERE dossier ='".$idx."'";
621     $statut = $this->db->getOne($sql);
622     $this->addToLog("getStatutDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
623     if ( database::isError($statut)){
624     die();
625     }
626     }
627     return $statut;
628     }
629    
630     /**
631     * Formate le champ pour le type Timestamp
632     * @param date $date_str Date
633     * @param boolean $show Format pour l'affichage
634     * @return mixed False si le traitement échoue ou la date formatée
635     */
636     function formatTimestamp ($date_str, $show = true) {
637    
638     // Sépare la date et l'heure
639     $date = explode(" ", $date_str);
640     if (count($date) != 2) {
641     return false;
642     }
643    
644     // Date en BDD
645     $date_db = explode ('-', $date[0]);
646     // Date en affichage
647     $date_show = explode ('/', $date[0]);
648    
649     // Contrôle la composition de la date
650     if (count ($date_db) != 3 and count ($date_show) != 3) {
651     return false;
652     }
653    
654     if (count ($date_db) == 3) {
655     // Vérifie que c'est une date valide
656     if (!checkdate($date_db[1], $date_db[2], $date_db[0])) {
657     return false;
658     }
659     // Si c'est pour l'affichage de la date
660     if ($show == true) {
661     return $date_db [2]."/".$date_db [1]."/".$date_db [0]." ".$date[1];
662     } else {
663     return $date[0];
664     }
665     }
666    
667     //
668     if (count ($date_show) == 3) {
669     // Vérifie que c'est une date valide
670     if (!checkdate($date_show[1], $date_show[0], $date_show[2])) {
671     return false;
672     }
673     // Si c'est pour l'affichage de la date
674     if ($show == true) {
675     return $date[0];
676     } else {
677     return $date_show [2]."-".$date_show [1]."-".$date_show [0]." ".$date[1];
678     }
679    
680     }
681     return false;
682    
683     }
684    
685     /**
686     * Permet de calculer la liste des parcelles à partir de la chaîne passée en paramètre
687     * et la retourner sous forme d'un tableau associatif
688     *
689     * @param string $strParcelles Chaîne de la parcelles.
690     * @param string $collectivite_idx Collectivite de la parcelle.
691     *
692     * @return array (array(prefixe, quartier, section, parcelle), ...)
693     */
694     function parseParcelles($strParcelles, $collectivite_idx = null) {
695    
696     // Séparation des lignes
697     $references = explode(";", $strParcelles);
698     $liste_parcelles = array();
699    
700     // On boucle sur chaque ligne pour ajouter la liste des parcelles de chaque ligne
701     foreach ($references as $parcelles) {
702    
703     // On transforme la chaîne de la ligne de parcelles en tableau
704     $ref = str_split($parcelles);
705     // Les 1er caractères sont numériques
706     $num = true;
707    
708     // Tableau des champs de la ligne de références cadastrales
709     $reference_tab = array();
710     $temp = "";
711     foreach ($ref as $carac) {
712    
713     // Permet de tester si le caractère courant est de même type que le précédent
714     if(is_numeric($carac) === $num) {
715     $temp .= $carac;
716     } else {
717     // Bascule
718     $num = !$num;
719     // On stock le champ
720     $reference_tab[] = $temp;
721     // re-init de la valeur temporaire pour le champ suivant
722     $temp = $carac;
723     }
724     }
725     // Stockage du dernier champ sur lequel il n'y a pas eu de bascule
726     $reference_tab[] = $temp;
727     // Calcul des parcelles
728     $quartier = $reference_tab[0];
729     $sect = $reference_tab[1];
730    
731     $ancien_ref_parc = "";
732     for ($i=2; $i < count($reference_tab); $i+=2) {
733     if($collectivite_idx != null) {
734     // Récupération du code impot de l'arrondissement
735     $collectivite = $this->getCollectivite($collectivite_idx);
736     $parc["prefixe"] = $this->get_arrondissement_code_impot($quartier);
737     }
738     $parc["quartier"] = $quartier;
739     // Met en majuscule si besoin
740     $parc["section"] = strtoupper($sect);
741     if( $ancien_ref_parc == "" OR $reference_tab[$i-1] == "/") {
742     // 1ere parcelle ou parcelle individuelle
743     // Compléte par des "0" le début de la chaîne si besoin
744     $parc["parcelle"] = str_pad($reference_tab[$i], 4, "0", STR_PAD_LEFT);
745     // Ajout d'une parcelle à la liste
746     $liste_parcelles[] = $parc;
747     } elseif ($reference_tab[$i-1] == "A") {
748     // Interval de parcelles
749     for ($j=$ancien_ref_parc+1; $j <= $reference_tab[$i]; $j++) {
750     // Compléte par des "0" le début de la chaîne si besoin
751     $parc["parcelle"] = str_pad($j, 4, "0", STR_PAD_LEFT);
752     // Ajout d'une parcelle à la liste
753     $liste_parcelles[] = $parc;
754     }
755     }
756     //Gestion des erreurs
757     else{
758    
759     echo _("Une erreur de formattage a ete detecte dans la reference cadastrale du dossier ").$this->row['dossier'];
760     }
761     // Sauvegarde de la référence courante de parcelle
762     $ancien_ref_parc = $reference_tab[$i];
763     }
764     }
765    
766     return $liste_parcelles;
767     }
768    
769    
770     /**
771     * Récupère le code impôt par rapport au quartier.
772     *
773     * @param string $quartier Numéro de quartier.
774     * @return string Code impôts.
775     */
776     protected function get_arrondissement_code_impot($quartier) {
777     // Initialisation
778     $code_impots = "";
779     // Si le quartier fournis est correct
780     if ($quartier != "") {
781     // Requête SQL
782     $sql = "SELECT
783     arrondissement.code_impots
784     FROM
785     ".DB_PREFIXE."arrondissement
786     LEFT JOIN
787     ".DB_PREFIXE."quartier
788     ON
789     quartier.arrondissement = arrondissement.arrondissement
790     WHERE
791     quartier.code_impots = '".$quartier."'";
792    
793     }
794     $code_impots = $this->db->getOne($sql);
795     if ($code_impots === null) {
796     $code_impots = "";
797     }
798     $this->isDatabaseError($code_impots);
799     // Retour
800     return $code_impots;
801     }
802    
803    
804     /**
805     * Formate les parcelles en ajoutant le code impôt
806     * @param array $liste_parcelles Tableau des parcelles
807     * @return string Liste des parcelles formatées
808     */
809     function formatParcelleToSend($liste_parcelles) {
810    
811     //
812     $wParcelle = array();
813    
814     //Formatage des références cadastrales pour l'envoi
815     foreach ($liste_parcelles as $value) {
816    
817     // On ajoute les données dans le tableau que si quartier + section + parcelle
818     // a été fourni
819     if ($value["quartier"] !== ""
820     && $value["section"] !== ""
821     && $value["parcelle"] !== ""){
822    
823     //On récupère le code impôt de l'arrondissement
824     $arrondissement = $this->getCodeImpotByQuartier($value["quartier"]);
825    
826     //On ajoute la parcelle, si un arrondissement a été trouvé
827     if ($arrondissement!=="") {
828     //
829     $wParcelle[] = $arrondissement.$value["quartier"].
830     str_pad($value["section"], 2, " ", STR_PAD_LEFT).
831     $value["parcelle"];
832     }
833     }
834     }
835    
836     //
837     return $wParcelle;
838     }
839    
840     /**
841     * Récupère le code impôt par rapport au quartier
842     * @param string $quartier Numéro de quartier
843     * @return string Code impôt
844     */
845     function getCodeImpotByQuartier($quartier) {
846    
847     $arrondissement = "";
848    
849     // Si le quartier fournis est correct
850     if ($quartier != "") {
851    
852     // Requête SQL
853     $sql = "SELECT
854     arrondissement.code_impots
855     FROM
856     ".DB_PREFIXE."arrondissement
857     LEFT JOIN
858     ".DB_PREFIXE."quartier
859     ON
860     quartier.arrondissement = arrondissement.arrondissement
861     WHERE
862     quartier.code_impots = '".$quartier."'";
863     $this->addToLog("getCodeImpotByQuartier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
864     $arrondissement = $this->db->getOne($sql);
865     $this->isDatabaseError($arrondissement);
866     }
867    
868     // Retour
869     return $arrondissement;
870     }
871    
872    
873     /**
874     * Retourne true si tous les paramètres du SIG externe ont bien été définis
875     * @return bool true/false
876     */
877     public function issetSIGParameter($idx) {
878     $collectivite_idx = $this->get_collectivite_of_element("dossier", $idx);
879     $collectivite = $this->getCollectivite($collectivite_idx);
880     if(isset($collectivite["sig"])) {
881     return true;
882     } else {
883     return false;
884     }
885     }
886    
887     /**
888     * Permet de vérifier que des champs existe dans une table
889     * @param array $list_fields Liste des champs à tester
890     * @param string $table Table où les champs doivent exister
891     * @return mixed Retourne les champs qui n'existent pas
892     * ou true
893     */
894     public function check_field_exist($list_fields, $table) {
895    
896     // Instance de la classe en paramètre
897 softime 7996 $object = $this->get_inst__om_dbform(array(
898     "obj" => $table,
899     "idx" => "]",
900     ));
901 mbroquet 3730
902     // Récupère les champs de la table
903     foreach ($object->champs as $champ) {
904     $list_column[] = $champ;
905     }
906    
907     // Tableau des champs en erreur
908     $error_fields = array();
909    
910     // Pour chaque champ à tester
911     foreach ($list_fields as $value) {
912    
913     // S'il n'apparaît pas dans la liste des champs possible
914     if (!in_array($value, $list_column)) {
915    
916     // Alors le champ est ajouté au tableau des erreurs
917     $error_fields[] = $value;
918     }
919     }
920    
921     // Si le tableau des erreurs n'est pas vide on le retourne
922     if (count($error_fields) > 0) {
923     return $error_fields;
924     }
925    
926     // Sinon on retourne le booléen true
927     return true;
928    
929     }
930    
931     /*
932     *
933     */
934     /**
935     * Récupère la lettre type lié à un événement
936     * @param integer $evenement L'identifiant de l'événement
937     * @return integer Retourne l'idenfiant de la lettre-type ou true
938     */
939     function getLettreType($evenement){
940    
941     $lettretype = NULL;
942    
943     $sql =
944     "SELECT
945     lettretype
946     FROM
947     ".DB_PREFIXE."evenement
948     WHERE
949     evenement = $evenement";
950    
951     $this->addToLog("getLettreType() : db->query(\"".$sql."\")", VERBOSE_MODE);
952     $res = $this->db->query($sql);
953     if ( database::isError($res)){
954     die();
955     }
956    
957     if ( $res->numrows() > 0 ){
958    
959     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
960     $lettretype = $row['lettretype'];
961     }
962    
963     return $lettretype;
964     }
965    
966     /**
967     * Retourne le type de dossier d'autorisation du dossier courant :
968     * @param $idxDossier Le numéro du dossier d'instruction
969     * @return le code du type détaillée de dossier d'autorisation
970     **/
971     function getDATDCode($idxDossier) {
972     $sql = "SELECT dossier_autorisation_type_detaille.code
973     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
974     INNER JOIN ".DB_PREFIXE."dossier_autorisation
975     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille =
976     dossier_autorisation.dossier_autorisation_type_detaille
977     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
978     WHERE dossier.dossier = '".$idxDossier."'";
979     $res = $this->db->getOne($sql);
980     $this->addToLog("getDATDCode() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
981     if ( database::isError($res)){
982     die();
983     }
984     return $res;
985     }
986    
987     /**
988 fmichon 4708 * Retourne le type de dossier d'autorisation du dossier courant :
989     * @param $idxDossier Le numéro du dossier d'instruction
990     * @return le code du type de dossier d'autorisation
991     **/
992     function getDATCode($idxDossier) {
993     $sql = "
994     SELECT
995     dossier_autorisation_type.code
996     FROM
997     ".DB_PREFIXE."dossier_autorisation_type
998     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
999     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
1000     INNER JOIN ".DB_PREFIXE."dossier_autorisation
1001     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille=dossier_autorisation.dossier_autorisation_type_detaille
1002     INNER JOIN ".DB_PREFIXE."dossier
1003     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
1004     WHERE
1005     dossier.dossier = '".$idxDossier."'
1006     ";
1007     $res = $this->db->getOne($sql);
1008     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1009     if ( database::isError($res)){
1010     die();
1011     }
1012     return $res;
1013     }
1014    
1015     /**
1016 mbroquet 3730 * Permet de copier un enregistrement
1017     * @param mixed $idx Identifiant de l'enregistrment
1018     * @param string $obj Objet de l'enregistrment
1019     * @param string $objsf Objets associés
1020     * @return array Tableau des nouveaux id et du message
1021     */
1022     function copier($idx, $obj, $objsf) {
1023    
1024     // Tableau de résultat
1025     $resArray = array();
1026     // Message retourné à l'utilisateur
1027     $message = "";
1028     // Type du message (valid ou error)
1029     $message_type = "valid";
1030    
1031     // Requête SQL permettant de récupérer les informations sur l'objet métier
1032     $sql = "SELECT *
1033     FROM ".DB_PREFIXE.$obj."
1034     WHERE ".$obj." = ".$idx;
1035     $res = $this->db->query($sql);
1036     $this->isDatabaseError($res);
1037    
1038     // Valeurs clonées
1039     $valF = array();
1040     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1041     // Recupère la valeur
1042     $valF = $row;
1043     }
1044    
1045     // Valeurs non clonées
1046     // Identifiant modifié pour que ça soit un ajout
1047     $valF[$obj] = "]";
1048     // Instance de l'objet métier
1049 softime 7996 $clone_obj = $this->get_inst__om_dbform(array(
1050     "obj" => $obj,
1051     "idx" => "]",
1052     ));
1053 mbroquet 3730 // Si dans l'objet métier la fonction "copier" existe
1054     if (method_exists($clone_obj, "update_for_copy")) {
1055     // Traitement sur les valeurs du duplicata
1056     $valF = $clone_obj->update_for_copy($valF, $objsf, DEBUG);
1057     // Recupère les messages retourné par la fonction
1058     $message .= $valF['message'];
1059     // Supprime les messages de la liste des valeurs
1060     unset($valF['message']);
1061     }
1062     // Ajoute le duplicata
1063     $clone_obj->ajouter($valF, $this->db, DEBUG);
1064     // Si aucune erreur se produit dans la classe instanciée
1065     if ($clone_obj->correct === true) {
1066     // Récupère l'identifiant de l'objet créé
1067     $clone_obj_id = $clone_obj->valF[$obj];
1068    
1069     // Message
1070     $message .= sprintf(_("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"), "<span class='bold'>"._($obj)."</span>", "<span class='bold'>".$idx."</span>")."<br />";
1071 softime 7996 $message .= sprintf(
1072     '<a class="om-prev-icon" id="action-link--copy-of-%s-%s" href="%s">%s</a><br/><br/>',
1073     $obj,
1074     $idx,
1075     sprintf(
1076     '%s&obj=%s&action=3&idx=%s',
1077     OM_ROUTE_FORM,
1078     $obj,
1079     $clone_obj_id
1080     ),
1081     ("Cliquer ici pour accéder à la copie")
1082     );
1083 mbroquet 3730 // Ajout de l'identifant au tableau des résultat
1084     $resArray[$obj.'_'.$idx] = $clone_obj_id;
1085    
1086     // S'il y a au moins un objet metier associé
1087     if ($objsf != "") {
1088     // Liste des objet métier associés
1089     $list_objsf = explode(",", $objsf);
1090     // Pour chaque objet associé
1091     foreach ($list_objsf as $key => $objsf) {
1092     // Requête SQL permettant de récupérer les informations sur
1093     // l'objet métier associé
1094     $sql = "SELECT *
1095     FROM ".DB_PREFIXE.$objsf."
1096     WHERE ".$obj." = ".$idx;
1097     $res = $this->db->query($sql);
1098     $this->isDatabaseError($res);
1099    
1100     // Pour chaque élément associé
1101     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1102     // Identifiant de l'objet associé à copier
1103     $idxsf = $row[$objsf];
1104    
1105     // Valeurs clonées
1106     $valF = $row;
1107     // Valeurs non clonées
1108     $valF[$obj] = $clone_obj_id;
1109     // Identifiant modifié pour que ça soit un ajout
1110     $valF[$objsf] = "]";
1111     // Instance de l'objet métier associé
1112 softime 7996 $clone_objsf = $this->get_inst__om_dbform(array(
1113     "obj" => $objsf,
1114     "idx" => "]",
1115     ));
1116 mbroquet 3730 // Si dans l'objet métier associé
1117     // la fonction "copier" existe
1118     if (method_exists($clone_objsf, "update_for_copy")) {
1119     // Traitement sur les valeurs du duplicata
1120     $valF = $clone_objsf->update_for_copy($valF, $objsf, DEBUG);
1121     // Recupère les messages retourné par la fonction
1122     $message .= $valF['message'];
1123     // Supprime les messages de la liste des valeurs
1124     unset($valF['message']);
1125     }
1126     // Ajoute le duplicata
1127     $clone_objsf->ajouter($valF, $this->db, DEBUG);
1128     // Si aucune erreur se produit dans la classe instanciée
1129     if ($clone_objsf->correct === true) {
1130     // Récupère l'identifiant de l'objet créé
1131     $clone_objsf_id = $clone_objsf->valF[$objsf];
1132    
1133     // Message
1134 softime 7996 $message .= sprintf(
1135     _("La copie de l'enregistrement %s avec l'identifiant %s s'est effectuee avec succes"),
1136     "<span class='bold'>"._($objsf)."</span>",
1137     "<span class='bold'>".$idxsf."</span>"
1138     )."<br />";
1139 mbroquet 3730
1140     // Ajout de l'identifant au tableau des résultat
1141     $resArray[$objsf.'_'.$row[$objsf]] = $clone_objsf_id;
1142     } else {
1143    
1144     // Message d'erreur récupéré depuis la classe
1145     $message .= $clone_objsf->msg;
1146     // Type du message
1147     $message_type = "error";
1148     }
1149     }
1150     }
1151     }
1152     //
1153     } else {
1154    
1155     // Message d'erreur récupéré depuis la classe
1156     $message .= $clone_obj->msg;
1157     // Type du message
1158     $message_type = "error";
1159     }
1160    
1161     // Ajout du message au tableau des résultats
1162     $resArray['message'] = $message;
1163     // Ajout du type de message au tableau des résultats
1164     $resArray['message_type'] = $message_type;
1165    
1166     // Retourne le tableau des résultats
1167     return $resArray;
1168     }
1169    
1170     /**
1171     * Cette fonction prend en entrée le ou les paramètres du &contrainte qui sont entre
1172     * parenthèses (un ensemble de paramètres séparés par des points-virgules). Elle
1173     * sépare les paramètres et leurs valeurs puis construit et retourne un tableau
1174     * associatif qui contient pour les groupes et sous-groupes :
1175     * - un tableau de valeurs, avec un nom de groupe ou sous-groupe par ligne
1176     * pour les autres options :
1177     * - la valeur de l'option
1178     *
1179     * @param string $contraintes_param Chaîne contenant tous les paramètres
1180     *
1181     * @return array Tableau associatif avec paramètres et valeurs séparés
1182     */
1183     function explodeConditionContrainte($contraintes_param) {
1184    
1185     // Initialisation des variables
1186     $return = array();
1187     $listGroupes = "";
1188     $listSousgroupes = "";
1189     $service_consulte = "";
1190     $affichage_sans_arborescence = "";
1191    
1192     // Sépare toutes les conditions avec leurs valeurs et les met dans un tableau
1193     $contraintes_params = explode(";", $contraintes_param);
1194    
1195     // Pour chaque paramètre de &contraintes
1196     foreach ($contraintes_params as $value) {
1197     // Récupère le mot-clé "liste_groupe" et les valeurs du paramètre
1198     if (strstr($value, "liste_groupe=")) {
1199     // On enlève le mots-clé "liste_groupe=", on garde les valeurs
1200     $listGroupes = str_replace("liste_groupe=", "", $value);
1201     }
1202     // Récupère le mot-clé "liste_ssgroupe" et les valeurs du paramètre
1203     if (strstr($value, "liste_ssgroupe=")) {
1204     // On enlève le mots-clé "liste_ssgroupe=", on garde les valeurs
1205     $listSousgroupes = str_replace("liste_ssgroupe=", "", $value);
1206     }
1207     // Récupère le mot-clé "service_consulte" et la valeur du paramètre
1208     if (strstr($value, "service_consulte=")) {
1209     // On enlève le mots-clé "service_consulte=", on garde sa valeur
1210     $service_consulte = str_replace("service_consulte=", "", $value);
1211     }
1212     // Récupère le mot-clé "affichage_sans_arborescence" et la valeur du
1213     // paramètre
1214     if (strstr($value, "affichage_sans_arborescence=")) {
1215     // On enlève le mots-clé "affichage_sans_arborescence=", on garde la valeur
1216     $affichage_sans_arborescence = str_replace("affichage_sans_arborescence=", "", $value);
1217     }
1218     }
1219    
1220     // Récupère dans des tableaux la liste des groupes et sous-groupes qui
1221     // doivent être utilisés lors du traitement de la condition
1222     if ($listGroupes != "") {
1223     $listGroupes = array_map('trim', explode(",", $listGroupes));
1224     }
1225     if ($listSousgroupes != "") {
1226     $listSousgroupes = array_map('trim', explode(",", $listSousgroupes));
1227     }
1228    
1229     // Tableau à retourner
1230     $return['groupes'] = $listGroupes;
1231     $return['sousgroupes'] = $listSousgroupes;
1232     $return['service_consulte'] = $service_consulte;
1233     $return['affichage_sans_arborescence'] = $affichage_sans_arborescence;
1234     return $return;
1235     }
1236    
1237     /**
1238     * Méthode qui complète la clause WHERE de la requête SQL de récupération des
1239     * contraintes, selon les paramètres fournis. Elle permet d'ajouter une condition sur
1240     * les groupes, sous-groupes et les services consultés.
1241     *
1242     * @param $string $part Contient tous les paramètres fournis à &contraintes séparés
1243     * par des points-virgules, tel que définis dans l'état.
1244     * array[] $conditions Paramètre optionnel, contient les conditions déjà explosées
1245     * par la fonction explodeConditionContrainte()
1246     *
1247     * @return string Contient les clauses WHERE à ajouter à la requête SQL principale.
1248     */
1249     function traitement_condition_contrainte($part, $conditions = NULL) {
1250    
1251     // Initialisation de la condition
1252     $whereContraintes = "";
1253     // Lorsqu'on a déjà les conditions explosées dans le paramètre $conditions, on
1254     // utilise ces données. Sinon, on appelle la méthode qui explose la chaîne de
1255     // caractères contenant l'ensemble des paramètres.
1256     if (is_array($conditions)){
1257     $explodeConditionContrainte = $conditions;
1258     }
1259     else {
1260     $explodeConditionContrainte = $this->explodeConditionContrainte($part);
1261     }
1262     // Récupère les groupes, sous-groupes et service_consulte pour la condition
1263     $groupes = $explodeConditionContrainte['groupes'];
1264     $sousgroupes = $explodeConditionContrainte['sousgroupes'];
1265     $service_consulte = $explodeConditionContrainte['service_consulte'];
1266    
1267     // Pour chaque groupe
1268     if ($groupes != "") {
1269     foreach ($groupes as $key => $groupe) {
1270     // Si le groupe n'est pas vide
1271     if (!empty($groupe)) {
1272     // Choisit l'opérateur logique
1273     $op_logique = $key > 0 ? 'OR' : 'AND (';
1274     // Ajoute la condition
1275     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.groupe)) = lower('"
1276     .pg_escape_string($groupe)."')";
1277     }
1278     }
1279     // S'il y a des valeurs dans groupe
1280     if (count($groupe) > 0) {
1281     // Ferme la parenthèse
1282     $whereContraintes .= " ) ";
1283     }
1284     }
1285    
1286     // Pour chaque sous-groupe
1287     if ($sousgroupes != "") {
1288     foreach ($sousgroupes as $key => $sousgroupe) {
1289     // Si le sous-groupe n'est pas vide
1290     if (!empty($sousgroupe)) {
1291     // Choisit l'opérateur logique
1292     $op_logique = $key > 0 ? 'OR' : 'AND (';
1293     // Ajoute la condition
1294     $whereContraintes .= " ".$op_logique." lower(trim(both E'\n\r\t' from contrainte.sousgroupe)) = lower('"
1295     .pg_escape_string($sousgroupe)."')";
1296     }
1297     }
1298     // S'il y a des valeurs dans sous-groupe
1299     if (count($sousgroupes) > 0) {
1300     // Ferme la parenthèse
1301     $whereContraintes .= " ) ";
1302     }
1303     }
1304    
1305     // Si l'option service_consulte n'est pas vide
1306     if ($service_consulte != "") {
1307     // Ajoute la condition
1308     $whereContraintes .= " AND service_consulte = cast(lower('".$service_consulte."') as boolean) ";
1309     }
1310    
1311     // Condition retournée
1312     return $whereContraintes;
1313     }
1314    
1315     /**
1316     * Calcule une date par l'ajout ou la soustraction de mois ou de jours.
1317     *
1318     * @param date $date Date de base (format dd-mm-yyyy)
1319     * @param integer $delay Délais à ajouter
1320     * @param string $operator Opérateur pour le calcul ("-" ou "+")
1321     * @param string $type Type de calcul (mois ou jour)
1322     *
1323     * @return date Date calculée
1324     */
1325     function mois_date($date, $delay, $operator = "+", $type = "mois") {
1326    
1327     // Si un type n'est pas définit
1328     if ($type != "mois" && $type != "jour") {
1329     //
1330     return null;
1331     }
1332    
1333     // Si aucune date n'a été fournie ou si ce n'est pas une date correctement
1334     // formatée
1335     if ( is_null($date) || $date == "" ||
1336     preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}/', $date) == 0 ){
1337     return null;
1338     }
1339    
1340     // Si l'opérateur n'est pas définit
1341     if ($operator != "+" && $operator != "-") {
1342     //
1343     return null;
1344     }
1345    
1346     // Découpage de la date
1347     $temp = explode("-", $date);
1348     $day = (int) $temp[2];
1349     $month = (int) $temp[1];
1350     $year = (int) $temp[0];
1351    
1352     // Si c'est un calcul sur des mois
1353     // Le calcul par mois ne se fait pas comme le calcul par jour car
1354     // les fonctions PHP ne réalisent pas les calculs réglementaires
1355     if ($type == "mois") {
1356    
1357     // Si c'est une addition
1358     if ($operator == '+') {
1359     // Année à ajouter
1360     $year += floor($delay / 12);
1361     // Mois restant
1362     $nb_month = ($delay % 12);
1363     // S'il y a des mois restant
1364     if ($nb_month != 0) {
1365     // Ajout des mois restant
1366     $month += $nb_month;
1367     // Si ça dépasse le mois 12 (décembre)
1368     if ($month > 12) {
1369     // Soustrait 12 au mois
1370     $month -= 12;
1371     // Ajoute 1 à l'année
1372     $year += 1;
1373     }
1374     }
1375     }
1376    
1377     // Si c'est une soustraction
1378     if ($operator == "-") {
1379     // Année à soustraire
1380     $year -= floor($delay / 12);
1381     // Mois restant
1382     $nb_month = ($delay % 12);
1383     // S'il y a des mois restant
1384     if ($nb_month != 0) {
1385     // Soustrait le délais
1386     $month -= $nb_month;
1387     // Si ça dépasse le mois 1 (janvier)
1388     if ($month < 1) {
1389     // Soustrait 12 au mois
1390     $month += 12;
1391     // Ajoute 1 à l'année
1392     $year -= 1;
1393     }
1394     }
1395     }
1396    
1397     // Calcul du nombre de jours dans le mois sélectionné
1398     switch($month) {
1399     // Mois de février
1400     case "2":
1401     if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) {
1402     $day_max = 29;
1403     } else {
1404     $day_max = 28;
1405     }
1406     break;
1407     // Mois d'avril, juin, septembre et novembre
1408     case "4":
1409     case "6":
1410     case "9":
1411     case "11":
1412     $day_max = 30;
1413     break;
1414     // Mois de janvier, mars, mai, juillet, août, octobre et décembre
1415     default:
1416     $day_max = 31;
1417     }
1418    
1419     // Si le jour est supérieur au jour maximum du mois
1420     if ($day > $day_max) {
1421     // Le jour devient le jour maximum
1422     $day = $day_max;
1423     }
1424    
1425     // Compléte le mois et le jour par un 0 à gauche si c'est un chiffre
1426     $month = str_pad($month, 2, "0", STR_PAD_LEFT);
1427     $day = str_pad($day, 2, "0", STR_PAD_LEFT);
1428    
1429     // Résultat du calcul
1430     $date_result = $year."-".$month."-".$day;
1431     }
1432    
1433     // Si c'est un calcul sur des jours
1434     if ($type == "jour") {
1435     //
1436     $datetime = new DateTime($date);
1437     // Si le délai est un numérique
1438     if (is_numeric($delay)) {
1439     // Modifie la date
1440     $datetime->modify($operator.$delay.' days');
1441     }
1442     // Résultat du calcul
1443     $date_result = $datetime->format('Y-m-d');
1444     }
1445    
1446     // Retourne la date calculée
1447     return $date_result;
1448     }
1449    
1450     /**
1451     * Vérifie la valididité d'une date.
1452     *
1453     * @param string $pDate Date à vérifier
1454     *
1455     * @return boolean
1456     */
1457     function check_date($pDate) {
1458    
1459     // Vérifie si c'est une date valide
1460     if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $pDate, $date)
1461     && checkdate($date[2], $date[3], $date[1])
1462     && $date[1] >= 1900) {
1463     //
1464     return true;
1465     }
1466    
1467     //
1468     return false;
1469     }
1470    
1471     /**
1472     * Permet de tester le bypass
1473     *
1474     * @param string $obj le nom de l'objet
1475     * @param string $permission_suffix
1476     * @return boolean
1477     */
1478     function can_bypass($obj="", $permission_suffix=""){
1479     //On teste le droit bypass
1480     if ($permission_suffix!=""&&$obj!=""&&
1481     $this->isAccredited($obj."_".$permission_suffix."_bypass")){
1482     return true;
1483     }
1484     return false;
1485     }
1486    
1487    
1488     /**
1489     * Vérifie l'option de numérisation.
1490     *
1491     * @return boolean
1492     */
1493     public function is_option_digitalization_folder_enabled() {
1494     //
1495     if ($this->getParameter("option_digitalization_folder") !== true) {
1496     //
1497     return false;
1498     }
1499     //
1500     return true;
1501     }
1502    
1503    
1504     /**
1505     * Vérifie que l'option d'accès au portail citoyen est activée.
1506     *
1507 softime 7366 * @param integer $om_collectivite Identifiant de la collectivité.
1508     *
1509 mbroquet 3730 * @return boolean
1510     */
1511 softime 7366 public function is_option_citizen_access_portal_enabled($om_collectivite=null) {
1512 mbroquet 3730 //
1513 softime 7366 $parameters = $this->getCollectivite($om_collectivite);
1514 mbroquet 3730 //
1515 softime 7366 if (isset($parameters['option_portail_acces_citoyen']) === true
1516     && $parameters['option_portail_acces_citoyen'] === 'true') {
1517 mbroquet 3730 //
1518 softime 7366 return true;
1519 mbroquet 3730 }
1520    
1521     //
1522 softime 7366 return false;
1523 mbroquet 3730 }
1524    
1525 softime 7366
1526 nmeucci 4108 /**
1527 softime 4626 * Vérifie que l'option du SIG est activée.
1528     *
1529     * @return boolean
1530     */
1531 softime 7996 public function is_option_sig_enabled($om_collectivite=null) {
1532 softime 4626 //
1533 softime 7996 $parameters = $this->getCollectivite($om_collectivite);
1534 softime 4626 //
1535 softime 7996 if (isset($parameters['option_sig']) === true
1536     && $parameters['option_sig'] === 'sig_externe') {
1537 softime 4626 //
1538 softime 7996 return true;
1539 softime 4626 }
1540 softime 7996 //
1541     return false;
1542     }
1543 softime 4626
1544 softime 7996 /**
1545     * Vérifie que l'option du SIG est activée.
1546     *
1547     * @return boolean
1548     */
1549     public function is_option_ws_synchro_contrainte_enabled($om_collectivite=null) {
1550 softime 4626 //
1551 softime 7996 $parameters = $this->getCollectivite($om_collectivite);
1552     //
1553     if (isset($parameters['option_ws_synchro_contrainte']) === true
1554     && $parameters['option_ws_synchro_contrainte'] === 'true') {
1555     //
1556     return true;
1557     }
1558     //
1559     return false;
1560 softime 4626 }
1561    
1562 softime 6929
1563 softime 4626 /**
1564 softime 6929 * Vérifie que l'option de simulation des taxes est activée.
1565     *
1566     * @param integer $om_collectivite Identifiant de la collectivité.
1567     *
1568     * @return boolean
1569     */
1570     public function is_option_simulation_taxes_enabled($om_collectivite=null) {
1571     //
1572     $parameters = $this->getCollectivite($om_collectivite);
1573     //
1574     if (isset($parameters['option_simulation_taxes']) === true
1575     && $parameters['option_simulation_taxes'] === 'true') {
1576     //
1577     return true;
1578     }
1579    
1580     //
1581     return false;
1582     }
1583    
1584 softime 7521 /**
1585     * Vérifie que l'option de prévisualisation de l'édition est activée.
1586     *
1587     * @param integer $om_collectivite Identifiant de la collectivité.
1588     *
1589     * @return boolean
1590     */
1591     public function is_option_preview_pdf_enabled($om_collectivite=null) {
1592     //
1593     $parameters = $this->getCollectivite($om_collectivite);
1594     //
1595     if (isset($parameters['option_previsualisation_edition']) === true
1596     && $parameters['option_previsualisation_edition'] === 'true') {
1597     //
1598     return true;
1599     }
1600 softime 6929
1601 softime 7521 //
1602     return false;
1603     }
1604    
1605 softime 7685
1606 softime 6929 /**
1607 softime 7685 * Vérifie que l'option de finalisation automatique des instructions tacites
1608     * et retours est activée..
1609     *
1610     * @param integer $om_collectivite Identifiant de la collectivité.
1611     *
1612     * @return boolean
1613     */
1614     public function is_option_finalisation_auto_enabled($om_collectivite = null) {
1615     //
1616     $parameters = $this->getCollectivite($om_collectivite);
1617     //
1618     if (isset($parameters['option_final_auto_instr_tacite_retour']) === true
1619     && $parameters['option_final_auto_instr_tacite_retour'] === 'true') {
1620     //
1621     return true;
1622     }
1623    
1624     //
1625     return false;
1626     }
1627    
1628    
1629     /**
1630 nmeucci 4108 * Vérifie le niveau de la collectivité de l'utilisateur connecté
1631     *
1632     * @return boolean
1633     */
1634     function has_collectivite_multi() {
1635     $idx_multi = $this->get_idx_collectivite_multi();
1636     if (intval($_SESSION['collectivite']) === intval($idx_multi)) {
1637     return true;
1638     }
1639     return false;
1640     }
1641 mbroquet 3730
1642 nmeucci 4108
1643 softime 3976 /**
1644     * Pour un path absolu donné, retourne le relatif à la racine de
1645     * l'application.
1646     *
1647     * @param string $absolute Chemin absolu.
1648     *
1649     * @return mixed Faux si échec sinon chemin relatif.
1650     */
1651     public function get_relative_path($absolute) {
1652     if ($this->get_path_app() === false) {
1653     return false;
1654     }
1655     $path_app = $this->get_path_app();
1656     return str_replace($path_app, '', $absolute);
1657     }
1658    
1659    
1660     /**
1661     * Retourne le path absolu de la racine de l'application
1662     *
1663     * @return mixed Faux si échec sinon chemin absolu
1664     */
1665     public function get_path_app() {
1666     $match = array();
1667     preg_match( '/(.*)\/[a-zA-Z0-9]+\/\.\.\/core\/$/', PATH_OPENMAIRIE, $match);
1668     // On vérifie qu'il n'y a pas d'erreur
1669     if (isset($match[1]) === false) {
1670     return false;
1671     }
1672     return $match[1];
1673     }
1674    
1675 nmeucci 3981 /**
1676     * Compose un tableau et retourne son code HTML
1677     *
1678     * @param string $id ID CSS du conteneur
1679     * @param array $headers entêtes de colonnes
1680     * @param array $rows lignes
1681     * @return string code HTML
1682     */
1683 nmeucci 3980 public function compose_generate_table($id, $headers, $rows) {
1684 nmeucci 3981 //
1685     $html = '';
1686 nmeucci 3980 // Début conteneur
1687 nmeucci 3981 $html .= '<div id="'.$id.'">';
1688 nmeucci 3980 // Début tableau
1689 nmeucci 3981 $html .= '<table class="tab-tab">';
1690 nmeucci 3980 // Début entête
1691 nmeucci 3981 $html .= '<thead>';
1692     $html .= '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
1693 nmeucci 3980 // Colonnes
1694     $nb_colonnes = count($headers);
1695     $index_last_col = $nb_colonnes - 1;
1696     foreach ($headers as $i => $header) {
1697     if ($i === 0) {
1698     $col = ' firstcol';
1699     }
1700     if ($i === $index_last_col) {
1701     $col = ' lastcol';
1702     }
1703 nmeucci 3981 $html .= '<th class="title col-'.$i.$col.'">';
1704     $html .= '<span class="name">';
1705     $html .= $header;
1706     $html .= '</span>';
1707     $html .= '</th>';
1708 nmeucci 3980 }
1709     // Fin entête
1710 nmeucci 3981 $html .= '</tr>';
1711     $html .= '</thead>';
1712 nmeucci 3980 // Début corps
1713 nmeucci 3981 $html .= '<tbody>';
1714 nmeucci 3980 // Lignes
1715     foreach ($rows as $cells) {
1716     // Début ligne
1717 nmeucci 3981 $html .= '<tr class="tab-data">';
1718 nmeucci 3980 // Cellules
1719     foreach ($cells as $j => $cell) {
1720     if ($j === 0) {
1721     $col = ' firstcol';
1722     }
1723     if ($j === $index_last_col) {
1724     $col = ' lastcol';
1725     }
1726 nmeucci 3981 $html .= '<td class="title col-'.$j.$col.'">';
1727     $html .= '<span class="name">';
1728     $html .= $cell;
1729     $html .= '</span>';
1730     $html .= '</td>';
1731 nmeucci 3980 }
1732     // Fin ligne
1733 nmeucci 3981 $html .= "</tr>";
1734 nmeucci 3980 }
1735     // Fin corps
1736 nmeucci 3981 $html .= '</tbody>';
1737 nmeucci 3980 // Fin tableau
1738 nmeucci 3981 $html .= '</table>';
1739 nmeucci 3980 // Fin conteneur
1740 nmeucci 3981 $html .= '</div>';
1741     //
1742     return $html;
1743 nmeucci 3980 }
1744 nmeucci 4156
1745     /**
1746     * Retourne le login de l'utilisateur connecté + entre parenthèses son nom
1747     * s'il en a un.
1748     *
1749     * @return string myLogin OU myLogin (myName)
1750     */
1751     public function get_connected_user_login_name() {
1752     // Requête et stockage des informations de l'user connecté
1753     $this->getUserInfos();
1754     // Si le nom existe et est défini on le récupère
1755     $nom = "";
1756     if (isset($this->om_utilisateur["nom"])
1757     && !empty($this->om_utilisateur["nom"])) {
1758     $nom = trim($this->om_utilisateur["nom"]);
1759     }
1760     // Définition de l'émetteur : obligatoirement son login
1761     $emetteur = $_SESSION['login'];
1762     // Définition de l'émetteur : + éventuellement son nom
1763     if ($nom != "") {
1764     $emetteur .= " (".$nom.")";
1765     }
1766     // Retour
1767     return $emetteur;
1768     }
1769 nhaye 4218
1770     /**
1771 fmichon 4708 * Cette méthode permet d'interfacer le module 'Settings'.
1772     */
1773     function view_module_settings() {
1774     //
1775     require_once "../obj/settings.class.php";
1776     $settings = new settings();
1777     $settings->view_main();
1778     }
1779    
1780 softime 7366
1781 fmichon 4708 /**
1782 softime 7366 * Vérifie que l'option référentiel ERP est activée.
1783 fmichon 4708 *
1784 softime 7366 * @param integer $om_collectivite Identifiant de la collectivité.
1785 fmichon 4708 *
1786     * @return boolean
1787     */
1788 softime 7366 public function is_option_referentiel_erp_enabled($om_collectivite=null) {
1789 fmichon 4708 //
1790 softime 7366 $parameters = $this->getCollectivite($om_collectivite);
1791     //
1792     if (isset($parameters['option_referentiel_erp']) === true
1793     && $parameters['option_referentiel_erp'] === 'true') {
1794     //
1795     return true;
1796 fmichon 4708 }
1797 softime 7366
1798 fmichon 4708 //
1799 softime 7366 return false;
1800 fmichon 4708 }
1801    
1802 softime 7366
1803 fmichon 4708 /**
1804     * Interface avec le référentiel ERP.
1805     */
1806     function send_message_to_referentiel_erp($code, $infos) {
1807     //
1808     require_once "../obj/interface_referentiel_erp.class.php";
1809     $interface_referentiel_erp = new interface_referentiel_erp();
1810     $ret = $interface_referentiel_erp->send_message_to_referentiel_erp($code, $infos);
1811     return $ret;
1812     }
1813    
1814     /**
1815 nhaye 4218 * Récupère la liste des identifiants des collectivités
1816     *
1817     * @param string $return_type 'string' ou 'array' selon que l'on retourne
1818     * respectivement une chaîne ou un tableau
1819     * @param string $separator caractère(s) séparateur(s) employé(s) lorsque
1820     * l'on retourne une chaîne, inutilisé si tableau
1821     * @return mixed possibilité de boolean/string/array :
1822     * false si erreur BDD sinon résultat
1823     */
1824     public function get_list_id_collectivites($return_type = 'string', $separator = ',') {
1825     $sql = "
1826     SELECT
1827     array_to_string(
1828     array_agg(om_collectivite),
1829     '".$separator."'
1830     ) as list_id_collectivites
1831     FROM ".DB_PREFIXE."om_collectivite";
1832     $list = $this->db->getone($sql);
1833     $this->addTolog(
1834     __FILE__." - ".__METHOD__." : db->getone(\"".$sql."\");",
1835     VERBOSE_MODE
1836     );
1837     if ($this->isDatabaseError($list, true)) {
1838     return false;
1839     }
1840     if ($return_type === 'array') {
1841     return explode($separator, $list);
1842     }
1843     return $list;
1844     }
1845 nhaye 5254
1846 softime 6565 /**
1847     * Teste si l'utilisateur connecté appartient au groupe indiqué en paramètre
1848     * ou s'il a le goupe bypass.
1849     *
1850     * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
1851     * @return boolean vrai si utilisateur appartient au groupe fourni
1852     */
1853     public function is_user_in_group($groupe) {
1854     if (isset($_SESSION['groupe']) === true
1855     && (array_key_exists($groupe, $_SESSION['groupe']) === true
1856     || array_key_exists("bypass", $_SESSION['groupe']) === true)) {
1857     return true;
1858     }
1859     return false;
1860     }
1861    
1862     /**
1863     * CONDITION - can_user_access_dossiers_confidentiels_from_groupe
1864     *
1865     * Permet de savoir si le type de dossier d'autorisation du dossier courant est
1866     * considéré comme confidentiel ou si l'utilisateur a le groupe bypass.
1867     *
1868     * @param string $groupe Code du groupe : ADS / CTX / CU / RU / ERP.
1869     * @return boolean true si l'utilisateur à accès aux dossiers confidentiels du groupe
1870     * passé en paramètre, sinon false.
1871     *
1872     */
1873     public function can_user_access_dossiers_confidentiels_from_groupe($groupe) {
1874     if ((isset($_SESSION['groupe'][$groupe]['confidentiel']) === true
1875     AND $_SESSION['groupe'][$groupe]['confidentiel'] === true)
1876     || array_key_exists("bypass", $_SESSION['groupe']) === true) {
1877     return true;
1878     }
1879     return false;
1880     }
1881    
1882     public function starts_with($haystack, $needle) {
1883     $length = strlen($needle);
1884     return (substr($haystack, 0, $length) === $needle);
1885     }
1886    
1887     public function ends_with($haystack, $needle) {
1888     $length = strlen($needle);
1889     if ($length == 0) {
1890     return true;
1891     }
1892     return (substr($haystack, -$length) === $needle);
1893     }
1894    
1895     /**
1896     * Récupère le type définit dans la base de données des champs d'une table
1897     * entière ou d'un champs si celui-ci est précisé.
1898     *
1899     * Liste des types BDD :
1900     * - int4
1901     * - varchar
1902     * - bool
1903     * - numeric
1904     * - text
1905     *
1906     * @param string $table Nom de la table.
1907     * @param string $column Nom de la colonne (facultatif).
1908     *
1909     * @return array
1910     */
1911     public function get_type_from_db($table, $column = null) {
1912     // Composition de la requête
1913     $sql_select = ' SELECT column_name, udt_name ';
1914     $sql_from = ' FROM information_schema.columns ';
1915     $sql_where = ' WHERE table_schema = \''.str_replace('.', '', DB_PREFIXE).'\' AND table_name = \''.$table.'\' ';
1916     $sql_order = ' ORDER BY ordinal_position ';
1917    
1918     // Si une colonne est précisé
1919     if ($column !== null || $column !== '') {
1920     //
1921     $sql_where .= ' AND column_name = \''.$column.'\' ';
1922     }
1923    
1924     // Requête SQL
1925     $sql = $sql_select.$sql_from.$sql_where.$sql_order;
1926     // Exécution de la requête
1927     $res = $this->db->query($sql);
1928     // Log
1929     $this->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
1930     // Erreur BDD
1931     $this->isDatabaseError($res);
1932     //
1933     $list_type = array();
1934     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1935     $list_type[$row['column_name']] = $row['udt_name'];
1936     }
1937    
1938     // Retourne la liste des codes
1939     return $list_type;
1940     }
1941    
1942 softime 7366
1943     /**
1944     * Cette méthode permet de récupérer le code de division correspondant
1945     * au dossier sur lequel on se trouve.
1946     *
1947     * Méthode identique à la méthode getDivisionFromDossier() de la classe
1948     * om_dbform à l'exception d'un cas de récupération du numéro de dossier par
1949     * la méthode getVal(). Cette exception permet d'utiliser cette méthode dans
1950     * les scripts instanciant seulement la classe utils tel que les *.inc.php.
1951     *
1952     * @param string $dossier Identifiant du dossier d'instruction.
1953     *
1954     * @return string Code de la division du dossier en cours
1955     */
1956     public function get_division_from_dossier_without_inst($dossier = null) {
1957    
1958     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
1959     // Pour éviter de refaire le traitement de recherche de la division
1960     // alors on vérifie si nous ne l'avons pas déjà calculé.
1961     if (isset($this->_division_from_dossier) === true
1962     && $this->_division_from_dossier !== null) {
1963     // Log
1964     $this->addToLog(__METHOD__."() : retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
1965     // On retourne la valeur déjà calculée
1966     return $this->_division_from_dossier;
1967     }
1968    
1969     // Récupère le paramétre retourformulaire présent dans l'URL
1970     $retourformulaire = $this->getParameter("retourformulaire");
1971     // Récupère le paramétre idxformulaire présent dans l'URL
1972     $idxformulaire = $this->getParameter("idxformulaire");
1973    
1974     // Si le dossier n'est pas passé en paramètre de la méthode
1975     if ($dossier === null) {
1976    
1977     // La méthode de récupération du dossier diffère selon le contexte
1978     // du formulaire
1979     if ($retourformulaire === "dossier"
1980     || $retourformulaire === "dossier_instruction"
1981     || $retourformulaire === "dossier_instruction_mes_encours"
1982     || $retourformulaire === "dossier_instruction_tous_encours"
1983     || $retourformulaire === "dossier_instruction_mes_clotures"
1984     || $retourformulaire === "dossier_instruction_tous_clotures"
1985     || $retourformulaire === "dossier_contentieux_mes_infractions"
1986     || $retourformulaire === "dossier_contentieux_toutes_infractions"
1987     || $retourformulaire === "dossier_contentieux_mes_recours"
1988     || $retourformulaire === "dossier_contentieux_tous_recours") {
1989    
1990     // Récupère le numéro du dossier depuis le paramètre
1991     // idxformulaire présent dans l'URL
1992     $dossier = $idxformulaire;
1993     }
1994     //
1995     if ($retourformulaire === "lot") {
1996    
1997     // Requête SQL
1998     $sql = sprintf("SELECT dossier FROM ".DB_PREFIXE."lot WHERE lot = %s", $idxformulaire);
1999     // Récupère l'identifiant du dossier
2000     $dossier = $this->db->getone($sql);
2001     // Log
2002     $this->addToLog(__METHOD__."() : db->query(\"".$dossier."\");", VERBOSE_MODE);
2003     // Erreur BDD
2004     $this->isDatabaseError($dossier);
2005     }
2006     }
2007    
2008     // À cette étape si le dossier n'est toujours pas récupéré alors la
2009     // division ne pourra pas être récupérée
2010     if ($dossier === null) {
2011     //
2012     return null;
2013     }
2014    
2015     // Requête SQL
2016     $sql = sprintf("SELECT division FROM ".DB_PREFIXE."dossier WHERE dossier = '%s'", $dossier);
2017     // Récupère l'identifiant de la division du dossier
2018     $this->_division_from_dossier = $this->db->getOne($sql);
2019     // Log
2020     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
2021     // Erreur BDD
2022     $this->isDatabaseError($this->_division_from_dossier);
2023    
2024     //
2025     return $this->_division_from_dossier;
2026    
2027     }
2028    
2029    
2030 mbroquet 3730 }
2031    
2032 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26