Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2133 Rev 2209
Line 1... Line 1...
1
<?php
1
<?php
2
class CelImageFormat {
2
class CelImageFormat {
Line 3... Line 3...
3
	
3
	
4
	private $config;
4
	private $config;
-
 
5
	private $formats = array('CRX2S','CRXS','CXS','CS','CRS','XS','S','M','L','XL','X2L','X3L','O');
-
 
6
	const METHODE_TELECHARGEMENT = "telecharger";
Line 5... Line 7...
5
	private $formats = array('CRX2S','CRXS','CXS','CS','CRS','XS','S','M','L','XL','X2L','X3L','O');
7
	const METHODE_AFFICHAGE = "afficher";
6
	
8
	
7
	// Pas besoin d'étendre Cel ici, surtout que le constructeur 
9
	// Pas besoin d'étendre Cel ici, surtout que le constructeur 
8
	// de la classe Cel instancie toujours une connexion à la bdd
10
	// de la classe Cel instancie toujours une connexion à la bdd
9
	// dont on a pas besoin ici. Ceci évite de planter le service
11
	// dont on a pas besoin ici. Ceci évite de planter le service
10
	// quand la bdd est surchargée.
12
	// quand la bdd est surchargée.
11
	public function __construct($config) {
13
	public function __construct($config) {
Line -... Line 14...
-
 
14
		$this->config = $config;
-
 
15
	}
-
 
16
	
-
 
17
	public function getRessource() {
-
 
18
		header('Content-Type: application/json');
12
		$this->config = $config;
19
		echo json_encode($this->obtenirDescriptionService()); 	
13
	}
20
	}
14
	
21
	
15
	/**
22
	/**
-
 
23
	* Méthode appelée avec une requête de type GET.
16
	* Méthode appelée avec une requête de type GET.
24
	*/
17
	*/
25
	public function getElement($params) {
18
	public function getElement($params) {
26
		
-
 
27
		// suppression des 0 non significatifs à gauche
Line 19... Line 28...
19
		// suppression des 0 non significatifs à gauche
28
		$id = ltrim($params[0],'0');
20
		$id = ltrim($params[0],'0');
29
		$format = isset($_GET['format']) ? $_GET['format'] : 'M';	
21
		$format = isset($_GET['format']) ? $_GET['format'] : 'M';	
30
		$methode_livraison = isset($_GET['methode']) ? $_GET['methode'] : self::METHODE_AFFICHAGE;
Line 22... Line 31...
22
		
31
		
23
		if($this->verifierParametres($id, $format)) {
32
		if($this->verifierParametres($id, $format, $methode_livraison)) {
24
			$gestion_formats_images = new ImageRecreation($this->config);
-
 
25
			$image_binaire = $gestion_formats_images->creerOuRenvoyerImage($params[0], $format);
-
 
26
			
33
			$gestion_formats_images = new ImageRecreation($this->config);
27
			if($image_binaire) {
34
			$image_binaire = $gestion_formats_images->creerOuRenvoyerImage($params[0], $format);
28
				header('Content-Type: image/jpeg');
35
			
29
				echo $image_binaire;
36
			if($image_binaire) {
30
				exit;
37
				$this->envoyerImage($id, $image_binaire, $format, $methode_livraison);
31
			} else {
38
			} else {
Line 32... Line 39...
32
				header("HTTP/1.0 404 Not Found");
39
				header("HTTP/1.0 404 Not Found");
33
				echo 'Aucune image ne correspond à cet identifiant';
40
				echo 'Aucune image ne correspond à cet identifiant';
34
			}
41
			}
35
		}
42
		}
36
	}
43
	}
37
	
44
	
Line 45... Line 52...
45
		
52
		
46
		if(!in_array($format, $this->formats)) {
53
		if(!in_array($format, $this->formats)) {
47
			$message .= "Le format d'image est inconnu, les formats acceptés sont ".implode(',', $this->formats).". ";
54
			$message .= "Le format d'image est inconnu, les formats acceptés sont ".implode(',', $this->formats).". ";
48
			$ok = false;
55
			$ok = false;
49
		}
56
		}
-
 
57
 
-
 
58
		$types_methode_livraison = array(self::METHODE_AFFICHAGE, self::METHODE_TELECHARGEMENT);
-
 
59
		if (!in_array($methode_livraison, $types_methode_livraison)) {
-
 
60
			$message .= "Le format de methode de livraison ".$methode_livraison." n'est pas acceptée par le service. ".
-
 
61
					" Seuls les methodes suivantes sont gérés : ".implode(',', $types_methode_livraison);
-
 
62
			$ok = false;
-
 
63
		}
50
		
64
 
51
		if(!empty($message)) {
65
		if(!empty($message)) {
52
			header("HTTP/1.0 400 Bad Request");
66
			header("HTTP/1.0 400 Bad Request");
53
			echo $message;
67
			echo $message;
54
		}
68
		}
55
		
69
 
56
		return $ok;
70
		return $ok;
-
 
71
	}
-
 
72
	
-
 
73
	private function envoyerImage($id, $image_binaire, $format, $methode) {
-
 
74
		
-
 
75
		if($methode == self::METHODE_AFFICHAGE) {
-
 
76
			header('Content-Type: image/jpeg');
-
 
77
		} else {
-
 
78
			$this->envoyerHeadersTelechargement($id, $image_binaire, $format);	
-
 
79
		}
-
 
80
		
-
 
81
		echo $image_binaire;
-
 
82
		exit;
-
 
83
	}
-
 
84
	
-
 
85
	private function envoyerHeadersTelechargement($id, $image_binaire, $format) {
-
 
86
		
-
 
87
		if (function_exists('mb_strlen')) {
-
 
88
			$taille = mb_strlen($image_binaire, '8bit');
-
 
89
		} else {
-
 
90
			$taille = strlen($image_binaire);
-
 
91
		}
-
 
92
		
-
 
93
		// creation du format original
-
 
94
		$id_avec_zeros = sprintf('%09s', $id) ;
-
 
95
		$id_avec_zeros_underscores = wordwrap($id_avec_zeros, 3 , '_', true) ;	
-
 
96
		$nom_fichier = $id_avec_zeros_underscores.'_'.$format.'.jpg';
-
 
97
	
-
 
98
		header('Content-Description: File Transfer');
-
 
99
		header('Content-Type: application/octet-stream');
-
 
100
		header('Content-Disposition: attachment; filename="'.$nom_fichier.'"');
-
 
101
		header('Content-Transfer-Encoding: binary');
-
 
102
		header('Connection: Keep-Alive');
-
 
103
		header('Expires: 0');
-
 
104
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
-
 
105
		header('Pragma: public');
-
 
106
		header('Content-Length: '.$taille);
-
 
107
	}
-
 
108
	
-
 
109
	private function obtenirDescriptionService() {
-
 
110
		$retour = array('description' => 'Ce service peut être appelé afin de visualiser ou bien télécharger les images du cel',
-
 
111
				'formats' => $this->formats,
-
 
112
				'utilisation' => "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."/{id} où {id} est l'identifiant numérique de l'image désirée",
-
 
113
				'parametres' => array("methode" => "Valeurs : afficher, telecharger. Permet de préciser si l'image doit être affichée ou téléchargée",
-
 
114
						"format" => "Valeurs : voir la liste ci dessous. Permet de demander un format précis de l'image parmi ceux disponibles ")
-
 
115
		);
-
 
116
		
-
 
117
		// ^^ c'est marrant non ?
-
 
118
		$format_formates = array();
-
 
119
		foreach ($this->formats as $format) {
-
 
120
			if($format == "O") {
-
 
121
				$format_formates["O"] = array("hauteur" => "dépend de l'image originale",
-
 
122
						"largeur" => "dépend de l'image originale",
-
 
123
						"notes"	=> "Image dans son ratio et sa résolution originale (elle peut éventuellement avoir été compressée en qualité)"
-
 
124
				);
-
 
125
			} else {
-
 
126
				$description = array();
-
 
127
				if(strpos($format, 'R') !== false) {
-
 
128
					$description[] = "Format carré, rogné pour ne garder que le centre de l'image.";
-
 
129
				}
-
 
130
				if(strpos($format, 'C') !== false) {
-
 
131
					$description[] = "Format carré, si le format contient R, il est rogné, sinon des bandes blanches sont ajoutées pour conserver le ratio.";
-
 
132
				}
-
 
133
		
-
 
134
				if(empty($description)) {
-
 
135
					$description[] = "Format standard, le ratio original de l'image est conservé";
-
 
136
				}
-
 
137
		
-
 
138
				$resolution = $this->config['cel']['format_'.$format];
-
 
139
				$resolution = explode("_", $resolution);
-
 
140
				$format_formates[$format] = array("hauteur" => $resolution[0],
-
 
141
						"largeur" => $resolution[1],
-
 
142
						"notes"	=> implode(' ', $description)
-
 
143
				);
-
 
144
			}
-
 
145
		}
-
 
146
		
-
 
147
		$retour['resolutions'] = $format_formates;
-
 
148
		return $retour;
57
	}
149
	}
58
}
150
}