Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 939 → Rev 940

/trunk/jrest/services/CelWidgetMap.php
72,9 → 72,10
$this->construireWhereNumTaxon().
$this->construireWhereNomTaxon().
$this->construireWhereDate().
$this->construireWhereCommentaire().
$this->construireWhereProjet().
$this->construireWhereTag();
//die($requete);
$resultats = $this->requeter($requete);
// Traitement des résultats
142,6 → 143,7
$this->construireWhereNumTaxon().
$this->construireWhereNomTaxon().
$this->construireWhereDate().
$this->construireWhereCommentaire().
$this->construireWhereProjet().
$this->construireWhereTag().
'ORDER BY nom_sel ASC '.
285,6 → 287,7
$this->construireWhereNumTaxon().
$this->construireWhereNomTaxon().
$this->construireWhereDate().
$this->construireWhereCommentaire().
$this->construireWhereProjet().
$this->construireWhereTag();
'ORDER BY nom_ret ASC '.
322,7 → 325,7
private function construireWhereCoordonnees() {
$sql = '';
// Récupération des coordonnées depuis l'id station
extract($this->decomposerStationId());
extract($this->decomposerParametreStation());
if (isset($type)) {
if ($type == 'UTM') {
$secteur = $this->proteger($secteur);
340,30 → 343,52
return $sql;
}
private function construireWhereCommentaire() {
$sql = '';
list($type, $commentaire) = $this->decomposerParametreCommentaire();
if (!$this->etreNull($commentaire)) {
$commentaire = $this->proteger('%'.$commentaire.'%');
switch ($type) {
case '*' :
$sql = $this->obtenirConditionPourCommentaires($commentaire);
$sql = " AND (commentaire LIKE $commentaire OR ($sql)) ";
break;
case 'observation' :
$sql = " AND commentaire LIKE $commentaire ";
break;
case 'photo' :
$sql = ' AND '.$this->obtenirConditionPourCommentaires($commentaire).' ';
break;
case 'photo.meta' :
$sql = ' AND '.$this->obtenirConditionPourCommentaireMeta($commentaire).' ';
break;
case 'photo.utilisateur' :
$sql = ' AND '.$this->obtenirConditionPourCommentaireUtilisateur($commentaire).' ';
break;
default:
$sql = " AND commentaire LIKE $commentaire ";
}
}
return $sql;
}
private function construireWhereNomTaxon() {
$sql = '';
// Récupération des coordonnées depuis l'id station
extract($this->parametres);
if (!$this->etreNull($taxon)) {
if (strpos($taxon, ':')) {
list($type, $nom) = explode(':', $taxon);
} else {
$type = 'nr';
$nom = $taxon;
}
list($type, $nom) = $this->decomposerParametreTaxon();
if (!$this->etreNull($nom)) {
$nom = $this->proteger($nom.'%');
switch ($type) {
case '*' :
$sql = " AND (nom_ret LIKE $nom OR nom_sel LIKE $nom OR famille LIKE $nom) ";
break;
case 'nr' :
case 'retenu' :
$sql = " AND nom_ret LIKE $nom ";
break;
case 'ns' :
case 'selectionne' :
$sql = " AND nom_sel LIKE $nom ";
break;
case 'f' :
case 'famille' :
$sql = " AND famille LIKE $nom ";
break;
default:
376,14 → 401,9
private function construireWhereDate() {
$sql = '';
// Récupération des coordonnées depuis l'id station
extract($this->parametres);
list($type, $date) = $this->decomposerParametreDate();
if (!$this->etreNull($date)) {
if (strpos($date, ':')) {
list($type, $date) = explode(':', $date);
} else {
$type = 'observation';
}
$date = $this->proteger($date.'%');
switch ($type) {
case '*' :
405,12 → 425,15
case 'transmission' :
$sql = " AND date_transmission LIKE $date ";
break;
case 'photo' :
$sql = $this->obtenirConditionPourDatePhoto($date);
break;
case 'ajout' :
$sql = $this->obtenirConditionPourDateAjout($date);
break;
case 'liaison' :
$sql = '';
$sql = $this->obtenirConditionPourDateLiaison($date);
break;
case 'photo' :
$sql = '';
break;
default:
$sql = " AND date_observation LIKE $date ";
}
418,6 → 441,133
return $sql;
}
private function obtenirConditionPourDatePhoto($date) {
$observations = $this->obtenirObsLieesImg('date.photo', $date);
if (is_null($observations)) {
$this->debug[] = "Aucune observation n'est liée à une photo prise à la date : $date";
}
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
private function obtenirConditionPourDateLiaison($date) {
$observations = $this->obtenirObsLieesImg('date.liaison', $date);
if (is_null($observations)) {
$this->debug[] = "Aucune observation n'a été liée à une image à à la date : $date";
}
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
 
private function obtenirConditionPourDateAjout($date) {
$observations = $this->obtenirObsLieesImg('date.ajout', $date);
if (is_null($observations)) {
$this->debug[] = "Aucune observation n'est liée à une image ajoutée à la date : $date";
}
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
private function obtenirConditionPourCommentaireMeta($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.meta', $commentaire);
if (is_null($observations)) {
$this->debug[] = "Aucune observation n'est liée à une image dont le commentaire des méta-données correspond à : $commmentaire";
}
$operateur = '';
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
private function obtenirConditionPourCommentaireUtilisateur($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.utilisateur', $commentaire);
if (is_null($observations)) {
$this->debug[] = "Aucune observation n'est liée à une image dont le commentaire des utilisateur correspond à : $commmentaire";
}
$operateur = '';
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
private function obtenirConditionPourCommentaires($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.*', $commentaire);
if (is_null($observations)) {
$this->debug[] = "Aucune observation n'est liée à une image dont un des commentaires correspond à : $commmentaire";
}
$operateur = '';
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
/**
* Récupération des identifiant d'utilisateur et des ordres des observations correspondant à une date.
* Retour sous forme de tableau : array[identifiant] = array(ordre, ordre...);
*/
private function obtenirObsLieesImg($type, $param) {
// Construction de la requête
$requete = 'SELECT DISTINCT coi_ce_observation AS ordre, coi_ce_utilisateur AS utilisateur '.
'FROM cel_images '.
' LEFT JOIN cel_obs_images '.
' ON (ci_id_image = coi_ce_image) '.
' LEFT JOIN cel_inventory AS i '.
' ON (coi_ce_utilisateur = i.identifiant AND coi_ce_observation = i.ordre) '.
' LEFT JOIN locations AS l '.
' ON (l.name = i.location AND l.code = i.id_location) '.
"WHERE transmission = '1' ".
($type == 'date.photo' ? " AND (ci_meta_date_time LIKE ".str_replace('-', ':', $param)." OR ci_meta_date LIKE $param) " : '').
($type == 'date.ajout' ? " AND ci_meta_date_ajout LIKE $param " : '').
($type == 'date.liaison' ? " AND coi_date_liaison LIKE $param " : '').
($type == 'commentaire.meta' ? " AND ci_meta_comment LIKE $param " : '').
($type == 'commentaire.utilisateur' ? " AND ci_meta_user_comment LIKE $param " : '').
($type == 'commentaire.*' ? " AND (ci_meta_comment LIKE $param OR ci_meta_user_comment LIKE $param) " : '').
$this->construireWhereCoordonnees().
$this->construireWhereDept().
$this->construireWhereCommune().
$this->construireWhereUtilisateur().
$this->construireWhereNumTaxon().
$this->construireWhereNomTaxon().
$this->construireWhereProjet().
$this->construireWhereTag().
'ORDER BY utilisateur ASC, ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$resultats = $this->executerRequete($requete);
$observations = null;
if ($resultats != false) {
$observations = array();
foreach ($resultats as $occurence) {
$utilisateur = $occurence['utilisateur'];
$ordre = $occurence['ordre'];
if (!array_key_exists($utilisateur, $observations)) {
$observations[$utilisateur] = array();
}
if (!array_key_exists($ordre, $observations[$utilisateur])) {
$observations[$utilisateur][$ordre] = $ordre;
}
}
}
return $observations;
}
private function assemblerObsEnConditionSql($observations, $operateur = 'AND') {
$sql = '';
if ($observations != null) {
// Pré-construction du where de la requête
$tpl_where = "(identifiant = '%s' AND ordre IN (%s))";
foreach ($observations as $utilisateur => $ordres) {
$morceaux_requete[] = sprintf($tpl_where, $utilisateur, implode(',', $ordres));
}
if (count($morceaux_requete) > 0) {
$sql = implode(" \nOR ", $morceaux_requete);
}
} else {
// Nous voulons que la requête ne retourne rien
$sql = "identifiant = '' AND ordre = ''";
}
$sql = " $operateur ($sql) ";
return $sql;
}
private function construireWhereDept() {
$sql = '';
// Récupération des coordonnées depuis l'id station
581,7 → 731,7
*/
private function getSqlWhereMotsCles($tag) {
$sql = null;
$mots_cles = $this->decomposerTag($tag);
$mots_cles = $this->decomposerParametreTag($tag);
// Construction de la requête
$requete = 'SELECT cmc_id_proprietaire AS utilisateur, cmc_id_mot_cle_general AS mot_cle_general, '.
642,7 → 792,7
return $where_mots_cles_images;
}
private function decomposerTag($tags) {
private function decomposerParametreTag($tags) {
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
if (preg_match('/.+OU.+/', $tags)) {
$mots_cles['type'] = 'OR';
661,7 → 811,7
return $mots_cles;
}
private function decomposerStationId() {
private function decomposerParametreStation() {
$station_infos = array();
if (isset($this->parametres['station'])) {
$station = $this->parametres['station'];
679,4 → 829,50
}
return $station_infos;
}
private function decomposerParametreDate() {
$date_infos = array();
if (isset($this->parametres['date'])) {
$date = $this->parametres['date'];
if (strpos($date, ':')) {
list($type, $date) = explode(':', $date);
} else {
$type = 'observation';
}
$date = str_replace('/', '-', $date);
if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $date, $matches)) {
$date = $matches[3].'-'.$matches[2].'-'.$matches[1];
}
$date_infos = array($type, $date);
}
return $date_infos;
}
private function decomposerParametreTaxon() {
$nom_infos = array();
if (isset($this->parametres['taxon'])) {
$taxon = $this->parametres['taxon'];
if (strpos($taxon, ':')) {
$nom_infos = explode(':', $taxon);
} else {
$nom_infos = array('retenu', $taxon);
}
}
return $nom_infos;
}
private function decomposerParametreCommentaire() {
$commentaire_infos = array();
if (isset($this->parametres['commentaire'])) {
$commentaire = $this->parametres['commentaire'];
if (strpos($commentaire, ':')) {
$commentaire_infos = explode(':', $commentaire);
} else {
$commentaire_infos = array('observation', $commentaire);
}
}
return $commentaire_infos;
}
}