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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26