Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2445 → Rev 2446

/trunk/jrest/services/CelWidgetSaisie.php
164,7 → 164,7
// si le formulaire contient une image on la traite
if ($img != null) {
$this->nettoyerImagesUploades();
$img_a_taguer_ids = $this->stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur);
$img_a_taguer_ids = $this->stockerImagesEtLierAObs($idNouvelleObs, $img, $utilisateur);
if ($img_a_taguer_ids === false) {
$erreursDurantTraitement = true;
$this->messages[] = "Au moins une des images n'a pas pu être enregistrée.";
316,62 → 316,40
return $imgAAjouter;
}
 
protected function stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur) {
protected function stockerImagesEtLierAObs($id_obs, $img, $utilisateur) {
if (isset($img['nom'])) {
$imgTmp[] = $img;
unset($img);
$img = $imgTmp;
}
 
$img_a_taguer_ids = array();
if (!isset($img['nom']) && is_array($img)) {
foreach ($img as $index => $image) {
$nomFichierImg = $this->traiterNomFichierImage($image['nom']);
$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
// Si l'image est transmise en base 64
if (empty($image['b64']) === false) {
$this->transformerBase64enFichier($cheminImage, $image['b64']);
}
 
$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg);
if ($idImg !== false) {
$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $image['id_obs']);
if ($liaisonOk === true) {
$img_a_taguer_ids[] = $idImg;
if (isset($image['tags'])) {
$this->correspondanceIdImgTags[$idImg] = $image['tags'];
}
}
} else {
// L'image n'a pas pu être écrite.
// On annule l'écriture des précédentes et on s'arrête là - la transaction
// se chargera de les retirer de la base de données
foreach ($img_a_taguer_ids as $idImageASupprimer) {
$this->effacerImageDuDd($idImageASupprimer);
}
$img_a_taguer_ids = false;
break;
}
}
} else {
$nomFichierImg = $this->traiterNomFichierImage($img['nom']);
foreach ($img as $image) {
$nomFichierImg = $this->traiterNomFichierImage($image['nom']);
$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
// Si l'image est transmise en base 64
if (empty($img['b64']) === false) {
$this->transformerBase64enFichier($cheminImage, $img['b64']);
if (empty($image['b64']) === false) {
$this->transformerBase64enFichier($cheminImage, $image['b64']);
}
 
$this->debug[] = 'Nom fichier img debut :'.$nomFichierImg;
$idImg = $this->ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImg);
$idImg = $this->ajouterImageSurDdEtBdd($id_obs, $utilisateur, $cheminImage, $nomFichierImg);
if ($idImg !== false) {
$liaisonOk = $this->lierObsEtImg($idImg, $id_utilisateur, $img['id_obs']);
if ($liaisonOk === true) {
$img_a_taguer_ids[] = $idImg;
if (isset($img['tags'])) {
$this->correspondanceIdImgTags[$idImg] = $img['tags'];
}
$img_a_taguer_ids[] = $idImg;
if (isset($image['tags'])) {
$this->correspondanceIdImgTags[$idImg] = $image['tags'];
}
} else {
// L'image n'a pas pu être écrite
// L'image n'a pas pu être écrite.
// On annule l'écriture des précédentes et on s'arrête là - la transaction
// se chargera de les retirer de la base de données
foreach ($img_a_taguer_ids as $idImageASupprimer) {
$this->effacerImageDuDd($idImageASupprimer);
}
$img_a_taguer_ids = false;
break;
}
}
 
return $img_a_taguer_ids;
}
 
530,39 → 508,6
}
}
 
public function lierObsEtImg($id_image, $utilisateur, $ordre_obs) {
$id_image = Cel::db()->proteger($id_image);
$id_obs = Cel::db()->proteger($this->obtenirIdObsPourIdentifiantEtOrdre($utilisateur, $ordre_obs));
 
$requete = 'INSERT INTO cel_obs_images '.
' (id_image, id_observation, date_liaison) '.
"VALUES ($id_image, $id_obs, NOW()) ".
' ON DUPLICATE KEY UPDATE id_image = id_image';
 
$liaison = true;
if (Cel::db()->executer($requete) === false) {
$this->messages[] = "La requête de liaison de l'obs $id_obs à l'image $id_image pour l'utilisateur $id_utilisateur a échouée.";
$liaison = false;
}
return $liaison;
}
 
