237 |
"view" => "view_generate_bordereau_envoi_maire", |
"view" => "view_generate_bordereau_envoi_maire", |
238 |
"permission_suffix" => "bordereau_envoi_maire", |
"permission_suffix" => "bordereau_envoi_maire", |
239 |
); |
); |
240 |
|
|
241 |
|
// ACTION - 210 - notifier_commune |
242 |
|
// Notifie la commune par mail d'un évément d'instruction finalisé |
243 |
|
$this->class_actions[210] = array( |
244 |
|
"identifier" => "notifier_commune", |
245 |
|
"portlet" => array( |
246 |
|
"type" => "action-direct-with-confirmation", |
247 |
|
"libelle" => _("Notifier la commune par courriel"), |
248 |
|
"order" => 210, |
249 |
|
"class" => "notifier_commune-16", |
250 |
|
), |
251 |
|
"view" => "formulaire", |
252 |
|
"method" => "notifier_commune", |
253 |
|
"permission_suffix" => "notifier_commune", |
254 |
|
"condition" => "is_notifiable", |
255 |
|
); |
256 |
} |
} |
257 |
|
|
258 |
/** |
/** |
511 |
$form->setType("date_retour_controle_legalite", "hiddendate"); |
$form->setType("date_retour_controle_legalite", "hiddendate"); |
512 |
} |
} |
513 |
|
|
514 |
// Pour les actions finalize et unfinalize |
// Pour les actions finalize, unfinalize et notifier_commune |
515 |
if($maj == 100 || $maj == 110) { |
if($maj == 100 || $maj == 110 || $maj == 210) { |
516 |
// |
// |
517 |
foreach ($this->champs as $value) { |
foreach ($this->champs as $value) { |
518 |
// Cache tous les champs |
// Cache tous les champs |
1591 |
$this->correct = false; |
$this->correct = false; |
1592 |
return false; |
return false; |
1593 |
} |
} |
1594 |
return $this->add_log_to_dossier('ajouter', $id, $val); |
return $this->add_log_to_dossier($id, array_merge($val, $this->valF)); |
1595 |
} |
} |
1596 |
|
|
1597 |
function triggermodifierapres($id,&$db,$val,$DEBUG) { |
function triggermodifierapres($id,&$db,$val,$DEBUG) { |
1679 |
if (database::isError($res)) { |
if (database::isError($res)) { |
1680 |
die($res->getMessage()); |
die($res->getMessage()); |
1681 |
} |
} |
1682 |
|
$current_id = $this->getVal($this->clePrimaire); |
1683 |
while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
1684 |
// Si la date de retour signature est éditée on vérifie si il existe un événement automatique |
// Si la date de retour signature est éditée on vérifie si il existe un événement automatique |
1685 |
if ($this->getVal('date_retour_signature') == "" AND |
if ($this->getVal('date_retour_signature') == "" AND |
1701 |
$valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']); |
$valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']); |
1702 |
$valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']); |
$valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']); |
1703 |
$valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']); |
$valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']); |
1704 |
|
$new_instruction->setParameter("maj", 0); |
1705 |
|
$new_instruction->class_actions[0]["identifier"] = |
1706 |
|
"retour signature de l'instruction $current_id"; |
1707 |
$retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG); |
$retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG); |
1708 |
|
|
1709 |
//Si une erreur s'est produite et qu'il s'agit d'un problème |
//Si une erreur s'est produite et qu'il s'agit d'un problème |
1743 |
$valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']); |
$valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']); |
1744 |
$valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']); |
$valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']); |
1745 |
$valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']); |
$valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']); |
1746 |
$new_instruction->setParameter("maj", $this->getParameter("maj")); |
$new_instruction->setParameter("maj", 0); |
1747 |
|
$new_instruction->class_actions[0]["identifier"] = |
1748 |
|
"retour RAR de l'instruction $current_id"; |
1749 |
$retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG); |
$retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG); |
1750 |
|
|
1751 |
//Si une erreur s'est produite et qu'il s'agit d'un problème |
//Si une erreur s'est produite et qu'il s'agit d'un problème |
1893 |
$this->correct = false; |
$this->correct = false; |
1894 |
return false; |
return false; |
1895 |
} |
} |
1896 |
return $this->add_log_to_dossier('modifier', $id, $val); |
return $this->add_log_to_dossier($id, $val); |
1897 |
} |
} |
1898 |
|
|
1899 |
function triggersupprimer($id,&$db,$val,$DEBUG) { |
function triggersupprimer($id,&$db,$val,$DEBUG) { |
2029 |
$this->correct = false; |
$this->correct = false; |
2030 |
return false; |
return false; |
2031 |
} |
} |
2032 |
return $this->add_log_to_dossier('supprimer', $id, $val); |
$val['evenement'] = $this->getVal('evenement'); |
2033 |
|
return $this->add_log_to_dossier($id, $val); |
2034 |
} |
} |
2035 |
|
|
2036 |
/** |
/** |
2333 |
|
|
2334 |
// Verification de la validite des donnees |
// Verification de la validite des donnees |
2335 |
$this->verifier($this->val, $this->db, DEBUG); |
$this->verifier($this->val, $this->db, DEBUG); |
|
// Verification du verrou |
|
|
$this->testverrou(); |
|
2336 |
// Si les verifications precedentes sont correctes, on procede a |
// Si les verifications precedentes sont correctes, on procede a |
2337 |
// la modification, sinon on ne fait rien et on retourne une erreur |
// la modification, sinon on ne fait rien et on retourne une erreur |
2338 |
if ($this->correct) { |
if ($this->correct) { |
2385 |
$message .= "[ ".$this->db->affectedRows()." "; |
$message .= "[ ".$this->db->affectedRows()." "; |
2386 |
$message .= _("enregistrement(s) mis a jour")." ]"; |
$message .= _("enregistrement(s) mis a jour")." ]"; |
2387 |
$this->addToLog($message, VERBOSE_MODE); |
$this->addToLog($message, VERBOSE_MODE); |
|
// Mise en place du verrou pour ne pas finaliser plusieurs fois |
|
|
// le meme document |
|
|
$this->verrouille(); |
|
2388 |
// Execution du trigger 'after' specifique au MODE 'update' |
// Execution du trigger 'after' specifique au MODE 'update' |
2389 |
//$this->triggermodifierapres($id, $this->db, $val, DEBUG); |
//$this->triggermodifierapres($id, $this->db, $val, DEBUG); |
2390 |
|
|
2396 |
$this->msg = ""; |
$this->msg = ""; |
2397 |
$this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat)); |
$this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat)); |
2398 |
|
|
2399 |
return true; |
return $this->add_log_to_dossier($id, $val); |
2400 |
} |
} |
2401 |
} else { |
} else { |
2402 |
// Message d'echec (saut d'une ligne supplementaire avant le |
// Message d'echec (saut d'une ligne supplementaire avant le |
3885 |
// correspondant au code barres |
// correspondant au code barres |
3886 |
if($instr->getVal("om_final_instruction") === 't') { |
if($instr->getVal("om_final_instruction") === 't') { |
3887 |
$instr->setParameter('maj', 1); |
$instr->setParameter('maj', 1); |
3888 |
|
$instr->class_actions[1]["identifier"] = |
3889 |
|
"envoi lettre RAR (depuis le menu suivi des pièces)"; |
3890 |
if ($instr->modifier($valF, $f->db, DEBUG) == true) { |
if ($instr->modifier($valF, $f->db, DEBUG) == true) { |
3891 |
$id4Gen[] = $code_barres; |
$id4Gen[] = $code_barres; |
3892 |
$nbLettres ++; |
$nbLettres ++; |
4099 |
|
|
4100 |
//On modifie les valeurs de l'instruction |
//On modifie les valeurs de l'instruction |
4101 |
$instr->setParameter('maj', 170); |
$instr->setParameter('maj', 170); |
4102 |
|
$instr->class_actions[170]["identifier"] = |
4103 |
|
"mise à jour des dates (depuis le menu suivi des pièces)"; |
4104 |
$retour = $instr->modifier($valF, $f->db, DEBUG); |
$retour = $instr->modifier($valF, $f->db, DEBUG); |
4105 |
|
|
4106 |
//Si une erreur s'est produite, on défait les modifications |
//Si une erreur s'est produite, on défait les modifications |
4750 |
return $this->get_inst_common("dossier", $dossier); |
return $this->get_inst_common("dossier", $dossier); |
4751 |
} |
} |
4752 |
|
|
4753 |
|
|
4754 |
/** |
/** |
4755 |
* Logue l'action de l'instruction dans son DI |
* Logue l'action de l'instruction dans son DI. |
4756 |
* @param string $action ajouter/modifer/supprimer |
* |
4757 |
* @param string $id clé primaire de l'instruction |
* @param string $id Clé primaire de l'instruction. |
4758 |
* @param array $val valeurs de l'instruction |
* @param array $val Valeurs de l'instruction. |
4759 |
* @return bool vrai si traitement effectué avec succès |
* |
4760 |
|
* @return bool Vrai si traitement effectué avec succès |
4761 |
*/ |
*/ |
4762 |
private function add_log_to_dossier($action, $id, $val) { |
private function add_log_to_dossier($id, array $val) { |
4763 |
|
$maj = $this->getParameter("maj"); |
4764 |
|
// Action = Trace par défaut |
4765 |
|
$action = $this->get_backtrace(); |
4766 |
|
// Action = Identifant de l'action si contexte connu |
4767 |
|
if (empty($maj) === false |
4768 |
|
|| (empty($maj) === true && $maj === 0)) { |
4769 |
|
$action = $this->get_action_param($maj, 'identifier'); |
4770 |
|
if ($action === 'modifier_suivi') { |
4771 |
|
$action = "modifier (via l'action suivi des dates)"; |
4772 |
|
} |
4773 |
|
if ($action === 'notifier_commune' |
4774 |
|
&& isset($val['mails_destinataires']) === true) { |
4775 |
|
$action = "notification de la commune (courriels : "; |
4776 |
|
$action .= $val['mails_destinataires'].")"; |
4777 |
|
} |
4778 |
|
} |
4779 |
// Création du log |
// Création du log |
4780 |
$log = array( |
$log = array( |
4781 |
'date' => date('Y-m-d H:i:s'), |
'date' => date('Y-m-d H:i:s'), |
4787 |
'date_retour_signature' => $this->dateDB($val['date_retour_signature']), |
'date_retour_signature' => $this->dateDB($val['date_retour_signature']), |
4788 |
'evenement' => $val['evenement'], |
'evenement' => $val['evenement'], |
4789 |
'action' => $val['action'], |
'action' => $val['action'], |
4790 |
'instruction' => $id , |
'instruction' => $id, |
4791 |
'etat' => $val['etat'], |
'etat' => $val['etat'], |
4792 |
), |
), |
4793 |
); |
); |
4794 |
// Ajout du log |
// Ajout du log |
4795 |
$di = $this->get_inst_common("dossier", $val['dossier']); |
$di = $this->get_inst_dossier($val['dossier']); |
4796 |
$ret = $di->add_log_instructions($log); |
$ret = $di->add_log_instructions($log); |
4797 |
if ($ret === false) { |
if ($ret === false) { |
4798 |
$this->correct = false; |
$this->correct = false; |
4801 |
} |
} |
4802 |
return $ret; |
return $ret; |
4803 |
} |
} |
4804 |
|
|
4805 |
|
|
4806 |
|
/** |
4807 |
|
* Retourne le contexte de déboguage formaté en HTML. |
4808 |
|
* |
4809 |
|
* @return string Une ligne par trace |
4810 |
|
*/ |
4811 |
|
private function get_backtrace() { |
4812 |
|
$trace = debug_backtrace(); |
4813 |
|
$backtrace = ''; |
4814 |
|
$i = 1; |
4815 |
|
foreach ($trace as $key => $value) { |
4816 |
|
$func = $trace[$key]['function']; |
4817 |
|
// On ne s'autolog pas |
4818 |
|
if ($func === 'get_backtrace' |
4819 |
|
|| $func === 'add_log_to_dossier') { |
4820 |
|
continue; |
4821 |
|
} |
4822 |
|
$backtrace .= $i.') '; |
4823 |
|
// Si dans une classe |
4824 |
|
if (isset($trace[$key]['class']) === true |
4825 |
|
&& empty($trace[$key]['class']) === false) { |
4826 |
|
$backtrace .= $trace[$key]['class'].'->'.$func; |
4827 |
|
} |
4828 |
|
// Si procédural |
4829 |
|
else { |
4830 |
|
$file = $trace[$key]['file']; |
4831 |
|
$line = $trace[$key]['line']; |
4832 |
|
$truncated_file = $this->f->get_relative_path($file); |
4833 |
|
if ($truncated_file !== false) { |
4834 |
|
$file = $truncated_file; |
4835 |
|
} |
4836 |
|
$backtrace .= $func.' IN<br/> '.$file.':'.$line; |
4837 |
|
} |
4838 |
|
$backtrace .= '<br/>'; |
4839 |
|
$i++; |
4840 |
|
} |
4841 |
|
return $backtrace; |
4842 |
|
} |
4843 |
|
|
4844 |
|
/** |
4845 |
|
* CONDITION - is_notifiable. |
4846 |
|
* |
4847 |
|
* Condition pour afficher l'action notifier_commune. |
4848 |
|
* |
4849 |
|
* @return boolean |
4850 |
|
*/ |
4851 |
|
public function is_notifiable() { |
4852 |
|
// L'instruction doit être finalisée, ce qui revient à dire |
4853 |
|
// définalisable sans bypass |
4854 |
|
if ($this->is_unfinalizable_without_bypass() === false) { |
4855 |
|
return false; |
4856 |
|
} |
4857 |
|
// La collectivité de l'utilisateur doit être de niveau multi |
4858 |
|
if ($this->f->has_collectivite_multi() === false) { |
4859 |
|
return false; |
4860 |
|
} |
4861 |
|
// Le paramètre multi de l'objet du courriel doit exister |
4862 |
|
if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) { |
4863 |
|
return false; |
4864 |
|
} |
4865 |
|
// Le paramètre multi du modèle du courriel doit exister |
4866 |
|
if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) { |
4867 |
|
return false; |
4868 |
|
} |
4869 |
|
// A ce stade toutes les conditions sont satisfaites |
4870 |
|
return true; |
4871 |
|
} |
4872 |
|
|
4873 |
|
/** |
4874 |
|
* TREATMENT - notifier_commune. |
4875 |
|
* |
4876 |
|
* Notifie aux communes et par courriel la finalisation d'une instruction. |
4877 |
|
* |
4878 |
|
* @return boolean |
4879 |
|
*/ |
4880 |
|
public function notifier_commune() { |
4881 |
|
// Cette méthode permet d'exécuter une routine en début des méthodes |
4882 |
|
// dites de TREATMENT. |
4883 |
|
$this->begin_treatment(__METHOD__); |
4884 |
|
// Définition des paramètres |
4885 |
|
$p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction'; |
4886 |
|
$p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction'; |
4887 |
|
$p_courriel = 'param_courriel_de_notification_commune'; |
4888 |
|
// Définition des variables de substitution |
4889 |
|
$id_di = $this->getVal('dossier'); |
4890 |
|
$id_inst = $this->getVal($this->clePrimaire); |
4891 |
|
// Instanciation du DI |
4892 |
|
$di = $this->get_inst_dossier($id_di); |
4893 |
|
// Récupération du paramétrage de la collectivité du dossier |
4894 |
|
$collectivite_di = $di->getVal('om_collectivite'); |
4895 |
|
$params_mono = $this->f->getCollectivite($collectivite_di); |
4896 |
|
// Récupération du paramétrage de la collectivité multi |
4897 |
|
$collectivite_multi = $this->f->get_idx_collectivite_multi(); |
4898 |
|
$params_multi = $this->f->getCollectivite($collectivite_multi); |
4899 |
|
// Vérification de l'objet (obligatoirement multi) |
4900 |
|
$objet = null; |
4901 |
|
if (isset($params_multi[$p_objet]) === true |
4902 |
|
&& $params_multi[$p_objet] !== '') { |
4903 |
|
$objet = $params_multi[$p_objet]; |
4904 |
|
} |
4905 |
|
// Vérification du modèle mono en priorité |
4906 |
|
$modele = null; |
4907 |
|
if (isset($params_mono[$p_modele]) === true |
4908 |
|
&& $params_mono[$p_modele] !== '') { |
4909 |
|
$modele = $params_mono[$p_modele]; |
4910 |
|
|
4911 |
|
} |
4912 |
|
// Sinon vérification du modèle multi |
4913 |
|
if ($modele === null |
4914 |
|
&& isset($params_multi[$p_modele]) === true |
4915 |
|
&& $params_multi[$p_modele] !== '') { |
4916 |
|
$modele = $params_multi[$p_modele]; |
4917 |
|
} |
4918 |
|
// Vérification des adresses de courriel mono |
4919 |
|
$courriels_valides = array(); |
4920 |
|
$courriels_invalides = array(); |
4921 |
|
if (isset($params_mono[$p_courriel]) === true |
4922 |
|
&& $params_mono[$p_courriel] !== '') { |
4923 |
|
// Un mail par ligne |
4924 |
|
$adresses = explode("\n", $params_mono[$p_courriel]); |
4925 |
|
// Vérification de la validité de chaque mail avec preg_match |
4926 |
|
foreach ($adresses as $adresse) { |
4927 |
|
$adresse = trim($adresse); |
4928 |
|
if ($this->f->checkValidEmailAddress($adresse) === 1) { |
4929 |
|
$courriels_valides[] = $adresse; |
4930 |
|
} else { |
4931 |
|
$courriels_invalides[] = $adresse; |
4932 |
|
} |
4933 |
|
} |
4934 |
|
} |
4935 |
|
// Vérification du paramétrage global : |
4936 |
|
// on stoppe le traitement si au moins un paramètre est incorrect |
4937 |
|
if ($objet === null |
4938 |
|
|| $modele === null |
4939 |
|
|| count($courriels_valides) === 0 |
4940 |
|
|| count($courriels_invalides) > 0) { |
4941 |
|
// On construit le message d'erreur adéquat |
4942 |
|
$this->addToMessage(_('Erreur de paramétrage :')); |
4943 |
|
if ($objet === null) { |
4944 |
|
$this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide")); |
4945 |
|
} |
4946 |
|
if ($modele === null) { |
4947 |
|
$this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide")); |
4948 |
|
} |
4949 |
|
if (count($courriels_valides) === 0) { |
4950 |
|
$this->addToMessage(_("* aucun courriel valide de destinataire de la commune")); |
4951 |
|
} |
4952 |
|
if (count($courriels_invalides) > 0) { |
4953 |
|
$courriels_invalides = implode(', ', $courriels_invalides); |
4954 |
|
$this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides); |
4955 |
|
} |
4956 |
|
$this->addToMessage(_("Veuillez contacter votre administrateur.")); |
4957 |
|
return $this->end_treatment(__METHOD__, false); |
4958 |
|
} |
4959 |
|
// Remplacement des variables de substitution |
4960 |
|
$objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet); |
4961 |
|
$modele = $this->formater_modele($modele, $id_di, $id_inst); |
4962 |
|
// Exécution du traitement d'envoi du/des mail(s) |
4963 |
|
$fails = array(); |
4964 |
|
foreach ($courriels_valides as $email) { |
4965 |
|
if ($this->f->sendMail( |
4966 |
|
iconv("UTF-8", "CP1252", $objet), |
4967 |
|
iconv("UTF-8", "CP1252", $modele), |
4968 |
|
iconv("UTF-8", "CP1252", $email)) === false) { |
4969 |
|
$fails[] = $email; |
4970 |
|
} |
4971 |
|
} |
4972 |
|
// Si échec message d'erreur et arrêt du traitement |
4973 |
|
if (count($fails) > 0) { |
4974 |
|
$fails = implode(', ', $fails); |
4975 |
|
$this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails); |
4976 |
|
$this->addToMessage(_("Veuillez contacter votre administrateur.")); |
4977 |
|
return $this->end_treatment(__METHOD__, false); |
4978 |
|
} |
4979 |
|
// Ajout du log |
4980 |
|
$this->setValFFromVal(); |
4981 |
|
$val_inst = $this->valF; |
4982 |
|
$val_inst['mails_destinataires'] = implode(', ', $courriels_valides); |
4983 |
|
if ($this->add_log_to_dossier($id_inst, $val_inst) === false) { |
4984 |
|
$this->addToMessage(_("Erreur lors de la notification.")); |
4985 |
|
$this->addToMessage(_("Veuillez contacter votre administrateur.")); |
4986 |
|
return $this->end_treatment(__METHOD__, false); |
4987 |
|
} |
4988 |
|
// Message de validation |
4989 |
|
$this->addToMessage(_('La commune a été notifiée.')); |
4990 |
|
return $this->end_treatment(__METHOD__, true); |
4991 |
|
} |
4992 |
|
|
4993 |
|
/** |
4994 |
|
* Formatte le corps du courriel notifié aux communes |
4995 |
|
* |
4996 |
|
* @param string $modele template du modèle du courriel |
4997 |
|
* @param string $id_di clé primaire du DI |
4998 |
|
* @param string $id_inst clé primaire de l'instruction |
4999 |
|
* @return string corps du mail au format HTML |
5000 |
|
*/ |
5001 |
|
public function formater_modele($modele, $id_di, $id_inst) { |
5002 |
|
// Création du lien d'accès direct à l'instruction |
5003 |
|
$url_inst = PATH_BASE_URL.'spg/direct_link.php?obj=dossier_instruction&action=3'. |
5004 |
|
'&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst; |
5005 |
|
$url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>'; |
5006 |
|
// Remplacement des champs de fusion |
5007 |
|
$modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele); |
5008 |
|
$modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele); |
5009 |
|
$modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele); |
5010 |
|
// Encodage HTML des sauts de ligne |
5011 |
|
$modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele); |
5012 |
|
// |
5013 |
|
return $modele; |
5014 |
|
} |
5015 |
}// fin classe |
}// fin classe |
5016 |
|
|
5017 |
?> |
?> |