Subversion Repositories eFlore/Applications.cel

Rev

Rev 2458 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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