private function obtenirIdObsPourIdentifiantEtOrdre($id_utilisateur, $ordre) {
 
$id_utilisateur = Cel::db()->proteger($id_utilisateur);
$ordre = Cel::db()->proteger($ordre);
 
$requete = 'SELECT id_observation '.
'FROM cel_obs '.
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre = $ordre ";
 
$resultat = Cel::db()->requeter($requete);
 
$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false;
return $id_obs;
}
 
private function obtenirIdsObsPourTableauOrdres($id_utilisateur, $ordres) {
$this->debug[] = print_r($ordres,true);
$id_utilisateur = Cel::db()->proteger($id_utilisateur);
624,7 → 569,7
* @param string $cheminImage le chemin vers le fichier original de l'image
* @param string $nomFichierImage le nom du fichier original de l'image
*/
public function ajouterImageSurDdEtBdd($utilisateur, $cheminImage, $nomFichierImage) {
public function ajouterImageSurDdEtBdd($id_obs, $utilisateur, $cheminImage, $nomFichierImage) {
$idImage = false;
$idUtilisateur = $utilisateur['id_utilisateur'];
$nouvelOrdre = $this->obtenirNouvelOrdrePourUtilisateur($idUtilisateur);
634,8 → 579,8
$metadonnees = $extracteurMetadonnees->extraireMetadonnees($cheminImage) ;
if ($metadonnees !== false) {
$infosImage = $metadonnees;
$infosImage['ce_observation'] = $id_obs;
$infosImage['ordre'] = $nouvelOrdre;
$infosImage['publiable_eflore'] = 'false';
$infosImage['nom_original'] = $nomFichierImage;
$infosImage['ce_utilisateur'] = $idUtilisateur;
$infosImage['courriel_utilisateur'] = $utilisateur['courriel'];
642,6 → 587,11
$infosImage['nom_utilisateur'] = $utilisateur['nom'];
$infosImage['prenom_utilisateur'] = $utilisateur['prenom'];
$infosImage['md5'] = md5_file($cheminImage);
$infosImage['date_creation'] = 'NOW()';
$infosImage['date_modification'] = 'NOW()';
$infosImage['date_liaison'] = 'NOW()';
$infosImage['date_transmission'] = 'NOW()';
$infosImage['transmission'] = '1';
$this->debug[] = 'Nom fichier img meta :'.$nomFichierImage;
$requete = $this->construireRequeteInsertionImage($infosImage);
$resultat = Cel::db()->executer($requete);
723,23 → 673,23
}
 
private function construireRequeteInsertionImage($informations) {
$champs = array('date_creation');
$valeurs = array('CURRENT_TIMESTAMP()');
 
$champs = array();
$valeurs = array();
foreach ($informations as $champ => $valeur) {
$champs[] = $champ;
$valeurs[] = is_null($valeur) ? 'NULL' : Cel::db()->proteger($valeur);
if ($champ == 'date_creation' && $valeur != 'NULL') {
$champs[] = 'date_creation';
if (is_null($valeur)) {
$valeurs[] = 'NULL';
} else if ($valeur === 'NOW()') {
$valeurs[] = $valeur;
} else {
$valeurs[] = Cel::db()->proteger($valeur);
}
}
$champs = implode(', ', $champs);
$valeurs = implode(', ', $valeurs);
$champsConcat = implode(', ', $champs);
$valeursConcat = implode(', ', $valeurs);
 
$requete = "INSERT INTO cel_images ($champs) VALUES ($valeurs) ";
 
$requete = "INSERT INTO cel_images ($champsConcat) VALUES ($valeursConcat) ".
' -- '.__FILE__.':'.__LINE__;
return $requete;
}
}
?>
}