Subversion Repositories eFlore/Applications.cel

Rev

Rev 2458 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2458 jpm 2
// declare(encoding='UTF-8');
416 aurelien 3
/**
2458 jpm 4
 * Service renvoyant au format JSON les dernières observations publiques d'un utilisateur.
5
 * Utilisée par l'annuaire appelant les web services résumé de chaque application.
6
 *
7
 * @internal   Mininum PHP version : 5.2
8
 * @category   CEL
9
 * @package    Services
10
 * @subpackage Observations
11
 * @version    0.1
12
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
13
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
14
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
15
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
16
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
17
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
18
 */
861 aurelien 19
class Resume extends Cel {
416 aurelien 20
 
2446 jpm 21
	public function getElement($uid){
22
		$idUtilisateurP = Cel::db()->proteger($uid[1]);
23
		$requete = 'SELECT co.*, ci.id_image, ci.nom_original, ci.largeur, ci.hauteur '.
24
			'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (id_observation = ce_observation) '.
25
			"WHERE co.ce_utilisateur = $idUtilisateurP ".
26
			'ORDER BY co.date_modification DESC '.
27
			'LIMIT 0,5 '.
28
			' -- '.__FILE__.':'.__LINE__;
29
		$resultats = Cel::db()->requeter($requete);
416 aurelien 30
 
2446 jpm 31
		$urlImgTpl = $this->config['settings']['celImgUrlTpl'];
32
		$urlAppliCel = $this->config['settings']['celAppliUrl'];
33
		$resume = array(
34
			'titre' => 'Vos dernières observations avec photos publiées',
35
			'lien_appli' => '<a href="'.$urlAppliCel.'"> Accéder au carnet en ligne </a>');
416 aurelien 36
 
2446 jpm 37
		if ($resultats !== false && is_array($resultats) && count($resultats) == 0) {
38
			$resume['message'] = 'Aucune observation saisie pour le moment';
39
		} else if ($resultats !== false && is_array($resultats) && count($resultats) > 0) {
416 aurelien 40
 
2446 jpm 41
			foreach ($resultats as $obs) {
42
				$obs = array_filter($obs, array($this, 'nettoyerObs'));
416 aurelien 43
 
2446 jpm 44
				$nomRetenu = isset($obs['nom_ret']) ? $obs['nom_ret'] : 'Indéterminé';
45
				$date = 'Datée du '.$obs['date_modification'];
46
				$idZoneGeo = $this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']);
47
				$lieuMorceaux = array();
48
				$lieuMorceaux[] = $obs['zone_geo'].(!empty($idZoneGeo) ? " ($idZoneGeo)" : '');
49
				$lieuMorceaux[] = $obs['station'];
50
				$lieuMorceaux[] = $obs['lieudit'];
51
				$lieu = 'Lieu : '.implode(', ', $lieuMorceaux);
52
				$nomOriginal = htmlspecialchars($obs['nom_original']);
53
				list($largeur, $hauteur) = $this->calculerDimensions($obs['largeur'], $obs['hauteur']);
54
				$idImg = sprintf('%09s', $obs['id_image']);
55
				$urlImgL = sprintf($urlImgTpl, "{$idImg}L");
56
				$urlImgM = sprintf($urlImgTpl, "{$idImg}M");
57
				$baliseImg = '<img src="'.$urlImgM.'" alt="'.$nomOriginal.'" height="'.$hauteur.'" width="'.$largeur.'" />';
416 aurelien 58
 
2446 jpm 59
				$resume['elements'][] = array(
60
					'element' => "$nomRetenu<br />$date<br />$lieu<br />",
61
					'lien' => $urlImgL,
62
					'image' => $baliseImg);
416 aurelien 63
			}
2446 jpm 64
		}
65
		$this->envoyerJson($resume);
66
		return true;
67
	}
416 aurelien 68
 
2446 jpm 69
	protected function nettoyerObs($valeur) {
70
		return ($valeur == '000null') ? '' : trim($valeur);
71
	}
416 aurelien 72
 
2446 jpm 73
	private function calculerDimensions($largeur, $hauteur) {
74
		$tailleOr = 75 ;
75
		if ($hauteur == 0) {
76
			$hauteur = $tailleOr;
77
		}
78
		if ($largeur == 0) {
79
			$largeur = $tailleOr;
80
		}
81
		$maxTaille = max($hauteur, $largeur);
416 aurelien 82
 
2446 jpm 83
		if ($maxTaille == $hauteur) {
84
			$rapport = $hauteur / $largeur;
85
			$hauteur = 75;
86
			$largeur = round($hauteur / $rapport, 0);
87
		} else {
88
			$rapport = $largeur / $hauteur;
89
			$largeur = 75;
90
			$hauteur = round($largeur / $rapport, 0);
91
		}
92
		return array($largeur, $hauteur);
93
	}
94
}