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 |
?> |