Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 888 Rev 966
Line 1... Line 1...
1
<?php
1
<?php
Line 243... Line 239...
243
 
239
 
244
	//ajout d'une limite seulement pour les listes (pas plus de 100 resultats retournés pr les requetes
240
	//ajout d'une limite seulement pour les listes (pas plus de 100 resultats retournés pr les requetes
245
	// suivantes : /noms-vernaculaires et /noms-vernaculaires/#id/relations)
241
	// suivantes : /noms-vernaculaires et /noms-vernaculaires/#id/relations)
246
	public function formerRequeteLimite() {
-
 
247
		if (in_array($this->format_reponse , array($this->service.'/id', $this->service.'/id/champs'))) {
242
	static function formerRequeteLimite(&$depart, $total, $limite) {
248
			$this->requete_limite = '';
-
 
249
		} elseif (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) {
-
 
250
			$this->limite_requete['depart'] =
243
        if ($depart > $total) {
251
				(($this->total_resultat - $this->limite_requete['limite']) < 0) ? 0 : ($this->total_resultat - $this->limite_requete['limite']);
244
			$depart = $total - $limite < 0 ? 0 : ($total - $limite);
252
			$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];
245
			return ' LIMIT ' . $depart . ', ' . $limite;
253
		} else {
-
 
254
			$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];
-
 
255
		}
246
        }
256
		return $this->requete_limite;
247
        return ' LIMIT ' . $depart . ', ' . $limite;
Line 257... Line 248...
257
	}
248
	}
258
 
249
 
-
 
250
	//on récupère le nombre total de résultats de la requete (ex : le nombre d'id contenu dans la liste /noms-vernaculaires)
-
 
251
	public function recupererTotalResultat() {
-
 
252
        $res = $this->getBdd()->recuperer(sprintf(
259
	//on récupère le nombre total de résultats de la requete (ex : le nombre d'id contenu dans la liste /noms-vernaculaires)
253
            'SELECT COUNT(%s) AS nombre FROM %s WHERE %s -- %s:%d',
260
	public function recupererTotalResultat() {
-
 
261
		$distinct = ($this->format_reponse == 'noms-vernaculaires/attributions') ? 'id' : 'distinct(id)';
254
			
262
		$requete = 'SELECT count('.$distinct.') as nombre FROM '
255
            $this->format_reponse == 'noms-vernaculaires/attributions' ? 'id' : 'distinct(id)',
263
			.$this->table
256
            $this->table,
264
			.$this->formerRequeteCondition();
257
            $this->requete_condition ? implode(' AND ', $this->requete_condition) : 'TRUE',
265
		$res = $this->getBdd()->recuperer($requete);
258
            __FILE__, __LINE__));
-
 
259
 
266
 
260
		if (! $res)
-
 
261
            throw new Exception('Données introuvables', RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE);
267
		if ($res) {
262
        if($res['nombre'] == 0) {
-
 
263
            print json_encode(
268
			$total = $res['nombre'];
264
                array(
269
		} else {
265
                    "entete" => array(
-
 
266
                        "depart" => $this->limite_requete['depart'],
-
 
267
                        "limite" => $this->limite_requete['limite'],
-
 
268
                        "masque" => $this->recupererMasque(),
-
 
269
                        "total" => 0
-
 
270
                    ),
-
 
271
                    "resultat" => array()
-
 
272
                ));
270
			$t = 'Fonction recupererTotalResultat() : <br/>Données introuvables dans la base '.$requete;
273
            die; // die() très dommage (pour phpunit), mais la stack d'imbrication ne nous permet pas de retourner proprement
271
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $t);
274
            }
272
		}
275
 
Line 273... Line 276...
273
		return $total;
276
        return $res['nombre'];
274
	}
277
	}
275
 
278
 
Line 331... Line 334...
331
	}
334
	}
Line 332... Line 335...
332
	
335
	
333
	public function hierarchiserResultat($resultat) {
336
	public function hierarchiserResultat($resultat) {
334
		//tri recherche floue
337
		//tri recherche floue
335
		if (isset($this->parametres['masque.nv'])) {
338
		if (isset($this->parametres['masque.nv'])) {
336
			$resultat = $this->trierRechercheFloue($this->parametres['masque.nv'], $resultat, 'nom_vernaculaire');
339
			return $this->trierRechercheFloue($this->parametres['masque.nv'], $resultat, 'nom_vernaculaire');
337
		}
340
		}
338
		if (isset($this->parametres['masque'])) {
341
		if (isset($this->parametres['masque'])) {
339
			$resultat = $this->trierRechercheFloue($this->parametres['masque'], $resultat, 'nom_vernaculaire');
342
			return $this->trierRechercheFloue($this->parametres['masque'], $resultat, 'nom_vernaculaire');
340
		}
343
		}
341
		return $resultat;
344
		return $resultat;
Line 342... Line 345...
342
	}
345
	}
Line 346... Line 349...
346
		foreach ($this->parametres as $param=>$valeur) {
349
		foreach ($this->parametres as $param=>$valeur) {
347
			if (strstr($param, 'masque') != false) {
350
			if (strstr($param, 'masque') != false) {
348
				$tab_masque[] = $param.'='.$valeur;
351
				$tab_masque[] = $param.'='.$valeur;
349
			}
352
			}
350
		}
353
		}
351
		$masque = implode('&', $tab_masque);
354
		return implode('&', $tab_masque);
352
		return $masque;
-
 
353
	}
355
	}
Line 354... Line 356...
354
	
356
	
355
	public function formaterEnOss($resultat) {
357
	public function formaterEnOss($resultat) {
356
		$table_nom = array();
358
		$table_nom = array();
Line 363... Line 365...
363
				}
365
				}
364
			}
366
			}
365
		}
367
		}
366
		if (isset($this->masque)) $masque = implode('&', $this->masque);
368
		if (isset($this->masque)) $masque = implode('&', $this->masque);
367
		else $masque = 'Pas de masque';
369
		else $masque = 'Pas de masque';
368
		$table_retour_oss = array($masque, $oss);
370
		return array($masque, $oss);
369
		return $table_retour_oss;
-
 
370
	}
371
	}
Line 371... Line 372...
371
	
372
	
372
	public function formaterNomsVernaculairesAttributions($resultat) {
373
	public function formaterNomsVernaculairesAttributions($resultat) {
373
		//on remplie la table $table_retour_json['entete']
374
		//on remplie la table $table_retour_json['entete']