Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 736 Rev 853
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
-
 
3
 
2
/**
4
/**
3
 
-
 
4
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
5
 * @author Aurélien Peronnet <aurelien@tela-botanica.org>
-
 
6
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
7
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
8
 * @version $Id$
-
 
9
 * @copyright © 2010, Aurélien Peronnet
-
 
10
*/
Line 5... Line -...
5
 
-
 
6
 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
-
 
7
 respectant les principes de diffusion des logiciels libres. Vous pouvez
-
 
8
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
-
 
9
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA 
-
 
10
 sur le site "http://www.cecill.info".
-
 
11
 En contrepartie de l'accessibilit? au code source et des droits de copie,
-
 
12
 de modification et de redistribution accord?s par cette licence, il n'est
-
 
13
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
-
 
14
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
-
 
15
 titulaire des droits patrimoniaux et les conc?dants successifs.
-
 
16
 
-
 
17
 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
-
 
18
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
-
 
19
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant 
-
 
20
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ? 
-
 
21
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
-
 
22
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
-
 
23
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
-
 
24
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
-
 
25
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement, 
-
 
26
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?. 
-
 
27
                                                                                                      
-
 
28
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez 
-
 
29
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
-
 
30
 termes.
-
 
31
 
-
 
32
 */
-
 
33
 
-
 
34
 
-
 
35
// in : utf8
-
 
36
// out : utf8
11
 
37
/*
12
/**
38
 * InventoryImageCount.php  
13
 * InventoryImageCount.php  
-
 
14
 * 
-
 
15
 * in : utf8
39
 * 
16
 * out : utf8
40
 * Cas d'utilisation :
17
 * Cas d'utilisation :
41
 * Service recherche du nombre a partir de divers crit�res
18
 * Service recherche du nombre a partir de divers critères
42
 * 
19
 * 
43
 * 2: Le service recherche le nombre d'images correspondant au crit�res demand�
20
 * 2: Le service recherche le nombre d'images correspondant aux critères demandés
44
 * 3: Le service renvoie le nombre calcule
21
 * 3: Le service renvoie le nombre calculé
45
 */ 
-
 
46
 
22
 */ 
