* @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ class CelImageDoublon extends Cel { /** * Méthode appelée avec une requête de type GET. */ public function getElement($params) { $parametres = $this->traiterParametres(array('mode', 'utilisateur'), $params, false); extract($parametres); $contenu = ''; if ($this->authentifierUtilisateur()) { $retour = null; if (isset($mode)) { $methode = $this->traiterNomMethodeGet($mode); if (method_exists($this, $methode)) { $retour = $this->$methode($parametres); } else { $service = get_class($this); $this->messages[] = "Ce type de mode '$mode' pour le service '$service' n'est pas disponible."; } } else { $this->messages[] = "Vous devez indiquer un type de mode."; } if (is_null($retour)) { $contenu = 'Un problème est survenu : '.print_r($this->messages, true); } else { if ($retour['type'] == 'widget') { $squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html'; $contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']); } else if ($retour['type'] == 'json') { $contenu = $retour['donnees']; } } } // Envoie sur la sortie standard $encodage = 'UTF-8'; $mime = 'text/html'; $formatage_json = (isset($retour) && $retour['type'] == 'json') ? true : false; $this->envoyer($contenu, $mime, $encodage, $formatage_json); } /** * Carte par défaut */ private function getDoublonHtml($parametres) { $widget = null; $utilisateur_mail = Cel::getAuthIdentifiant(); $utilisateur_infos = new GestionUtilisateur($this->config); $utilisateur = $utilisateur_infos->obtenirUtilisateurSiExiste($utilisateur_mail); $utilisateur = $utilisateur['id_utilisateur']; // Création des infos du widget $widget['type'] = 'widget'; $widget['donnees']['utilisateur'] = $utilisateur_mail; $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 $idUtilisateurP = Cel::db()->proteger($utilisateur); $requete = 'SELECT id_image, ordre, nom_original, md5 '. 'FROM cel_images '. "WHERE ce_utilisateur = $idUtilisateurP ". ' -- '.__FILE__.':'.__LINE__; $images = Cel::db()->requeter($requete); // Traitement $doublons = array(); $images_doublons_id = array(); $md5 = array(); foreach ($images as $img) { if (!isset($md5[$img['md5']])) { $md5[$img['md5']] = array( 'url' => $this->getUrlImage($img['id_image'], 'CXS'), 'obs_ordre' => array(), 'img_ordre' => $img['ordre'], 'img_id' => $img['id_image']); } else { if (!isset($doublons[$img['md5']])) { $id_img = $md5[$img['md5']]['img_id']; $doublons[$img['md5']][$id_img] = $md5[$img['md5']]; $images_doublons_id[] = Cel::db()->proteger($id_img); } $doublons[$img['md5']][$img['id_image']] = array( 'url' => $this->getUrlImage($img['id_image'], 'CXS'), 'obs_ordre' => array(), 'img_ordre' => $img['ordre'], 'img_id' => $img['id_image']); $images_doublons_id[] = Cel::db()->quote($img['id_image']); } } if (count($images_doublons_id) > 0) { $idsImgConcat = implode(',', $images_doublons_id); $requete = 'SELECT cim.id_image, nom_original, md5, co.ordre AS ordre_obs '. 'FROM cel_images AS cim '. ' LEFT JOIN cel_obs AS co '. ' ON (cim.ce_observation = co.id_observation) '. "WHERE cim.ce_utilisateur = $idUtilisateurP ". "AND cim.id_image IN ($idsImgConcat) ". ' -- '.__FILE__.':'.__LINE__; $infos = Cel::db()->requeter($requete); foreach ($infos as $info) { if (isset($doublons[$info['md5']][$info['id_image']]) && ! $this->etreNull($info['ordre_obs'])) { $doublons[$info['md5']][$info['id_image']]['obs_ordre'][] = $info['ordre_obs']; } } } } return $doublons; } }