disableLog(); // Paramétres GET $id = ($f->get_submitted_get_value('id')!==null ? $f->get_submitted_get_value('id') : "" ); $fieldname = ($f->get_submitted_get_value('fieldname')!==null ? $f->get_submitted_get_value('fieldname') : "" ); // Vérifie les paramètres obligatoires if (isset($id) && $id != '' && isset($fieldname) && $fieldname != '') { /** * Récupération des données de sig_elyx * @param string $id Identifiant du dossier * @param object $f instance de la class utils * @return array Tableau de résultat */ function get_sig_elyx($id, $f) { // Requête sql $sqlDonneesSIG = "SELECT * FROM ".DB_PREFIXE."sig_elyx WHERE dossier = '$id'"; $resDonneesSIG = $f->db->query($sqlDonneesSIG); $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesSIG."\")", VERBOSE_MODE); $f->isDatabaseError($resDonneesSIG); $rowDonneesSIG = &$resDonneesSIG->fetchRow(DB_FETCHMODE_ASSOC); // Tableau de résultat retourné return $rowDonneesSIG; } /** * Récupérer la contrainte par le numéro de référence SIG * @param string $numero Identifiant de la contrainte du SIG * @param object $f Instance de la classe Utils * @return array Tableau des résultats */ function getContrainteByNumero($numero, $f) { // Initialisation du résultat $contrainte = ""; // Requête sql $sqlContrainte = "SELECT contrainte FROM ".DB_PREFIXE."contrainte WHERE reference = 't' AND numero = '".$numero."'"; $contrainte = $f->db->getOne($sqlContrainte); $f->addToLog("app/geolocalisation_treatment.php : db->getOne(\"".$sqlContrainte."\")", VERBOSE_MODE); $f->isDatabaseError($contrainte); // Tableau de résultat retourné return $contrainte; } /** * Récupération des contraintes récupérées depuis le SIG liées au dossier * @param string $id Identifiant du dossier d'instruction * @param object $f Instance de la classe Utils * @return array Tableau des résultats */ function getDossierContrainteSIG($id, $f) { // Initialisation du tableau des résultats $listeDossierContrainteSIG = array(); // Requête SQL $sqlDossierContrainte = "SELECT dossier_contrainte FROM ".DB_PREFIXE."dossier_contrainte WHERE dossier = '$id' AND reference IS TRUE"; $resDossierContrainte = $f->db->query($sqlDossierContrainte); $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDossierContrainte."\")", VERBOSE_MODE); $f->isDatabaseError($resDossierContrainte); // Pour chaque résultat while ($rowDossierContrainte = &$resDossierContrainte->fetchRow(DB_FETCHMODE_ASSOC)) { // Ajoute l'identifiant du lien dans le tableau des résultats $listeDossierContrainteSIG[] = $rowDossierContrainte['dossier_contrainte']; } // Tableau de résultat retourné return $listeDossierContrainteSIG; } // Récupération des données de sig_elyx $rowDonneesSIG = get_sig_elyx($id, $f); // Récupération des données du dossier d'autorisation $sqlDonneesDI = "SELECT * FROM ".DB_PREFIXE."dossier WHERE dossier = '$id'"; $resDonneesDI = $f->db->query($sqlDonneesDI); $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesDI."\")", VERBOSE_MODE); $f->isDatabaseError($resDonneesDI); $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC); // Si l'enregistrement n'existe pas dans la table sig_elyx if (count($rowDonneesSIG) == 0) { // Création de l'enregistrement $sig_elyx = new sig_elyx(']', $f->db, DEBUG); // Création d'un tableau avec la liste des champs de sig_elyx foreach($sig_elyx->champs as $champ) { $valF[$champ] = NULL; } $valF['dossier'] = $id; $valF['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales']; // Si l'ajout à réussi if ($sig_elyx->ajouter($valF, $f->db, DEBUG)) { // On récupére les données de l'enregistrement $rowDonneesSIG = get_sig_elyx($id, $f); } } // Si les deux champs sont différent $diff_parcelle = false; if (isset($rowDonneesSIG["terrain_references_cadastrales_archive"]) && $rowDonneesSIG["terrain_references_cadastrales_archive"] != $rowDonneesDI["terrain_references_cadastrales"]) { $diff_parcelle = true; } // Formatage des parcelles pour l'envoi au webservice $liste_parcelles = $f->parseParcelles($rowDonneesSIG['terrain_references_cadastrales_archive']); if ($diff_parcelle == true && $fieldname == 'verif_parcelle') { $liste_parcelles = $f->parseParcelles($rowDonneesDI['terrain_references_cadastrales']); } $wParcelle = $f->formatParcelleToSend($liste_parcelles); // Crée une chaîne de parcelle séparée par des ";" $stringParcelles = implode(';', $wParcelle); // Configuration du soap $conf = $f->config['sig_elyx']; // Instance de la classe permettant d'envoyer des requête SOAP $soap = new MessageSenderSoap($conf['wsdl'], $conf['login'], $conf['password']); // Instance de sig_elyx $sig_elyx = new sig_elyx($rowDonneesSIG['sig_elyx'], $f->db, DEBUG); // Instance de dossier $dossier = new dossier($id, $f->db, DEBUG); // Initialisation des variables $message = ""; $message_diff_parcelle = _("Les parcelles ont ete modifiees."); $listeDossierContrainteSIGAfter = array(); $execute = array(); // Si les références cadastrales sont à changer dans sig_elyx $flag_ref_cadastrales = false; // Fait appele aux différents webservices selon le bouton cliqué switch ($fieldname) { // case 'verif_parcelle': // Données à envoyer au wsdl $data = array( "wParcelle" => $stringParcelles, ); // Exécute le webservices $execute = $soap->execute('getExistParcelle', $data); break; // case 'calcul_emprise': // Données à envoyer au wsdl $data = array( "wParcelle" => $stringParcelles, "wId" => $id, ); // Exécute le webservices $execute = $soap->execute('getCalculEmprise', $data); break; // case 'dessin_emprise': // Permet de récupérer la première parcelle $parcelle = $wParcelle[0]; // Construit le lien $execute['return'] = "http://".$f->collectivite['sig_web_server'] ."?disabledAttributes=NUMERO_DE_DOSSIER&createObject=" .$f->collectivite['sig_couche_emprise_dossier'] ."&attributeValues.NUMERO_DE_DOSSIER=".$id."&KEY=" .$f->collectivite['sig_couche_affichage_parcelle']."*/" .$parcelle."&SELECT=false"; break; // case 'calcul_centroide': // Données à envoyer au wsdl $data = array( "wId" => $id, ); // Exécute le webservice $execute = $soap->execute('getCentroideDossier', $data); break; // case 'recup_contrainte': // Données à envoyer au wsdl $data = array( "wType" => "1", "wId" => $id, ); // Exécute le webservice $execute = $soap->execute('getContrainteNRU', $data); break; } // Si le code HTTP retour est un '200' // ou que le bouton cliqué est 'dessiner l'emprise' if ($soap->getResponseCode() == '200' || $fieldname == 'dessin_emprise') { // Met l'état à vrai $etat = 't'; // Traitement selon le bouton cliqué switch ($fieldname) { // case 'verif_parcelle': // Traitement du message $message = _("Les parcelles existent."); // Initialise le tableau qui contiendra les parcelles qui // n'existent pas $list_error_parcelle = array(); // Vérifie l'existence des parcelles foreach ($execute['return'] as $key => $ret) { // Si c'est un tableau if (is_array($execute['return'][$key])) { // if ($ret['existe'] != '0') { $list_error_parcelle[] = $ret['id']; } } elseif ($key == 'existe' && $execute['return'][$key] == '1') { $list_error_parcelle[] = $execute['return']['id']; } } // Si des parcelles n'existent pas alors ont les affichent // à l'utilisateur if (count($list_error_parcelle) != 0) { // $etat = 'f'; // $string_error_parcelle = implode(", ", $list_error_parcelle); // $message = _("Les parcelles n'existent pas."); } else { // Sinon ont met à jour le champ // terrain_references_cadastrales_archive dans la table // sig_elyx $flag_ref_cadastrales = true; } break; // case 'calcul_emprise': // Traitement du message $message = _("L'emprise a ete calculee."); break; // case 'dessin_emprise': // Traitement du message $message = _("Redirige vers ElyxWeb."); break; // case 'calcul_centroide': // Récupération du code de référentiel sig if($f->getParameter("sig_referentiel") == "" OR $f->getParameter("sig_referentiel") == NULL) { $etat = 'f'; $message = _("Erreur de configuration. Contactez votre administrateur."); } else { $coord = $execute['return']['coordX']." ".$execute['return']['coordY']; // Traitement du message $message = _("Le centroide a ete calcule")." : ". $execute['return']['coordX'].", ". $execute['return']['coordY']."."; // Met à jour le centroide dans le dossier $res = $f->db->query("UPDATE ".DB_PREFIXE."dossier ". "SET geom = public.ST_GeomFromText('POINT(".$coord.")',". $f->getParameter("sig_referentiel").") ". "WHERE dossier = '".$id."'"); $f->addToLog("app/geolocalisation_treatment.php: db->query(\"UPDATE ". DB_PREFIXE."dossier SET geom = public.ST_GeomFromText('POINT(". $coord.")',".$f->getParameter("sig_referentiel").") WHERE dossier = '".$id."'", VERBOSE_MODE); $f->isDatabaseError($res); } break; // case 'recup_contrainte': // Traitement du message $message = _("Les contraintes ont ete recuperees."); // Initialisation des variables de comparaison $synchro = true; $ajouter = true; $supprimer = true; // Récupère toutes les contraintes du dossier avant traitement $listeDossierContrainteSIG = getDossierContrainteSIG($id, $f); // Pour chaque contrainte; foreach ($execute['return'] as $key => $value) { // Vérifie que la contrainte est dans l'application $contrainte = getContrainteByNumero($value['idContrainte'], $f); // Si la contrainte est vide if ($contrainte == "") { // Nécessite une synchronisation $synchro = false; } // S'il y a une contrainte if ($contrainte != "") { // Instancie la classe dossier_contrainte require_once "../obj/dossier_contrainte.class.php"; $dossier_contrainte_add = new dossier_contrainte("]", $f->db, DEBUG); // Définit les valeurs $val = array( 'dossier_contrainte' => ']', 'dossier' => $id, 'contrainte' => $contrainte, 'texte_complete' => $value['libelle'], 'reference' => true, ); // Ajoute l'enregistrement $ajouter = $dossier_contrainte_add->ajouter($val, $f->db, DEBUG); } } // S'il n'y a aucune erreurs if ($ajouter == true && $synchro == true) { // Si la liste des contraintes n'est pas vide if (count($listeDossierContrainteSIG) > 0) { // Pour chaque contrainte foreach ($listeDossierContrainteSIG as $dossier_contrainte_id) { // Instancie la classe dossier_contrainte require_once "../obj/dossier_contrainte.class.php"; $dossier_contrainte_del = new dossier_contrainte($dossier_contrainte_id, $f->db, DEBUG); // Valeurs de l'enregistrement $value = array(); foreach($dossier_contrainte_del->champs as $key => $champ) { // Terme à chercher $search_field = 'contrainte_'; // Si dans le champ le terme est trouvé if (strpos($champ, $search_field) !== false) { // Supprime le champ unset($dossier_contrainte_del->champs[$key]); } else { // Récupère la valeur du champ $value[$champ] = $dossier_contrainte_del->val[$key]; } } // Supprime l'enregistrement $supprimer = $dossier_contrainte_del->supprimer($value, $f->db, DEBUG); } } } // Si les contraintes ne sont pas synchronisées if ($synchro == false) { // Traitement du message $message = _("Les contraintes doivent etre synchronisees."); // État à false $etat = 'f'; } // if ($ajouter == false && $synchro == true) { // Traitement du message $message = _("Les contraintes n'ont pas ete ajoutees au dossier."); // État à false $etat = 'f'; } // Si les contraintes ne sont pas synchronisées if ($supprimer == false && $ajouter == true && $synchro == true) { // Traitement du message $message = _("Les anciennes contraintes n'ont pas ete supprimees."); // État à false $etat = 'f'; } // S'il il y a une erreur if ($synchro == false || $ajouter == false || $supprimer == false) { // Ajoute au message d'erreur $message .= " "._("Contactez votre administrateur."); } // Récupère toutes les contraintes du dossier après traitement $listeDossierContrainteSIGAfter = getDossierContrainteSIG($id, $f); break; } } // Si une erreur interne est retournée if ($execute == -1) { // Met l'état à false $etat = 'f'; // Traitement du message d'erreur $message = _("Une erreur s'est produite. Veuillez verifier les etapes precedentes ou contacter votre administrateur."); // log le message d'erreur retourné par le webservice $f->addToLog("app/geolocalisation_treatment.php: Traitement webservice SIG: id dossier = ".$id.": ".$soap->getErrorMessage(), DEBUG_MODE); // Redéfinit la variable utilisée pour le retour unset($execute); $execute= array(); } // Format de la date pour l'affichage $date = date('d/m/Y H:i:s'); // Format de la date pour la BDD $date_db = $f->formatTimestamp($date, false); // Valeur à modifier dans sig_elyx $valueSIG = array(); foreach($sig_elyx->champs as $key => $champ) { // $valueSIG[$champ] = $sig_elyx->val[$key]; // Pour les champs de type timestamp étant vide, il faut renvoyer NULL $champ_split = explode("_", $champ); if ($champ_split[0] == "date" && $valueSIG[$champ] == '') { $valueSIG[$champ] = null; } } $valueSIG['date_'.$fieldname] = $date_db; $valueSIG['etat_'.$fieldname] = $etat; $valueSIG['message_'.$fieldname] = $message; // Si les références cadastrales ont été modifiées et vérifier if ($flag_ref_cadastrales === true) { // On met à jour le champ de la table sig_elyx $valueSIG['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales']; } // Si les champs contenant la référence cadastrale dans le DI // et dans la table sig_elyx sont différent if ($flag_ref_cadastrales === true && $diff_parcelle === true) { // Met à jour le message des autres boutons $valueSIG['message_calcul_emprise'] = $message_diff_parcelle; $valueSIG['message_calcul_centroide'] = $message_diff_parcelle; $valueSIG['message_recup_contrainte'] = $message_diff_parcelle; // Met à jour l'état des autres boutons $valueSIG['etat_calcul_emprise'] = 'f'; $valueSIG['etat_calcul_centroide'] = 'f'; $valueSIG['etat_recup_contrainte'] = 'f'; // Met à jour la date de traitement des autres boutons $valueSIG['date_calcul_emprise'] = $date_db; $valueSIG['date_calcul_centroide'] = $date_db; $valueSIG['date_recup_contrainte'] = $date_db; // Message à affiché à l'utilisateur $message_diff_parcelle = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message_diff_parcelle; } // Modification de l'enregistrement $sig_elyx->modifier($valueSIG, $f->db, DEBUG); // Message affiché à l'utilisateur $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message; // Tableau à retourner $return = $execute; // Ajoute les informations sur les traitements dans le tableau retourné $return['log'] = array( "date"=> $date, "etat"=> $etat, "message"=> $message, "message_diff_parcelle"=> $message_diff_parcelle ); // Ajoute les informations concernant les contraintes récupérées $return['dossier_contrainte'] = array( "nb_contrainte_sig" => count($listeDossierContrainteSIGAfter), "msg_contrainte_sig_empty" => _("Aucune contraintes ajoutees depuis l'application"), "msg_contrainte_sig" => _("contrainte(s) ajoutee(s) depuis le SIG"), ); // Retourne le résultat dans un tableau json echo json_encode($return); } ?>