Rev 665 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/**David Delon Cecill / GPL 2008*/// in : utf8// out : utf8/** InventoryObservationList.php** Cas d'utilisation :* Service recherche d'Observations a partir de divers crit�res** 2: Le service recherche l'Observation correspondant au crit�res demand�* 3: Le service renvoie l'adresse de base de l'Observation qui permet de la localiser sous ses diff�rents formats (X, M ou L)*/Class InventoryObservationList extends DBAccessor {var $config;function InventoryObservationList($config) {$this->config=$config;}// renvoie l'enregistrement correspond a une Observationfunction getElement($uid){// uid[0] : utilisateur obligatoire// uid[1] : criteres de filtrage de la forme critere1:valeur1;critere2:valeur2// Controle detournement utilisateursession_start();$this->controleUtilisateur($uid[0]);$DB=$this->connectDB($this->config,'database_cel');$criteres = array() ;if(isset($uid[1])){$criteres = explode("&", $uid[1]) ;}//$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, date_observation," .//" lieudit, station, milieu, commentaire, transmission FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND " ;$query="SELECT nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, ordre, date_observation, lieudit," ."station, milieu, commentaire, transmission, id_location, coord_x, coord_y, mots_cles FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND " ;$numero_page = 0 ;$limite = 30 ; // limite par defautforeach($criteres as $pair) {$nom_valeur = explode("=",$pair) ;if(sizeof($nom_valeur) != 0) {if($nom_valeur[0] == 'limite'){$limite = $DB->escapeSimple($nom_valeur[1]) ;}elseif($nom_valeur[0] == 'numero_page') {$numero_page = $DB->escapeSimple($nom_valeur[1]) ;}elseif($nom_valeur[0] == 'annee') {$query .= "year(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ;$query .= ' AND ' ;}elseif($nom_valeur[0] == 'mois') {$query .= "month(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ;$query .= ' AND ' ;}elseif($nom_valeur[0] == 'jour') {$query .= "day(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ;$query .= ' AND ' ;}elseif($nom_valeur[0] == 'mots_cles') {$liste_mc = explode(";",$nom_valeur[1]);$query .= '(' ;foreach($liste_mc as $mot) {if(trim($mot) != ''){$query .= "mots_cles LIKE '%".$DB->escapeSimple($mot)."%' OR " ;}}$query = rtrim($query,' OR ');$query .= ') AND ' ;}elseif ($nom_valeur[0] == 'nom_taxon') {$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]);$query .= "(nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR identifiant LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR ordre LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR num_nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR num_nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR num_taxon LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR location LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR id_location LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR date_observation LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR lieudit LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR station LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR milieu LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR commentaire LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR transmission LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR coord_x LIKE '%".$DB->escapeSimple($nom_valeur[1])."%' OR coord_y LIKE '%".$DB->escapeSimple($nom_valeur[1])."%')";//"%' OR famille LIKE '%".$DB->escapeSimple($nom_valeur[1]).}else {if(trim($nom_valeur[0]) != ''){$query .= $nom_valeur[0]." = '".$DB->escapeSimple($nom_valeur[1])."'" ;$query .= ' AND ' ;}}}}$query = rtrim($query,' AND ') ;$query .= ' ORDER BY ordre LIMIT '.$limite*$numero_page.','.$limite ;$res =& $DB->query($query);/* $fp = fopen('dump.txt','w+') ;fwrite($fp,print_r($query,true)) ;fclose($fp) ;*/if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de récupération d'une liste d'observation :".$res->getMessage()." ".$query);die($res->getMessage());}$result = array() ;while($observation = $res->fetchrow(DB_FETCHMODE_ORDERED)) {$result[] = $observation;}$res = json_encode($result) ;header("Content-type: application/json");print($res);exit() ;}// met à jour les métadonnées d'une Observationfunction updateElement($uid,$pairs) {// Controle detournement utilisateursession_start();$this->controleUtilisateur($uid[0]);if ($pairs['num_nom_sel']!='') {// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant$complement=$this->rechercherInformationsComplementaires($pairs['num_nom_sel']);$pairs['nom_ret']=$complement['Nom_Retenu'];$pairs['num_nom_ret']=$complement['Num_Nom_Retenu'];$pairs['num_taxon']=$complement['Num_Taxon'];$pairs['famille']=$complement['Famille'];}$DB=$this->connectDB($this->config,'database_cel');// Nullifiage ...foreach($pairs as $k=>$v) {if (trim($v)=="") {$pairs[$k]="null";}}// Pour apparaitre le premier dans les tris ...if ($pairs['location']=="null") $pairs['location']="000null";// Pour apparaitre le premier dans les tris ...if ($pairs['lieudit']=="null") $pairs['lieudit']="000null";// Pour apparaitre le premier dans les tris ...if ($pairs['id_location']=="null") {$pairs['id_location']="000null";} else {// Pour empecher que des numéros de département de 1 à 9 soient saisis sans 0if (strlen($pairs['id_location']) == 1) {$pairs['id_location'] = '0'.$pairs['id_location'];}}// Pour apparaitre le premier dans les tris ...if ($pairs['station']=="null") $pairs['station']="000null";// Pour apparaitre le premier dans les tris ...if ($pairs['milieu']=="null") $pairs['milieu']="000null";// Vérification sur les ordre donnés en paramètresif(strrpos($uid[1],",") == strlen($uid[1]) -1) {$uid[1] = rtrim($uid[1],",");}// TODO : decouper avec les /if (isset($pairs['date_observation']) && $pairs['date_observation']!="null") {list($jour,$mois,$annee)=split("/",$pairs['date_observation']);$pairs['date_observation']=$annee."-".$mois."-".$jour." 0:0:0";}if ($pairs['coord_x']=="null") {$pairs['coord_x'] = "000null";}if ($pairs['coord_y']=="null") {$pairs['coord_y'] = "000null";}$query="UPDATE cel_inventory SET " ;foreach($pairs as $critere => $valeur) {$query .= $critere." = '".$DB->escapeSimple($valeur)."',";}$query .= "date_modification = now() WHERE ordre IN (".$DB->escapeSimple($uid[1]).") AND identifiant = '".$DB->escapeSimple($uid[0])."'";$res =& $DB->query($query);if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de mise à jour d'une liste d'observations :".$res->getMessage()." ".$query);die($res->getMessage());}return true;}function deleteElement($uid){// uid[0] : utilisateur obligatoire// uid[1] : identifiant(s) Observation(s) obligatoire(s)// Controle detournement utilisateur$this->controleUtilisateur($uid[0]);$DB=$this->connectDB($this->config,'database_cel');$id = rtrim($uid[1],",") ;if (isset($id)) {$query_supp='DELETE FROM cel_inventory WHERE identifiant = "'.$DB->escapeSimple($uid[0]).'" AND ordre in ('.$DB->escapeSimple($id) .')';}$res =& $DB->query($query_supp);if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de suppression d'une liste d'observations :".$res->getMessage()." ".$query_supp);die($res->getMessage());}else{$query_supp_lien = 'DELETE FROM cel_obs_images WHERE coi_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND coi_ce_observation in ('.$DB->escapeSimple($id).')';/* $fp = fopen('dump.txt','w+') ;fwrite($fp,print_r($query_supp_lien,true)) ;fclose($fp) ;*/$res =& $DB->query($query_supp_lien);if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de suppression d'une liste de liaison entre observations et images :".$res->getMessage()." ".$query_supp_lien);die($res->getMessage());}else{echo "OK" ;exit() ;}}}function rechercherInformationsComplementaires($numNom) {$DB=$this->connectDB($this->config);$query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,"." auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex "." , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio "." , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex "." , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif "." , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" ." FROM eflore_nom, eflore_nom_rang," ." eflore_naturaliste_intitule_abreviation AS auteur_bex "." , eflore_naturaliste_intitule_abreviation AS auteur_b "." , eflore_naturaliste_intitule_abreviation AS auteur_mex "." , eflore_naturaliste_intitule_abreviation AS auteur_m "." ,eflore_selection_nom a, eflore_selection_nom b"." WHERE a.esn_id_nom= ".$numNom." AND a.esn_id_version_projet_taxon = 25 "." AND a.esn_id_taxon=b.esn_id_taxon "." AND b.esn_ce_statut=3 "." AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" ." AND en_ce_rang = enrg_id_rang" ." AND en_id_nom = b.esn_id_nom" ." AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege "." AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege "." AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege "." AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege "." AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";$res =& $DB->query($query);if (DB::isError($res)) {die($res->getMessage());}// Nom retenu, Num Nomen nom retenu, Num Taxon,// Famille$value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {$fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {$fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);}if ($fam['en_ce_rang']==120) {$famille=$fam['en_nom_supra_generique'];}else {$famille="Famille inconnue";}$value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);}return $value;}function formaterNom($rawnom) {// Constitution du nom:$nom = '';if ($rawnom['en_nom_supra_generique'] != '') {$nom .= $rawnom['en_nom_supra_generique'];} else if ($rawnom['en_epithete_infra_generique'] != '') {$nom .= $rawnom['en_epithete_infra_generique'];} else {if ($rawnom['en_nom_genre'] != '') {$nom .= $rawnom['en_nom_genre'];}if ($rawnom['en_epithete_espece']!= '') {$nom .= ' '.$rawnom['en_epithete_espece'];}if ($rawnom['en_epithete_infra_specifique'] != '') {if (!empty($rawnom['enrg_abreviation_rang'])) {$nom .= ' '.$rawnom['enrg_abreviation_rang'].'';}$nom .= ' '.$rawnom['en_epithete_infra_specifique'];}}return $nom .$this->retournerAuteur($rawnom) ;}function rechercherFamille($taxon,&$DB) {$row=array();$query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique "." FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom "." WHERE etr_id_taxon_1 = ".$taxon." AND etr_id_version_projet_taxon_1 = 25 "." AND etr_id_categorie_taxon = 3 "." AND etr_id_valeur_taxon = 3 "." AND esn_id_taxon = etr_id_taxon_2 "." AND esn_ce_statut = 3 "." AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 "." AND en_id_nom = esn_id_nom "." AND esn_id_version_projet_taxon=en_id_version_projet_nom ";$res =& $DB->query($query);if (DB::isError($res)) {die($res->getMessage());}if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {return $row;}else {$row['en_ce_rang']='fin';return $row;}}function retournerAuteur($rawnom) {$auteurs = '';$auteur_basio = '';$auteur_modif = '';if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' ) {$auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];}} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {$auteur_basio .= $rawnom['abreviation_auteur_basio'];}if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {$auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];}} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {$auteur_modif .= $rawnom['abreviation_auteur_modif'];}if (!empty($auteur_modif)) {$auteurs = ' ('.$auteur_basio.') '.$auteur_modif;} elseif (!empty($auteur_basio)) {$auteurs = ' '.$auteur_basio;}return $auteurs ;}}?>