/trunk/jrest/lib/FormateurGroupeColonne.php |
---|
453,7 → 453,7 |
if(!$obsids) return; |
$rec = Cel::db()->requeter( |
sprintf("SELECT o.id_observation, GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i " . |
"FROM cel_images i LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image) LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation) " . |
"FROM cel_images i LEFT JOIN cel_obs o ON (i.ce_observation = o.id_observation) " . |
"WHERE o.ce_utilisateur = %d AND o.id_observation IN (%s) " . |
"GROUP BY id_observation", |
SEPARATEUR_IMAGES, |
471,10 → 471,12 |
return self::$cache['getImages'][$obs['id_observation']]; |
$rec = Cel::db()->requeter( |
sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i FROM cel_images i" |
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)" |
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)" |
." WHERE o.ce_utilisateur = %d AND o.id_observation = %d LIMIT 1", |
sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i ". |
"FROM cel_images i ". |
" LEFT JOIN cel_obs o ON (i.ce_observation = o.id_observation) ". |
"WHERE o.ce_utilisateur = %d ". |
" AND o.id_observation = %d ". |
'LIMIT 1', |
SEPARATEUR_IMAGES, |
$id_utilisateur, |
$obs['id_observation'])); |
651,7 → 653,7 |
} |
static function getNomCommun_v4($obs) { |
// Attention la fonction suppose que l'on ait fait appel à getNomCommun_preload avant |
// Attention la fonction suppose que l'on ait fait appel à getNomCommun_preload avant |
// d'être appelée |
if(! $obs['nt']) return NULL; |
if(! self::referenceTableExiste()) return NULL; |
695,15 → 697,15 |
$data = $v; |
unset($data['referentiel']); // non nécessaire |
unset($data['num_nom_retenu']); // non nécessaire |
// Des fois les synonymes ont des valeurs pour baseflor et pas le nom retenu et vice versa |
// on les fusionne pour avoir le maximum d'infos, en attendant de repenser la table référence |
// on les fusionne pour avoir le maximum d'infos, en attendant de repenser la table référence |
if(isset(self::$cache['getBaseflor'][$v['referentiel'] . '-' . $v['num_nom_retenu']])) { |
$orig = array_filter(self::$cache['getBaseflor'][$v['referentiel'] . '-' . $v['num_nom_retenu']], 'strlen'); |
$data = array_filter($data , 'strlen'); |
$orig = array_filter(self::$cache['getBaseflor'][$v['referentiel'] . '-' . $v['num_nom_retenu']], 'strlen'); |
$data = array_filter($data , 'strlen'); |
$data = array_merge($orig, $data); |
} |
self::$cache['getBaseflor'][$v['referentiel'] . '-' . $v['num_nom_retenu']] = $data; |
} |
710,7 → 712,7 |
return NULL; |
} |
/** |
/** |
* Attention la fonction suppose que l'on ait fait appel à baseflor_preload avant |
* d'être appelée |
* @CASSECOUILLES elle pourrait le détecter et le faire elle-même |
742,12 → 744,12 |
// Quand les données sont prêtes, on les fusionne |
$ligne = array_merge($ligne, $donneesBF); |
} |
static function champsEtendus_preload($cel, $obsids) { |
$gestion_champs_etendus = new GestionChampsEtendus($cel->config, 'obs'); |
$gestion_champs_etendus = new GestionChampsEtendus($cel->config, 'obs'); |
$colonnes_champs_supp_par_obs = $gestion_champs_etendus->consulterClesParLots($obsids); |
// Supprime les champs étendus considérés comme privés dans le cas de l'export public en chargeant |
// Supprime les champs étendus considérés comme privés dans le cas de l'export public en chargeant |
// le catalogue et en excluant ceux qui sont explicitement privés |
if(!$cel->export_prive) { |
$indices_a_supprimer = array(); |
754,7 → 756,7 |
$catalogue_champs_etendus = $gestion_champs_etendus->consulterCatalogueChampsEtendusPredefinis(); |
foreach($catalogue_champs_etendus as $champ_catalogue) { |
if($champ_catalogue['options']['prive'] == 1) { |
// Les champs étendus peuvent avoir des variantes lorsqu'ils apparaissent de multiples fois. |
// Les champs étendus peuvent avoir des variantes lorsqu'ils apparaissent de multiples fois. |
// Vont donc matcher monChamp mais aussi monChamp:1, monChamp:2 ou bien monChamp1, monChamp: etc... |
// pour plus de sécurité (ce filtra n'est affectué qu'une fois au début de l'export donc on ne s'en prive pas) |
$entrees = preg_grep("/".$champ_catalogue['cle']."(?::?\d*)?$/", $colonnes_champs_supp_par_obs); |
763,11 → 765,11 |
} |
// les champs étendus sont renvoyés dans l'export suivant les colonnes présentes dans ce tableau |
// les éliminer de la liste des colonnes suffit à les faire ignorer par l'export |
foreach($indices_a_supprimer as $indice_supp) { |
unset($colonnes_champs_supp_par_obs[$indice_supp]); |
foreach($indices_a_supprimer as $indice_supp) { |
unset($colonnes_champs_supp_par_obs[$indice_supp]); |
} |
} |
// ces deux lignes réordonnent l'ordre des colonnes des champs étendus en fonction de l'ordre (très spécifique) |
// de self::$ordre_champ_etendus_Florileges, les champs non-mentionnés sont ajoutés à la fin. |
$colonnes_champs_supp_par_obs = self::sortArrayByArray(array_flip($colonnes_champs_supp_par_obs), |
/trunk/jrest/lib/GestionObservation.php |
---|
297,19 → 297,8 |
$msg = "Erreur de suppression d'une liste d'observations : $resultat_suppression_observations"; |
$this->logger('CEL_bugs', $msg); |
} else { |
$requete = 'DELETE FROM cel_obs_images '. |
"WHERE id_observation IN ($chaine_ids_obs) ". |
' -- ' . __FILE__ . ':' . __LINE__; |
// TODO [jpm] : pourquoi on supprime pas les images si on supprime les obs ? |
$resultat_suppression_liens = Cel::db()->executer($requete); |
if ($resultat_suppression_liens === false) { |
$msg = "Erreur de suppression d'une liste de liaison entre observations et images : $requete"; |
$this->logger('CEL_bugs', $msg); |
} else { |
$retour = true; |
} |
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'obs'); |
$resultat_suppression_mots_cles = $gestion_mots_cles->supprimerToutesLiaisonsPourIdsElementsLies($ids_obs_non_protegees); |
/trunk/jrest/lib/Cel.php |
---|
346,7 → 346,7 |
$autorisation = ($this->etreUtilisateurAutorise() && $this->etreAdminCel($identifiant)) ? true : false; |
return $autorisation; |
} |
public function etreAdminCelParId($id) { |
// si l'utilisateur s'est déjà identifié, alors les infos |
// sur le fait qu'il est admin ou non sont déjà disponibles |
355,7 → 355,7 |
} else { |
$requete = "SELECT admin FROM cel_utilisateurs WHERE id_utilisateur = ".Cel::db()->proteger($id); |
$resultat = Cel::db()->requeter($requete); |
$admin = false; |
if ($resultat && count($resultat) > 0) { |
$admin = ($resultat[0]['admin'] == 1); |
372,7 → 372,7 |
} else { |
$requete = "SELECT admin FROM cel_utilisateurs WHERE courriel = ".Cel::db()->proteger($courriel); |
$resultat = Cel::db()->requeter($requete); |
$admin = false; |
if ($resultat && count($resultat) > 0) { |
$admin = ($resultat[0]['admin'] == 1); |
551,7 → 551,7 |
protected function convertirCodeZoneGeoVersDepartement($code_zone_geo) { |
$code_departement = ''; |
if($this->estUnCodeInseeDepartement($code_zone_geo)) { |
if ($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = substr(ltrim($code_zone_geo,'INSEE-C:'),0,2); |
} |
return $code_departement; |
563,7 → 563,7 |
protected function convertirCodeZoneGeoVersCodeInsee($code_zone_geo) { |
$code_departement = ''; |
if($this->estUnCodeInseeDepartement($code_zone_geo)) { |
if ($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = ltrim($code_zone_geo,'INSEE-C:'); |
} |
return $code_departement; |
642,7 → 642,7 |
} |
return $urlEflore; |
} |
protected function nePasInterpreterXml($txt) { |
return '<![CDATA['.$txt.']]>'; |
} |
/trunk/jrest/lib/GestionImage.php |
---|
238,15 → 238,6 |
$this->logger($message); |
} |
$requete = 'DELETE FROM cel_obs_images '. |
"WHERE id_image in ($chaine_ids_images) ". |
' -- '.__FILE__.' : '.__LINE__; |
$resultat_suppression_lien_images_obs = Cel::db()->executer($requete); |
if ($resultat_suppression_lien_images_obs === false) { |
$message = "Erreur lors de la suppression des observations associées à 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) { |
/trunk/jrest/lib/RechercheImage.php |
---|
104,63 → 104,52 |
} |
private function fabriquerRequeteJointureObs() { |
$requete_jointure_observations = 'FROM cel_images ci '. |
'LEFT JOIN cel_obs_images coi '. |
'ON coi.id_image = ci.id_image '. |
$requete = 'FROM cel_images ci '. |
'LEFT JOIN cel_obs co '. |
'ON coi.id_observation = co.id_observation '. |
'ON ci.ce_observation = co.id_observation '. |
'WHERE 1 '; |
return $requete_jointure_observations; |
return $requete; |
} |
public function obtenirInformationsObservationsAssociees($id_utilisateur, $id_image) { |
$requete = 'SELECT ce_observation FROM cel_images WHERE id_image = '.$id_image; |
$resultats = Cel::db()->requeter($requete); |
$requete_table_liaison = 'SELECT id_observation FROM cel_obs_images WHERE id_image = '.$id_image; |
$idsObsListe = array(); |
foreach ($resultats as $liaison) { |
$idsObsListe[] = $liaison['ce_observation']; |
} |
$ids_obs = implode(',', $idsObsListe); |
$resultats_liaisons_images = Cel::db()->requeter($requete_table_liaison); |
$ids_obs = ''; |
foreach($resultats_liaisons_images as $liaison) { |
$ids_obs .= $liaison['id_observation'].","; |
} |
$ids_obs = rtrim($ids_obs,','); |
$infos_obs = ''; |
if (trim($ids_obs) != '') { |
$requete = 'SELECT * FROM cel_obs WHERE id_observation IN ('.$ids_obs.') AND ce_utilisateur = "'.$id_utilisateur.'"'; |
$resultats = Cel::db()->requeter($requete); |
if(trim($ids_obs) != '') { |
$requete_obs_liees = 'SELECT * FROM cel_obs WHERE id_observation IN ('.$ids_obs.') AND ce_utilisateur ="'.$id_utilisateur.'"'; |
$resultat_obs_liees = Cel::db()->requeter($requete_obs_liees); |
foreach($resultat_obs_liees as $obs_liee) |
{ |
foreach ($resultats as $obs_liee) { |
$infos_obs .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ; |
} |
} |
return $infos_obs; |
} |
private function fabriquerSousRequeteRecherche($id_utilisateur, $criteres) { |
$sous_requete = ' AND '; |
foreach($criteres as $nom => $valeur) |
{ |
foreach($criteres as $nom => $valeur) { |
if($valeur == null || trim($nom) == "" || trim($valeur) == "") { |
continue; |
} |
switch($nom) { |
case "id_image"; |
switch($nom) { |
case "id_image"; |
$sous_requete .= 'ci.id_image = '.Cel::db()->proteger($valeur) ; |
$sous_requete .= ' AND '; |
break; |
$sous_requete .= ' AND '; |
break; |
case "mots_cles"; |
$sous_requete .= $this->creerSousRequeteMotsCles($valeur); |
break; |
break; |
case "id_mots_cles"; |
$liste_mc = '"'.str_replace(';','","',$valeur).'"'; |
167,18 → 156,17 |
$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesIds('images'); |
$sous_requete .= 'id_image IN ('.sprintf($tpl_sous_requete, $liste_mc).')'; |
$sous_requete .= ' AND ' ; |
break; |
break; |
case "commentaire": |
$mots_comment_liste = explode(" " , $valeur) ; |
foreach($mots_comment_liste as $mot_comment) |
{ |
foreach($mots_comment_liste as $mot_comment) { |
$mot_comment = trim($mot_comment) ; |
$sous_requete .= 'ci.'.$nom.' LIKE '.Cel::db()->proteger('%'.$mot_comment.'%') ; |
$sous_requete .= ' AND ' ; |
} |
break; |
break; |
case "annee": |
case "mois": |
246,9 → 234,7 |
break; |
} |
} |
$sous_requete = rtrim($sous_requete,' AND '); |
return $sous_requete; |
} |
/trunk/jrest/jrest.ini.php.defaut |
---|
18,6 → 18,8 |
celImgUrlTpl = "http://api.tela-botanica.org/img:%s.jpg" |
; Url de PhpMyEdit permettant de faire les corrections du CEL pour les Super Admin |
phpEditUrlTpl = "http://www.tela-botanica.org/eflore/cel2/jrest/util/cel_inventory.php?PME_sys_fl=0&PME_sys_fm=0&PME_sys_sfn[0]=0&PME_sys_operation=PME_op_Change&PME_sys_rec=%s" |
; Url de l'appli du CEL |
celAppliUrl = "http://www.tela-botanica.org/appli:cel" |
; Indication du nom de l'éditeur pour les flux de syndication |
editeur = "Tela Botanica" |
; Format du Guid des observations du CEL pour les flux de syndication principalement |
30,12 → 32,6 |
fuseauHoraire = "Europe/Paris" |
; template de chemin pour les marqueur google maps pour le widget carto |
cheminCelMarkerObsTpl = "/home/telabotap/www/commun/icones/carto/groupe/g%s.png" |
; URL des services web du CEL sous forme de template à utiliser avec sprintf |
baseURLServicesCelTpl = "http://localhost/service:cel:%s" |
; Squelette d'Url permettant d'afficher une image du CEL (remplace %s par l'id de l'image sans underscore) |
celImgUrlTpl = "http://api.tela-botanica.org/img:%s.jpg" |
; URL des services web du CEL sous forme de template à utiliser avec sprintf |
baseURLServicesAnnuaireTpl = "http://www.tela-botanica.org/service:annuaire:%s" |
[eflore] |
phptype = mysqli |
/trunk/jrest/services/CelSyndicationImage.php |
---|
332,13 → 332,9 |
// Construction de la requête |
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '. |
' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, |
ci.mots_cles_texte as mots_cles_texte_images_obs, cim.commentaire, note_qualite, nom_referentiel '. |
'FROM cel_obs_images AS coi '. |
'LEFT JOIN cel_obs AS ci '. |
'ON (coi.id_observation = ci.id_observation) '. |
'LEFT JOIN cel_images AS cim '. |
'ON (coi.id_image = cim.id_image) '. |
' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte AS mots_cles_texte_images, '. |
' ci.mots_cles_texte AS mots_cles_texte_images_obs, cim.commentaire, note_qualite, nom_referentiel '. |
'FROM cel_obs AS ci LEFT JOIN cel_images AS cim ON (ci.id_observation = cim.ce_observation) '. |
'WHERE ci.transmission = 1 '. |
' AND ci.ce_utilisateur = cim.ce_utilisateur '. |
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'cim.date_creation DESC').' '. |
371,14 → 367,12 |
// Construction de la requête |
$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '. |
' cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, '. |
' ci.mots_cles_texte as mots_cles_texte_obs, cim.commentaire as commentaire_img, note_qualite, nom_referentiel, '. |
' ci.commentaire as commentaire_obs '. |
' cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte AS mots_cles_texte_images, '. |
' ci.mots_cles_texte AS mots_cles_texte_obs, cim.commentaire AS commentaire_img, note_qualite, nom_referentiel, '. |
' ci.commentaire AS commentaire_obs '. |
'FROM cel_images AS cim '. |
' LEFT JOIN cel_obs_images AS coi '. |
' ON (coi.id_image = cim.id_image) '. |
' LEFT JOIN cel_obs AS ci '. |
' ON (coi.id_observation = ci.id_observation) '. |
' ON (cim.ce_observation = ci.id_observation) '. |
(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 '). |
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'cim.date_creation DESC').' '. |
"LIMIT $this->start, $this->limit "; |
431,20 → 425,18 |
$sous_requete = 'SELECT * '. |
'FROM cel_images c '. |
'WHERE id_image '. |
' IN (SELECT id_image FROM cel_obs_images a '. |
(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON b.id_observation = a.id_observation AND b.transmission = 1 '). |
' IN (SELECT id_image FROM cel_images a '. |
(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON a.ce_observation = b.id_observation AND b.transmission = 1 '). |
') '; |
$sous_requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'c.date_creation DESC').' '. |
"LIMIT $this->start,$this->limit "; |
// Construction de la requête |
$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '. |
' b.commentaire as commentaire_obs, c.commentaire as commentaire_img, nom_referentiel '. |
'FROM ('.$sous_requete.') as c '. |
' INNER JOIN cel_obs_images AS a '. |
' ON (a.id_image = c.id_image) '. |
$requete = 'SELECT *, b.mots_cles_texte AS mots_cles_texte_obs, c.mots_cles_texte AS mots_cles_texte_images, '. |
' b.commentaire AS commentaire_obs, c.commentaire AS commentaire_img, nom_referentiel '. |
'FROM ('.$sous_requete.') AS c '. |
' INNER JOIN cel_obs AS b '. |
' ON (a.id_observation = b.id_observation) AND b.ce_utilisateur = c.ce_utilisateur '; |
' ON (c.ce_observation = b.id_observation) AND b.ce_utilisateur = c.ce_utilisateur '; |
//echo $requete; |
return $requete; |
} |
453,11 → 445,9 |
// Construction de la requête |
$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '. |
' b.commentaire as commentaire_obs, c.commentaire as commentaire_img, nom_referentiel '. |
'FROM cel_obs_images AS a '. |
'FROM cel_images AS c '. |
' INNER JOIN cel_obs AS b '. |
' ON (a.id_observation = b.id_observation) '. |
' INNER JOIN cel_images AS c '. |
' ON (a.id_image = c.id_image) '. |
' ON (c.ce_observation = b.id_observation) '. |
'WHERE b.ce_utilisateur = c.ce_utilisateur '. |
(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 '). |
' AND '; |
/trunk/jrest/services/ImageContribution.php |
---|
14,121 → 14,81 |
*/ |
/** |
* Classe renvoyant une liste très succinte des observations liées à une image de l'utilisateur |
* |
* Classe renvoyant une liste très succinte des observations liées à une image de l'utilisateur |
* |
*/ |
class ImageContribution extends Cel { |
/** |
* Renvoi un petit bout de html contenant les dernières obs liées à |
* Renvoi un petit bout de html contenant les dernières obs liées à |
* une image d'un utilisateur |
* |
* |
* @param string $uid[0] mail de l'utilisateur |
* @param string $uid[1] identifiant numérique de l'utilisateur |
*/ |
function getElement($uid){ |
$idUtilisateurP = Cel::db()->proteger($uid[1]); |
$requete = 'SELECT co.*, ci.id_image, ci.nom_original, ci.largeur, ci.hauteur '. |
'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (id_observation = ce_observation) '. |
"WHERE co.ce_utilisateur = $idUtilisateurP ". |
'ORDER BY co.date_modification DESC '. |
'LIMIT 0,5 '. |
' -- '.__FILE__.':'.__LINE__; |
$resultats = Cel::db()->requeter($requete); |
$requete_obs_liee_images = 'SELECT * FROM cel_obs'. |
' WHERE ce_utilisateur = '.Cel::db()->proteger($uid[1]). |
' AND id_observation IN (SELECT id_observation |
FROM cel_obs_images |
WHERE id_utilisateur = '.Cel::db()->proteger($uid[1]).' )'. |
' AND transmission = 0'. |
' ORDER BY date_modification DESC LIMIT 0,5'; |
$html = '<div id="resume_cel">'; |
if ($resultats !== false && is_array($resultats)) { |
$urlImgTpl = $this->config['settings']['celImgUrlTpl']; |
foreach ($resultats as $obs) { |
$nom_ret = (!empty($obs['nom_ret'])) ? $obs['nom_ret'] : 'Indéterminée'; |
$obs['nom_original'] = htmlspecialchars($obs['nom_original']); |
$obs['id_image'] = htmlspecialchars($obs['id_image']); |
$obs['zone_geo'] = trim($obs['zone_geo'],'000null'); |
$obs['ce_zone_geo'] = trim($obs['ce_zone_geo'],'000null'); |
$obs['station'] = trim($obs['station'],'000null'); |
$obs['lieudit'] = trim($obs['lieudit'],'000null'); |
$id = $obs['id_image']; |
$html = '<div id="resume_cel">'; |
$obs_liees_images = array(); |
$resultat_obs_liees_images = Cel::db()->requeter($requete_obs_liee_images); |
if(is_array($resultat_obs_liees_images)) { |
$obs_liees_images = $resultat_obs_liees_images; |
} |
list($largeur, $hauteur) = $this->calculerDimensions($obs['largeur'], $obs['hauteur']); |
$id = sprintf('%09s', $id); |
$urlImgL = sprintf($urlImgTpl, "{$id}L"); |
$urlImgS = sprintf($urlImgTpl, "{$id}S"); |
foreach ($obs_liees_images as $obs) { |
$chemin_sur_serveur = $this->config['cel']['url_images']; |
$requete_img_liees = 'SELECT * FROM cel_images WHERE id_image '. |
'IN (SELECT id_image FROM cel_obs_images '. |
'WHERE id_observation = "'.$obs['id_observation'].'") '. |
'AND ce_utilisateur = "'.$obs['ce_utilisateur'].'"' ; |
$resultat_requete_img_liees = Cel::db()->requeter($requete_img_liees); |
if (is_array($resultat_requete_img_liees) && count($resultat_requete_img_liees) > 0) { |
$premiere_image_liee = $resultat_requete_img_liees[0]; |
$premiere_image_liee['nom_original'] = htmlspecialchars($premiere_image_liee['nom_original']); |
$premiere_image_liee['id_image'] = htmlspecialchars($premiere_image_liee['id_image']); |
$id = $premiere_image_liee['id_image']; |
$tailleXY = $this->calculerDimensions(array($premiere_image_liee['largeur'], $premiere_image_liee['hauteur'])); |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = explode("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$html .= '<div class="item_resume_cel">'; |
$html .= '<h4><a href="'.$chemin_fichier.'">'.$obs['nom_ret'].'</a></h4>'. |
'<img src="'.$chemin_fichier_s.'" alt="'.$premiere_image_liee['nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'; |
$html .= '<span>Datée du '.$obs['date_modification'].'<br/>' ; |
$html .= 'Lieu : '.trim($obs['zone_geo'],'000null').' ('.trim($obs['ce_zone_geo'],'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/></p>' ; |
$html .= '</span>'; |
$html .= '</div>'; |
$html .= '<div class="item_resume_cel">'. |
'<h4><a href="'.$urlImgL.'">'.$nom_ret.'</a></h4>'. |
'<img src="'.$urlImgS.'" alt="'.$obs['nom_original'].'" height="'.$hauteur.'px" width="'.$largeur.'px" /><br/>'. |
'<span>Datée du '.$obs['date_modification'].'<br/>'. |
'Lieu : '.$obs['zone_geo'].' ('.$obs['ce_zone_geo'].') '.$obs['station'].' '.$obs['lieudit'].'<br/></p>'. |
'</span>'. |
'</div>'; |
} |
} |
} |
$html .= '</div>'; |
$html.= '</div>'; |
header("Content-Type: text/html; charset=UTF-8"); |
print $html; |
exit; |
} |
header("Content-Type: text/html; charset=UTF-8"); |
print $html; |
exit; |
} |
private function calculerDimensions($largeur, $hauteur) { |
$tailleOr = 75 ; |
if ($hauteur == 0) { |
$hauteur = $tailleOr; |
} |
if ($largeur == 0) { |
$largeur = $tailleOr; |
} |
$maxTaille = max($hauteur, $largeur); |
private function calculerDimensions($tailleXY) { |
$tailleOr = 75 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 75 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 75 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
?> |
if ($maxTaille == $hauteur) { |
$rapport = $hauteur / $largeur; |
$hauteur = 75; |
$largeur = round($hauteur / $rapport, 0); |
} else { |
$rapport = $largeur / $hauteur; |
$largeur = 75; |
$hauteur = round($largeur / $rapport, 0); |
} |
return array($largeur, $hauteur); |
} |
} |
/trunk/jrest/services/CelStatistiqueTxt.php |
---|
70,9 → 70,8 |
private function construireRequeteListeUtilisateurNbrePhoto() { |
$select = 'SELECT co.courriel_utilisateur, COUNT(DISTINCT ci.id_image) AS nbre '; |
$from = 'FROM cel_obs AS co '. |
' LEFT JOIN cel_obs_images AS coi ON (coi.id_observation = co.id_observation) '. |
' LEFT JOIN cel_images AS ci ON (coi.id_image = ci.id_image) '; |
$where = 'WHERE transmission = 1 '; |
' LEFT JOIN cel_images AS ci ON (co.id_observation = ci.ce_observation) '; |
$where = 'WHERE co.transmission = 1 '; |
$groupBy = 'GROUP BY co.courriel_utilisateur '; |
$orderBy = 'ORDER BY nbre DESC '; |
$limitSql = 'LIMIT 0,150 '; |
125,10 → 124,9 |
private function construireRequeteListeTaxonNbrePhoto() { |
$select = 'SELECT nom_ret, COUNT(DISTINCT ci.id_image) AS nbre '; |
$from = 'FROM cel_obs co '. |
' LEFT JOIN cel_obs_images coi ON (coi.id_observation = co.id_observation) '. |
' LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) '; |
$where = 'WHERE transmission = 1 '. |
" AND nom_ret != '' "; |
' LEFT JOIN cel_images ci ON (co.id_observation = ci.ce_observation) '; |
$where = 'WHERE co.transmission = 1 '. |
" AND nom_ret != '' "; |
$groupBy = 'GROUP BY nom_ret '; |
$orderBy = 'ORDER BY nbre DESC '; |
$limitSql = 'LIMIT 0,150 '; |
310,8 → 308,7 |
$filtres[] = "nom_ret LIKE $taxon "; |
} |
if (isset($num_taxon) || isset($taxon)) { |
$from .= 'LEFT JOIN cel_obs_images coi ON (coi.id_image = ci.id_image) '. |
'LEFT JOIN cel_obs co ON (coi.id_observation = co.id_observation) '; |
$from .= 'LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) '; |
} |
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : ''); |
323,8 → 320,7 |
private function construireRequeteNbreImgLiees() { |
$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre '; |
$from = 'FROM cel_obs_images coi '. |
' LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) '; |
$from = 'FROM cel_images ci '; |
if (count($this->parametres) != 0) { |
$filtres = array(); |
342,7 → 338,7 |
} |
if (isset($num_taxon) || isset($taxon)) { |
$from .= 'LEFT JOIN cel_obs ON (coi.id_observation = co.id_observation) '; |
$from .= 'LEFT JOIN cel_obs ON (ci.ce_observation = co.id_observation) '; |
} |
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : ''); |
353,9 → 349,9 |
} |
private function construireRequeteNbreObsLiees() { |
$select = 'SELECT COUNT(DISTINCT coi.id_observation) AS nbre '; |
$from = 'FROM cel_obs_images coi '. |
' LEFT JOIN cel_obs co ON (coi.id_observation = co.id_observation) '; |
$select = 'SELECT COUNT(DISTINCT id_observation) AS nbre '; |
$from = 'FROM cel_images ci '. |
' LEFT JOIN cel_obs co ON (ci.ce_observation = co.id_observation) '; |
if (count($this->parametres) != 0) { |
$filtres = array(); |
457,25 → 453,23 |
" GROUP BY ce_utilisateur ORDER BY nombreObs DESC LIMIT $nombre;"; |
break; |
case "img": |
$req = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , co.courriel_utilisateur , count(DISTINCT ci.id_image) as nombreImg" . |
" FROM cel_images ci" . |
" RIGHT JOIN cel_obs_images coi ON coi.id_image = ci.id_image" . |
" LEFT JOIN cel_obs co ON coi.id_observation = co.id_observation" . |
" WHERE co.transmission = 1" . |
" AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours" . |
" GROUP BY co.ce_utilisateur ORDER BY nombreImg DESC LIMIT $nombre;"; |
$req = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , co.courriel_utilisateur , count(DISTINCT ci.id_image) as nombreImg ". |
"FROM cel_images ci ". |
"RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ". |
"WHERE co.transmission = 1 ". |
"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ". |
"GROUP BY co.ce_utilisateur ORDER BY nombreImg DESC LIMIT $nombre; "; |
break; |
default: |
$req = "SELECT co.ce_utilisateur , co.prenom_utilisateur , co.nom_utilisateur , co.courriel_utilisateur ," . |
" count(DISTINCT ci.id_image) as nombreImg, count(DISTINCT co.id_observation) as nombreObs," . |
" count(DISTINCT ci.id_image) + count(DISTINCT co.id_observation) as somme" . |
" FROM cel_images ci" . |
" RIGHT JOIN cel_obs_images coi ON coi.id_image = ci.id_image" . |
" LEFT JOIN cel_obs co ON coi.id_observation = co.id_observation" . |
" WHERE co.transmission = 1" . |
" AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours" . |
" GROUP BY co.ce_utilisateur" . |
" ORDER BY somme DESC LIMIT $nombre;"; |
$req = "SELECT co.ce_utilisateur, co.prenom_utilisateur, co.nom_utilisateur, co.courriel_utilisateur, ". |
"COUNT(DISTINCT ci.id_image) AS nombreImg, COUNT(DISTINCT co.id_observation) AS nombreObs, ". |
"COUNT(DISTINCT ci.id_image) + COUNT(DISTINCT co.id_observation) AS somme ". |
"FROM cel_images ci ". |
"RIGHT JOIN cel_obs co ON ci.ce_observation = co.id_observation ". |
"WHERE co.transmission = 1 ". |
"AND TO_DAYS(NOW()) - TO_DAYS(co.date_transmission) <= $jours ". |
"GROUP BY co.ce_utilisateur ". |
"ORDER BY somme DESC LIMIT $nombre ; "; |
} |
return $req; |
/trunk/jrest/services/CelWidgetMap.php |
---|
62,14 → 62,14 |
public function getStations($params) { |
$json = null; |
$requete = 'SELECT utm_secteur, utm_x, utm_y, wgs84_latitude AS latitude, wgs84_longitude AS longitude '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
' ON (l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
' ON (l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
$this->construireWhereDept(). |
$this->construireWhereCommune(). |
$this->construireWhereCommune(). |
$this->construireWherePhotosSeulement(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
$this->construireWhereNomTaxon(). |
$this->construireWhereDate(). |
133,24 → 133,24 |
$total = 0; |
if (!$this->etreNull($this->parametres['station'])) { |
$requete = 'SELECT SQL_CALC_FOUND_ROWS id_observation, ce_utilisateur, courriel_utilisateur, '. |
' nom_sel, nom_ret, nom_sel_nn, nom_ret_nn, nt, famille, '. |
' lieudit, zone_geo, date_observation, milieu, commentaire, '. |
' utm_secteur, utm_x, utm_y, id_zone_geo, date_transmission, nom_referentiel '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWherePhotosSeulement(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
$this->construireWhereNomTaxon(). |
$this->construireWhereDate(). |
$this->construireWhereCommentaire(). |
$this->construireWhereProjet(). |
$this->construireWhereTag(). |
'ORDER BY nom_sel ASC '. |
"LIMIT {$this->start},{$this->limit} "; |
' nom_sel, nom_ret, nom_sel_nn, nom_ret_nn, nt, famille, '. |
' lieudit, zone_geo, date_observation, milieu, commentaire, '. |
' utm_secteur, utm_x, utm_y, id_zone_geo, date_transmission, nom_referentiel '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWherePhotosSeulement(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
$this->construireWhereNomTaxon(). |
$this->construireWhereDate(). |
$this->construireWhereCommentaire(). |
$this->construireWhereProjet(). |
$this->construireWhereTag(). |
'ORDER BY nom_sel ASC '. |
"LIMIT {$this->start},{$this->limit} "; |
//die($requete); |
$resultats = Cel::db()->requeter($requete, self::SQL_RETOUR_COMPLET, self::SQL_MODE_OBJET); |
352,7 → 352,7 |
switch ($type) { |
case '*' : |
$sql = $this->obtenirConditionPourCommentaires($commentaire); |
$sql = " AND (commentaire LIKE $commentaire OR ($sql)) "; |
$sql = " AND (ci.commentaire LIKE $commentaire OR ($sql)) "; |
break; |
case 'observation' : |
$sql = " AND co.commentaire LIKE $commentaire "; |
505,18 → 505,16 |
*/ |
private function obtenirObsLieesImg($type, $param) { |
// Construction de la requête |
$requete = 'SELECT DISTINCT id_observation AS id_obs, ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' LEFT JOIN cel_obs_images coi '. |
' ON (coi.id_image = ci.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON coi.id_observation = co.id_observation '. |
$requete = 'SELECT DISTINCT id_observation AS id_obs, co.ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' INNER JOIN cel_obs AS co '. |
' ON ci.ce_observation = co.id_observation '. |
' LEFT JOIN locations AS l '. |
' ON (l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
"WHERE co.transmission = '1' ". |
($type == 'date.photo' ? " AND (date_prise_de_vue LIKE ".str_replace('-', ':', $param).") " : ''). |
($type == 'date.ajout' ? " AND date_creation LIKE $param " : ''). |
($type == 'date.liaison' ? " AND date_liaison LIKE $param " : ''). |
($type == 'date.ajout' ? " AND ci.date_creation LIKE $param " : ''). |
($type == 'date.liaison' ? " AND ci.date_liaison LIKE $param " : ''). |
// TODO: recherche sur le xml |
//($type == 'commentaire.meta' ? " AND ci.commentaire LIKE $param " : ''). |
($type == 'commentaire.utilisateur' ? " AND ci.commentaire LIKE $param " : ''). |
599,7 → 597,7 |
private function construireWherePhotosSeulement() { |
$sql = ''; |
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) { |
$sql = 'AND co.id_observation IN (SELECT DISTINCT id_observation FROM cel_obs_images) '; |
$sql = 'AND co.id_observation IN (SELECT DISTINCT ce_observation FROM cel_images) '; |
} |
return $sql; |
} |
667,15 → 665,13 |
if (isset($tag) && !$this->etreNull($tag)) { |
$tag_sql = $this->getSqlWhereMotsCles($tag); |
// Construction de la requête |
$requete = 'SELECT DISTINCT coi.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
$requete = 'SELECT DISTINCT co.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' LEFT JOIN cel_obs_images coi'. |
' ON (ci.id_image = coi.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' INNER JOIN cel_obs AS co '. |
' ON (ci.ce_observation = co.id_observation) '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
"WHERE co.transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
743,7 → 739,6 |
} |
private function decomposerParametreTag($tags) { |
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null); |
if (preg_match('/.+OU.+/', $tags)) { |
$mots_cles['type'] = 'OR'; |
/trunk/jrest/services/CelImage.php |
---|
48,7 → 48,7 |
} |
$this->envoyerJson($retour); |
} |
private function getImage() { |
$image = null; |
if (isset($_GET['imgId'])) { |
74,24 → 74,20 |
$observations = $this->traiterValeursMultiples($_GET['obsId']); |
if (! is_null($observations)) { |
$requete = 'SELECT co.id_observation, cim.id_image '. |
'FROM cel_obs AS co '. |
' LEFT JOIN cel_obs_images AS coi '. |
' ON (coi.id_observation = co.id_observation) '. |
' LEFT JOIN cel_images AS cim '. |
' ON (coi.id_image = cim.id_image) '. |
"WHERE co.id_observation IN ($observations) "; |
$requete = 'SELECT ce_observation, id_image '. |
'FROM cel_images '. |
"WHERE ce_observation IN ($observations) "; |
$resultat_requete_images = Cel::db()->requeter($requete); |
$resultats = Cel::db()->requeter($requete); |
$infos = array(); |
if(is_array($resultat_requete_images)) { |
$infos = $resultat_requete_images; |
if (is_array($resultats)) { |
$infos = $resultats; |
} |
foreach ($infos as $info) { |
if(is_numeric($info['id_image'])) { |
$ids[$info['id_observation']][] = (int) $info['id_image']; |
if (is_numeric($info['id_image'])) { |
$ids[$info['ce_observation']][] = (int) $info['id_image']; |
} |
} |
} |
/trunk/jrest/services/ImageRDF.php |
---|
3,7 → 3,7 |
/** |
* PHP Version 5 |
* |
* |
* Retourne un RDF des images pour eflore |
* |
* @category PHP |
19,106 → 19,83 |
/** |
* Recherche des images associee au numero nomenclatural |
* @param numeric $uid [0] : numero nomenclatural obligatoire , $uid[1] (optionnel) : taille image : S , M, L (default) |
*/ |
*/ |
function getElement($uid){ |
$nomSelNnP = Cel::db()->proteger($uid[0]); |
$taille = isset($uid[1]) ? $uid[1] : 'L'; |
// TODO : recherche taxon ? |
// Taille |
if (isset($uid[1])) { |
$taille = $uid[1]; // S , M ou L |
} |
else { |
$taille = 'L'; |
} |
// Recherche de toutes les observations transmises du taxon pour lesquelles une photo est associee. |
$requete_obs_publiques_images_taxon = 'SELECT * FROM cel_obs, cel_obs_images, cel_images '. |
' WHERE cel_obs.nom_sel_nn = '.Cel::db()->proteger($uid[0]). |
' AND cel_obs_images.id_observation = cel_obs.id_observation '. |
' AND cel_obs.transmission = 1 '. |
' AND cel_images.id_image = cel_obs_images.id_image'; |
// Recherche de toutes les observations transmises du taxon pour lesquelles une photo est associee. |
$requete = 'SELECT co.id_observation, co.nom_sel, co.ordre, '. |
' co.prenom_utilisateur, co.nom_utilisateur, co.courriel_utilisateur, '. |
' co.zone_geo, .co.ce_zone_geo, co.date_observation, '. |
' ci.id_image, ci.nom_original '. |
'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (co.id_observation = ci.ce_observation) '. |
"WHERE co.nom_sel_nn = $nomSelNnP ". |
'AND co.transmission = 1 '. |
' -- '.__FILE__.':'.__LINE__; |
//echo $requete; |
$resultats = Cel::db()->requeter($requete); |
$resultat_requete_obs_images_taxon = Cel::db()->requeter($requete_obs_publiques_images_taxon); |
$picture_path = $this->config['cel']['url_images']; |
// Formatage du xml |
$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n"; |
$xml .= '<rdf:RDF'."\n"; |
$xml .= ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n"; |
$xml .= ' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n"; |
$xml .= ' xmlns:dcterms="http://purl.org/dc/terms">'."\n"; |
$images_obs_taxon = array(); |
if (is_array($resultat_requete_obs_images_taxon)) { |
$images_obs_taxon = $resultat_requete_obs_images_taxon; |
$auteursEmails = array(); |
$donnees = array(); |
if ($resultats !== false && is_array($resultats)) { |
$urlImgTpl = $this->config['settings']['celImgUrlTpl']; |
foreach ($resultats as $picture) { |
$id = sprintf('%09s', $picture['id_image']) ; |
$dateObsTimestamp = $this->convertirDateHeureMysqlEnTimestamp($picture['date_observation']); |
$auteursEmails[] = $picture['courriel_utilisateur']; |
$data = array(); |
$data['url_img'] = sprintf($urlImgTpl, $id.$taille); |
$data['id_image'] = $picture['id_image']; |
$data['guid'] = 'urn:lsid:tela-botanica.org:celpic:'.$data['id_image']; |
$data['nom_original'] = $picture['nom_original']; |
$data['id_observation'] = $picture['id_observation']; |
$data['nom_sel'] = $picture['nom_sel']; |
$data['ordre'] = $picture['ordre']; |
$data['zone_geo'] = utf8_decode($picture['zone_geo']); |
$data['ce_zone_geo'] = $picture['ce_zone_geo']; |
$data['ce_zone_geo'] = $picture['ce_zone_geo']; |
$data['courriel_utilisateur'] = $picture['courriel_utilisateur']; |
$data['date_observation'] = ($dateObsTimestamp != 0) ? date('d/m/Y', $dateObsTimestamp) : null; |
$donnees[] = $data; |
} |
} |
$auteursIntitules = $this->creerAuteurs($auteursEmails); |
$xml = $this->formaterRdf($donnees, $auteursIntitules); |
// Envoi du xml au navigateur |
header("Content-Type: text/xml"); |
echo utf8_encode(str_replace(' & ', ' & ', $xml)); |
} |
foreach ($images_obs_taxon as $picture) { |
// Calcul du chemin sur le serveur en fonction de l'identifiant (id) |
$id = $picture['id_image']; |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = explode("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$picture_path_with_level = $picture_path.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
// TODO: mettre nom prénom dans créateur ? ou mail ? |
$xml .= ' <rdf:Description about="'.$picture_path_with_level.'/'.$taille.'/'.$id.'_'.$taille.'.jpg'.'"'."\n"; |
$xml .= ' dc:identifier="'.'urn:lsid:tela-botanica.org:celpic:'.$picture['id_image'].'"'."\n"; |
$xml .= ' dc:title="'.$picture['nom_sel'].'"'."\n"; |
$xml .= ' dc:description="'.$picture['nom_sel']." - [fichier_origine:".$picture['nom_original'].'][image_identifiant:'.$picture['id_image'].']'; |
$xml .= '[image_ordre:'.$picture['ordre'].']'; |
$xml .= '[observation_identifiant:'.$picture['id_observation'].']'; |
$xml .= '[observation_ordre:'.$picture['ordre'].']'.'"'."\n"; |
$xml .= ' dc:creator="'.$picture['courriel_utilisateur'].'"'."\n"; |
$xml .= ' dc:publisher="CEL"'."\n"; |
$xml .= ' dcterms:spatial="'.utf8_decode($picture['zone_geo'])." (".$picture['ce_zone_geo'].")".'"'."\n"; |
if ($picture['date_observation'] != '0000-00-00 00:00:00') { |
$yearMonthDay = explode('-',$picture['date_observation']); |
$year = $yearMonthDay[0]; |
$month = 0; |
$day = 0; |
if (count($yearMonthDay) > 1) { |
$month = $yearMonthDay[1]; |
private function formaterRdf($donnees, $auteurs) { |
$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n". |
'<rdf:RDF'."\n". |
' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'."\n". |
' xmlns:dc="http://purl.org/dc/elements/1.1/"'."\n". |
' xmlns:dcterms="http://purl.org/dc/terms">'."\n"; |
if (count($donnees) > 0) { |
foreach ($donnees as $data) { |
$intituleAuteur = $auteurs[$data['courriel_utilisateur']]; |
$xml .= ' <rdf:Description about="'.$data['url_img'].'"'."\n". |
' dc:identifier="'.$data['guid'].'"'."\n". |
' dc:title="'.$data['nom_sel'].'"'."\n". |
' dc:description="'.$data['nom_sel'].' - '. |
'[fichier_origine:'.$data['nom_original'].']'. |
'[image_identifiant:'.$data['id_image'].']'. |
'[image_ordre:'.$data['ordre'].']'. |
'[observation_identifiant:'.$data['id_observation'].']'. |
'[observation_ordre:'.$data['ordre'].']'.'"'."\n". |
' dc:creator="'.$intituleAuteur.'"'."\n". |
' dc:publisher="CEL"'."\n". |
' dcterms:spatial="'.$data['zone_geo']." (".$data['ce_zone_geo'].")".'"'."\n"; |
if (isset($data['date_observation'])) { |
$xml .= ' dcterms:created="'.$data['date_observation'].'"'."\n"; |
} |
if (count($yearMonthDay) > 2) { |
$day = $yearMonthDay[2]; |
} |
list($day) = explode(' ',$day); |
$created = $day.'/'.$month.'/'.$year; |
$xml .= ' dcterms:created="'.$created.'"'."\n"; |
$xml .= ' dcterms:licence="CC BY-SA"/>'."\n"; |
} |
$xml .= ' dcterms:licence="CC BY-SA"/>'."\n"; |
} |
$xml .= '</rdf:RDF>'."\n"; |
// Envoi du xml au navigateur |
header("Content-Type: text/xml"); |
echo utf8_encode(str_replace(' & ', ' & ', $xml)); |
} |
function envoyerRequete($url) { |
$contenu = false; |
$contexte = stream_context_create(array( |
'http' => array( |
'method' => 'GET', |
'header' => "Content-type: application/x-www-form-urlencoded\r\n"))); |
$flux = @fopen($url, 'r', false, $contexte); |
$contenu = json_decode(stream_get_contents($flux)); |
fclose($flux); |
return $contenu; |
} |
} |
?> |
return $xml; |
} |
} |
/trunk/jrest/services/CelWidgetMapPoint.php |
---|
15,7 → 15,7 |
* Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs. |
* Projet = mot-clé du projet |
* Plusieurs mots-clés peuvent être spécifiés: |
* machin ET bidule ET chose => observations ayant tous les mots-clés (intersection) |
* machin ET bidule ET chose => observations ayant tous les mots-clés (intersection) |
* machin OU bildule OU chose => observations ayant au moins un des mots-clés (union) |
* ATTENTION |
* machin ET bidule OU chose donne un résultat indéterminé pour l'instant |
736,21 → 736,19 |
*/ |
private function obtenirObsLieesImg($type, $param) { |
// Construction de la requête |
$requete = 'SELECT DISTINCT co.id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images '. |
' LEFT JOIN cel_obs_images coi '. |
' ON (ci.id_image = coi.id_image) '. |
$requete = 'SELECT DISTINCT co.id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' ON (ci.ce_observation = co.id_observation) '. |
' LEFT JOIN cel_zones_geo AS l '. |
' ON (l.nom = co.zone_geo AND l.id_zone_geo = co.ce_zone_geo) '. |
"WHERE transmission = '1' ". |
($type == 'date.photo' ? " AND (ci_meta_date_time LIKE ".str_replace('-', ':', $param)." OR ci_meta_date LIKE $param) " : ''). |
($type == 'date.ajout' ? " AND ci_meta_date_ajout LIKE $param " : ''). |
($type == 'date.liaison' ? " AND coi_date_liaison LIKE $param " : ''). |
($type == 'commentaire.meta' ? " AND ci_meta_comment LIKE $param " : ''). |
($type == 'commentaire.utilisateur' ? " AND ci_meta_user_comment LIKE $param " : ''). |
($type == 'commentaire.*' ? " AND (ci_meta_comment LIKE $param OR ci_meta_user_comment LIKE $param) " : ''). |
"WHERE co.transmission = '1' ". |
($type == 'date.photo' ? " AND (ci.date_prise_de_vue LIKE ".str_replace('-', ':', $param).' ' : ''). |
($type == 'date.creation' ? " AND ci.date_creation LIKE $param " : ''). |
($type == 'date.liaison' ? " AND ci.date_liaison LIKE $param " : ''). |
($type == 'commentaire.img' ? " AND ci.commentaire LIKE $param " : ''). |
($type == 'commentaire.obs' ? " AND co.commentaire LIKE $param " : ''). |
($type == 'commentaire.*' ? " AND (co.commentaire LIKE $param OR ci.commentaire LIKE $param) " : ''). |
$this->construireWhereCoordonnees(). |
$this->construireWhereDept(). |
$this->construireWhereCommune(). |
949,7 → 947,7 |
private function construireWherePhotosSeulement() { |
$sql = ''; |
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) { |
$sql = 'AND co.id_observation IN (SELECT DISTINCT id_observation FROM cel_obs_images) '; |
$sql = 'AND co.id_observation IN (SELECT DISTINCT ce_observation FROM cel_images) '; |
} |
return $sql; |
} |
1024,14 → 1022,14 |
/** |
* Traitement de $projet pour construction du filtre dans la requête |
* |
* |
* projet1 ET projet2 ET projet3 => intersection |
* projet1 OU projet2 OU projet3 => union |
* projet1 ET projet2 OU projet3 => ATTENTION indéfini |
* projet1 ET projet2 OU projet3 => ATTENTION indéfini |
*/ |
private function getSqlWhereProjet($projet) { |
$sql = null; |
if (isset($projet) && !$this->etreNull($projet)) { |
if (isset($projet) && !$this->etreNull($projet)) { |
if (strpos($projet, ' ET ')) { |
// intersection |
$projets = explode(' ET ', $projet); |
1096,15 → 1094,13 |
if (isset($tag) && !$this->etreNull($tag)) { |
$tag_sql = $this->getSqlWhereMotsCles($tag); |
// Construction de la requête |
$requete = 'SELECT DISTINCT coi.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
$requete = 'SELECT DISTINCT co.id_observation AS id_obs, ci.ce_utilisateur AS utilisateur '. |
'FROM cel_images ci'. |
' LEFT JOIN cel_obs_images coi'. |
' ON (ci.id_image = coi.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' INNER JOIN cel_obs AS co '. |
' ON (ci.ce_observation = co.id_observation) '. |
' LEFT JOIN cel_zones_geo AS l '. |
" ON (l.nom = co.zone_geo AND l.id_zone_geo = co.ce_zone_geo) ". |
"WHERE transmission = '1' ". |
"WHERE co.transmission = '1' ". |
$this->construireWhereCoordonnees(). |
$this->construireWhereUtilisateur(). |
$this->construireWhereNumTaxon(). |
/trunk/jrest/services/CelSyndicationObservation.php |
---|
351,7 → 351,7 |
} |
private function creerSousRequeteTags($tag) { |
$requete = '(id_observation IN (SELECT id_observation FROM cel_obs_images coi INNER JOIN cel_images ci ON coi.id_image = ci.id_image WHERE '; |
$requete = '(id_observation IN (SELECT ce_observation FROM cel_images ci WHERE '; |
$where = ''; |
if (preg_match('/.*OU.*/', $tag)) { |
$mots_cles_tab = explode('OU',$tag); |
551,7 → 551,7 |
if(isset($this->catalogue_cles_labels_champs_etendus[$champ->cle])) { |
$label = $this->catalogue_cles_labels_champs_etendus[$champ->cle]['label']; |
} else { |
$label = preg_replace("/(?<=\\w)(?=[A-Z])/"," $1", $champ->cle); |
$label = preg_replace("/(?<=\\w)(?=[A-Z])/"," $1", $champ->cle); |
$label = trim($label); |
$label = $label; |
} |
565,19 → 565,19 |
return $champs_etendus; |
} |
private function doitAfficherChampEtendu($cle, $catalogue) { |
// Suppression des nombres à la fin de la chaines dans le cas des clés |
// "multiples" et mise en minuscule |
$cle_simplifiee = preg_replace("/\d+$/","",$cle); |
$cle_simplifiee = strtolower(rtrim($cle_simplifiee, ":")); |
// Un champ est affichable s'il n'est pas au catalogue ou bien |
// s'il n'est pas marqué privé dans celui-ci |
$affichable = !isset($catalogue[$cle_simplifiee]) || |
$catalogue[$cle_simplifiee]['options']['prive'] != 1; |
return $affichable; |
return $affichable; |
} |
private function creerCategorie($element) { |
/trunk/jrest/services/CelImageDoublon.php |
---|
125,12 → 125,10 |
} |
if (count($images_doublons_id) > 0) { |
$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre as ordre_obs '. |
$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre AS ordre_obs '. |
'FROM cel_images AS cim '. |
' LEFT JOIN cel_obs_images AS coi '. |
' ON (coi.id_image = cim.id_image) '. |
' LEFT JOIN cel_obs AS co '. |
' ON (coi.id_observation = co.id_observation) '. |
' ON (cim.ce_observation = co.id_observation) '. |
"WHERE cim.ce_utilisateur = '$utilisateur' ". |
' AND cim.id_image IN ('.implode(',', $images_doublons_id).')'; |
/trunk/jrest/services/Resume.php |
---|
1,8 → 1,7 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* PHP Version 5 |
* Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur |
* Utilisée par l'annuaire appelant les web services résumé de chaque application |
* |
* @category PHP |
* @package papyrus_bp |
12,118 → 11,79 |
* @version SVN: <svn_id> |
* @link /doc/papyrus_bp/ |
*/ |
/** |
* Classe renvoyant un petit bout de json contenant les dernières obs publiques d'un utilisateur |
* Utilisée par l'annuaire appelant les web services résumé de chaque application |
* |
*/ |
class Resume extends Cel { |
function getElement($uid){ |
public function getElement($uid){ |
$idUtilisateurP = Cel::db()->proteger($uid[1]); |
$requete = 'SELECT co.*, ci.id_image, ci.nom_original, ci.largeur, ci.hauteur '. |
'FROM cel_obs AS co INNER JOIN cel_images AS ci ON (id_observation = ce_observation) '. |
"WHERE co.ce_utilisateur = $idUtilisateurP ". |
'ORDER BY co.date_modification DESC '. |
'LIMIT 0,5 '. |
' -- '.__FILE__.':'.__LINE__; |
$resultats = Cel::db()->requeter($requete); |
$requete_dernieres_obs = 'SELECT * FROM cel_obs'. |
' WHERE ce_utilisateur = '.Cel::db()->proteger($uid[1]). |
' AND transmission = 0'. |
' ORDER BY date_modification DESC LIMIT 0,5'; |
$urlImgTpl = $this->config['settings']['celImgUrlTpl']; |
$urlAppliCel = $this->config['settings']['celAppliUrl']; |
$resume = array( |
'titre' => 'Vos dernières observations avec photos publiées', |
'lien_appli' => '<a href="'.$urlAppliCel.'"> Accéder au carnet en ligne </a>'); |
$resultat_dernieres_obs = Cel::db()->requeter($requete_dernieres_obs); |
$dernieres_obs = array(); |
$resume = array(); |
if ($resultats !== false && is_array($resultats) && count($resultats) == 0) { |
$resume['message'] = 'Aucune observation saisie pour le moment'; |
} else if ($resultats !== false && is_array($resultats) && count($resultats) > 0) { |
if (is_array($resultat_dernieres_obs)) { |
$dernieres_obs = $resultat_dernieres_obs; |
} |
foreach ($resultats as $obs) { |
$obs = array_filter($obs, array($this, 'nettoyerObs')); |
$resume['titre'] = 'Vos dernières observations publiées'; |
$resume['lien_appli'] = '<a href="www.tela-botanica.org/appli:cel2"> Accéder au carnet en ligne </a>'; |
$nomRetenu = isset($obs['nom_ret']) ? $obs['nom_ret'] : 'Indéterminé'; |
$date = 'Datée du '.$obs['date_modification']; |
$idZoneGeo = $this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']); |
$lieuMorceaux = array(); |
$lieuMorceaux[] = $obs['zone_geo'].(!empty($idZoneGeo) ? " ($idZoneGeo)" : ''); |
$lieuMorceaux[] = $obs['station']; |
$lieuMorceaux[] = $obs['lieudit']; |
$lieu = 'Lieu : '.implode(', ', $lieuMorceaux); |
$nomOriginal = htmlspecialchars($obs['nom_original']); |
list($largeur, $hauteur) = $this->calculerDimensions($obs['largeur'], $obs['hauteur']); |
$idImg = sprintf('%09s', $obs['id_image']); |
$urlImgL = sprintf($urlImgTpl, "{$idImg}L"); |
$urlImgM = sprintf($urlImgTpl, "{$idImg}M"); |
$baliseImg = '<img src="'.$urlImgM.'" alt="'.$nomOriginal.'" height="'.$hauteur.'" width="'.$largeur.'" />'; |
if (count($dernieres_obs) == 0) { |
$resume['message'] = 'Aucune observation saisie pour le moment'; |
} |
foreach ($dernieres_obs as $obs) { |
$chemin_sur_serveur = $this->config['cel']['url_images']; |
$date = 'Datée du '.$obs['date_modification'].'<br/>' ; |
$lieu = 'Lieu : '.trim($obs['zone_geo'],'000null').' ('.$this->convertirCodeZoneGeoVersDepartement(trim($obs['ce_zone_geo']),'000null').') '.trim($obs['station'],'000null').' '.trim($obs['lieudit'],'000null').'<br/>' ; |
$image =''; |
$cible_lien = ''; |
$req_liaison = 'SELECT * FROM cel_images WHERE id_image IN (SELECT id_image FROM cel_obs_images WHERE id_observation = "'.$obs['id_observation'].'") AND ce_utilisateur = "'.$obs['ce_utilisateur'].'"' ; |
$res_liaison = Cel::db()->requeter($req_liaison); |
$ligne_image = null; |
foreach ($res_liaison as $img) { |
$row = $img; |
$resume['elements'][] = array( |
'element' => "$nomRetenu<br />$date<br />$lieu<br />", |
'lien' => $urlImgL, |
'image' => $baliseImg); |
} |
} |
$this->envoyerJson($resume); |
return true; |
} |
if($row != null) { |
$row['nom_original'] = htmlspecialchars($row['nom_original']); |
$row['id_image'] = htmlspecialchars($row['id_image']); |
$id = $row['id_image']; |
$tailleXY = $this->calculerDimensions(array($row['largeur'], $row['hauteur'])); |
$id = sprintf('%09s', $id) ; |
$id = wordwrap($id, 3 , '_', true) ; |
$id_fichier = $id.".jpg" ; |
$niveauDossier = explode("_", $id) ; |
$dossierNiveau1 = $niveauDossier[0] ; |
$dossierNiveau2 = $niveauDossier[1] ; |
$chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ; |
$chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ; |
$chemin_fichier_s = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ; |
$image = '<img src="'.$chemin_fichier_s.'" alt="'.$row['nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img>'; |
$cible_lien = $chemin_fichier; |
} |
$resume_item = array('element' => $obs['nom_ret'].$date.$lieu, 'lien' => $cible_lien,'image' => $image); |
$resume['elements'][] = $resume_item; |
} |
protected function nettoyerObs($valeur) { |
return ($valeur == '000null') ? '' : trim($valeur); |
} |
$this->envoyerJson($resume); |
return true; |
} |
private function calculerDimensions($largeur, $hauteur) { |
$tailleOr = 75 ; |
if ($hauteur == 0) { |
$hauteur = $tailleOr; |
} |
if ($largeur == 0) { |
$largeur = $tailleOr; |
} |
$maxTaille = max($hauteur, $largeur); |
public function calculerDimensions($tailleXY) { |
$tailleOr = 75 ; |
if($tailleXY[1] == 0) { |
$tailleXY[1] = $tailleOr; |
} |
if($tailleXY[0] == 0) { |
$tailleXY[0] = $tailleOr; |
} |
$maxTaille = max($tailleXY[1],$tailleXY[0]) ; |
if($maxTaille == $tailleXY[1]) { |
$rapport = $tailleXY[1]/$tailleXY[0] ; |
$tailleXY[1] = 75 ; |
$tailleXY[0] = round($tailleXY[1]/$rapport,0) ; |
}else { |
$rapport = $tailleXY[0]/$tailleXY[1] ; |
$tailleXY[0] = 75 ; |
$tailleXY[1] = round($tailleXY[0]/$rapport,0) ; |
} |
return $tailleXY ; |
} |
} |
?> |
if ($maxTaille == $hauteur) { |
$rapport = $hauteur / $largeur; |
$hauteur = 75; |
$largeur = round($hauteur / $rapport, 0); |
} else { |
$rapport = $largeur / $hauteur; |
$largeur = 75; |
$hauteur = round($largeur / $rapport, 0); |
} |
return array($largeur, $hauteur); |
} |
} |
/trunk/jrest/services/CelStatistique.php |
---|
56,9 → 56,10 |
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : null; |
// Récupération des données |
$requete = "SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(ci.id_image) AS nbre ". |
"FROM cel_obs_images coi LEFT JOIN cel_images ci ON (coi.id_image = ci.id_image) ". |
$requete = "SELECT DATE_FORMAT(date_creation, '%Y%m') AS periode, COUNT(id_image) AS nbre ". |
"FROM cel_images ". |
"WHERE date_creation != '0000-00-00 00:00:00' ". |
' AND ce_observation IS NOT NULL AND ce_observation != 0 '. |
((isset($utilisateur)) ? " AND courriel_utilisateur = $utilisateur " : ''). |
'GROUP BY periode '. |
'ORDER BY periode '; |
/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; |
} |
} |
?> |
} |