Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1389 → Rev 1390

/trunk/services/modules/0.1/images/ListeImages2.php
New file
0,0 → 1,81
<?php
/**
* @author Raphaël Droz <raphael@tela-botanica.org>
* @copyright Copyright (c) 2013, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images
*/
 
require_once(dirname(__FILE__) . '/../observations/ListeObservations2.php');
require_once(dirname(__FILE__) . '/../observations/Observation.php');
restore_error_handler();
restore_exception_handler();
error_reporting(E_ALL);
 
class ListeImages2 {
 
static $format_image_possible = array('O','CRX2S','CRS','CXS','CS','XS','S','M','L','XL','X2L','X3L');
// TODO: INDEX static $tri_possible = array('date_observation','votes','tags');
static $tri_possible = array('date_observation');
 
static $default_params = array('format' => 'XL');
 
public function __construct(Conteneur $conteneur = null) {
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
$this->conteneur->chargerConfiguration('config_images.ini');
$this->gestionBdd = $conteneur->getGestionBdd();
$this->bdd = $this->gestionBdd->getBdd();
}
 
public function consulter($ressources, $parametres) {
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array());
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
// toutes les images, mais nous voulons $limite observations uniques.
$req['groupby'][] = 'dob.id_observation';
 
$db = $this->bdd;
 
// filtrage de l'INPUT général
$params = ListeObservations2::requestFilterParams($parametres, ListeObservations2::$parametres_autorises, $this->conteneur);
// notre propre filtrage sur l'INPUT
 
$params = array_merge($params, self::requestFilterParams($parametres, array('format')));
 
$this->conteneur->setParametre('url_images', sprintf($this->conteneur->getParametre('url_images'),
"%09d", $params['format']));
 
// création des contraintes (masques)
ListeObservations2::sqlAddConstraint($params, $db, $req, $this->conteneur);
 
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
$idobs_tab = ListeObservations2::getIdObs($params, $req, $db);
// idobs est une liste (toujours ordonnée) des id d'observations recherchées
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab));
 
if($idobs) {
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']);
// XXX
}
 
$images = array();
$o = new Observation($this->conteneur);
foreach($idobs as $i) {
$images[$i] = $o->consulter(array($i), array('justthrow' => 1));
}
 
 
$resultat = new ResultatService();
$resultat->corps = array('entete' => ListeObservations2::makeJSONHeader($total, $params, Config::get('url_service')),
'resultats' => $images);
return $resultat;
 
}
 
static function requestFilterParams(Array $params) {
$p['format'] = ListeObservations2::unsetIfInvalid($params, 'format', self::$format_image_possible);
$p = array_filter($p, create_function('$a','return !in_array($a, array("",false,null),true);'));
$p = array_merge(self::$default_params, $p);
return $p;
}
}