15,16 → 15,16 |
* @copyright © 2011, Jean-Pascal MILCENT |
*/ |
class CelWidgetSaisie extends CelMotCle { |
|
|
private $projet = null; |
private $utilisateur_id = null; |
|
|
public function getElement($params) { |
//$resultat[] = $this->ajouterMotCleObs('jpm@clapas.org', 'Projets coopératifs', self::OBS_RACINE_ID.'.projets-cooperatifs', self::OBS_RACINE_ID); |
//$resultat[] = $this->ajouterMotCleObs('jpm@clapas.org', 'Biodiversite34', self::OBS_RACINE_ID.'.projets-cooperatifs.biodiversite34', self::OBS_RACINE_ID.'.projets-cooperatifs'); |
//$this->envoyerJson($resultat); |
} |
|
|
public function createElement($requeteDonnees) { |
if (array_key_exists('projet', $requeteDonnees)) { |
$this->debug[] = 'Projet : ok'; |
43,11 → 43,13 |
$observations = array(); |
foreach ($requeteDonnees as $cle => $obs) { |
if (preg_match('/^obsId[0-9]+$/', $cle)) { |
$idObs = $ordre++; |
|
$obsAAjouter = array(); |
$obsAAjouter['identifiant'] = $courriel; |
$obsAAjouter['prenom_utilisateur'] = $prenom; |
$obsAAjouter['nom_utilisateur'] = $nom; |
$obsAAjouter['ordre'] = $ordre++; |
$obsAAjouter['ordre'] = $idObs; |
$obsAAjouter['nom_sel'] = $obs['nom_sel']; |
$obsAAjouter['num_nom_sel'] = $obs['num_nom_sel']; |
$obsAAjouter['nom_ret'] = $obs['nom_ret']; |
65,19 → 67,50 |
$obsAAjouter['location'] = $obs['commune_nom']; |
$obsAAjouter['id_location'] = substr($obs['commune_code_insee'], 0, 2); |
$obsAAjouter['ref_geo'] = 'WGS84'; |
|
$observations[] = $this->protegerTableau($obsAAjouter); |
|
$imgAAjouter = null; |
if (!empty($obs['image_nom'])) { |
$imgAAjouter = array(); |
$imgAAjouter['id_utilisateur'] = $courriel; |
$imgAAjouter['id_obs'] = $idObs; |
$imgAAjouter['nom'] = $obs['image_nom']; |
$imgAAjouter['b64'] = $obs['image_b64']; |
} |
|
$observations[$idObs] = array( |
'obs' => $this->protegerTableau($obsAAjouter), |
'img' => $imgAAjouter); |
} |
} |
$this->debug[] = 'Nbre obs ajoutée : '.count($observations); |
$this->debug[] = 'Nbre obs ajoutée : '.count($observations); |
|
// Insertion dans la base |
$ok = true; |
$obs_a_lier = array(); |
foreach ($observations as $obs) { |
foreach ($observations as $infos) { |
$obs = $infos['obs']; |
$img = $infos['img']; |
|
// si le formulaire contient une image on la traite |
if ($img != null) { |
$nomFichierImg = $this->traiterNomFichierImage($img['nom']); |
// Si l'image est transmise en base 64 |
if (empty($img['b64']) === false) { |
$this->transformerBase64enFichier($nomFichierImg, $img['b64']); |
} |
$cheminImage = $this->config['cel_db']['chemin_stockage_temp']."/$nomFichierImg"; |
$idImg = $this->ajouterImageSurDdEtBdd($img['id_utilisateur'], $cheminImage); |
if ($idImg !== false) { |
$this->lierObsEtImg($idImg, $img['id_utilisateur'], $img['id_obs']); |
} |
} |
|
|
$insert = "INSERT INTO cel_inventory "; |
$champs = '('.implode(', ', array_keys($obs)).') '; |
$values = 'VALUES ('.implode(', ', $obs).') '; |
$requete = $insert.$champs.$values; |
|
if ($this->executerRequeteSimple($requete) === false) { |
$ok = false; |
} else { |
84,7 → 117,7 |
$obs_ok[] = trim($obs['ordre'], "'"); |
} |
} |
|
|
if ($ok === true) { |
$this->debug[] = print_r($obs_ok, true); |
$liaison_ok = $this->lierObsAMotsCles($obs_ok); |
107,13 → 140,12 |
} else { |
$this->messages[] = "Les informations concernant le projet coopératif n'ont pas été transmises."; |
} |
|
|
$msg = (count($this->messages) > 0) ? 'erreur' : 'ok'; |
$retour = (object) array('msg' => $msg); |
|
$this->envoyerJson($obj); |
$this->envoyerJson($retour); |
} |
|
|
private function getMaxOrdre($identifiant) { |
$ordre = null; |
$identifiant = $this->bdd->quote($identifiant); |
126,7 → 158,7 |
} |
return $ordre; |
} |
|
|
/** |
* Transforme une date au format français (jj/mm/aaaa) dans un format Mysql (aaaa-mm-jj). |
* @param string $dateFr date au format français (jj/mm/aaaa) |
136,11 → 168,11 |
$dateMysql = '0000-00-00'; |
$morceauxDate = explode('/', $dateFr); |
if (count($morceauxDate) == 3) { |
$dateMysql = implode('-', array_reverse($morceauxDate)); |
$dateMysql = implode('-', array_reverse($morceauxDate)); |
} |
return $dateMysql; |
} |
|
|
private function lierObsAMotsCles($observations) { |
$categorie = self::OBS_RACINE_ID.'.projets-cooperatifs'; |
$projet = $categorie.'.'.strtolower($this->projet); |
155,5 → 187,144 |
} |
return $liaison_ok; |
} |
|
private function traiterNomFichierImage($fichierNom) { |
$fichierNom = preg_replace('/[.](jpeg|jpg)$/i', '.jpg', strtolower(trim($fichierNom))); |
return $fichierNom; |
} |
|
/** |
* Décode l'image en base64,enregistre celle-ci sous forme de fichier du type de l'image |
* dans un dossier temporaire. |
*/ |
private function transformerBase64enFichier($fichierNom, $imageInfosB64) { |
// Enleve la partie data:image qui permet la previsalisation pour firefox de l'image en base64 |
$imageBase64 = explode(';', $imageInfosB64); |
$type = explode('/',$imageBase64[0]); |
$dataBase64 = explode(',',$imageBase64[1]); |
$dataImg = base64_decode($dataBase64[1]); |
|
$cheminImage = $this->config['cel_db']['chemin_stockage_temp'].'/'.$fichierNom.'.'.$type[1]; |
$imageRessource = fopen($cheminImage, 'wb'); |
fwrite($imageRessource, $dataImg); |
fclose($imageRessource); |
|
if (file_exists($cheminImage) == false) { |
$this->messages[] = "Erreur lors de la création du fichier"; |
} |
} |
|
public function lierObsEtImg($id_image, $id_utilisateur, $id_obs) { |
$id_image = $this->proteger($id_image); |
$id_utilisateur = $this->proteger($id_utilisateur); |
$id_obs = $this->proteger($id_obs); |
|
$requete = 'INSERT INTO cel_obs_images '. |
' (coi_ce_image, coi_ce_utilisateur, coi_ce_observation, coi_date_liaison) '. |
"VALUES ($id_image, $id_utilisateur, $id_obs, NOW()) ". |
' ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image'; |
|
if ($this->executerRequeteSimple($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."; |
} |
} |
|
/** |
* 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($idUtilisateur, $cheminImage, $nomFichierImage) { |
$idImage = false; |
$nouvelOrdre = $this->obtenirNouvelOrdrePourUtilisateur($idUtilisateur); |
if ($nouvelOrdre !== false) { |
if (file_exists($cheminImage)) { |
$extracteurMetadonnees = new ExtracteurMetadonnees(); |
$metadonnees = $extracteurMetadonnees->extraireMetadonnees($cheminImage) ; |
if ($metadonnees !== false) { |
$infosImage = $metadonnees; |
$infosImage['ci_ordre'] = $nouvelOrdre; |
$infosImage['ci_publiable_eflore'] = 'false'; |
$infosImage['ci_nom_original'] = $nomFichierImage; |
$infosImage['ci_ce_utilisateur'] = $idUtilisateur; |
$infosImage['ci_md5'] = md5_file($cheminImage); |
|
$requete = $this->construireRequeteInsertionImage($infosImage); |
$resultat = $this->executerRequeteSimple($requete); |
if ($resultat !== false) { |
$idImage = $this->obtenirIdImagePourIdentifiantEtOrdre($idUtilisateur, $nouvelOrdre); |
if ($idImage !== false) { |
$manipulateurImage = new ImageRecreation($this->config); |
$stockageOk = $manipulateurImage->stockerFichierEtCreerMiniatures($cheminImage, $idImage); |
if ($stockageOk == false) { |
$this->messages[] = "Une erreur s'est produite lors du stockage du fichier."; |
} |
} else { |
$this->messages[] = "Impossible d'obtenir le nouvel identifiant de l'image"; |
} |
} else { |
$this->messages[] = "Echec de l'insertion dans la base de donnees des informations de l'image."; |
} |
} else { |
$this->messages[] = "Erreur lors de l'extraction des metadonnées."; |
} |
} else { |
$this->messages[] = "L'image originale est introuvable sur le serveur."; |
} |
} else { |
$this->messages[] = "Erreur lors du calcul du nouvel ordre de l'image."; |
} |
return $idImage; |
} |
|
private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) { |
$id_utilisateur = $this->proteger($id_utilisateur); |
|
$requete = 'SELECT MAX(ci_ordre) as max_ordre '. |
'FROM cel_images '. |
"WHERE ci_ce_utilisateur = $id_utilisateur "; |
$resultat = $this->executerRequete($requete); |
|
$ordre = ($resultat) ? $resultat[0]['max_ordre']++ : 0; |
return $ordre; |
} |
|
private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) { |
$id_utilisateur = $this->proteger($id_utilisateur); |
$ordre = $this->proteger($ordre); |
|
$requete = 'SELECT ci_id_image '. |
'FROM cel_images '. |
"WHERE ci_ce_utilisateur = $id_utilisateur ". |
" AND ci_ordre = $ordre "; |
$resultat = $this->executerRequete($requete); |
|
$id_image = (count($resultat) > 0) ? $resultat[0]['ci_id_image'] : false; |
return $id_image; |
|
} |
|
private function construireRequeteInsertionImage($informations) { |
$champs = array('ci_meta_date_ajout'); |
$valeurs = array('CURRENT_TIMESTAMP()'); |
|
foreach ($informations as $champ => $valeur) { |
$champs[] = $champ; |
$valeurs[] = is_null($valeur) ? 'NULL' : $this->proteger($valeur); |
if ($champ == 'ci_meta_date_time' && $valeur != 'NULL') { |
$champs[] = 'ci_meta_date'; |
$valeurs[] = $this->proteger($valeur); |
} |
} |
$champs = implode(', ', $champs); |
$valeurs = implode(', ', $valeurs); |
|
$requete = "INSERT INTO cel_images ($champs) VALUES ($valeurs) "; |
|
return $requete; |
} |
} |
?> |