Subversion Repositories eFlore/Applications.cel

Rev

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

<?php
/**
 * Service fournissant une liste d'images doublon.
 * Encodage en entrée : utf8
 * Encodage en sortie : utf8
 *
 * Cas d'utilisation :
 * /CelImageDoublon/Sortie/Utilisateur : images doublon d'un utilisateur.
 *
 * Sortie = Type de sortie : html ou json. Par défaut : html
 * Utilisateur = identifiant (= courriel) de l'utilisateur.
 *
 * @author Jean-Pascal MILCENT <jpm@clapas.org>
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @version $Id$
 * @copyright © 2010, Jean-Pascal MILCENT
 */
class CelImageDoublon extends Cel {

        /**
         * Méthode appelée avec une requête de type GET.
         */
        public function getElement($params) {
                $retour = null;
                $parametres = $this->traiterParametres(array('sortie', 'utilisateur'), $params, false);
                extract($parametres);

                if (isset($sortie)) {
                        $methode = $this->traiterNomMethodeGet($sortie);
                        if (method_exists($this, $methode)) {
                                $retour = $this->$methode($parametres);
                        } else {
                                $this->messages[] = "Ce type de carte '$methode' n'est pas disponible.";
                        }
                } else {
                        $this->messages[] = "Vous devez indiquer un type de sortie.";
                }

                if (is_null($retour)) {
                        $info = 'Un problème est survenu : '.print_r($this->messages, true);
                        $this->envoyer($info);
                } else {
                        if ($retour['type'] == 'widget') {
                                $squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';
                                $html = $this->traiterSquelettePhp($squelette, $retour['donnees']);
                                $this->envoyer($html);
                        } else if ($retour['type'] == 'json') {
                                $this->envoyer($retour['donnees']);
                        }
                }
        }

        /**
         * Carte par défaut
         */
        public function getDoublonHtml($parametres) {
                $widget = null;
                extract($parametres);

                // Création des infos du widget
                $widget['type'] = 'widget';
                $widget['donnees']['utilisateur'] = $utilisateur;
                $widget['donnees']['doublons'] = $this->getImagesDoublon($utilisateur);
                $widget['squelette'] = 'doublon_defaut';

                return $widget;
        }

        /**
         * Images en doublon d'un utilisateur
         */
        private function getImagesDoublon($utilisateur) {
                $doublons = null;

                if (isset($utilisateur)) {
                        // Un utilisateur en particulier
                        $requete =      'SELECT ci_id_image, ci_ordre, ci_nom_original, ci_md5 '.
                                                'FROM cel_images '.
                                                "WHERE ci_ce_utilisateur = '$utilisateur' ";
                        $images = $this->executerRequete($requete);

                        // Traitement
                        $doublons = array();
                        $md5 = array();
                        foreach ($images as $img) {
                                if (!isset($md5[$img['ci_md5']])) {
                                        $md5[$img['ci_md5']][] = array('url' => $this->creerUrlImage($img['ci_id_image']), 'num' => $img['ci_ordre']);
                                } else {
                                        if (!isset($doublons[$img['ci_md5']])) {
                                                $doublons[$img['ci_md5']] = $md5[$img['ci_md5']];
                                        }
                                        $doublons[$img['ci_md5']][] = array('url' => $this->creerUrlImage($img['ci_id_image']), 'num' => $img['ci_ordre']);
                                }
                        }
                }

                //echo '<pre>'.print_r($doublons, true).'</pre>';
                return $doublons;
        }

        private function creerUrlImage($id_image, $taille = 'S') {
        $chemin_sur_serveur = $this->config['cel_db']['url_images'];
                $id_image = sprintf('%09s', $id_image);
                $id_image = wordwrap($id_image, 3 , '_', true);

                $niveauDossier = split('_', $id_image);
                $dossierNiveau1 = $niveauDossier[0];
                $dossierNiveau2 = $niveauDossier[1];

                $chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2;
                $chemin_img = "$chemin_sur_serveur_final/$taille/{$id_image}_$taille.jpg";
                return $chemin_img;
        }
}