Subversion Repositories eFlore/Applications.cel

Rev

Rev 798 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
3
 
4
 Aurelien Peronnet aurelienperonnet@gmail.com 2008
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
37
/*
38
 * InventoryImageCount.php
39
 *
40
 * Cas d'utilisation :
41
 * Service recherche du nombre a partir de divers crit�res
42
 *
43
 * 2: Le service recherche le nombre d'images correspondant au crit�res demand�
44
 * 3: Le service renvoie le nombre calcule
45
 */
46
 
47
 Class InventoryImageCount extends DBAccessor {
48
 
49
	var $config;
50
 
51
	function InventoryImageCount($config) {
52
 
53
		$this->config=$config;
54
	}
55
 
56
 
57
	// renvoie lee nombre d'images correspondant aux criteres
58
	function getElement($uid)
59
	{
60
			// uid[0] : utilisateur obligatoire
61
			// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
62
 
63
		// Controle detournement utilisateur
64
		$this->controleUtilisateur($uid[0]);
65
 
66
		$DB=$this->connectDB($this->config,'cel_db');
67
 
68
		$criteres = array() ;
69
 
70
		if(isset($uid[1]))
71
		{
72
			$criteres = explode("&", $uid[1]) ;
73
		}
74
 
75
		$query='SELECT COUNT(*) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND '  ;
76
 
77
		foreach($criteres as $pair)
78
		{
664 aurelien 79
			$nom_valeur = explode("=",$pair) ;
80
 
81
			if(sizeof($nom_valeur) != 0)
416 aurelien 82
			{
664 aurelien 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
					{
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).')'.
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
					}
416 aurelien 134
			}
135
		}
136
 
137
		$query = rtrim($query,' AND ') ;
664 aurelien 138
 
416 aurelien 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
		{
149
			$result[] = $image[0] ;
150
		}
151
 
152
		$res = json_encode($result) ;
153
 
1115 aurelien 154
		header("content-type: application/json") ;
416 aurelien 155
		print $res ;
156
		exit() ;
157
	}
664 aurelien 158
 
159
	private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
160
 
1115 aurelien 161
		$requete_recherche_taxon = 'SELECT coi_ce_image
664 aurelien 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.'%" ';
1115 aurelien 171
		$requete_recherche_nom_or = ' ci_nom_original LIKE "%'.$chaine_recherche.'%" ';
172
		$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.') OR ('.$requete_recherche_nom_or.'))' ;
173
 
664 aurelien 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
 
736 aurelien 183
		if(is_numeric($valeur) && $valeur != "00") {
664 aurelien 184
			$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
736 aurelien 185
		} else {
186
			$requete_recherche_date = '( ci_meta_date IS NULL OR ci_meta_date = "0000-00-00")';
664 aurelien 187
		}
188
 
189
		return $requete_recherche_date;
190
	}
416 aurelien 191
}
192
?>