Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2445 → Rev 2446

/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/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/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/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/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/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/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;
}
}
?>
}
/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/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/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(' & ', ' &#38; ', $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(' & ', ' &#38; ', $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/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/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/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;