Subversion Repositories eFlore/Applications.del

Rev

Rev 1448 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1448 Rev 1514
Line 92... Line 92...
92
	
92
	
93
		// En fonction des paramètres de recherche, on n'effectue
93
		// En fonction des paramètres de recherche, on n'effectue
94
		// pas la même requête, pour optimiser les jointures et les
94
		// pas la même requête, pour optimiser les jointures et les
95
		// rapidités d'éxécution.
95
		// rapidités d'éxécution.
96
		$type = $this->getTypeRequete($ressources, $parametres);
-
 
97
	
96
		$type = $this->getTypeRequete($ressources, $parametres);
98
		switch ($type) {
97
		switch ($type) {
99
			case 'obs' :
98
			case 'obs' :
100
				$liaisons = $this->chargerLiaisonsObs();
99
				$liaisons = $this->chargerLiaisonsObs();
101
			break;
100
			break;
Line 170... Line 169...
170
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
169
						$where[] = ' '.$this->mappingFiltre['ns'].' LIKE '.$this->proteger($valeurMasque.' %');
171
						break;
170
						break;
172
					case 'tag' :
171
					case 'tag' :
173
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
172
						$where[] = ' '.$this->creerFiltreMotsCles($valeurMasque);
174
						break;
173
						break;
-
 
174
					case 'tag_cel' :
-
 
175
						$where[] = ' '.$this->creerFiltreMotsClesCel($valeurMasque);
-
 
176
						break;
-
 
177
					case 'tag_pictoflora' :
-
 
178
						$where[] = ' '.$this->creerFiltreMotsClesPictoflora($valeurMasque);
-
 
179
						break;
175
					case 'referentiel' :
180
					case 'referentiel' :
176
						$where[] = ' dob.nom_referentiel LIKE '.$this->proteger($valeurMasque.'%');
181
						$where[] = ' dob.nom_referentiel LIKE '.$this->proteger($valeurMasque.'%');
177
						break;
182
						break;
178
					case 'ns' :
183
					case 'ns' :
179
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
184
						$where[] = ' nom_sel LIKE '.$this->proteger($valeurMasque.'%');
Line 357... Line 362...
357
				')';
362
				')';
Line 358... Line 363...
358
	
363
	
359
		return $masque;
364
		return $masque;
Line -... Line 365...
-
 
365
	}
-
 
366
	
-
 
367
	/**
-
 
368
	* Générer la chaine de recherche dans les mots clés en fonction du masque
-
 
369
	* @param $valeurMasque le mot clé recherché
-
 
370
	* */
-
 
371
	private function creerFiltreMotsClesPictoflora($valeurMasque) {
-
 
372
	
-
 
373
		$mots_cles = explode(' ', $valeurMasque);
-
 
374
		$requeteMotsClesImg = array();
-
 
375
		$requeteMotsClesObs = array();
-
 
376
		$requeteMotsClesImgPublic = array();
-
 
377
	
-
 
378
		foreach($mots_cles as $mot_cle) {
-
 
379
			//TODO: rechercher sur les mots clés normalisés dans tous les cas ?
-
 
380
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
-
 
381
			$motsCleProtege = $this->proteger($this->normaliserMotCle('%'.$mot_cle.'%'));
-
 
382
			$requeteMotsClesImgPublic[] = 'di.id_image IN (SELECT ce_image FROM del_image_tag WHERE tag_normalise LIKE '.$motsCleProtege.' AND actif = 1)';
-
 
383
		}
-
 
384
	
-
 
385
		$requeteMotsClesImgPublic = implode(' AND ', $requeteMotsClesImgPublic);
-
 
386
	
-
 
387
		$masque = '('.$requeteMotsClesImgPublic.') ';
-
 
388
	
-
 
389
		return $masque;
-
 
390
	}
-
 
391
	
-
 
392
	private function creerFiltreMotsClesCel($valeurMasque) {
-
 
393
		$mots_cles = explode(' ', $valeurMasque);
-
 
394
		$requeteMotsClesImg = array();
-
 
395
		$requeteMotsClesObs = array();
-
 
396
		
-
 
397
		foreach($mots_cles as $mot_cle) {
-
 
398
			//TODO: rechercher sur les mots clés normalisés dans tous les cas ?
-
 
399
			$requeteMotsCles = $this->proteger('%'.$mot_cle.'%');
-
 
400
			$motsCleProtege = $this->proteger($this->normaliserMotCle('%'.$mot_cle.'%'));
-
 
401
			$requeteMotsClesImg[] = 'di.mots_cles_texte LIKE '.$requeteMotsCles;
-
 
402
			$requeteMotsClesObs[] = 'dob.mots_cles_texte LIKE '.$requeteMotsCles;
-
 
403
		}
-
 
404
		
-
 
405
		$requeteMotsClesImg = implode(' AND ', $requeteMotsClesImg);
-
 
406
		$requeteMotsClesObs = implode(' AND ', $requeteMotsClesObs);
-
 
407
		
-
 
408
		$masque = '('.
-
 
409
						'('.$requeteMotsClesImg.') OR '.
-
 
410
						'('.$requeteMotsClesObs.') '.
-
 
411
					')';
-
 
412
		
-
 
413
		return $masque;
360
	}
414
	}
