Rev 798 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// CRUD ligne d'inventaire :// In get : utf8// In post : utf8// out : utf8Class Inventory extends DBAccessor {var $config;function Inventory($config) {$this->config=$config;}function getElement($uid){// Controle detournement utilisateurif(!isset($_SESSION)) {session_start();}$this->controleUtilisateur($uid[0]);$value=array();$DB=$this->connectDB($this->config,'database_cel');if (isset($uid[1])) {$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation, lieudit, station, milieu, commentaire, coord_x, coord_y FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre =".$uid[1]." ORDER BY ordre";}else {if (isset($uid[0])) {$query="SELECT identifiant, ordre, nom_sel, num_nom_sel, nom_ret, num_nom_ret, num_taxon, famille, location, id_location, date_observation, lieudit, station, milieu, commentaire, coord_x, coord_y FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' ORDER BY ordre";}}$res =& $DB->query($query);if (DB::isError($res)) {$this->logger("CEL_bugs","Erreur de listage des observations :".$res->getMessage()." ".$query);}while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {if ($row['date_observation']!="0000-00-00 00:00:00") {list($year,$month,$day)= split ('-',$row['date_observation']);list($day)= split (' ',$day);$row['date_observation']=$day."/".$month."/".$year;}$value=array($row['nom_sel'],$row['num_nom_sel'],$row['nom_ret'],$row['num_nom_ret'],$row['num_taxon'],$row['famille'], $row['location'], $row['id_location'], $row['ordre'], $row['date_observation'],$row['lieudit'], $row['station'], $row['milieu'], $row['commentaire'], $row['coord_x'],$row['coord_y']);}$output = json_encode($value);header("Content-type: application/json");print($output);return true;}function getRessource(){}function updateElement($uid,$pairs) {// Controle detournement utilisateurif(!isset($_SESSION)) {session_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";// Pour supprimer les séparateurs de mots clés en tropif (isset($pairs['mot_cles'])) {$pairs['mot_cles'] = str_replace(';;',';',$pairs['mot_cles']);}// TODO : decouper avec les /if ($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 nom_sel = '".$DB->escapeSimple($pairs['nom_sel'])."',"."num_nom_sel = '".$DB->escapeSimple($pairs['num_nom_sel'])."',"."nom_ret = '".$DB->escapeSimple($pairs['nom_ret'])."',"."num_nom_ret = '".$DB->escapeSimple($pairs['num_nom_ret'])."',"."num_taxon = '".$DB->escapeSimple($pairs['num_taxon'])."',"."famille = '".$DB->escapeSimple($pairs['famille'])."',"."location = '".$DB->escapeSimple($pairs['location'])."',"."id_location = '".$DB->escapeSimple($pairs['id_location'])."',"."date_observation = '".$DB->escapeSimple($pairs['date_observation'])."',"."lieudit = '".$DB->escapeSimple($pairs['lieudit'])."',"."station = '".$DB->escapeSimple($pairs['station'])."',"."milieu = '".$DB->escapeSimple($pairs['milieu'])."',"."commentaire = '".$DB->escapeSimple($pairs['commentaire'])."',"."date_modification = now() ,"."mots_cles = '".$DB->escapeSimple($pairs['mots_cles'])."',"."coord_x='".$DB->escapeSimple($pairs['coord_x'])."',"."coord_y='".$DB->escapeSimple($pairs['coord_y'])."' "."WHERE ordre = '".$DB->escapeSimple($uid[1])."' AND identifiant='".$DB->escapeSimple($uid[0])."'";$res =& $DB->query($query);if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de modification d'une observation :".$res->getMessage()." ".$query);}return true;}function createElement($pairs){// Controle detournement utilisateurif(!isset($_SESSION)) {session_start();}$this->controleUtilisateur($pairs['identifiant']);if (($pairs['num_nom_sel'] == '' || $pairs['num_nom_sel'] == 0) && $pairs['nom_sel'] != '') {// Utilisation d'un nom sans numéro nomenclatural, recherche d'une correspondance sur le nom$complement=$this->rechercherInformationsComplementairesSurNom($pairs['nom_sel']);// Si l'on a trouvé un résultat sur la recherche, il s'agit vraisemblablement d'un copié-collé// de nom de taxon qui n'a pas été validé par la selectionif(count($complement) > 0) {$pairs['num_nom_sel'] = $complement[0][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'];}// Dernier numero d'ordre utilise :$DB=$this->connectDB($this->config,'database_cel');$query="SELECT max(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['identifiant'])."' ";$res =& $DB->query($query);if (DB::isError($res)) {die($res->getMessage());}$row['ordre']=0;while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {$pairs['ordre']=$row['ordre']+1;}// 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";// TODO : decouper avec les /if ($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 = "INSERT INTO cel_inventory (identifiant,ordre,nom_sel,num_nom_sel,nom_ret,num_nom_ret,num_taxon,famille,location,id_location,date_observation,lieudit,station, milieu, commentaire, date_creation,date_modification,coord_x,coord_y) " ." VALUES('".$DB->escapeSimple($pairs['identifiant'])."','".$DB->escapeSimple($pairs['ordre'])."','".$DB->escapeSimple($pairs['nom_sel'])."','".$DB->escapeSimple($pairs['num_nom_sel'])."','".$DB->escapeSimple($pairs['nom_ret'])."','".$DB->escapeSimple($pairs['num_nom_ret'])."','".$DB->escapeSimple($pairs['num_taxon'])."','".$DB->escapeSimple($pairs['famille'])."','".$DB->escapeSimple($pairs['location'])."','".$DB->escapeSimple($pairs['id_location'])."','".$DB->escapeSimple($pairs['date_observation'])."','".$DB->escapeSimple($pairs['lieudit'])."','".$DB->escapeSimple($pairs['station'])."','".$DB->escapeSimple($pairs['milieu'])."','".$DB->escapeSimple($pairs['commentaire'])."',"."now() , now(),'".$DB->escapeSimple($pairs['coord_x'])."','".$DB->escapeSimple($pairs['coord_y'])."')";$res =& $DB->query($query);if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de creation d'une observation :".$res->getMessage()." ".$query);return false;//die($res->getMessage());}return true;}function deleteElement($uid){// Controle detournement utilisateurif(!isset($_SESSION)) {session_start();}$this->controleUtilisateur($uid[0]);$value=array();$DB=$this->connectDB($this->config,'database_cel');if (isset($uid[1])) {$query="DELETE FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND ordre in (".$DB->escapeSimple($uid[1]) .")";}$res =& $DB->query($query);if (PEAR::isError($res)) {$this->logger("CEL_bugs","Erreur de suppression d'une observation :".$res->getMessage()." ".$query);return false;}else {echo "OK" ;exit() ;}return true;}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 rechercherInformationsComplementairesSurNom($nom_saisi) {$DB=$this->connectDB($this->config);$value = array();if($nom_saisi != null && $nom_saisi != "") {$query = 'SELECT * FROM eflore_nom_intitule '.'WHERE eni_id_categorie_format = 3 AND '.'eni_id_version_projet_nom = 25 AND '.'(eni_id_valeur_format = 3 OR eni_id_valeur_format = 4) AND '.'eni_intitule_nom LIKE "'.$nom_saisi.'%" '.'ORDER BY LENGTH(eni_intitule_nom)';$res =& $DB->query($query);if (DB::isError($res)) {die($res->getMessage());}while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {$value[]=array($row['eni_id_nom'], $row['eni_intitule_nom']);}}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 ;}}/* +--Fin du code ---------------------------------------------------------------------------------------+* $Log$* Revision 1.11 2008-11-13 11:29:12 ddelon* Reecriture gwt-ext** Revision 1.10 2008-01-30 08:57:28 ddelon* fin mise en place mygwt** Revision 1.9 2007-05-22 12:54:09 ddelon* Securisation acces utilisateur****/?>