10,15 → 10,15 |
* @version $Id$ |
*/ |
class InventoryImage extends Cel { |
|
|
const ARRET_SERVICE = false; |
|
|
/** |
* Méthode appelée avec une requête de type GET. |
* Renvoie les infos sur l'image correspondant à l'id passé en parametre |
*/ |
public function getElement($uid) |
{ |
{ |
// uid[0] : utilisateur obligatoire |
// uid[1] : identifiant image obligatoire |
|
26,13 → 26,13 |
if(!isset($_SESSION)) {session_start();} |
$this->controleUtilisateur($uid[0]); |
|
$id_image_protegee = $this->proteger($uid[1]); |
$id_image_protegee = $this->proteger($uid[1]); |
$requete_selection_image = "SELECT * FROM cel_images WHERE ci_id_image = ".$id_image_protegee; |
|
$resultat_selection = $this->executerRequete($requete_selection_image); |
|
|
$image = false; |
|
|
if (count($resultat_selection) > 0) { |
$image = $resultat_selection[0]; |
} |
48,9 → 48,9 |
{ |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
|
|
$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ; |
|
|
$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($pairs); |
$requete_mise_a_jour_image .= $champs_a_mettre_a_jour; |
|
57,37 → 57,37 |
$requete_mise_a_jour_image .= ' WHERE ci_id_image = '.$this->proteger($pairs['ci_id_image']) ; |
|
$resultat_mise_a_jour = $this->executerRequeteSimple($requete_mise_a_jour_image); |
|
|
$retour = false; |
|
|
if ($resultat_mise_a_jour) { |
$retour = 'OK'; |
} |
|
|
$this->envoyer($retour); |
} |
|
|
/** |
* Assemble la requete de mise à jour des champs de metadonnées |
* |
* |
*/ |
private function construireRequeteMajMetaDonnees($valeurs_metadonnees) { |
|
|
$requete_maj_champs = ''; |
|
|
$champs_a_ignorer = array('ci_ce_observation','ci_id_image'); |
|
|
foreach($valeurs_metadonnees as $champ => $valeur) |
{ |
|
|
if (!in_array($champ,$champs_a_ignorer)) { |
if ($champ == 'ci_meta_date') { |
|
|
$date_tab = split('/',$valeur) ; |
$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ; |
|
|
$requete_maj_champs .= $champ.' = "'.$date.'" , ' ; |
|
|
} |
else { |
$requete_maj_champs .= $champ.' = '.$this->proteger($valeur).' , ' ; |
96,7 → 96,7 |
} |
|
$requete_maj_champs = rtrim($requete_maj_champs," , ") ; |
|
|
return $requete_maj_champs; |
} |
|
106,68 → 106,67 |
* Stocke une image, crée ses miniatures et enregistre ses informations |
* Renvoie l'identifiant d'image nouvellement crée en cas de succès |
*/ |
function createElement($pairs) |
{ |
|
if(self::ARRET_SERVICE) { |
function createElement($pairs) { |
if (self::ARRET_SERVICE) { |
header('Status: 503 Service Temporarily Unavailable'); |
echo "L'envoi d'images au cel est temporairement désactivé"; |
exit; |
} else { |
// Controle detournement utilisateur |
if (!isset($_SESSION)) { |
session_start(); |
} |
$this->controleUtilisateur($pairs['identifiant']); |
|
foreach ($_FILES as $file) { |
$infos_fichier = $file ; |
} |
|
if ($this->ajouterImageSurDdEtBdd($pairs, $infos_fichier)) { |
// l'upload demande de court-circuiter le fonctionnement normal de JREST |
// en quittant directement après l'envoi |
$this->envoyerMessageCreationEffectuee(); |
exit; |
} |
} |
// Controle detournement utilisateur |
if(!isset($_SESSION)) {session_start();} |
$this->controleUtilisateur($pairs['identifiant']); |
|
foreach ($_FILES as $file) { |
$infos_fichier = $file ; |
} |
|
if ($this->ajouterImageSurDdEtBdd($pairs, $infos_fichier)) { |
|
// l'upload demande de court-circuiter le fonctionnement normal de JREST |
// en quittant directement après l'envoi |
$this->envoyerMessageCreationEffectuee(); |
exit; |
} |
} |
|
} |
|
/** |
* Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures, |
* renvoie le nouvel id d'image en cas de succès |
* |
* |
* @param array $pairs le tableau contenant l'identifiant de l'utilisateur |
* @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les |
* élements du tableau $_FILES de php |
*/ |
public function ajouterImageSurDdEtBdd($pairs, $infos_fichier) { |
|
|
$identifiant_utilisateur = $pairs['identifiant']; |
$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($identifiant_utilisateur); |
|
|
if (!$nouvel_ordre) { |
$message = 'Erreur lors du calcul du nouvel ordre de l\'image'; |
trigger_error($message, E_USER_ERROR); |
} |
|
|
$extracteur_metadonnees = new ExtracteurMetadonnees(); |
$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ; |
|
|
if(!$informations_image) { |
$message = 'Erreur lors de l\'extraction des metadonnées'; |
trigger_error($message, E_USER_ERROR); |
} |
|
// ajout de quelques informations supplémentaire, en sus |
|
// ajout de quelques informations supplémentaire, en sus |
// des metadonnées dejà extraites |
$informations_image['ci_ordre'] = $nouvel_ordre ; |
$informations_image['ci_publiable_eflore'] = 'false' ; |
$informations_image['ci_nom_original'] = $infos_fichier['name'] ; |
|
|
// le md5 du fichier sert à repérer les images en doublons |
$informations_image['ci_md5'] = md5_file($infos_fichier['tmp_name']) ; |
$informations_image['ci_ce_utilisateur'] = $identifiant_utilisateur ; |
|
|
$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image); |
$resultat_insertion_infos_image = $this->executerRequeteSimple($requete_insertion_infos_image); |
|
177,43 → 176,43 |
} |
|
$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($identifiant_utilisateur, $nouvel_ordre); |
|
|
if (!$id_nouvelle_image) |
{ |
$message = 'Impossible d\'obtenir le nouvel identifiant de l\'image' ; |
trigger_error($message, E_USER_ERROR); |
} |
|
|
$manipulateur_image = new ImageRecreation($this->config); |
$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier,$id_nouvelle_image); |
|
|
if (!$fichier_stocke) { |
$message = 'Erreur lors du stockage du fichier' ; |
trigger_error($message, E_USER_ERROR); |
} |
|
|
return $id_nouvelle_image; |
} |
|
|
private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) { |
|
$nouvel_ordre = 0 ; |
|
|
$requete_selection_ordre_max ='SELECT MAX(ci_ordre) as max_ordre FROM cel_images WHERE ci_ce_utilisateur = '.$this->proteger($id_utilisateur) ; |
$resultat_requete_ordre_max = $this->executerRequete($requete_selection_ordre_max); |
|
|
if($resultat_requete_ordre_max) { |
$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre']; |
$nouvel_ordre++; |
} |
|
|
return $nouvel_ordre; |
} |
|
|
private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) { |
|
|
$id_image = false; |
|
|
$requete_id_image ='SELECT ci_id_image FROM cel_images WHERE ci_ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ci_ordre = '.$ordre ; |
$resultat_id_image = $this->executerRequete($requete_id_image); |
|
221,14 → 220,14 |
{ |
$id_image = $resultat_id_image[0]['ci_id_image']; |
} |
|
|
return $id_image; |
} |
|
|
private function construireRequeteInsertionImage($informations_image) { |
|
|
$requete_insertion_image = "INSERT INTO cel_images "; |
|
|
$champs_a_inserer = '' ; |
$valeurs_a_inserer = '' ; |
|
245,7 → 244,7 |
$valeurs_a_inserer .= $this->proteger($valeur).',' ; |
} |
} |
|
|
if ($informations_image['ci_meta_date_time'] != 'NULL') { |
$champs_a_inserer .= 'ci_meta_date, '; |
$valeurs_a_inserer .= $this->proteger($informations_image['ci_meta_date_time']).','; |
255,12 → 254,12 |
$valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ; |
|
$requete_insertion_image .= "(".$champs_a_inserer.") VALUES (".$valeurs_a_inserer.")" ; |
|
|
return $requete_insertion_image; |
} |
|
|
private function envoyerMessageCreationEffectuee() { |
|
|
header('HTTP/1.0 200 Created'); |
echo 'OK'; |
exit() ; |
271,7 → 270,7 |
* Supprime les infos sur l'image et le fichier correspondant à l'id passé en parametre |
*/ |
function deleteElement($uid){ |
|
|
if(self::ARRET_SERVICE) { |
header('Status: 503 Service Temporarily Unavailable'); |
echo "L'envoi d'images au cel est temporairement désactivé"; |
288,20 → 287,20 |
if (!isset($uid[1]) || !$this->EstUneSuiteIdentifiantsImage($uid[1])) { |
return; |
} |
|
|
$ids_images = $uid[1]; |
|
$requete_suppression_images = "DELETE FROM cel_images WHERE ci_id_image in (".$ids_images.")"; |
$requete_suppression_lien_images_obs = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$ids_images.")"; |
|
|
$resultat_suppression_image = $this->executerRequeteSimple($requete_suppression_images); |
$resultat_suppression_lien_images_obs = $this->executerRequeteSimple($requete_suppression_lien_images_obs); |
|
|
if (!$resultat_suppression_image) { |
$message = 'Erreur lors de la suppression de l\'image' ; |
trigger_error($message, E_USER_ERROR); |
} |
|
|
if (!$resultat_suppression_lien_images_obs) { |
$message = 'Erreur lors de la suppression des observations associées à l\'image' ; |
trigger_error($message, E_USER_ERROR); |
308,9 → 307,9 |
} |
|
$manipulateur_image = new ImageRecreation($this->config); |
|
|
$tableau_ids_image = split(',',$ids_images); |
|
|
foreach($tableau_ids_image as $id_image_a_detruire) { |
$destruction_fichier_image = $manipulateur_image->detruireImageSurDisque($id_image_a_detruire); |
} |
317,15 → 316,15 |
|
$this->envoyer('OK'); |
} |
|
|
private function estUneSuiteIdentifiantsImage($chaine) { |
|
|
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules |
// sans virgule terminale |
$reg_exp = "/^(([0-9])+,)*([0-9])+$/"; |
|
|
return preg_match($reg_exp, $chaine); |
|
|
} |
|
} |