Subversion Repositories eFlore/Applications.cel

Rev

Rev 1765 | Rev 2458 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1765 Rev 2446
Line 1... Line 1...
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
-
 
3
 
-
 
4
/**
2
/**
-
 
3
* Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur
5
* PHP Version 5
4
* Utilisée par l'annuaire appelant les web services résumé de chaque application
6
*
5
*
7
* @category  PHP
6
* @category  PHP
8
* @package   papyrus_bp
7
* @package   papyrus_bp
9
* @author    aurelien <aurelien@tela-botanica.org>
8
* @author    aurelien <aurelien@tela-botanica.org>
10
* @copyright 2010 Tela-Botanica
9
* @copyright 2010 Tela-Botanica
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
* @version   SVN: <svn_id>
11
* @version   SVN: <svn_id>
13
* @link      /doc/papyrus_bp/
12
* @link      /doc/papyrus_bp/
14
*/
13
*/
15
 
-
 
16
/**
-
 
17
 * Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur
-
 
18
 * Utilisée par l'annuaire appelant les web services résumé de chaque application
-
 
19
 * 
-
 
20
 */
-
 
21
class Resume extends Cel {
14
class Resume extends Cel {
Line 22... Line 15...
22
 
15
 
23
	function getElement($uid){
-
 
24
 
16
	public function getElement($uid){
25
        $requete_dernieres_obs = 'SELECT * FROM cel_obs'.
17
		$idUtilisateurP = Cel::db()->proteger($uid[1]);
-
 
18
		$requete = 'SELECT co.*, ci.id_image, ci.nom_original, ci.largeur, ci.hauteur '.
26
        		' WHERE ce_utilisateur = '.Cel::db()->proteger($uid[1]).
19
			'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (id_observation = ce_observation) '.
27
				' AND transmission =  0'.
20
			"WHERE co.ce_utilisateur = $idUtilisateurP ".
28
				' ORDER BY date_modification DESC LIMIT 0,5';
-
 
29
 
21
			'ORDER BY co.date_modification DESC '.
30
        $resultat_dernieres_obs = Cel::db()->requeter($requete_dernieres_obs);
-
 
31
        
22
			'LIMIT 0,5 '.
32
        $dernieres_obs = array();
23
			' -- '.__FILE__.':'.__LINE__;
33
        $resume = array();
24
		$resultats = Cel::db()->requeter($requete);
34
 
25
 
35
        if (is_array($resultat_dernieres_obs)) {
26
		$urlImgTpl = $this->config['settings']['celImgUrlTpl'];
36
            $dernieres_obs = $resultat_dernieres_obs;
27
		$urlAppliCel = $this->config['settings']['celAppliUrl'];
37
        }
-
 
38
 
28
		$resume = array(
39
        $resume['titre'] = 'Vos dernières observations publiées';
29
			'titre' => 'Vos dernières observations avec photos publiées',
40
        $resume['lien_appli'] = '<a href="www.tela-botanica.org/appli:cel2"> Accéder au carnet en ligne </a>';
30
			'lien_appli' => '<a href="'.$urlAppliCel.'"> Accéder au carnet en ligne </a>');
41
 
31
 
42
        if (count($dernieres_obs) == 0) {
32
		if ($resultats !== false && is_array($resultats) && count($resultats) == 0) {
43
        	$resume['message'] = 'Aucune observation saisie pour le moment';
33
			$resume['message'] = 'Aucune observation saisie pour le moment';
44
        }
34
		} else if ($resultats !== false && is_array($resultats) && count($resultats) > 0) {
45
 
35
 
-
 
36
			foreach ($resultats as $obs) {
46
		foreach ($dernieres_obs as $obs) {
37
				$obs = array_filter($obs, array($this, 'nettoyerObs'));
47
 
38
 
48
           	$chemin_sur_serveur = $this->config['cel']['url_images'];
-
 
49
 
39
				$nomRetenu = isset($obs['nom_ret']) ? $obs['nom_ret'] : 'Indéterminé';
50
		   	$date = 'Datée du '.$obs['date_modification'].'<br/>'  ;
40
				$date = 'Datée du '.$obs['date_modification'];
51
		  	$lieu = 'Lieu : '.trim($obs['zone_geo'],'000null').' ('.$this->convertirCodeZoneGeoVersDepartement(trim($obs['ce_zone_geo']),'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/>'  ;
-
 
52
 
41
				$idZoneGeo = $this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']);
-
 
42
				$lieuMorceaux = array();
53
			$image ='';
43
				$lieuMorceaux[] = $obs['zone_geo'].(!empty($idZoneGeo) ? " ($idZoneGeo)" : '');
54
			$cible_lien = '';
-
 
-
 
44
				$lieuMorceaux[] = $obs['station'];
-
 
45
				$lieuMorceaux[] = $obs['lieudit'];
-
 
46
				$lieu = 'Lieu : '.implode(', ', $lieuMorceaux);
55
		    		
47
				$nomOriginal = htmlspecialchars($obs['nom_original']);
56
			$req_liaison = 'SELECT * FROM cel_images WHERE id_image IN (SELECT id_image FROM cel_obs_images WHERE id_observation = "'.$obs['id_observation'].'") AND ce_utilisateur = "'.$obs['ce_utilisateur'].'"' ;
48
				list($largeur, $hauteur) = $this->calculerDimensions($obs['largeur'], $obs['hauteur']);
-
 
49
				$idImg = sprintf('%09s', $obs['id_image']);
-
 
50
				$urlImgL = sprintf($urlImgTpl, "{$idImg}L");
-
 
51
				$urlImgM = sprintf($urlImgTpl, "{$idImg}M");
57
           	$res_liaison = Cel::db()->requeter($req_liaison);
52
				$baliseImg = '<img src="'.$urlImgM.'" alt="'.$nomOriginal.'" height="'.$hauteur.'" width="'.$largeur.'" />';
58
 
53
 
59
			$ligne_image = null;
-
 
-
 
54
				$resume['elements'][] = array(
60
			
55
					'element' => "$nomRetenu<br />$date<br />$lieu<br />",
61
			foreach ($res_liaison as $img) {
56
					'lien' => $urlImgL,
62
				$row = $img;
57
					'image' => $baliseImg);
63
			}
-
 
64
 
-
 
65
			if($row != null) {
-
 
66
			
-
 
67
				$row['nom_original'] = htmlspecialchars($row['nom_original']);
-
 
68
				$row['id_image'] = htmlspecialchars($row['id_image']);
-
 
69
				$id = $row['id_image'];
-
 
70
	
-
 
71
				$tailleXY = $this->calculerDimensions(array($row['largeur'], $row['hauteur']));
-
 
72
	
-
 
73
				$id = sprintf('%09s', $id) ;
-
 
74
				$id = wordwrap($id, 3 , '_', true) ;
-
 
75
	
-
 
76
				$id_fichier = $id.".jpg" ;
-
 
77
	
-
 
78
				$niveauDossier = explode("_", $id) ;
-
 
79
	
-
 
80
				$dossierNiveau1 = $niveauDossier[0] ;
-
 
81
				$dossierNiveau2 = $niveauDossier[1] ;
-
 
82
	
-
 
83
				$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
-
 
84
	
-
 
85
				$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ;
-
 
86
				$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ;
-
 
87
			
-
 
88
				$image = '<img src="'.$chemin_fichier_s.'" alt="'.$row['nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img>';
-
 
89
				$cible_lien = $chemin_fichier;
-
 
90
			}
-
 
91
	
-
 
92
			$resume_item = array('element' => $obs['nom_ret'].$date.$lieu, 'lien' => $cible_lien,'image' => $image);
-
 
93
			$resume['elements'][] = $resume_item;
-
 
94
        }
-
 
95
 
-
 
96
		$this->envoyerJson($resume);			
-
 
97
		return true;	
-
 
98
    }
-
 
99
 
-
 
100
    public function calculerDimensions($tailleXY) {
-
 
101
 
-
 
102
        $tailleOr = 75 ;
-
 
103
 
-
 
104
        if($tailleXY[1] == 0) {
-
 
105
            $tailleXY[1] = $tailleOr;
-
 
106
        }
-
 
107
 
-
 
108
        if($tailleXY[0] == 0) {
-
 
109
            $tailleXY[0] = $tailleOr;
-
 
110
        }
-
 
111
 
-
 
112
        $maxTaille = max($tailleXY[1],$tailleXY[0]) ;
-
 
113
 
-
 
114
        if($maxTaille == $tailleXY[1]) {
-
 
115
 
-
 
116
            $rapport = $tailleXY[1]/$tailleXY[0] ;
-
 
117
            $tailleXY[1] = 75 ;
-
 
118
            $tailleXY[0] = round($tailleXY[1]/$rapport,0) ;
-
 
119
 
-
 
120
        }else {
-
 
121
            $rapport = $tailleXY[0]/$tailleXY[1] ;
-
 
122
            $tailleXY[0] = 75 ;
-
 
123
            $tailleXY[1] = round($tailleXY[0]/$rapport,0) ;
-
 
124
        }
-
 
125
 
-
 
126
        return $tailleXY ;
-
 
127
    }
-
 
128
}
-
 
129
?>
58
			}
-
 
59
		}
-
 
60
		$this->envoyerJson($resume);
-
 
61
		return true;
-
 
62
	}
-
 
63
 
-
 
64
	protected function nettoyerObs($valeur) {
-
 
65
		return ($valeur == '000null') ? '' : trim($valeur);
-
 
66
	}
-
 
67
 
-
 
68
	private function calculerDimensions($largeur, $hauteur) {
-
 
69
		$tailleOr = 75 ;
-
 
70
		if ($hauteur == 0) {
-
 
71
			$hauteur = $tailleOr;
-
 
72
		}
-
 
73
		if ($largeur == 0) {
-
 
74
			$largeur = $tailleOr;
-
 
75
		}
-
 
76
		$maxTaille = max($hauteur, $largeur);
-
 
77
 
-
 
78
		if ($maxTaille == $hauteur) {
-
 
79
			$rapport = $hauteur / $largeur;
-
 
80
			$hauteur = 75;
-
 
81
			$largeur = round($hauteur / $rapport, 0);
-
 
82
		} else {
-
 
83
			$rapport = $largeur / $hauteur;
-
 
84
			$largeur = 75;
-
 
85
			$hauteur = round($largeur / $rapport, 0);
-
 
86
		}
-
 
87
		return array($largeur, $hauteur);
-
 
88
	}
-
 
89
}
130
90