/[openfoncier]/trunk/services/outgoing/messageenqueuer.php
ViewVC logotype

Contents of /trunk/services/outgoing/messageenqueuer.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1302 - (show annotations)
Mon Mar 4 11:43:25 2013 UTC (11 years, 11 months ago) by nhaye
File size: 18477 byte(s)
Finalisation de l'envoi de messages SOAP à un web service

1 <?php
2
3 /**
4 * Ce fichier permet de créer une classe utilisée pour stocker les
5 * messages sur la pile de RabbitMQ réservée au ERP.
6 *
7 * @package openfoncier
8 */
9
10 // inclusion de la librairie php-amqplib
11 require_once('vendor/autoload.php');
12 use PhpAmqpLib\Connection\AMQPConnection;
13 use PhpAmqpLib\Message\AMQPMessage;
14
15 (defined("DEBUG") ? "" : define("DEBUG", EXTRA_VERBOSE_MODE));
16
17 // pour des besoins de logging il faut setter $_SERVER["REQUEST_URI"]
18 if (!isset($_SERVER["REQUEST_URI"])) {
19 $_SERVER["REQUEST_URI"] = __FILE__;
20 }
21
22 // Si le AMQP_DEBUG est defini a true, les messages DEBUG sont envoyes aux
23 // stdout ce qui peut etre bien pour deboguer
24 if (DEBUG > PRODUCTION_MODE) {
25 define('AMQP_DEBUG', true);
26 }
27
28
29 class MessageEnqueuer {
30
31 // message "Demande de completude de dossier PC pour un ERP"
32 public static $ERP_DEMANDE_COMPLETUDE_PC = 'erpDemandeCompletudePc';
33 // message "ERP Qualifie"
34 public static $ERP_QUALIFIE = 'erpQualifie';
35 // message "Demande de qualification de dossier PC pour un ERP"
36 public static $ERP_DEMANDE_QUALIFICATION_PC = 'erpDemandeQualificationPc';
37 // message "Demande d'instruction de dossier PC pour un ERP"
38 public static $ERP_DEMANDE_INSTRUCTION_PC = 'erpDemandeInstructionPc';
39 // message "Consultation ERP pour conformite"
40 public static $ERP_CONSULTATION_CONFORMITE = 'erpConsultationConformite';
41 // message "Demande d'ouverture ERP PC"
42 public static $ERP_DEMANDE_OUVERTURE_PC = 'erpDemandeOuverturePc';
43 // message "Depot de dossier DAT"
44 public static $ERP_DEPOT_DOSSIER_DAT = 'erpDepotDossierDat';
45 // message "Annulation de la demande"
46 public static $ERP_ANNULATION_DEMANDE = 'erpAnnulationDemande';
47 // message "Demande d'ouverture ERP DAT"
48 public static $ERP_DEMANDE_OUVERTURE_DAT = 'erpDemandeOuvertureDat';
49 // message "Decision de conformite effectue"
50 public static $ERP_DECISION_CONFORMITE_EFFECTUE = 'erpDecisionConformiteEffectue';
51 // message "Arrete d'un dossier PC effectue"
52 public static $ERP_ARRETE_PC_EFFECTUE = 'erpArretePcEffectue';
53 // message soap d'un arrêté vers référentiel Arrete
54 public static $ARRETE_ENVOI = 'arreteEnvoi';
55
56 // variables utilises pour le retour de resultat d'envoi d'un message
57 var $BAD_DATA = -2;
58 var $OK = 0;
59 var $KO = -1;
60
61
62 /**
63 * Constructeur
64 */
65 public function __construct() {
66 // include les variables de connexion avec RabbitMQ
67 include_once('../dyn/services.inc.php');
68 // initialisation des donnees
69 $this->ret_array = array();
70 $this->ret_array['date'] = date('d/m/Y H:i');
71 $this->ret_array['emetteur'] = $_SESSION['login'];
72 $this->dossier_instruction = null;
73 $this->competence = null;
74 $this->contrainte_plu = null;
75 $this->consultation = null;
76 $this->decision = null;
77 $this->reference_cadastrale = null;
78
79 // sauvegarde des donnees de la connexion avec RabbitMQ
80 // nom de la pile
81 $this->queueErp = $ERP_QUEUE;
82 $this->queueArrete = $ARRETE_QUEUE;
83 $this->passArrete = $ARRETE_PASS;
84 $this->host = $RMQ_CONNECTION_HOST;
85 $this->port = $RMQ_CONNECTION_PORT;
86 $this->user = $RMQ_CONNECTION_USER;
87 $this->password = $RMQ_CONNECTION_PASSWORD;
88 $this->vhost = $RMQ_CONNECTION_VHOST;
89 }
90
91
92 /**
93 * Appelle pour stocker un message sur la pile d'ERP dans RabbitMQ
94 * Precondition: $msg_type est egal a valeur d'une des $ERP_*
95 * @param string $method La methode qui sera appellee pour stocker
96 * un message sur la pile.
97 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
98 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
99 * retourne -1
100 */
101 public function enqueueMessage($method) {
102 // si $method existe dans la classe, apelle la
103 if (method_exists($this, $method)) {
104 return $this->$method();
105 }
106 // rien a faire
107 return $this->KO;
108 }
109
110
111 /**
112 * Met un message sur la pile de RabbitMQ définie dans le paramètre.
113 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
114 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
115 * retourne -1
116 */
117
118 private function enqueueRequest($queue, $type) {
119 // encode le tableau a envoyer en format JSON
120 $msg_str = json_encode($this->ret_array);
121
122 // s'il a eu des erreurs dans l'encodage, indique une erreur
123 if ($msg_str === false) {
124 return $this->KO;
125 }
126
127 // un exchange fait le routage des messages vers les piles
128 $exchange = 'router'.$type;
129 // etablis une connexion avec RabbitMQ instance
130 $conn = new AMQPConnection($this->host, $this->port, $this->user,
131 $this->password, $this->vhost);
132 // obtiens un canal de la connexion
133 $ch = $conn->channel();
134 // si le canal n'est pas disponible retourne une erreur
135 if (is_null($ch)) {
136 logger::instance()->log('Channel de communication n\'a pas pu '.
137 'etre etabli', EXTRA_VERBOSE_MODE);
138 return $this->KO;
139 }
140
141 // declare une pile (la creer s'il faut)
142 $ch->queue_declare($queue, false, true, false, false);
143
144 // declare un exchange qui va diriger les messages
145 $ch->exchange_declare($exchange, 'direct', false, true, false);
146
147 // relier la pile d'ERP au exchange
148 $ch->queue_bind($queue, $exchange);
149
150 // crees un objet de type AMQPMessage qui contient le message
151 $msg = new AMQPMessage($msg_str,
152 array('content_type' => 'text/plain', 'delivery_mode' => 2));
153 // empile le message sur l'exchange
154 $ch->basic_publish($msg, $exchange);
155
156 // ferme le canal
157 $ch->close();
158
159 // ferme la connexion
160 $conn->close();
161
162 // log le message qui etait mis sur la pile dans RabbitMQ
163 logger::instance()->log("Ajout du message sur pile: ".
164 json_encode($this->ret_array), EXTRA_VERBOSE_MODE);
165
166 // retourne succes
167 return $this->OK;
168 }
169
170
171 /**
172 * Sauvegarde l'identifiant du dossier d'instruction.
173 * @param string $id L'identifiant du dossier d'instruction
174 */
175 public function setDossierInstructionIdentifier($id) {
176 $this->dossier_instruction = $id;
177 }
178
179
180 /**
181 * Sauvegarde de l'autorite competente.
182 * @param string $competence L'autorite competente
183 */
184 public function setCompetence($competence) {
185 $this->competence = $competence;
186 if (is_null($this->competence)) {
187 $this->competence = "";
188 }
189 }
190
191
192 /**
193 * Sauvegarde de servitude/contrainte_plu
194 * @param string $competence La contrainte plu
195 */
196 public function setContraintePlu($contrainte_plu) {
197 $this->contrainte_plu = $contrainte_plu;
198 if (is_null($this->contrainte_plu)) {
199 $this->contrainte_plu = "";
200 }
201 }
202
203
204 /**
205 * Sauvegarde l'identifiant du la consultation.
206 * @param string $id L'identifiant de la consultation
207 */
208 public function setConsultationIdentifier($id) {
209 $this->consultation = $id;
210 }
211
212
213 /**
214 * Sauvegarde de la decision (evenement arrete).
215 * @param string $decision La decision sur le dossier.
216 */
217 public function setDecision($decision) {
218 $this->decision = $decision;
219 if (is_null($this->decision)) {
220 $this->decision = "";
221 }
222 }
223
224
225 /**
226 * Sauvegarde de la reference cadastrale
227 * @param string $ref_cad La reference cadastrale
228 */
229 public function setReferenceCadastrale($ref_cad) {
230 $this->reference_cadastrale = $ref_cad;
231 if (is_null($this->reference_cadastrale)) {
232 $this->reference_cadastrale = "";
233 }
234 }
235
236 /**
237 * Sauvegarde l'identifiant du dossier d'instruction.
238 * @param string $id L'identifiant du dossier d'instruction
239 */
240 public function setArreteInfo($ws_DA_In) {
241 $this->ret_array = $ws_DA_In;
242 }
243
244
245 /**
246 * Prepare les donnees pour insertion dans la pile de RabbitMQ
247 * @param string $msg_type Le type de message a envoyer
248 * @param mixed $contenu_keys Les noms des attributs qui doivent
249 * avoir une valeur pour que le message soit envoye
250 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
251 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
252 * retourne -1
253 */
254 private function generic($msg_type, $contenu_keys = null) {
255 // set le type du message
256 $this->ret_array["type"] = $msg_type;
257 // verifie que le dossier d'instruction etait set
258 if (is_null($this->dossier_instruction)) {
259 // manque des donnees obligatoires
260 return $this->BAD_DATA;
261 }
262 // set le date
263 $this->ret_array['date'] = date('d/m/Y H:i');
264 // set le login d'emetteur
265 $this->ret_array['emetteur'] = $_SESSION['login'];
266 // set le identifiant du dossier d'instruction
267 $this->ret_array['dossier_instruction'] = $this->dossier_instruction;
268
269 // si le message doit contenir le clef 'contenu', cree le
270 if (!is_null($contenu_keys)) {
271 $contenu = array();
272 // verifie pour chaque clef qui doit etre present dans le
273 // contenu s'il est set et si oui prends sa valeur
274 foreach ($contenu_keys as $attrib) {
275 // si un clef n'est pas set, on a une erreur, et on
276 // retourne une valeur d'erreur des donnees
277 if (is_null($this->$attrib)) {
278 return $this->BAD_DATA;
279 }
280 // stocke le clef => vleur paire
281 $contenu[$attrib] = $this->$attrib;
282 }
283 // set le contenu
284 $this->ret_array['contenu'] = $contenu;
285 }
286 // stocke le message dans la pile de RabbitMQ designe a ERP
287 return $this->enqueueRequest($this->queueErp, 'Rest');
288 }
289
290
291 /**
292 * Envoi du message "ERP Qualifie".
293 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
294 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
295 * retourne -1
296 */
297 private function erpQualifie() {
298 $contenu_keys = array('competence',
299 'contrainte_plu',
300 'reference_cadastrale');
301 return $this->generic('ERP Qualifié',
302 $contenu_keys);
303 }
304
305
306 /**
307 * Envoi du message "Demande de completude de dossier PC pour un ERP".
308 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
309 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
310 * retourne -1
311 */
312 private function erpDemandeCompletudePc() {
313 return $this->generic('Demande de complétude dossier ERP');
314 }
315
316
317 /**
318 * Envoi du message "Demande de qualification de dossier PC pour un ERP".
319 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
320 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
321 * retourne -1
322 */
323 private function erpDemandeQualificationPc() {
324 return $this->generic('Demande de qualification ERP');
325 }
326
327
328 /**
329 * Envoi du message "Demande d'instruction de dossier PC pour un ERP".
330 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
331 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
332 * retourne -1
333 */
334 private function erpDemandeInstructionPc() {
335 if (is_null($this->consultation)) {
336 return $this->BAD_DATA;
337 }
338 // set l'identifiant de la consultation
339 $this->ret_array['consultation'] = $this->consultation;
340 return $this->generic('Demande d\'avis de dossier PC pour un ERP');
341 }
342
343
344 /**
345 * Envoi du message "Arrete d'un dossier PC effectue".
346 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
347 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
348 * retourne -1
349 */
350 private function erpArretePcEffectue() {
351 return $this->generic('Arrêté PC effectué',
352 array('decision'));
353 }
354
355
356 /**
357 * Envoi du message "Consultation ERP pour conformite".
358 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
359 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
360 * retourne -1
361 */
362 private function erpConsultationConformite() {
363 if (is_null($this->consultation)) {
364 return $this->BAD_DATA;
365 }
366 $this->ret_array['consultation'] = $this->consultation;
367 return $this->generic('Consultation ERP pour conformité');
368 }
369
370
371 /**
372 * Envoi du message "Demande d'ouverture ERP PC".
373 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
374 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
375 * retourne -1
376 */
377 private function erpDemandeOuverturePc() {
378 return $this->generic('Demande d\'ouverture ERP PC');
379 }
380
381
382 /**
383 * Envoi du message "Depot de dossier DAT".
384 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
385 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
386 * retourne -1
387 */
388 private function erpDepotDossierDat() {
389 return $this->generic('Dépôt de dossier DAT');
390 }
391
392
393 /**
394 * Envoi du message "Annulation de la demande".
395 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
396 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
397 * retourne -1
398 */
399 public function erpAnnulationDemande() {
400 return $this->generic('Annulation de la demande');
401 }
402
403
404 /**
405 * Envoi du message "Demande d'ouverture ERP DAT".
406 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
407 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
408 * retourne -1
409 */
410 public function erpDemandeOuvertureDat() {
411 return $this->generic('Demande d\'ouverture ERP DAT');
412 }
413
414
415 /**
416 * Envoi du message "Decision de conformite effectue".
417 * @return En cas de succes on retourne 0. Si les donnees sont mauvaises,
418 * on retourne -2, et s'il y a eu une erreur au niveau de la BD on
419 * retourne -1
420 */
421 public function erpDecisionConformiteEffectue() {
422 return $this->generic('Décision de conformité effectuée');
423 }
424
425 /**
426 * Vérification pour envoi des données au référentiel arrêté
427 **/
428 private function arreteEnvoi() {
429
430 // Vérification des champs obligatoires
431 if($this->ret_array['ws_da_in_signataire'] == "" OR
432 $this->ret_array['ws_da_in_sign_nom'] == "" OR
433 $this->ret_array['ws_da_in_sign_prenom'] == "" OR
434 $this->ret_array['ws_da_in_sign_qualite'] == "" OR
435 $this->ret_array['ws_da_in_dte_redac'] == "" OR
436 //$this->ret_array['ws_da_in_lieu_redac'] == "" OR
437 $this->ret_array['ws_da_in_n_doss_das'] == "" OR
438 //$this->ret_array['ws_da_in_sigle'] == "" OR
439 $this->ret_array['ws_da_in_decision'] == "" ) {
440
441 return $this->BAD_DATA;
442 }
443 // rétablissement de la casse des clés associatives
444 $temp['ws_DA_In_Password'] = $this->passArrete;
445 $temp['ws_DA_In_TS'] = date('j/m/Y/h/m/s');
446 $temp["ws_DA_In_Signataire"] = $this->ret_array[strtolower("ws_DA_In_Signataire")];
447 $temp["ws_DA_In_Sign_Nom"] = $this->ret_array[strtolower("ws_DA_In_Sign_Nom")];
448 $temp["ws_DA_In_Sign_Prenom"] = $this->ret_array[strtolower("ws_DA_In_Sign_Prenom")];
449 $temp["ws_DA_In_Sign_Qualite"] = $this->ret_array[strtolower("ws_DA_In_Sign_Qualite")];
450 $temp["ws_DA_In_Dte_Redac"] = $this->ret_array[strtolower("ws_DA_In_Dte_Redac")];
451 $temp["ws_DA_In_lieu_Redac"] = $this->ret_array[strtolower("ws_DA_In_lieu_Redac")];
452 $temp["ws_DA_In_N_Doss_DAS"] = $this->ret_array[strtolower("ws_DA_In_N_Doss_DAS")];
453 $temp["ws_DA_In_Sigle"] = $this->ret_array[strtolower("ws_DA_In_Sigle")];
454 $temp["ws_DA_In_Decision"] = $this->ret_array[strtolower("ws_DA_In_Decision")];
455 $temp["ws_DA_In_Dte_Depot_Dem"] = $this->ret_array[strtolower("ws_DA_In_Dte_Depot_Dem")];
456 $temp["ws_DA_In_N_Voie"] = $this->ret_array[strtolower("ws_DA_In_N_Voie")];
457 $temp["ws_DA_In_Type_Voie"] = $this->ret_array[strtolower("ws_DA_In_Type_Voie")];
458 $temp["ws_DA_In_Adresse1"] = $this->ret_array[strtolower("ws_DA_In_Adresse1")];
459 $temp["ws_DA_In_Adresse2"] = $this->ret_array[strtolower("ws_DA_In_Adresse2")];
460 $temp["ws_DA_In_CP"] = $this->ret_array[strtolower("ws_DA_In_CP")];
461 $temp["ws_DA_In_Ville"] = $this->ret_array[strtolower("ws_DA_In_Ville")];
462 $temp["ws_DA_In_Nb_Parcelle"] = $this->ret_array[strtolower("ws_DA_In_Nb_Parcelle")] ;
463 $temp["ws_DA_In_Detail_Parcelle"] = $this->ret_array[strtolower("ws_DA_In_Detail_Parcelle")];
464 $temp["ws_DA_In_Nature_Trvx"] = $this->ret_array[strtolower("ws_DA_In_Nature_Trvx")];
465 $temp["ws_DA_In_Destination_Trvx"] = $this->ret_array[strtolower("ws_DA_In_Destination_Trvx")];
466 $temp["ws_DA_In_Type_Dos_Autoris"] = $this->ret_array[strtolower("ws_DA_In_Type_Dos_Autoris")];
467 $temp["ws_DA_In_Nom_Petition"] = $this->ret_array[strtolower("ws_DA_In_Nom_Petition")];
468 $temp["ws_DA_In_Prenom_Petition"] = $this->ret_array[strtolower("ws_DA_In_Prenom_Petition")];
469 $temp["ws_DA_In_Piece_GED"] = $this->ret_array[strtolower("ws_DA_In_Piece_GED")];
470 $temp["ws_DA_In_Dte_Signature"] = $this->ret_array[strtolower("ws_DA_In_Dte_Signature")];
471
472 // Affectation du tableau avec les bonnes clés
473 $this->ret_array = $temp;
474
475 return $this->enqueueRequest($this->queueArrete, 'Soap');
476
477 }
478 }
479
480 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26