Blame | 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 temporairepublic 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éscase '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 nomcase '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;}}?>