Rev 906 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
/*
* Created on 24 août 2011
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
/**
* librairie recherche d'observations a partir de divers critères
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
*/
class RechercheObservation extends Cel {
public function rechercherObservations($id_utilisateur, $criteres, $numero_page = 0, $taille_page = 50) {
$requete_selection_observations = "SELECT * FROM cel_obs WHERE ce_utilisateur ='".$id_utilisateur."'";
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
$requete_selection_observations .= $sous_requete_recherche;
$debut = $taille_page*$numero_page ;
$requete_selection_observations .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
$resultats_observations = array();
$resultats_observations = $this->requeter($requete_selection_observations);
return $resultats_observations;
}
public function compterObservations($id_utilisateur, $criteres) {
$requete_selection_observations = "SELECT COUNT(*) as nb_obs FROM cel_obs WHERE ce_utilisateur ='".$id_utilisateur."'";
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
$requete_selection_observations .= $sous_requete_recherche;
$nb_obs = 0;
$resultat_requete_nombre_observations = $this->requeter($requete_selection_observations);
if($resultat_requete_nombre_observations && is_array($resultat_requete_nombre_observations) && count($resultat_requete_nombre_observations) > 0) {
$nb_obs = $resultat_requete_nombre_observations[0]['nb_obs'];
}
return $nb_obs;
}
// TODO: fonction temporaire
public function parserRequeteCriteres($chaine_criteres) {
$criteres_parses = array();
$criteres = explode("&", $chaine_criteres) ;
foreach ($criteres as &$critere) {
$criteres_parses[] = explode("=",$critere) ;
}
return $criteres_parses;
}
private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
$sous_requete = ' AND ';
foreach ($criteres as $nom_valeur)
{
if (count($nom_valeur) == 0)
{
continue;
}
switch ($nom_valeur[0]) {
case 'annee':
$sous_requete .= "year(date_observation) = ".$this->proteger($nom_valeur[1]) ;
$sous_requete .= ' AND ' ;
break;
case 'mois':
$sous_requete .= "month(date_observation) = ".$this->proteger($nom_valeur[1]) ;
$sous_requete .= ' AND ' ;
break;
case 'jour':
$sous_requete .= "day(date_observation) = ".$this->proteger($nom_valeur[1]) ;
$sous_requete .= ' AND ' ;
break;
// TODO: adapter la structure aux nouveaux mots clés
case 'mots_cles':
$liste_mc = explode(";",$nom_valeur[1]);
$sous_requete .= '(' ;
foreach($liste_mc as $mot) {
if(trim($mot) != '')
{
$sous_requete .= "mots_cles LIKE '%".$this->proteger($mot)."%' OR " ;
}
}
$sous_requete = rtrim($sous_requete,' OR ');
$sous_requete .= ') AND ' ;
break;
//TODO: choisir un meilleur nom
case 'nom_taxon':
$nom_valeur[1] = str_replace("*","%",$nom_valeur[1]);
$sous_requete .= "(nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR courriel_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR prenom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR nom_utilisateur LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR nom_sel LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR nom_sel_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR nom_ret LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR nom_ret_nn LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR nt LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR famille LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR ce_zone_geo LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR date_observation LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR lieudit LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR station LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR milieu LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR commentaire LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR transmission LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR latitude LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
" OR longitude LIKE ".$this->proteger('%'.$nom_valeur[1].'%').
")";
break;
default:
if(trim($nom_valeur[0]) != '')
{
$sous_requete .= $nom_valeur[0]." = '".$this->proteger($nom_valeur[1])."'" ;
$sous_requete .= ' AND ' ;
}
break;
}
}
$sous_requete = rtrim($sous_requete,' AND ');
return $sous_requete;
}
}
?>