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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4099 - (show annotations)
Tue May 10 14:20:09 2016 UTC (8 years, 8 months ago) by nhaye
File size: 56697 byte(s)
Merge du developpement de la branche synchro_contraintes_commune

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26