| 862 | aurelien | 1 | <?php
 | 
        
           | 2462 | jpm | 2 | // declare(encoding='UTF-8');
 | 
        
           | 862 | aurelien | 3 | /**
 | 
        
           | 2462 | jpm | 4 |  * Classe de recherche d'images à partir de divers critères.
 | 
        
           |  |  | 5 |  *
 | 
        
           |  |  | 6 |  * @internal   Mininum PHP version : 5.2
 | 
        
           |  |  | 7 |  * @category   CEL
 | 
        
           |  |  | 8 |  * @package    Services
 | 
        
           |  |  | 9 |  * @subpackage Bibliothèques
 | 
        
           |  |  | 10 |  * @version    0.1
 | 
        
           |  |  | 11 |  * @author     Mathias CHOUET <mathias@tela-botanica.org>
 | 
        
           |  |  | 12 |  * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 13 |  * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 | 
        
           |  |  | 14 |  * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 | 
        
           |  |  | 15 |  * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 | 
        
           |  |  | 16 |  * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 | 
        
           |  |  | 17 |  */
 | 
        
           | 862 | aurelien | 18 | class RechercheImage extends Cel {
 | 
        
           |  |  | 19 |   | 
        
           | 2450 | jpm | 20 | 	function rechercherImagesEtObservationAssociees($id_utilisateur = null, $criteres = array(), $debut = 0, $limite = 50) {
 | 
        
           | 961 | aurelien | 21 | 		$images_trouvees = $this->rechercherImages($id_utilisateur, $criteres, $debut, $limite);
 | 
        
           | 2143 | jpm | 22 |   | 
        
           | 862 | aurelien | 23 | 		$retour = array();
 | 
        
           | 2450 | jpm | 24 | 		foreach($images_trouvees as $image) {
 | 
        
           | 935 | aurelien | 25 | 			$image['id_observation'] = $this->obtenirInformationsObservationsAssociees($image['ce_utilisateur'],$image['id_image']);
 | 
        
           | 862 | aurelien | 26 | 			$retour[] = $image ;
 | 
        
           |  |  | 27 | 		}
 | 
        
           |  |  | 28 | 		return $retour;
 | 
        
           |  |  | 29 | 	}
 | 
        
           |  |  | 30 |   | 
        
           | 961 | aurelien | 31 | 	public function rechercherImages($id_utilisateur = null, $criteres = array(), $debut = 0 , $limite = 50) {
 | 
        
           | 1395 | aurelien | 32 | 		$ordre = (isset($criteres['tri']) && $criteres['tri']) ? $criteres['tri'] : 'ci.ordre';
 | 
        
           |  |  | 33 | 		unset($criteres['tri']);
 | 
        
           |  |  | 34 | 		$direction = (isset($criteres['dir']) && $criteres['dir']) ? $criteres['dir'] : 'ASC';
 | 
        
           |  |  | 35 | 		unset($criteres['dir']);
 | 
        
           | 2143 | jpm | 36 |   | 
        
           | 1366 | aurelien | 37 | 		$debut = ($debut < 0) ? 0 : $debut;
 | 
        
           | 2255 | aurelien | 38 | 		$requete_recherche_images = 'SELECT ci.* ';
 | 
        
           | 935 | aurelien | 39 |   | 
        
           |  |  | 40 | 		if ($this->doitJoindreTableObs($criteres)) {
 | 
        
           |  |  | 41 | 			$requete_recherche_images .= $this->fabriquerRequeteJointureObs();
 | 
        
           | 1765 | raphael | 42 | 			$requete_recherche_images .= ($id_utilisateur != null) ? 'AND ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
 | 
        
           | 935 | aurelien | 43 | 		} else {
 | 
        
           | 2143 | jpm | 44 | 			$requete_recherche_images .= 'FROM cel_images ci ';
 | 
        
           | 1765 | raphael | 45 | 			$requete_recherche_images .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
 | 
        
           | 862 | aurelien | 46 | 		}
 | 
        
           | 2143 | jpm | 47 |   | 
        
           | 862 | aurelien | 48 | 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
 | 
        
           |  |  | 49 | 		$requete_recherche_images .= $sous_requete_recherche;
 | 
        
           | 2143 | jpm | 50 |   | 
        
           | 1395 | aurelien | 51 | 		$requete_recherche_images .= ' ORDER BY '.$ordre.' '.$direction.' LIMIT '.$debut.','.$limite ;
 | 
        
           | 1366 | aurelien | 52 |   | 
        
           | 862 | aurelien | 53 | 		$resultats_images = array();
 | 
        
           | 2143 | jpm | 54 | 		$resultats_images = Cel::db()->requeter($requete_recherche_images);
 | 
        
           |  |  | 55 |   | 
        
           | 862 | aurelien | 56 | 		return $resultats_images;
 | 
        
           |  |  | 57 | 	}
 | 
        
           | 2143 | jpm | 58 |   | 
        
           | 935 | aurelien | 59 | 	public function compterImages($id_utilisateur = null, $criteres = array()) {
 | 
        
           | 1397 | aurelien | 60 | 		$ordre = (isset($criteres['tri']) && $criteres['tri']) ? $criteres['tri'] : 'ci.ordre';
 | 
        
           |  |  | 61 | 		unset($criteres['tri']);
 | 
        
           |  |  | 62 | 		$direction = (isset($criteres['dir']) && $criteres['dir']) ? $criteres['dir'] : 'ASC';
 | 
        
           |  |  | 63 | 		unset($criteres['dir']);
 | 
        
           | 1366 | aurelien | 64 |   | 
        
           | 2449 | jpm | 65 | 		$requete_recherche_images = 'SELECT COUNT(*) AS nb_images ';
 | 
        
           | 2143 | jpm | 66 |   | 
        
           | 935 | aurelien | 67 | 		if ($this->doitJoindreTableObs($criteres)) {
 | 
        
           |  |  | 68 | 			$requete_recherche_images .= $this->fabriquerRequeteJointureObs();
 | 
        
           | 1765 | raphael | 69 | 			$requete_recherche_images .= ($id_utilisateur != null) ? 'AND ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
 | 
        
           | 935 | aurelien | 70 | 		} else {
 | 
        
           | 2143 | jpm | 71 | 			$requete_recherche_images .= 'FROM cel_images ci ';
 | 
        
           | 1765 | raphael | 72 | 			$requete_recherche_images .= ($id_utilisateur != null) ? 'WHERE ci.ce_utilisateur = '.Cel::db()->proteger($id_utilisateur) : '';
 | 
        
           | 935 | aurelien | 73 | 		}
 | 
        
           | 862 | aurelien | 74 | 		$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
 | 
        
           | 2143 | jpm | 75 |   | 
        
           | 862 | aurelien | 76 | 		$requete_recherche_images .= $sous_requete_recherche;
 | 
        
           |  |  | 77 | 		$nb_images = 0;
 | 
        
           | 1327 | aurelien | 78 |   | 
        
           | 2143 | jpm | 79 | 		$resultat_requete_nombre_images = Cel::db()->requeter($requete_recherche_images);
 | 
        
           |  |  | 80 |   | 
        
           | 2450 | jpm | 81 | 		if ($resultat_requete_nombre_images && is_array($resultat_requete_nombre_images) && count($resultat_requete_nombre_images) > 0) {
 | 
        
           | 862 | aurelien | 82 | 			$nb_images = $resultat_requete_nombre_images[0]['nb_images'];
 | 
        
           | 2143 | jpm | 83 | 		}
 | 
        
           | 862 | aurelien | 84 | 		return $nb_images;
 | 
        
           |  |  | 85 | 	}
 | 
        
           | 2143 | jpm | 86 |   | 
        
           | 935 | aurelien | 87 | 	private function doitJoindreTableObs($criteres = array()) {
 | 
        
           |  |  | 88 | 		$criteres_obs = array('zone_geo','ce_zone_geo','taxon','transmission','recherche');
 | 
        
           | 2143 | jpm | 89 | 		return count(array_intersect(array_keys($criteres),$criteres_obs)) > 0;
 | 
        
           | 935 | aurelien | 90 | 	}
 | 
        
           | 2143 | jpm | 91 |   | 
        
           | 935 | aurelien | 92 | 	private function fabriquerRequeteJointureObs() {
 | 
        
           | 2446 | jpm | 93 | 		$requete = 'FROM cel_images ci '.
 | 
        
           | 2255 | aurelien | 94 | 			'LEFT JOIN cel_obs co '.
 | 
        
           | 2446 | jpm | 95 | 				'ON ci.ce_observation = co.id_observation '.
 | 
        
           | 2255 | aurelien | 96 | 			'WHERE 1 ';
 | 
        
           | 2446 | jpm | 97 | 		return $requete;
 | 
        
           | 935 | aurelien | 98 | 	}
 | 
        
           | 2143 | jpm | 99 |   | 
        
           | 862 | aurelien | 100 | 	public function obtenirInformationsObservationsAssociees($id_utilisateur, $id_image) {
 | 
        
           | 2446 | jpm | 101 | 		$requete = 'SELECT ce_observation FROM cel_images WHERE id_image = '.$id_image;
 | 
        
           |  |  | 102 | 		$resultats = Cel::db()->requeter($requete);
 | 
        
           | 2143 | jpm | 103 |   | 
        
           | 2446 | jpm | 104 | 		$idsObsListe = array();
 | 
        
           |  |  | 105 | 		foreach ($resultats as $liaison) {
 | 
        
           |  |  | 106 | 			$idsObsListe[] = $liaison['ce_observation'];
 | 
        
           |  |  | 107 | 		}
 | 
        
           |  |  | 108 | 		$ids_obs = implode(',', $idsObsListe);
 | 
        
           | 862 | aurelien | 109 |   | 
        
           |  |  | 110 | 		$infos_obs = '';
 | 
        
           | 2446 | jpm | 111 | 		if (trim($ids_obs) != '') {
 | 
        
           |  |  | 112 | 			$requete = 'SELECT * FROM cel_obs WHERE id_observation IN ('.$ids_obs.') AND ce_utilisateur = "'.$id_utilisateur.'"';
 | 
        
           |  |  | 113 | 			$resultats = Cel::db()->requeter($requete);
 | 
        
           | 862 | aurelien | 114 |   | 
        
           | 2446 | jpm | 115 | 			foreach ($resultats as $obs_liee) {
 | 
        
           | 862 | aurelien | 116 | 				$infos_obs .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
 | 
        
           |  |  | 117 | 			}
 | 
        
           |  |  | 118 | 		}
 | 
        
           |  |  | 119 | 		return $infos_obs;
 | 
        
           |  |  | 120 | 	}
 | 
        
           | 2143 | jpm | 121 |   | 
        
           | 862 | aurelien | 122 | 	private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) {
 | 
        
           |  |  | 123 | 		$sous_requete = ' AND ';
 | 
        
           | 2462 | jpm | 124 | 		foreach ($criteres as $nom => $valeur) {
 | 
        
           |  |  | 125 | 			if ($valeur == null || trim($nom) == "" || trim($valeur) == "") {
 | 
        
           | 2143 | jpm | 126 | 				continue;
 | 
        
           | 862 | aurelien | 127 | 			}
 | 
        
           | 2143 | jpm | 128 |   | 
        
           | 2462 | jpm | 129 | 			switch ($nom) {
 | 
        
           | 2446 | jpm | 130 | 				case "id_image";
 | 
        
           | 2209 | aurelien | 131 | 					$sous_requete .= 'ci.id_image = '.Cel::db()->proteger($valeur) ;
 | 
        
           | 2446 | jpm | 132 | 					$sous_requete .= ' AND ';
 | 
        
           |  |  | 133 | 					break;
 | 
        
           | 862 | aurelien | 134 | 				case "mots_cles";
 | 
        
           | 2143 | jpm | 135 | 					$sous_requete .= $this->creerSousRequeteMotsCles($valeur);
 | 
        
           | 2446 | jpm | 136 | 					break;
 | 
        
           | 961 | aurelien | 137 | 				case "id_mots_cles";
 | 
        
           |  |  | 138 | 					$liste_mc = '"'.str_replace(';','","',$valeur).'"';
 | 
        
           | 2060 | aurelien | 139 | 					$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesIds('images');
 | 
        
           | 2059 | aurelien | 140 | 					$sous_requete .= 'id_image IN ('.sprintf($tpl_sous_requete, $liste_mc).')';
 | 
        
           |  |  | 141 | 					$sous_requete .= ' AND ' ;
 | 
        
           | 2446 | jpm | 142 | 					break;
 | 
        
           | 862 | aurelien | 143 | 				case "commentaire":
 | 
        
           | 930 | aurelien | 144 | 					$mots_comment_liste = explode(" " , $valeur) ;
 | 
        
           | 2143 | jpm | 145 |   | 
        
           | 2446 | jpm | 146 | 					foreach($mots_comment_liste as $mot_comment) {
 | 
        
           | 862 | aurelien | 147 | 						$mot_comment = trim($mot_comment) ;
 | 
        
           | 1765 | raphael | 148 | 						$sous_requete .= 'ci.'.$nom.' LIKE '.Cel::db()->proteger('%'.$mot_comment.'%') ;
 | 
        
           | 862 | aurelien | 149 | 						$sous_requete .= ' AND ' ;
 | 
        
           |  |  | 150 | 					}
 | 
        
           | 2446 | jpm | 151 | 					break;
 | 
        
           | 862 | aurelien | 152 | 				case "annee":
 | 
        
           |  |  | 153 | 				case "mois":
 | 
        
           |  |  | 154 | 				case "jour":
 | 
        
           | 930 | aurelien | 155 | 					$sous_requete .= $this->fabriquerSousRequeteRechercheDate($nom, $valeur) ;
 | 
        
           | 862 | aurelien | 156 | 					$sous_requete .= ' AND ' ;
 | 
        
           | 2450 | jpm | 157 | 					break;
 | 
        
           | 862 | aurelien | 158 | 				case "tampon":
 | 
        
           | 930 | aurelien | 159 | 					$ids_tampon = rtrim($valeur, ',') ;
 | 
        
           | 1765 | raphael | 160 | 					$sous_requete .= 'ci.id_images IN ( '.Cel::db()->proteger($ids_tampon).')' ;
 | 
        
           | 2450 | jpm | 161 | 					break;
 | 
        
           | 935 | aurelien | 162 | 				case "recherche":
 | 
        
           | 930 | aurelien | 163 | 					$sous_requete .= $this->fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur);
 | 
        
           | 862 | aurelien | 164 | 					$sous_requete .= ' AND ';
 | 
        
           | 2450 | jpm | 165 | 					break;
 | 
        
           | 935 | aurelien | 166 | 				case "transmission":
 | 
        
           | 1765 | raphael | 167 | 					$sous_requete .= 'co.transmission = '.Cel::db()->proteger($valeur) ;
 | 
        
           | 935 | aurelien | 168 | 					$sous_requete .= ' AND ';
 | 
        
           | 2450 | jpm | 169 | 					break;
 | 
        
           | 935 | aurelien | 170 | 				case "taxon":
 | 
        
           |  |  | 171 | 					$valeur = str_replace('indetermine','null',$valeur);
 | 
        
           |  |  | 172 | 					$sous_requete .= ' (';
 | 
        
           | 1765 | raphael | 173 | 					$sous_requete .= 'co.nom_ret LIKE '.Cel::db()->proteger($valeur.'%') ;
 | 
        
           | 935 | aurelien | 174 | 					$sous_requete .= ' OR ' ;
 | 
        
           | 1765 | raphael | 175 | 					$sous_requete .= 'co.nom_sel LIKE '.Cel::db()->proteger($valeur.'%') ;
 | 
        
           | 2143 | jpm | 176 | 					$sous_requete .= ') AND ' ;
 | 
        
           | 2450 | jpm | 177 | 					break;
 | 
        
           | 1279 | aurelien | 178 | 				case "auteur":
 | 
        
           | 1765 | raphael | 179 | 					$sous_requete .= '(ci.ce_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
 | 
        
           |  |  | 180 | 								'ci.courriel_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
 | 
        
           |  |  | 181 | 								'ci.nom_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').' OR '.
 | 
        
           |  |  | 182 | 								'ci.prenom_utilisateur LIKE '.Cel::db()->proteger($valeur.'%').
 | 
        
           | 1279 | aurelien | 183 | 								') AND ';
 | 
        
           | 2450 | jpm | 184 | 					break;
 | 
        
           | 1279 | aurelien | 185 | 				case "ce_zone_geo":
 | 
        
           | 1332 | aurelien | 186 | 					if($valeur == "NULL") {
 | 
        
           |  |  | 187 | 						$sous_requete .= "(co.ce_zone_geo IS NULL OR co.ce_zone_geo = '')";
 | 
        
           |  |  | 188 | 					} else {
 | 
        
           | 1765 | raphael | 189 | 						$sous_requete .= '(co.ce_zone_geo LIKE '.(is_numeric($valeur) ? Cel::db()->proteger('INSEE-C:'.$valeur.'%') : Cel::db()->proteger($valeur)).') ';
 | 
        
           | 1332 | aurelien | 190 | 					}
 | 
        
           | 2450 | jpm | 191 | 					break;
 | 
        
           | 1279 | aurelien | 192 | 				case "zone_geo":
 | 
        
           | 1332 | aurelien | 193 | 					if($valeur == "NULL") {
 | 
        
           |  |  | 194 | 						$sous_requete .= "(co.zone_geo IS NULL OR co.zone_geo = '')";
 | 
        
           |  |  | 195 | 					} else {
 | 
        
           | 1765 | raphael | 196 | 						$sous_requete .= '(co.zone_geo = '.Cel::db()->proteger($valeur).') ';
 | 
        
           | 2143 | jpm | 197 | 					}
 | 
        
           | 2450 | jpm | 198 | 					break;
 | 
        
           | 1366 | aurelien | 199 | 				case "famille":
 | 
        
           | 1765 | raphael | 200 | 					$sous_requete .= 'co.famille = '.Cel::db()->proteger($valeur) ;
 | 
        
           | 1366 | aurelien | 201 | 					$sous_requete .= ' AND ' ;
 | 
        
           | 2450 | jpm | 202 | 					break;
 | 
        
           | 862 | aurelien | 203 | 				default:
 | 
        
           | 1765 | raphael | 204 | 					$sous_requete .= 'ci.'.$nom.' = '.Cel::db()->proteger($valeur) ;
 | 
        
           | 930 | aurelien | 205 | 					$sous_requete .= ' AND ' ;
 | 
        
           | 2450 | jpm | 206 | 					break;
 | 
        
           | 862 | aurelien | 207 | 			}
 | 
        
           |  |  | 208 | 		}
 | 
        
           |  |  | 209 | 		$sous_requete = rtrim($sous_requete,' AND ');
 | 
        
           |  |  | 210 | 		return $sous_requete;
 | 
        
           |  |  | 211 | 	}
 | 
        
           | 2143 | jpm | 212 |   | 
        
           | 862 | aurelien | 213 | 	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
 | 
        
           | 2450 | jpm | 214 | 		if (trim($chaine_recherche) == '') {
 | 
        
           | 935 | aurelien | 215 | 			return '';
 | 
        
           |  |  | 216 | 		}
 | 
        
           |  |  | 217 | 		$chaine_recherche = strtolower($chaine_recherche);
 | 
        
           |  |  | 218 | 		$chaine_recherche = str_replace(' ','_',$chaine_recherche);
 | 
        
           | 1311 | aurelien | 219 | 		$requete = ' ('.
 | 
        
           | 1765 | raphael | 220 | 			'ci.nom_original LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           | 2143 | jpm | 221 | 			'co.nom_ret LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 222 | 			'co.nom_sel LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 223 | 			'co.zone_geo LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 224 | 			'co.ce_zone_geo LIKE '.Cel::db()->proteger('%'.$chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 225 | 			//TODO: recherche multicriteres sur mots clés texte ne fonctionne pas à cause de la jointure
 | 
        
           |  |  | 226 | 			//'ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$chaine_recherche.'%').' OR '.
 | 
        
           | 1765 | raphael | 227 | 			'ci.ce_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 228 | 			'ci.courriel_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 229 | 			'ci.nom_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' OR '.
 | 
        
           |  |  | 230 | 			'ci.prenom_utilisateur LIKE '.Cel::db()->proteger($chaine_recherche.'%').' '.
 | 
        
           | 1279 | aurelien | 231 | 		') ';
 | 
        
           | 935 | aurelien | 232 | 		return $requete;
 | 
        
           | 862 | aurelien | 233 | 	}
 | 
        
           | 2143 | jpm | 234 |   | 
        
           | 862 | aurelien | 235 | 	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
 | 
        
           |  |  | 236 | 		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
 | 
        
           |  |  | 237 | 		$requete_recherche_date = '';
 | 
        
           |  |  | 238 |   | 
        
           | 2450 | jpm | 239 | 		if (is_numeric($valeur) && $valeur != "00") {
 | 
        
           | 1765 | raphael | 240 | 			$requete_recherche_date = '('.$correspondance_champ[$intervalle].'(ci.date_prise_de_vue) = '.Cel::db()->proteger($valeur).') ';
 | 
        
           | 862 | aurelien | 241 | 		} else {
 | 
        
           | 935 | aurelien | 242 | 			$requete_recherche_date = '(ci.date_prise_de_vue IS NULL OR ci.date_prise_de_vue = "0000-00-00")';
 | 
        
           | 862 | aurelien | 243 | 		}
 | 
        
           | 2143 | jpm | 244 |   | 
        
           | 862 | aurelien | 245 | 		return $requete_recherche_date;
 | 
        
           |  |  | 246 | 	}
 | 
        
           | 2143 | jpm | 247 |   | 
        
           | 1386 | aurelien | 248 | 	private function creerSousRequeteMotsCles($mot_cle) {
 | 
        
           | 2462 | jpm | 249 | 		//TODO: une requête plus efficace serait possible en utilisant
 | 
        
           |  |  | 250 | 		// les vraies tables de mots clés et en faisant disparaitre ce champ maudit
 | 
        
           |  |  | 251 | 		$requete = '';
 | 
        
           | 1386 | aurelien | 252 | 		if (preg_match('/.*OU.*/', $mot_cle)) {
 | 
        
           |  |  | 253 | 			$mots_cles_tab = explode('OU',$mot_cle);
 | 
        
           | 2462 | jpm | 254 | 			foreach ($mots_cles_tab as $mot_cle_item) {
 | 
        
           | 1765 | raphael | 255 | 				$requete .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
 | 
        
           | 1386 | aurelien | 256 | 			}
 | 
        
           |  |  | 257 | 			$requete = '('.rtrim($requete,'OR ').')';
 | 
        
           |  |  | 258 | 		} else if (preg_match('/.*ET.*/', $mot_cle)) {
 | 
        
           |  |  | 259 | 			$mots_cles_tab = explode('ET',$mot_cle);
 | 
        
           | 2462 | jpm | 260 | 			foreach ($mots_cles_tab as $mot_cle_item) {
 | 
        
           | 1765 | raphael | 261 | 				$requete .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
 | 
        
           | 1386 | aurelien | 262 | 			}
 | 
        
           |  |  | 263 | 			$requete = '('.rtrim($requete, 'AND ').') ';
 | 
        
           |  |  | 264 | 		} else {
 | 
        
           | 1765 | raphael | 265 | 			$requete = "(ci.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
 | 
        
           | 1386 | aurelien | 266 | 		}
 | 
        
           | 2143 | jpm | 267 | 		$requete .= ' AND ';
 | 
        
           | 1386 | aurelien | 268 | 		return $requete;
 | 
        
           |  |  | 269 | 	}
 | 
        
           | 1016 | aurelien | 270 |   | 
        
           | 2450 | jpm | 271 | 	public function formaterPourEnvoiCel(&$tableau_images) {
 | 
        
           |  |  | 272 | 		foreach ($tableau_images as &$image) {
 | 
        
           |  |  | 273 | 			$ids_mots_cles = $this->getIdsMotsClesImage($image['id_image']);
 | 
        
           |  |  | 274 | 			$mots_cles_chaine = '';
 | 
        
           |  |  | 275 | 			foreach ($ids_mots_cles as $id_mot_cle) {
 | 
        
           |  |  | 276 | 				$mots_cles_chaine .= $id_mot_cle['id_mot_cle'].',';
 | 
        
           |  |  | 277 | 			}
 | 
        
           |  |  | 278 | 			$mots_cles_chaine = rtrim($mots_cles_chaine,',');
 | 
        
           |  |  | 279 | 			$image['mots_cles'] = $mots_cles_chaine;
 | 
        
           |  |  | 280 | 		}
 | 
        
           |  |  | 281 | 		return $tableau_images;
 | 
        
           |  |  | 282 | 	}
 | 
        
           | 2143 | jpm | 283 |   | 
        
           | 2450 | jpm | 284 | 	public function obtenirCourrielUtilisateurPourIdImage($id_image) {
 | 
        
           | 2462 | jpm | 285 | 		$idImageP = Cel::db()->proteger($id_image);
 | 
        
           |  |  | 286 | 		$requete = 'SELECT courriel_utilisateur '.
 | 
        
           |  |  | 287 | 			'FROM cel_images '.
 | 
        
           |  |  | 288 | 			"WHERE id_image = $idImageP ".
 | 
        
           |  |  | 289 | 			' -- '.__FILE__.':'.__LINE__;
 | 
        
           | 2450 | jpm | 290 | 		$utilisateur_courriel = Cel::db()->requeter($requete);
 | 
        
           | 2143 | jpm | 291 |   | 
        
           | 2450 | jpm | 292 | 		$retour = false;
 | 
        
           |  |  | 293 | 		if (!empty($utilisateur_courriel) && isset($utilisateur_courriel[0]['courriel_utilisateur'])) {
 | 
        
           |  |  | 294 | 			$retour = $utilisateur_courriel[0]['courriel_utilisateur'];
 | 
        
           |  |  | 295 | 		}
 | 
        
           |  |  | 296 | 		return $retour;
 | 
        
           |  |  | 297 | 	}
 | 
        
           | 2143 | jpm | 298 |   | 
        
           | 2450 | jpm | 299 | 	private function getIdsMotsClesImage($id_image) {
 | 
        
           |  |  | 300 | 		$requete = 'SELECT DISTINCT id_mot_cle '.
 | 
        
           |  |  | 301 | 			'FROM cel_mots_cles_images_liaison '.
 | 
        
           | 2462 | jpm | 302 | 			"WHERE id_element_lie = $id_image ".
 | 
        
           |  |  | 303 | 			' -- '.__FILE__.':'.__LINE__;
 | 
        
           | 2450 | jpm | 304 | 		return Cel::db()->requeter($requete);
 | 
        
           |  |  | 305 | 	}
 | 
        
           |  |  | 306 | }
 |