Subversion Repositories eFlore/Applications.del

Rev

Rev 1422 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1390 raphael 1
<?php
2
/**
3
 * @author		Raphaël Droz <raphael@tela-botanica.org>
4
 * @copyright	Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org)
5
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
6
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
7
 * @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
8
 */
9
 
10
require_once(dirname(__FILE__) . '/../observations/ListeObservations2.php');
11
require_once(dirname(__FILE__) . '/../observations/Observation.php');
12
restore_error_handler();
13
restore_exception_handler();
14
error_reporting(E_ALL);
15
 
16
class ListeImages2 {
17
 
18
	static $format_image_possible = array('O','CRX2S','CRS','CXS','CS','XS','S','M','L','XL','X2L','X3L');
19
	// TODO: INDEX static $tri_possible = array('date_observation','votes','tags');
20
	static $tri_possible = array('date_observation');
21
 
22
	static $default_params = array('format' => 'XL');
23
 
24
	public function __construct(Conteneur $conteneur = null) {
25
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
26
		$this->conteneur->chargerConfiguration('config_images.ini');
27
		$this->gestionBdd = $conteneur->getGestionBdd();
28
		$this->bdd = $this->gestionBdd->getBdd();
29
	}
30
 
31
	public function consulter($ressources, $parametres) {
32
		$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
33
		// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
34
		// toutes les images, mais nous voulons $limite observations uniques.
35
		$req['groupby'][] = 'dob.id_observation';
36
 
37
		$db = $this->bdd;
38
 
39
		// filtrage de l'INPUT général
40
		$params = ListeObservations2::requestFilterParams($parametres, ListeObservations2::$parametres_autorises, $this->conteneur);
41
		// notre propre filtrage sur l'INPUT
42
 
43
		$params = array_merge($params, self::requestFilterParams($parametres, array('format')));
44
 
45
		$this->conteneur->setParametre('url_images', sprintf($this->conteneur->getParametre('url_images'),
46
															 "%09d", $params['format']));
47
 
48
		// création des contraintes (masques)
49
		ListeObservations2::sqlAddConstraint($params, $db, $req, $this->conteneur);
50
 
51
		// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
52
		$idobs_tab = ListeObservations2::getIdObs($params, $req, $db);
53
		// idobs est une liste (toujours ordonnée) des id d'observations recherchées
54
		$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
55
 
56
		if($idobs) {
57
			$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
58
			// XXX
59
		}
60
 
61
		$images = array();
62
		$o = new Observation($this->conteneur);
63
		foreach($idobs as $i) {
64
			$images[$i] = $o->consulter(array($i), array('justthrow' => 1));
65
		}
66
 
67
 
68
		$resultat = new ResultatService();
69
		$resultat->corps = array('entete' => ListeObservations2::makeJSONHeader($total, $params, Config::get('url_service')),
70
								 'resultats' => $images);
71
		return $resultat;
72
 
73
	}
74
 
75
	static function requestFilterParams(Array $params) {
76
		$p['format'] = ListeObservations2::unsetIfInvalid($params, 'format', self::$format_image_possible);
77
		$p = array_filter($p, create_function('$a','return !in_array($a, array("",false,null),true);'));
78
		$p = array_merge(self::$default_params, $p);
79
		return $p;
80
	}
81
}