361
	
415
	
362
	// ??
416
	// ??
363
	private function assemblercomptageOccurencesMotsClesCel() {
417
	private function assemblercomptageOccurencesMotsClesCel() {
364
		$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches');
418
		$chaineMotsClesAffiches = $this->conteneur->getParametre('mots_cles_cel_affiches');
Line 508... Line 562...
508
		// commune
562
		// commune
509
		if (isset($masques['masque.departement'])) {
563
		if (isset($masques['masque.departement'])) {
510
			$dept = $masques['masque.departement'];
564
			$dept = $masques['masque.departement'];
511
			$conditionsObs[] = $this->creerFiltreIdZoneGeo($dept);
565
			$conditionsObs[] = $this->creerFiltreIdZoneGeo($dept);
512
		}
566
		}
-
 
567
		
-
 
568
		if (isset($masques['masque.tag_cel'])) {
-
 
569
			$motsCles = $masques['masque.tag_cel'];
-
 
570
			$conditionsObs[] = $this->creerFiltreMotsClesCel($motsCles);
-
 
571
		}
Line 513... Line 572...
513
 
572
 
514
		return $conditionsObs;
573
		return $conditionsObs;
Line 515... Line 574...
515
	}
574
	}
516
	
575
	
517
	/**
576
	/**
518
	 * Obtenir le tableu de chaines de condition de requete images en fonction des masques
577
	 * Obtenir le tableu de chaines de condition de requete images en fonction des masques
519
	 * */
578
	 * */
