Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2134 → Rev 2135

/branches/v2.1-emondoir/jrest/services/CelImageFormat.php
1,22 → 1,58
<?php
class CelImageFormat extends Cel {
class CelImageFormat {
private $config;
private $formats = array('CRX2S','CRXS','CXS','CS','CRS','XS','S','M','L','XL','X2L','X3L','O');
// Pas besoin d'étendre Cel ici, surtout que le constructeur
// de la classe Cel instancie toujours une connexion à la bdd
// dont on a pas besoin ici. Ceci évite de planter le service
// quand la bdd est surchargée.
public function __construct($config) {
$this->config = $config;
}
/**
* Méthode appelée avec une requête de type GET.
*/
public function getElement($params) {
// suppression des 0 non significatifs à gauche
$id = ltrim($params[0],'0');
$format = isset($_GET['format']) ? $_GET['format'] : 'M';
$gestion_formats_images = new ImageRecreation($this->config);
$image_binaire = $gestion_formats_images->creerOuRenvoyerImage($params[0], $format);
if($this->verifierParametres($id, $format)) {
$gestion_formats_images = new ImageRecreation($this->config);
$image_binaire = $gestion_formats_images->creerOuRenvoyerImage($params[0], $format);
if($image_binaire) {
header('Content-Type: image/jpeg');
echo $image_binaire;
exit;
} else {
header("HTTP/1.0 404 Not Found");
echo 'Aucune image ne correspond à cet identifiant';
}
}
}
private function verifierParametres($id, $format) {
$ok = true;
$message = '';
if(!is_numeric($id)) {
$message .= "L'identifiant de format doit être un entier. ";
$ok = false;
}
if($image_binaire) {
header('Content-Type: image/jpeg');
echo $image_binaire;
exit;
} else {
header("HTTP/1.0 404 Not Found");
if(!in_array($format, $this->formats)) {
$message .= "Le format d'image est inconnu, les formats acceptés sont ".implode(',', $this->formats).". ";
$ok = false;
}
if(!empty($message)) {
header("HTTP/1.0 400 Bad Request");
echo $message;
}
return $ok;
}
}
/branches/v2.1-emondoir/jrest/lib/ImageRecreation.php
94,17 → 94,27
 
$image = false;
if(!file_exists($chemin_image)) {
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($this->obtenirCheminImageOriginale($id));
$chemin_image_originale = $this->obtenirCheminImageOriginale($id);
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($chemin_image_originale);
if($infos_image_originale) {
$debut = microtime();
$this->creerEtStockerMiniatureFichierImageSelonFormat($id, $infos_image_originale, $format);
// le verrou est là dans le (rare) cas où l'image est déjà en train
// d'être générée par le script de création des miniatures ou bien
// un autre instance de cette classe appelée par le web service
$fp = fopen($chemin_image_originale, "r");
// si le fichier est verrouillé, flock attendra qu'il se libère
$verrou = flock($fp, LOCK_EX);
if(!file_exists($chemin_image)) {
// si le fichier a été locké alors l'image était en train d'être générée
// et donc il n'est pas nécéssaire de la créer (d'où le 2eme test sur file exists)
$this->creerEtStockerMiniatureFichierImageSelonFormat($id, $infos_image_originale, $format);
}
$verrou = flock($fp, LOCK_UN);
fclose($fp);
$image = file_get_contents($chemin_image);
}
} else {
$image = file_get_contents($chemin_image);
}
return $image;
}
 
/branches/v2.1-emondoir/scripts/modules/generationimages/ImageRecreation.php
1,4 → 1,7
<?php
// Cette classe est un quasi copier-coller de la classe éponyme dans
// le dossier lib de jrest mais pas de mécanisme commun pour les classes
// TODO: utiliser la même classe pour jrest ainsi que les scripts
Class ImageRecreation {
 
private $droits = 0755;
47,12 → 50,16
 
if (file_exists($chemin_fichier)) {
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($chemin_fichier);
 
// obtention d'un verrou sur le fichier original pour empecher d'autres scripts
// d'effectuer la création des miniatures
$fp = fopen($chemin_fichier, "r");
$verrou = flock($fp, LOCK_EX);
// creation de miniatures pour chacuns des formats définis
foreach ($this->formats as $format) {
$this->creerEtStockerMiniatureFichierImageSelonFormat($id, $infos_image_originale, $format);
};
 
$verrou = flock($fp, LOCK_UN);
fclose($fp);
}
}
 
/branches/v2.1-emondoir/scripts
Property changes:
Modified: svn:mergeinfo
Merged /trunk/scripts:r2133-2134
/branches/v2.1-emondoir/.
Property changes:
Modified: svn:mergeinfo
Merged /trunk:r2133-2134