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; |
} |
} |
?> |
} |