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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4174 - (show annotations)
Tue May 17 13:39:26 2016 UTC (8 years, 8 months ago) by nhaye
File size: 23454 byte(s)
Merge avec la branche de changement de collectivité agglo et modification de la synchro des contraintes

1 <?php
2 /**
3 * Contient la classe SynchronisationContrainte
4 *
5 * @package openfoncier
6 * @version SVN : $Id: synchronisationContrainte.class.php 6066 2016-03-01 11:11:26Z nhaye $
7 */
8 require_once "../obj/geoads.class.php";
9 /**
10 * Cette classe permet la synchronisation des contraintes
11 * du SIG et de l'application
12 */
13 class SynchronisationContrainte {
14
15 /**
16 * Instance de la classe Utils
17 * @var object
18 */
19 var $f = null;
20 /**
21 * Définition des cas d'utilisation
22 * cas 1 : utilisateur mono / synchro mono
23 * cas 2 : utilisateur mono / synchro multi
24 * cas 3 : utilisateur multi / synchro mono
25 * cas 4 : utilisateur multi / synchro multi
26 * @var String
27 */
28 var $usecase;
29 /**
30 * Liste des contraintes récupérées du SIG
31 * @var array
32 */
33 var $listContraintesSIG = array();
34 /**
35 * Liste des contraintes de la base de données
36 * @var array
37 */
38 var $listContraintesBDD = array();
39 /**
40 * Liste des contraintes "à archiver"
41 * @var array
42 */
43 var $listContraintesArchive = array();
44 /**
45 * Liste des contraintes "à ajouter"
46 * @var array
47 */
48 var $listContraintesAdd = array();
49 /**
50 * Liste des contraintes "à modifier"
51 * @var array
52 */
53 var $listContraintesEdit = array();
54 /**
55 * Liste des contraintes récupérées du SIG (seulement l'identifiant)
56 * @var array
57 */
58 var $listContraintesSIGIdContrainte = array();
59 /**
60 * Code HTTP de la réponse SOAP
61 * @var string
62 */
63 var $responseHTTP = null;
64 /**
65 * Message d'erreur de la réponse SOAP
66 * @var string
67 */
68 var $errorMessage = null;
69 /**
70 * Message à afficher à la fin du traitement
71 * @var array
72 */
73 var $outputMessage = array();
74
75 /**
76 * Constructeur
77 * @param object $f Instance de la classe Utils
78 */
79 public function __construct($f) {
80 // Initialise $this->f
81 $this->f = $f;
82 // Permet lors de l'instantiation d'objets métiers d'avoir accès à f
83 $GLOBALS['f'] = $this->f;
84
85 // Vérificationdu paramètre obligatoire du mode de traitement des contraintes
86 if(isset($this->f->collectivite["sig"]) !== true
87 and (
88 $this->f->collectivite["sig"]["sig_treatment_mod"] != "mono"
89 or $this->f->collectivite["sig"]["sig_treatment_mod"] != "multi")
90 ) {
91 $this->correct = false;
92 // Si pas défini on retourn une erreur
93 $this->f->displayMessage('error', _("Erreur de paramétrage.")." "._("Veuillez contacter votre administrateur."));
94 return false;
95 }
96
97 // Récupération de l'id de la collectivité de l'utilisateur
98 $user_idx_collectivite = $_SESSION['collectivite'];
99 // Récupération de l'id de la collectivité multi
100 $idx_multi = $this->f->get_idx_collectivite_multi();
101 // Définition des cas d'utilisation
102 // cas 1 : utilisateur mono / synchro mono -> user_mono_sync_mono
103 // cas 2 : utilisateur mono / synchro multi -> user_mono_sync_multi
104 // cas 3 : utilisateur multi / synchro mono -> user_multi_sync_mono
105 // cas 4 : utilisateur multi / synchro multi -> user_multi_sync_multi
106 if($user_idx_collectivite != $idx_multi) {
107 $this->usecase = "user_mono";
108 } else {
109 $this->usecase = "user_multi";
110 }
111 $this->usecase .= "_sync_".$this->f->collectivite["sig"]["sig_treatment_mod"];
112
113 // Si le formulaire est validé
114 if ($f->get_submitted_post_value('valider') !== null) {
115 // On lance le traitement de synchro
116 $this->constraint_sync_treatment();
117 $this->display_output_message();
118 }
119
120 }
121
122 /**
123 * Destructeur
124 */
125 public function __destruct() {
126 // Détruit l'instance de la classe Utils
127 // unset($this->f);
128 // // Détruis l'accès à la classe Utils
129 // unset($GLOBALS['f']);
130 }
131
132 public function view_form_sync() {
133
134 // Vérification du cas impossible : Administrateur mono / synchro multi
135 if($this->usecase === "user_mono_sync_multi") {
136 $this->f->displayMessage('error', _("Vous n'avez pas les droits nécessaires pour effectuer cette action."));
137 return false;
138 }
139
140 // Ouverture du formulaire
141 printf("<form method=\"POST\" action=\"contrainte_synchronisation.php\" name=f2>");
142
143 printf('<input type="hidden" name="valider" id="valider" value="1" />');
144
145 // Bouton "Synchroniser"
146 printf("<div class=\"formControls\">");
147 printf("<input id=\"button-contrainte-synchronisation-synchroniser\" type=\"submit\" "
148 ."class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\" value=\""
149 ._("synchroniser").
150 "\" role=\"button\" aria-disabled=\"false\">");
151 printf("</div>");
152
153 // Fermeture du formulaire
154 printf("</form>");
155 }
156
157 public function constraint_sync_treatment() {
158
159 $correct = true;
160
161 switch ($this->usecase) {
162
163 case 'user_multi_sync_multi':
164 case 'user_mono_sync_mono':
165
166 $collectivite = $this->f->getCollectivite($_SESSION['collectivite']);
167 $this->collectivite_constraint_sync($collectivite);
168 break;
169
170 case 'user_multi_sync_mono':
171 $sql_liste_collectivite = "SELECT om_collectivite FROM ".DB_PREFIXE."om_collectivite WHERE niveau = '1' ORDER BY libelle";
172 $res_liste_collectivite = $this->f->db->query($sql_liste_collectivite);
173 $this->f->addToLog(
174 "app/contrainte_synchronisation.php: db->query(\"".$sql_liste_collectivite."\")",
175 VERBOSE_MODE
176 );
177 $this->f->isDatabaseError($res_liste_collectivite);
178 while ($row = $res_liste_collectivite->fetchRow(DB_FETCHMODE_ASSOC)) {
179
180 $collectivite = $this->f->getCollectivite($row['om_collectivite']);
181 if(isset($collectivite['sig'])) {
182 if($this->collectivite_constraint_sync($collectivite) === false){
183 $correct = false;
184 }
185 }
186 }
187 break;
188 default:
189 # code...
190 break;
191 }
192 return $correct;
193 }
194
195 private function collectivite_constraint_sync($collectivite) {
196
197 $message = "";
198 // Instance geoads
199 $geoads = new geoads($collectivite);
200 // Intérogation du web service du SIG
201 $this->listContraintesSIG = $geoads->recup_toutes_contraintes($collectivite['insee']);
202 //
203 // Met à jour toutes les listes des contraintes
204 $this->setAllListContraintes($collectivite["om_collectivite_idx"]);
205 // Initilisation des variables
206 $correct = true;
207
208
209 // Nombre de contrainte "à ajouter"
210 $nb_contrainte_add = count(
211 $this->getListContraintesAdd());
212 // S'il y a des contraintes "à ajouter"
213 if ($nb_contrainte_add > 0) {
214 // Ajoute les contraintes "à ajouter"
215 $ajouter = $this->addContraintes($collectivite["om_collectivite_idx"]);
216 // Si une erreur s'est produite
217 if ($ajouter == false) {
218 //
219 $correct = false;
220 $message .= _("une erreur s'est produite lors de l'ajout des nouvelles contraintes.")." "._("Contactez votre administrateur")."<br />";
221 }
222 // S'il n'y a pas d'erreur
223 if ($ajouter == true) {
224 //
225 $message .= "<span class='bold'>".$nb_contrainte_add."</span>"." "
226 ._("contrainte(s) ajoutee(s).")."<br />";
227 }
228 } else {
229 //
230 $message .= _("Aucune contraintes a ajouter.")."<br />";
231 }
232
233 // Nombre de contraintes "à modifier"
234 $nb_contrainte_edit = count(
235 $this->getListContraintesEdit());
236 // S'il y a des contraintes "à modifier"
237 if ($nb_contrainte_edit > 0) {
238 // Modifie les contraintes "à modifier"
239 $modifier = $this->editContraintes($collectivite["om_collectivite_idx"]);
240 // Si une erreur s'est produite
241 if ($modifier == false) {
242 //
243 $correct = false;
244 $message .= _("une erreur s'est produite lors de la modification des contraintes.")." "._("Contactez votre administrateur")."<br />";
245 }
246 // S'il n'y a pas d'erreur
247 if ($modifier == true) {
248 //
249 $message .= "<span class='bold'>".$nb_contrainte_edit."</span>"." "
250 ._("contrainte(s) modifiee(s).")."<br />";
251 }
252 } else {
253 //
254 $message .= _("Aucune contraintes a modifier.")."<br />";
255 }
256
257 // Nombre de contraintes "à archiver"
258 $nb_contrainte_archive = count(
259 $this->getListContraintesArchive());
260 // S'il y a des contraintes "à archiver"
261 if ($nb_contrainte_archive > 0) {
262 // Archive les contraintes "à archiver"
263 $archiver = $this->archiveContraintes();
264 // Si une erreur s'est produite
265 if ($archiver == false) {
266 //
267 $correct = false;
268 $message .= _("une erreur s'est produite lors de l'archivage des contraintes.")
269 ." "._("Contactez votre administrateur")."<br />";
270 }
271 // S'il n'y a pas d'erreur
272 if ($archiver == true) {
273 //
274 $message .= "<span class='bold'>".$nb_contrainte_archive."</span>"." "
275 ._("contrainte(s) archivee(s).")."<br />";
276 }
277 } else {
278 //
279 $message .= _("Aucune contraintes a archiver.")."<br />";
280 }
281
282 $type = 'valid';
283 if ($correct == false) {
284 //
285 $type = 'error';
286 }
287
288 if(isset($collectivite['ville']) !== false){
289 $this->add_output_message($type, $message, $collectivite['ville']);
290 } else {
291 $this->add_output_message($type, $message);
292 }
293
294 // S'il y a une erreur
295 if ($correct == false) {
296 //
297 $this->f->addToLog("synchronisationContraintes(): ".$message, DEBUG_MODE);
298 }
299 return $correct;
300 }
301
302 /**
303 * Remplit toutes les listes de contrainte
304 */
305 public function setAllListContraintes($collectivite_idx) {
306 //
307 $this->setListContraintesBDD($collectivite_idx);
308 //
309 $this->setListContraintesAdd();
310 //
311 $this->setListContraintesEdit();
312 //
313 $this->setListContraintesSIGIdContrainte();
314 //
315 $this->setListContraintesArchive();
316 }
317
318 /**
319 * Retourne la list des contraintes récupérées du SIG
320 * @return array Liste des contraintes
321 */
322 public function getListContraintesSIG() {
323 //
324 return $this->listContraintesSIG;
325 }
326
327 /**
328 * Remplit la valeur de la réponse HTTP
329 * @param string $responseHTTP Réponse HTTP de la classe MessageSenderSOAP
330 */
331 private function setResponseHTTP($responseHTTP) {
332 //
333 $this->responseHTTP = $responseHTTP;
334 }
335
336 /**
337 * Retourne le code réponse HTTP
338 * @return string Code réponse HTTP
339 */
340 public function getResponseHTTP() {
341 //
342 return $this->responseHTTP;
343 }
344
345 /**
346 * Remplit la valeur du message d'erreur
347 * @param string $errorMessage Message d'erreur renvoyé par la classe MessageSenderSOAP
348 */
349 public function setErrorMessage($errorMessage){
350 $this->errorMessage = $errorMessage;
351 }
352
353 /**
354 * Retourne le message d'erreur
355 * @return string Message d'erreur
356 */
357 public function getErrorMessage(){
358 return $this->errorMessage;
359 }
360
361 /**
362 * Remplit la liste des contraintes récupérées de la base de données.
363 *
364 * @param integer $collectivite_idx identifiant de la collectivité
365 */
366 public function setListContraintesBDD($collectivite_idx) {
367
368 // Initialisation résultat
369 $resultArray = array();
370
371 // Requête SQL
372 $sql = "SELECT numero
373 FROM ".DB_PREFIXE."contrainte
374 WHERE reference = 't'
375 AND om_validite_fin IS NULL
376 AND om_collectivite = ".$collectivite_idx;
377 $this->f->addToLog("getListContraintes() : db->query(\"".$sql."\")", VERBOSE_MODE);
378 $res = $this->f->db->query($sql);
379 $this->f->isDatabaseError($res);
380
381 // Tableau des résultats
382 while ($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
383 $resultArray[] = $row['numero'];
384 }
385
386 //
387 $this->listContraintesBDD = $resultArray;
388 }
389
390 /**
391 * Retourne la liste des contraintes récupérées de la base données
392 * @return array
393 */
394 public function getListContraintesBDD() {
395 //
396 return $this->listContraintesBDD;
397 }
398
399 /**
400 * Remplit la liste des contraintes récupérées du SIG
401 * (seulement les identifiants)
402 */
403 public function setListContraintesSIGIdContrainte() {
404 $this->listContraintesSIGIdContrainte = array();
405 // Pour chaque contraintes récupérées
406 foreach ($this->getListContraintesSIG() as $key => $contrainte) {
407 // Met l'identifiant de la contrainte dans la liste
408 $this->listContraintesSIGIdContrainte[] = $contrainte['contrainte'];
409 }
410 }
411
412 /**
413 * Retourne la liste des contraintes récupérées du SIG
414 * (seulement les identifiants)
415 * @return array
416 */
417 public function getListContraintesSIGIdContrainte() {
418 //
419 return $this->listContraintesSIGIdContrainte;
420 }
421
422 /**
423 * Remplit la liste des contraintes "à ajouter"
424 */
425 public function setListContraintesAdd() {
426 $this->listContraintesAdd = array();
427 // Pour chaque contraintes récupérées
428 foreach ($this->listContraintesSIG as $key => $contrainte) {
429 // Si la contrainte n'est pas dans la liste des contraintes de
430 // la base de données
431 if (!in_array($contrainte['contrainte'], $this->listContraintesBDD)) {
432 // Met la contrainte dans la liste des "à ajouter"
433 $this->listContraintesAdd[] = $contrainte;
434 }
435 }
436 }
437
438 /**
439 * Retourne la liste des contraintes "à ajouter"
440 * @return array
441 */
442 public function getListContraintesAdd() {
443 //
444 return $this->listContraintesAdd;
445 }
446
447 /**
448 * Ajoute les contraintes de la liste listContraintesAdd
449 * @return boolean
450 */
451 public function addContraintes($collectivite_idx) {
452 //
453 $return = true;
454 // Pour chaque contrainte "à ajouter"
455 foreach ($this->listContraintesAdd as $key => $contrainte) {
456 // Instancie la classe contrainte
457 require_once "../obj/contrainte.class.php";
458 $contrainteAdd = new contrainte("]", $this->f->db, DEBUG);
459 // Définit les valeurs
460 $val = array(
461 'contrainte' => ']',
462 'numero' => $contrainte['contrainte'],
463 'nature' => 'PLU',
464 'groupe' => $contrainte['groupe_contrainte'],
465 'sousgroupe' => (isset($contrainte['sous_groupe_contrainte']))?$contrainte['sous_groupe_contrainte']:"",
466 'libelle' => $contrainte['libelle'],
467 'reference' => true,
468 'texte' => null,
469 'no_ordre' => null,
470 'service_consulte' => false,
471 'om_collectivite' => $collectivite_idx,
472 'om_validite_debut' => null,
473 'om_validite_fin' => null,
474 );
475 // Ajout de la contrainte
476 $ajouter = $contrainteAdd->ajouter($val, $this->f->db, DEBUG);
477 // Si la contrainte n'a pas été ajoutée
478 if ($ajouter == false) {
479 //
480 $return = false;
481 }
482 }
483
484 //
485 return $return;
486 }
487
488 /**
489 * Remplit la liste des contraintes "à modifier"
490 */
491 public function setListContraintesEdit() {
492 $this->listContraintesEdit = array();
493 // Pour chaque contraintes récupérées
494 foreach ($this->listContraintesSIG as $key => $contrainte) {
495 // Si la contrainte est dans la liste des contraintes de
496 // la base de données
497 if (in_array($contrainte['contrainte'], $this->listContraintesBDD)) {
498 // Met la contrainte dans la liste des "à modifier"
499 $this->listContraintesEdit[] = $contrainte;
500 }
501 }
502 }
503
504 /**
505 * Retourne la liste des contraintes "à modifier"
506 * @return array
507 */
508 public function getListContraintesEdit() {
509 //
510 return $this->listContraintesEdit;
511 }
512
513 /**
514 * Modifie les contraintes la liste listContraintesEdit
515 * @return boolean
516 */
517 public function editContraintes() {
518 //
519 $return = true;
520 // Si la liste des contraintes "à modifier" n'est pas vide
521 if (!empty($this->listContraintesEdit)) {
522 // Pour chaque contrainte "à modifier"
523 foreach ($this->listContraintesEdit as $key => $contrainte) {
524 // Récupère l'identifiant de la contrainte de l'application
525 $contrainte['contrainte_bdd'] = $this->getContrainte($contrainte['contrainte']);
526 // Instancie la classe contrainte
527 require_once "../obj/contrainte.class.php";
528 $contrainteEdit = new contrainte($contrainte['contrainte_bdd'], $this->f->db, DEBUG);
529 // Déclare le tableau des valeurs
530 $val = array();
531 foreach ($contrainteEdit->champs as $key => $champ) {
532 $val[$champ] = $contrainteEdit->val[$key];
533 }
534 // Modifie les valeurs qui peuvent avoir subit une modification
535 $val['groupe'] = $contrainte['groupe_contrainte'];
536 $val['sousgroupe'] = (isset($contrainte['sous_groupe_contrainte']))?$contrainte['sous_groupe_contrainte']:"";
537 $val['libelle'] = $contrainte['libelle'];
538 // Modifie la contrainte
539 $modifier = $contrainteEdit->modifier($val, $this->f->db, DEBUG);
540 // Si la contrainte à été modifiée
541 if ($modifier == false) {
542 //
543 $return = false;
544 }
545 }
546 }
547 //
548 return $return;
549 }
550
551 /**
552 * Remplit la liste des contraintes "à archiver"
553 */
554 public function setListContraintesArchive() {
555 $this->listContraintesArchive = array();
556 // Pour chaque contraintes de la base de données
557 foreach ($this->getListContraintesBDD() as $key => $contrainte) {
558 // Si la contrainte n'est pas dans la liste des contraintes récupérées
559 if (!in_array($contrainte, $this->getListContraintesSIGIdContrainte())) {
560 // Met la contrainte dans la liste des "à archiver"
561 $this->listContraintesArchive[] = $contrainte;
562 }
563 }
564 }
565
566 /**
567 * Retourne la liste des contraintes "à archiver"
568 * @return array
569 */
570 public function getListContraintesArchive() {
571 //
572 return $this->listContraintesArchive;
573 }
574
575 /**
576 * Archive les contraintes de la liste listContraintesArchive
577 * @return boolean
578 */
579 public function archiveContraintes() {
580 //
581 $return = true;
582 // Pour chaque contrainte "à archiver"
583 foreach ($this->getListContraintesArchive() as $key => $contrainte) {
584 // Récupère l'identifiant de la contrainte de l'application
585 $contrainteId = $this->getContrainte($contrainte);
586 // Instancie la classe contrainte
587 require_once "../obj/contrainte.class.php";
588 $contrainteArchive = new contrainte($contrainteId, $this->f->db, DEBUG);
589 // Déclare le tableau des valeurs
590 $val = array();
591 // Récupération des valeurs
592 foreach($contrainteArchive->champs as $id => $champ) {
593 $val[$champ] = $contrainteArchive->val[$id];
594 }
595 // Met la date de fin de validité au jour pour archiver
596 $val['om_validite_fin'] = date('d/m/Y');
597 // Modifie la contrainte
598 $archiver = $contrainteArchive->modifier($val, $this->f->db, DEBUG);
599 // Si la contrainte n'a pas été modifiée
600 if ($archiver == false) {
601 //
602 $return = false;
603 }
604 }
605 //
606 return $return;
607 }
608
609 /**
610 * Récupère l'identifiant d'un ccontrainte par rapport à son numéro
611 * @param string $numero Identifiant unique de la contrainte sur le SIG
612 * @return integer Identifiant de la contrainte dans l'application
613 */
614 private function getContrainte($numero) {
615
616 // Initialisation résultat
617 $contrainte = "";
618
619 // Requête SQL
620 $sql = "SELECT contrainte
621 FROM ".DB_PREFIXE."contrainte
622 WHERE numero = '".$numero."'";
623 $this->f->addToLog("getContrainte() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
624 $contrainte = $this->f->db->getOne($sql);
625 $this->f->isDatabaseError($contrainte);
626
627 // Retourne résultat
628 return $contrainte;
629 }
630
631 /**
632 * Méthode permettant d'ajouter à la pile des messages le resultat de la
633 * synchronisation des contraintes pour chaque commune.
634 *
635 * @param string $type valid/error
636 * @param string $message Message
637 * @param string $commune Nom de la commune à afficher.
638 */
639 private function add_output_message($type, $message, $commune = null) {
640 $tab_message = array("type" => $type, "message" => $message);
641 if($commune != null) {
642 $tab_message["commune"] = $commune;
643 }
644
645 $this->outputMessage[] = $tab_message;
646 }
647
648 /**
649 * Affiche les message de sortie de la synchronisation.
650 *
651 * @return [type] [description]
652 */
653 private function display_output_message() {
654
655 foreach ($this->outputMessage as $key => $tab_message) {
656 $message = "";
657 if(isset($tab_message["commune"]) === true and $tab_message["commune"] != "") {
658 $message .= "<span class='bold'>".$tab_message["commune"]."</span><br />";
659 }
660 $message .= $tab_message['message'];
661 $this->f->displayMessage($tab_message["type"], $message);
662
663 }
664 }
665
666 /**
667 * Accesseur de la pile de message de sortie du traitement.
668 *
669 * @return array Liste des messages et leurs status
670 */
671 public function get_output_message() {
672 return $this->outputMessage;
673 }
674 }
675
676 ?>

Properties

Name Value
svn:executable

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26