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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26