Subversion Repositories eFlore/Applications.del

Rev

Rev 1422 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?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;
        }
}