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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26