520
	private function getConditionsImages() {
579
	private function getConditionsImages() {
521
		$conditionsImg = array();
580
		$conditionsImg = array();
522
		$masques = $this->masque->getMasque();
581
		$masques = $this->masque->getMasque();
523
		if (isset($masques['masque.tag'])) {
-
 
524
			$tag = $masques['masque.tag'];
582
		if (isset($masques['masque.tag_pictoflora'])) {
525
			$conditionsImg[] = " dit.tag_normalise LIKE '$tag%' ";
583
			$tag = $masques['masque.tag_pictoflora'];
Line 526... Line 584...
526
			$conditionsImg[] = " di.mots_cles_texte LIKE '%$tag%' ";
584
			$conditionsImg[] = $this->creerFiltreMotsClesPictoflora($tag);
527
		}
585
		}
Line 723... Line 781...
723
						 ' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation '.
781
						 ' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation '.
724
						 ' LEFT JOIN del_image_tag dit ON dit.ce_image = di.id_image '.
782
						 ' LEFT JOIN del_image_tag dit ON dit.ce_image = di.id_image '.
725
						 ' LEFT JOIN del_utilisateur du ON du.id_utilisateur = di.ce_utilisateur ';
783
						 ' LEFT JOIN del_utilisateur du ON du.id_utilisateur = di.ce_utilisateur ';
Line 726... Line 784...
726
 
784
 
727
		$conditionsImg = $this->getConditionsImages();
785
		$conditionsImg = $this->getConditionsImages();
728
	
786
 
729
		if (!empty($conditionsImg)) {
787
		if (!empty($conditionsImg)) {
730
			$where = ' WHERE ('.implode(' OR ', $conditionsImg).') ';
788
			$where = ' WHERE ('.implode(' OR ', $conditionsImg).') ';
731
			$where .= ' AND dit.actif = 1 ';
789
			$where .= ' AND dit.actif = 1 ';
732
			$requeteImages .= $where;
790
			$requeteImages .= $where;
Line 786... Line 844...
786
				$requetetags = ' SELECT SQL_CALC_FOUND_ROWS doi.id_image, COUNT(id_tag) as total_tags '.
844
				$requetetags = ' SELECT SQL_CALC_FOUND_ROWS doi.id_image, COUNT(id_tag) as total_tags '.
787
						' FROM del_obs_image doi LEFT JOIN del_image_tag dit ON dit.ce_image = doi.id_image AND dit.actif = 1 '.
845
						' FROM del_obs_image doi LEFT JOIN del_image_tag dit ON dit.ce_image = doi.id_image AND dit.actif = 1 '.
788
						 ' INNER JOIN del_image di ON doi.id_image = di.id_image '.
846
						 ' INNER JOIN del_image di ON doi.id_image = di.id_image '.
789
						 ' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation ';
847
						 ' INNER JOIN del_observation dob ON dob.id_observation = doi.id_observation ';
Line 790... Line 848...
790
 
848
 
791
				if (isset($this->parametres['masque.tag'])) {
849
				if (isset($this->parametres['masque.tag_pictoflora'])) {
792
					// Et si on a cherché par tag ?
850
					// Et si on a cherché par tag ?
793
					$tag = $this->parametres['masque.tag'];
851
					$tag = $this->parametres['masque.tag_pictoflora'];
794
					$requetetags .= " WHERE (dit.tag_normalise LIKE '$tag%' OR  di.mots_cles_texte LIKE '%$tag%') ";
852
					$requetetags .= " WHERE (dit.tag_normalise LIKE '$tag%' OR  di.mots_cles_texte LIKE '%$tag%') ";
Line 795... Line 853...
795
				}
853
				}
796
				
854
				
Line 805... Line 863...
805
				}
863
				}
806
				$strtags = empty($tabtags) ? "''" : implode(',', $tabtags);
864
				$strtags = empty($tabtags) ? "''" : implode(',', $tabtags);
Line 807... Line 865...
807
				
865
				
808
	
866
	
809
				// Et si on a cherché par tag ?
867
				// Et si on a cherché par tag ?
810
				if (isset($this->parametres['masque.tag'])) {
868
				if (isset($this->parametres['masque.tag_pictoflora'])) {
811
					$chaineTri .= ' AND ';
869
					$chaineTri .= ' AND ';
812
				} else {
870
				} else {
Line 1157... Line 1215...
1157
		unset($parametres['navigation.depart']);
1215
		unset($parametres['navigation.depart']);
1158
		unset($parametres['navigation.limite']);
1216
		unset($parametres['navigation.limite']);
1159
		unset($parametres['ordre']);
1217
		unset($parametres['ordre']);
Line 1160... Line 1218...
1160
		
1218
		
1161
		// En revanche, chaque masque est associé à un type de requête particulier.
1219
		// En revanche, chaque masque est associé à un type de requête particulier.
1162
		$masquesObservation = array('masque', 'masque.departement', 'masque.ns', 'masque.genre', 'masque.date', 'masque.commune', 'masque.famille', 'masque.auteur', 'masque.nn', 'masque.referentiel');
1220
		$masquesObservation = array('masque', 'masque.departement', 'masque.ns', 'masque.genre', 'masque.date', 'masque.commune', 'masque.famille', 'masque.auteur', 'masque.nn', 'masque.referentiel', 'masque.tag_cel');
Line 1163... Line 1221...
1163
		$masquesImage = array('masque', 'masque.tag');
1221
		$masquesImage = array('masque', 'masque.tag_pictoflora');
1164
		
1222
		
1165
		// Le type de requête est défini par les tables qu'il doit inclure (observation, image, ou les deux) 
1223
		// Le type de requête est défini par les tables qu'il doit inclure (observation, image, ou les deux) 
1166
		$requeteSimple = false;
1224
		$requeteSimple = false;