47
 Class InventoryImageCount extends DBAccessor {
-
 
48
 
-
 
49
	var $config;
-
 
50
	
-
 
Line 51... Line -...
51
	function InventoryImageCount($config) {
-
 
52
 
23
 class InventoryImageCount extends Cel {
53
		$this->config=$config;
-
 
54
	}
-
 
55
	
24
 
-
 
25
	/**
-
 
26
	 * renvoie le nombre d'images correspondant aux criteres 
-
 
27
	 * uid[0] : utilisateur obligatoire
56
	
28
	 * uid[1] : critères de filtrage de la forme critère1=valeur1;critère2=valeur2
57
	// renvoie lee nombre d'images correspondant aux criteres 
29
	 */
58
	function getElement($uid)
-
 
59
	{
30
	function getElement($uid)
60
			// uid[0] : utilisateur obligatoire
31
	{
61
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
32
		//TODO : remplacer le contenu du $uid[1] par le tableau $_GET;
-
 
33
 
62
			
34
		// Controle detournement utilisateur
63
		// Controle detournement utilisateur 
-
 
64
		$this->controleUtilisateur($uid[0]);
-
 
65
			
-
 
66
		$DB=$this->connectDB($this->config,'cel_db');
-
 
Line -... Line 35...
-
 
35
	    session_start();
-
 
36
		$this->controleUtilisateur($uid[0]);
-
 
37
		
-
 
38
		$chercheur_images = new RechercheImage($this->config);
-
 
39
 
-
 
40
		$numero_page = 0;
67
		
41
		$taille_page = 50;
68
		$criteres = array() ;
42
		$criteres = array();
69
		
43
 
70
		if(isset($uid[1]))
44
		if(isset($uid[1]))
Line 71... Line 45...
71
		{
45
		{
72
			$criteres = explode("&", $uid[1]) ;
-
 
73
		}
-
 
74
 
-
 
75
		$query='SELECT COUNT(*) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND '  ;
-
 
Line 76... Line -...
76
			
-
 
77
		foreach($criteres as $pair)
-
 
78
		{
-
 
79
			$nom_valeur = explode("=",$pair) ;
-
 
80
 
-
 
81
			if(sizeof($nom_valeur) != 0)
-
 
82
			{
-
 
83
					if($nom_valeur[0] == "ci_limite")
-
 
84
					{
-
 
85
						$limite = $DB->escapeSimple($nom_valeur[1]) ;
-
 
86
					}
-
 
87
					elseif($nom_valeur[0] == "ci_numero_page")
-
 
88
					{
-
 
89
						$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
-
 
90
					}
-
 
91
					elseif($nom_valeur[0] == "ci_meta_mots_cles")
-
 
92
					{
-
 
93
						$mots_cles = rtrim($nom_valeur[1], ',') ;
-
 
94
						$mots_cles_liste = explode("," , $mots_cles) ;
-
 
95
 
-
 
96
						foreach($mots_cles_liste as $mot_cle)
-
 
97
						{
-
 
98
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
-
 
99
							$query .= ' AND ' ;
-
 
100
						}
-
 
101
					}
-
 
102
					elseif($nom_valeur[0] == "ci_meta_comment")
-
 
103
					{
46
			$criteres = $chercheur_images->parserRequeteCriteres($uid[1]) ;
104
						$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
-
 
105
 
-
 
106
						foreach($mots_comment_liste as $mot_comment)
-
 
107
						{
-
 
108
							$mot_comment = trim($mot_comment) ;
-
 
109
							$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
-
 
110
							$query .= ' AND ' ;
-
 
111
						}
-
 
112
					}
-
 
113
					elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
-
 
114
					{
-
 
115
						$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
-
 
116
						$query .= ' AND ' ;
-
 
117
					}
-
 
118
					elseif($nom_valeur[0] == "ci_id_tampon")
-
 
119
					{
-
 
120
						$ids_tampon = rtrim($nom_valeur[1], ',') ;
-
 
121
						$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')'.
47
		}
122
						$query .= ' AND ';
-
 
123
					}
-
 
124
					elseif($nom_valeur[0] == "ci_recherche_generale")
-
 
125
					{
-
 
126
						$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
-
 
127
						$query .= ' AND ';
-
 
128
					}
-
 
129
					else
-
 
130
					{
-
 
131
						$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
-
 
132
						$query .= '" AND ' ;
-
 
133
					}
-
 
134
			}
-
 
135
		}
-
 
136
		
-
 
137
		$query = rtrim($query,' AND ') ;
-
 
138
		
-
 
139
		$res =& $DB->query($query);
-
 
140
                if (PEAR::isError($res)) {
-
 
141
		
-
 
142
                	die($res->getMessage());
-
 
143
                }
-
 
144
		
-
 
145
		$results = array() ; 
-
 
146
		
-
 
147
		while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) 
-
 
148
		{
48
 
149
			$result[] = $image[0] ;
49
		$retour = $chercheur_images->compterImages($uid[0], $criteres);
150
		}
50
 
151
		
51
		$retour_encode = json_encode($retour) ;
152
		$res = json_encode($result) ; 
52
		$retour_encode = $this->nettoyerCaracteresNuls($retour_encode);
Line 153... Line -...
153
		
-
 
154
		header("content-type: text/json") ;
-
 
155
		print $res ;
-
 
156
		exit() ;
-
 
157
	}
-
 
158
	
-
 
159
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
-
 
160
		
-
 
161
		$requete_recherche_taxon .= 'SELECT coi_ce_image 
-
 
162
								FROM cel_obs_images
-
 
163
								WHERE coi_ce_observation IN ' .
-
 
164
								'(SELECT ordre ' .
-
 
165
									'FROM cel_inventory '.
-
 
166
									'WHERE identifiant ="'.$id_utilisateur.'" '.
-
 
167
									'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
-
 
168
								')';
-
 
169
								
-
 
170
		$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
-
 
171
		
53
 
172
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
-
 
173
							
-
 
174
		return $requete_recherche_generale;
-
 
175
	}
-
 
176
	
-
 
177
	private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
-
 
178
		
-
 
179
		$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
-
 
180
		
-
 
181
		$requete_recherche_date = '';
-
 
182
		
-
 
183
		if(is_numeric($valeur) && $valeur != "00") { 
54
		header("content-type: application/json") ;
184
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
55
		print $retour_encode ;
185
		} else {
56
		exit() ;
186
			$requete_recherche_date = '( ci_meta_date IS NULL OR ci_meta_date = "0000-00-00")';
57
	}
187
		}
58