New file |
0,0 → 1,212 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe métier de gestion de l'ajout, modification et suppression des images. |
* |
* @internal Mininum PHP version : 5.2 |
* @category CEL |
* @package Services |
* @subpackage Bibliothèques |
* @version 0.1 |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class GestionImage extends Cel { |
|
/** |
* 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 int $id_utilisateur 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 ajouterImage($id_utilisateur, $infos_fichier) { |
$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"; |
$this->logger($message); |
} |
|
// ajout de quelques informations supplémentaire, en sus |
// des metadonnées dejà extraites |
$informations_image['original_name'] = $infos_fichier['name'] ; |
//$informations_image['size'] = $infos_fichier['name'] ; |
|
// le md5 du fichier sert à repérer les images en doublons |
$informations_image['md5'] = md5_file($infos_fichier['tmp_name']) ; |
|
$informations_image['user_id'] = $id_utilisateur ; |
//manque une fonction |
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($id_utilisateur); |
|
$informations_image['user_email'] = $infos_utilisateur['courriel']; |
$informations_image['user_pseudo'] = $infos_utilisateur['pseudo']; |
|
$requete = $this->construireRequeteInsertionImage($informations_image); |
$resultat_insertion_infos_image = Cel::db()->executer($requete); |
if (!$resultat_insertion_infos_image) { |
$message = "Echec de l'insertion dans la base de donnees : " ; |
$this->logger($message); |
} |
|
$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $informations_image['original_name']); |
if (!$id_nouvelle_image) { |
$message = "Impossible d'obtenir le nouvel identifiant de l'image"; |
$this->logger($message); |
} |
|
$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"; |
$this->logger($message); |
|
// Remise à zéro d'idImage pour que l'erreur ne soit pas ignorée par l'appelant |
$id_nouvelle_image = false; |
} |
|
return $id_nouvelle_image; |
} |
|
|
|
private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $nom) { |
$id_image = false; |
$idUtilisateurP = Cel::db()->proteger($id_utilisateur); |
$nomP = Cel::db()->proteger($nom); |
$requete ='SELECT id as id_image '. |
'FROM photo '. |
"WHERE user_id = $idUtilisateurP ". |
" AND original_name = $nomP ". |
' -- '.__FILE__.' : '.__LINE__; |
$resultat = Cel::db()->requeter($requete); |
|
if (count($resultat) > 0) { |
$id_image = $resultat[0]['id_image']; |
} |
return $id_image; |
} |
|
private function construireRequeteInsertionImage($informations_image) { |
$infos = array( |
'date_created ' => 'NOW()', |
'date_updated ' => 'NOW()'); |
foreach ($informations_image as $champ => $valeur) { |
$infos[$champ] = is_null($valeur) ? 'NULL' : Cel::db()->proteger($valeur); |
} |
$champs = implode(', ', array_keys($infos)); |
$valeurs = implode(', ', array_values($infos)); |
|
$requete = "INSERT INTO photo ($champs) ". |
"VALUES ($valeurs) ". |
' -- '.__FILE__.' : '.__LINE__; |
return $requete; |
} |
|
/** |
* Modifie les champs de metadonnées d'une image |
* |
* @param array $id_utilisateur identifiant utilisateur |
* @param array $id id de l'image |
* @param array $parametres un taleau contenant des valeurs indexées par les noms de champs de la bdd |
* @return boolean true ou false suivant le succès de l'opération |
*/ |
public function modifierImage($id_utilisateur, $id_image, $parametres) { |
$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($parametres); |
|
$requete = "UPDATE photo SET $champs_a_mettre_a_jour ". |
' WHERE id = '.Cel::db()->proteger($id_image). |
' AND user_id = '.Cel::db()->proteger($id_utilisateur). |
' -- '.__FILE__.' : '.__LINE__; |
$resultat = Cel::db()->executer($requete); |
return ($resultat !== false); |
} |
|
|
|
/** |
* Assemble la requete de mise à jour des champs de metadonnées |
* |
* @param array $valeurs_metadonnees un taleau contenant des valeurs indexées par les noms de champs de la bdd |
* @return string une sous chaine sql utilisable dans une requete de type UPPDATE table SET valeur1=champ1 ... |
*/ |
private function construireRequeteMajMetaDonnees($valeurs_metadonnees) { |
$champs_maj = array('date_modification = NOW()'); |
$champs_a_ignorer = array('id_image', 'date_modification'); |
foreach ($valeurs_metadonnees as $champ => $valeur) { |
if (!in_array($champ, $champs_a_ignorer)) { |
if ($champ == 'date_prise_de_vue' && trim($valeur) != '') { |
$date_tab = explode('/', $valeur) ; |
$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ; |
$dateP = Cel::db()->proteger($date); |
$champs_maj[] = "$champ = $dateP"; |
} else { |
$valeurP = Cel::db()->proteger($valeur); |
$champs_maj[] = "$champ = $valeurP"; |
} |
} |
} |
return implode(', ', $champs_maj); |
} |
|
public function supprimerImage($id_image_ou_tableau) { |
$ids_images_non_protegees = array(); |
if (is_array($id_image_ou_tableau)) { |
$ids_images_non_protegees = $id_image_ou_tableau; |
$id_image_ou_tableau = Cel::db()->proteger($id_image_ou_tableau); |
$chaine_ids_images = implode(',', $id_image_ou_tableau); |
} else { |
$ids_images_non_protegees[] = $id_image_ou_tableau; |
$chaine_ids_images = Cel::db()->proteger($id_image_ou_tableau); |
} |
|
$requete = 'DELETE FROM photo '. |
"WHERE id in ($chaine_ids_images) ". |
' -- '.__FILE__.' : '.__LINE__; |
$resultat_suppression_image = Cel::db()->executer($requete); |
if ($resultat_suppression_image === false) { |
$message = "Erreur lors de la suppression de l'image" ; |
$this->logger($message); |
} |
|
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'images'); |
$resultat_suppression_lien_images_mots_cles = $gestion_mots_cles->supprimerToutesLiaisonsPourIdsElementsLies($ids_images_non_protegees); |
if (!$resultat_suppression_lien_images_mots_cles === false) { |
$message = "Erreur lors de la suppression des mots cles associés à l'image" ; |
$this->logger($message); |
} |
|
$manipulateur_image = new ImageRecreation($this->config); |
$tableau_ids_image = explode(',', $chaine_ids_images); |
foreach ($tableau_ids_image as $id_image_a_detruire) { |
$destruction_fichier_image = $manipulateur_image->detruireImageSurDisque($id_image_a_detruire); |
} |
return $destruction_fichier_image; |
} |
|
/** |
* Fonction utilisée pour importer les anciennes images saisies dans les widget dans un compte identifié |
* Dans ce cas là, le widget remplit la case id_utilisateur par le mail indiqué lors de la saisie |
* @param string $mail_utilisateur |
* @param string $id_utilisateur |
*/ |
public function migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur) { |
// ATTENTION : cette fonction suppose que l'utilisateur n'a pas déjà d'images dans le CEL |
// avec l'identifiant $id_utilisateur ce qui est normalement le cas |
$requete = 'UPDATE photo SET '. |
'user_id = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).', '. |
'user_pseudo = '.Cel::db()->proteger($infos_utilisateur['prenom']).', '. |
'user_email = '.Cel::db()->proteger($infos_utilisateur['courriel']).' '. |
'WHERE user_id = '.Cel::db()->proteger($mail_utilisateur).' '. |
' -- '.__FILE__.' : '.__LINE__; |
|
$migration_releve = Cel::db()->executer($requete); |
return $migration_releve; |
} |
} |
Property changes: |
Added: svnkit:entry:sha1-checksum |
+5a59fd56b54b0de38897e58593678a1ea89405fa |
\ No newline at end of property |