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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26