Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2142 → Rev 2143

/trunk/jrest/services/CelSyndicationObservation.php
213,7 → 213,7
'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby : 'date_modification DESC').' '.
"LIMIT $this->start,$this->limit ";
 
$elements = Cel::db()->executerRequete($requete);
$elements = Cel::db()->requeter($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
260,7 → 260,7
$contenu = '';
if (isset($_GET['debut'])) $this->start = $_GET['debut'];
if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
 
$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
 
// Construction de la requête
281,9 → 281,9
$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby :
'date_modification DESC, zone_geo ASC').' '.
"LIMIT $this->start,$this->limit ";
$elements = Cel::db()->executerRequete($requete);
 
$elements = Cel::db()->requeter($requete);
 
// Création du contenu
if ($elements != false && count($elements) > 0) {
$contenu = $this->executerService($elements);
348,7 → 348,7
}
return $requete;
}
 
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 ';
$where = '';
537,13 → 537,13
$description = $this->nettoyerTexte($description);
return $description;
}
 
private function creerDescriptionChampsEtendus($obs, $item) {
$champs_etendus = '';
foreach($obs['obs_etendue'] as $cle => &$champ) {
$champs_etendus .= '<li>'.$champ->label.' : '.$champ->valeur.' </li>';
}
 
if($champs_etendus != '') {
$champs_etendus = '<li> Champs supplémentaires : <ul>'.$champs_etendus.'</ul></li>';
}
572,14 → 572,14
}
return $url_service;
}
 
private function getIntituleAuteur($courriel) {
 
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
if(isset($this->auteurs[$courriel])) {
if(isset($this->auteurs[$courriel])) {
$intitule = $this->auteurs[$courriel];
} else {
$intitule = $courriel;
}
return $intitule;
}
return $intitule;
}
}
/trunk/jrest/services/InventoryUserList.php
1,101 → 1,73
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/jrest/
*/
 
/**
*
* Liste des utilisateurs du cel, par défaut les 50 premiers
* ou bien commencant par la chaine fournie en paramètre
*
* in=utf8
* out utf8
*
**/
* Liste des utilisateurs du cel, par défaut les 50 premiers
* ou bien commencant par la chaine fournie en paramètre
* in : utf8
* out : utf8
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright © 2010-2014 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
*/
class InventoryUserList extends Cel {
 
function getElement($uid){
$this->controleUtilisateur($uid[0]);
function getElement($uid) {
$this->controleUtilisateur($uid[0]);
 
$requete_utilisateurs ='SELECT DISTINCT id_utilisateur, courriel FROM cel_utilisateurs '.
$this->construireRequeteConditionTableUtilisateurs($uid).' '.
'UNION '.
'SELECT DISTINCT ce_utilisateur as id_utilisateur, courriel_utilisateur as courriel '.
'FROM cel_obs '.
$this->construireRequeteConditionTableObs($uid).' '.
'LIMIT 0,50';
$utilisateurs = Cel::db()->executerRequete($requete_utilisateurs);
$liste_utilisateurs = array();
if (!$utilisateurs) {
} else {
foreach ($utilisateurs as $utilisateur) {
$liste_utilisateurs[] = $utilisateur;
}
}
usort($liste_utilisateurs,'trierUtilisateurs');
$this->envoyerJson($liste_utilisateurs);
return true;
}
private function construireRequeteConditionTableUtilisateurs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
$condition .= ' WHERE courriel LIKE '.Cel::db()->proteger($params[1].'%');
}
return $condition;
}
private function construireRequeteConditionTableObs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
$condition .= ' WHERE courriel_utilisateur LIKE '.Cel::db()->proteger($params[1].'%');
}
return $condition;
}
$requete_utilisateurs ='SELECT DISTINCT id_utilisateur, courriel FROM cel_utilisateurs '.
$this->construireRequeteConditionTableUtilisateurs($uid).' '.
'UNION '.
'SELECT DISTINCT ce_utilisateur as id_utilisateur, courriel_utilisateur as courriel '.
'FROM cel_obs '.
$this->construireRequeteConditionTableObs($uid).' '.
'LIMIT 0,50';
 
$utilisateurs = Cel::db()->requeter($requete_utilisateurs);
 
$liste_utilisateurs = array();
if ($utilisateurs) {
foreach ($utilisateurs as $utilisateur) {
$liste_utilisateurs[] = $utilisateur;
}
}
usort($liste_utilisateurs, 'trierUtilisateurs');
 
$this->envoyerJson($liste_utilisateurs);
return true;
}
 
private function construireRequeteConditionTableUtilisateurs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
$condition .= ' WHERE courriel LIKE '.Cel::db()->proteger($params[1].'%');
}
return $condition;
}
 
private function construireRequeteConditionTableObs($params) {
$condition = '';
if (isset($params[1]) && $params[1] != null && $params[1] != '*') {
$condition .= ' WHERE courriel_utilisateur LIKE '.Cel::db()->proteger($params[1].'%');
}
return $condition;
}
}
 
function trierUtilisateurs($val1, $val2) {
if (strstr($val1['courriel'],'@')) {
if (strstr($val2['courriel'],'@')) {
return strcmp($val1['courriel'],$val2['courriel']);
}
else
{
return -1 ;
}
}
else
{
if (strstr($val2['courriel'],'@')) {
return 1 ;
}
else
{
return strcmp($val1['courriel'],$val2['courriel']) ;
}
}
if (strstr($val1['courriel'], '@')) {
if (strstr($val2['courriel'], '@')) {
return strcmp($val1['courriel'], $val2['courriel']);
} else {
return -1;
}
} else {
if (strstr($val2['courriel'], '@')) {
return 1;
} else {
return strcmp($val1['courriel'], $val2['courriel']);
}
}
}
?>
/trunk/jrest/services/CelImageDoublon.php
7,9 → 7,9
*
* Cas d'utilisation :
* /CelImageDoublon/Sortie : images doublon de l'utilisateur authentifié.
*
*
* Sortie = Type de sortie : html ou json. Par défaut : html
*
*
* Utilisateur :
* identifiant (= courriel) de l'utilisateur récupéré via une identification HTTP.
*
28,10 → 28,10
$parametres = $this->traiterParametres(array('mode', 'utilisateur'), $params, false);
extract($parametres);
$contenu = '';
 
if ($this->authentifierUtilisateur()) {
$retour = null;
 
if (isset($mode)) {
$methode = $this->traiterNomMethodeGet($mode);
if (method_exists($this, $methode)) {
43,7 → 43,7
} else {
$this->messages[] = "Vous devez indiquer un type de mode.";
}
 
if (is_null($retour)) {
$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
} else {
55,7 → 55,7
}
}
}
 
// Envoie sur la sortie standard
$encodage = 'UTF-8';
$mime = 'text/html';
67,7 → 67,7
* Carte par défaut
*/
private function getDoublonHtml($parametres) {
 
$widget = null;
$utilisateur_mail = Cel::getAuthIdentifiant();
$utilisateur_infos = new User($this->config);
95,7 → 95,7
'FROM cel_images '.
"WHERE ce_utilisateur = '$utilisateur' ";
 
$images = Cel::db()->executerRequete($requete);
$images = Cel::db()->requeter($requete);
 
// Traitement
$doublons = array();
104,7 → 104,7
foreach ($images as $img) {
if (!isset($md5[$img['md5']])) {
$md5[$img['md5']] = array(
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'obs_ordre' => array(),
'img_ordre' => $img['ordre'],
'img_id' => $img['id_image']);
116,7 → 116,7
}
 
$doublons[$img['md5']][$img['id_image']] = array(
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'url' => $this->getUrlImage($img['id_image'], 'CXS'),
'obs_ordre' => array(),
'img_ordre' => $img['ordre'],
'img_id' => $img['id_image']);
123,7 → 123,7
$images_doublons_id[] = Cel::db()->quote($img['id_image']);
}
}
 
if (count($images_doublons_id) > 0) {
$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre as ordre_obs '.
'FROM cel_images AS cim '.
134,8 → 134,8
"WHERE cim.ce_utilisateur = '$utilisateur' ".
' AND cim.id_image IN ('.implode(',', $images_doublons_id).')';
 
$infos = Cel::db()->executerRequete($requete);
$infos = Cel::db()->requeter($requete);
 
foreach ($infos as $info) {
if (isset($doublons[$info['md5']][$info['id_image']]) && ! $this->etreNull($info['ordre_obs'])) {
$doublons[$info['md5']][$info['id_image']]['obs_ordre'][] = $info['ordre_obs'];
/trunk/jrest/services/CelSuppressionObservation.php
17,7 → 17,6
* Supporte l'appel multiple en passant plusieurs numéros séparés par des virgules
*
* @param string uid[0] : id(s) observation(s) obligatoire(s) séparés par des virgules
*
*/
public function deleteElement($uid){
if ($this->controlerAccessibiliteWs()) {
30,7 → 29,7
$idObs = explode(',', $idObs);
 
$gestionnaireObs = new GestionObservation($this->config);
 
// par défaut on ne fait que dépublier les obs à moins que la suppression ne soit demandée
// expréssement par le paramètre mode
if(isset($_GET['mode']) && $_GET['mode'] == "supprimer") {
/trunk/jrest/services/CoordSearch.php
10,20 → 10,20
* @version $Id$
*/
class CoordSearch extends Cel {
 
private $adresse_service_geonames = null;
private $adresse_service_local = null;
 
private $nom_service_geocoding = null;
private $nom_service_reverse_geocoding = null;
 
function CoordSearch($config) {
 
parent::__construct($config);
 
$this->adresse_service_geonames = $this->config['cel']['url_service_geo_geonames'];
$this->adresse_service_local = $this->config['cel']['url_service_geo_local'];
 
$this->nom_service_geocoding = $this->config['cel']['nom_service_geocoding_geonames'];
$this->nom_service_reverse_geocoding = $this->config['cel']['nom_service_reverse_geocoding_geonames'];
}
30,7 → 30,7
 
/**
* Recherche de coordonnées suivant ce qui est fourni
*
*
* $uid[0] = latitude (ou * si recherche coordonnées d'une commune)
* $uid[1] = longitude (ou * si recherche coordonnées d'une commune)
* $uid[2] = commune (ou * si recherche d'une commune correspondant à des coordonnées)
43,20 → 43,20
$retour = array();
 
$params = $this->traiterParametres($uid);
 
if ($this->estUneRequeteReverseGeocoding($params)) {
 
$informations_communes = $this->effectuerRequeteReverseGeocodingCartoOsm($params['lat'], $params['lon']);
 
if (!$informations_communes) {
$informations_communes = $this->effectuerRequeteReverseGeocodingGeonames($params['lat'], $params['lon']);
}
 
$header = 'Content-Type: application/json; charset=UTF-8';
$retour = json_encode($informations_communes) ;
 
} elseif ($this->estUneRequeteGeocoding($params)) {
 
$informations_coord = $this->chercherCentroideCommuneBdd($params['commune'],$params['code_postal']);
if(!$informations_coord) {
$informations_coord = $this->effectuerRequeteGeocodingGeonames($params['commune'],$params['code_postal'],$params['code_pays']);
74,80 → 74,80
header($header);
echo $retour;
}
 
protected function traiterParametres($params) {
 
$lat = $this->affecterValeurParametreOuDefaut($params, 0, '*');
$lng = $this->affecterValeurParametreOuDefaut($params, 1, '*');
$lng = $this->affecterValeurParametreOuDefaut($params, 1, '*');
 
$commune = $this->affecterValeurParametreOuDefaut($params, 2, '*');
$commune = $this->affecterValeurParametreOuDefaut($params, 2, '*');
$code_postal = $this->affecterValeurParametreOuDefaut($params, 3, '*');
 
$code_pays = $this->affecterValeurParametreOuDefaut($params, 4, 'FR');
 
return array('lat' => $lat, 'lon' => $lng, 'commune' => $commune,
'code_postal' => $code_postal, 'code_pays' => $code_pays);
}
 
private function affecterValeurParametreOuDefaut($params, $indice, $valeur_si_non_present) {
return isset($params[$indice]) ? str_replace('"','',urldecode($params[$indice])) : $valeur_si_non_present;
return isset($params[$indice]) ? str_replace('"','',urldecode($params[$indice])) : $valeur_si_non_present;
}
 
private function estUneRequeteReverseGeocoding($params) {
 
return ($params['lat'] != '*' && $params['lon'] != '*');
}
 
private function estUneRequeteGeocoding($params) {
return ($params['commune'] != '*');
}
 
private function effectuerRequeteReverseGeocodingCartoOsm($lat, $lon) {
 
$infos_commune_json = @file_get_contents($this->adresse_service_local."?lat=".$lat."&lon=".$lon);
$infos_commune = json_decode($infos_commune_json);
 
$retour = false;
 
if ($this->estUnRetourOsmValide($infos_commune)) {
$retour = array('nom' => $infos_commune->nom, 'code_insee' => $infos_commune->codeINSEE);
}
 
return $retour;
}
 
private function estUnretourOsmValide($retour) {
return (is_a($retour,'stdClass') && property_exists($retour,'nom') && property_exists($retour,'codeINSEE'));
}
 
private function effectuerRequeteReverseGeocodingGeonames($lat, $lon) {
 
$infos_commune_json = @file_get_contents($this->adresse_service_geonames.
$this->nom_service_reverse_geocoding.
"?lat=".urlencode($lat)."&lng=".urlencode($lon).
"&style=full");
$objet_retour = json_decode($infos_commune_json);
 
$retour = false;
if($this->estUnRetourReverseGeocodingGeonamesValide($objet_retour)) {
if($this->estUnRetourReverseGeocodingGeonamesValide($objet_retour)) {
$retour = array('nom' => $objet_retour->geonames[0]->adminName4, 'code_insee' => $objet_retour->geonames[0]->adminCode4);
}
 
return $retour;
}
 
private function estUnRetourReverseGeocodingGeonamesValide($retour) {
 
$valide = false;
if (is_a($retour,'stdClass') && property_exists($retour,'geonames')
 
if (is_a($retour,'stdClass') && property_exists($retour,'geonames')
&& is_array($retour->geonames) && count($retour->geonames) > 0) {
$objet_resultats = $retour->geonames[0];
if (property_exists($objet_resultats,'adminName4') && property_exists($objet_resultats,'adminCode2')) {
$valide = true;
}
}
}
 
return $valide;
}
 
162,7 → 162,7
$requete_selection_commune = 'SELECT utm_x, utm_y, utm_secteur, code FROM cel_zones_geo '.
'WHERE nom LIKE '.Cel::db()->proteger($commune_formatee).' AND code LIKE '.Cel::db()->proteger($departement.'%');
 
$commune_coordonnees = Cel::db()->executerRequete($requete_selection_commune);
$commune_coordonnees = Cel::db()->requeter($requete_selection_commune);
 
$retour = false;
 
169,7 → 169,7
if($commune_coordonnees && is_array($commune_coordonnees) && count($commune_coordonnees) > 0) {
 
$lat_lon = $this->convertirUtmVersLatLong($commune_coordonnees[0]['utm_x'],$commune_coordonnees[0]['utm_y'],$commune_coordonnees[0]['utm_secteur']);
 
$retour = array('lat' => (float)$lat_lon['lat'],
'lng' => (float)$lat_lon['lng'],
'nom' => $commune,
182,20 → 182,20
}
 
private function convertirUtmVersLatLong($x, $y, $sector) {
 
$lat_long = array();
 
$convertisseur = new gPoint();
$convertisseur->setUTM($x, $y, $sector);
$convertisseur->convertTMtoLL();
$lat_long['lat'] = str_replace(',','.',$convertisseur->Lat());
$lat_long['lng'] = str_replace(',','.',$convertisseur->Long());
 
return $lat_long;
}
 
private function effectuerRequeteGeocodingGeonames($commune, $code_postal, $code_pays) {
 
$requete = $this->adresse_service_geonames.
$this->nom_service_geocoding.
"?placename_startsWith=".urlencode($commune);
207,11 → 207,11
 
$coord_json = @file_get_contents($requete);
$objet_retour = json_decode($coord_json);
 
$retour = false;
if($this->estUnRetourGeocodingGeonamesValide($objet_retour)) {
$retour = array('lat' => $objet_retour->postalCodes[0]->lat,
 
if($this->estUnRetourGeocodingGeonamesValide($objet_retour)) {
$retour = array('lat' => $objet_retour->postalCodes[0]->lat,
'lng' => $objet_retour->postalCodes[0]->lng,
'nom' => $objet_retour->postalCodes[0]->placeName,
'code_insee' => $objet_retour->postalCodes[0]->postalCode
220,18 → 220,18
 
return $retour;
}
 
private function estUnRetourGeocodingGeonamesValide($retour) {
$valide = false;
if (is_a($retour,'stdClass') && property_exists($retour,'postalCodes')
 
if (is_a($retour,'stdClass') && property_exists($retour,'postalCodes')
&& is_array($retour->postalCodes) && count($retour->postalCodes) > 0) {
$objet_resultats = $retour->postalCodes[0];
if (property_exists($objet_resultats,'lat') && property_exists($objet_resultats,'lng')) {
$valide = true;
}
}
}
 
return $valide;
}
}
/trunk/jrest/services/CelStatistique.php
54,7 → 54,7
 
private function getEvolImgLieesParMois($param) {
$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) ".
63,7 → 63,7
'GROUP BY periode '.
'ORDER BY periode ';
 
$resulats = Cel::db()->executerRequete($requete);
$resulats = Cel::db()->requeter($requete);
 
$img_totale = array();
foreach ($resulats as $info) {
125,7 → 125,7
 
private function getEvolImgParMois($param) {
$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(id_image) AS nbre ".
"FROM cel_images ".
134,7 → 134,7
'GROUP BY periode '.
'ORDER BY periode ';
 
$resulats = Cel::db()->executerRequete($requete);
$resulats = Cel::db()->requeter($requete);
 
$img_totale = array();
foreach ($resulats as $info) {
204,7 → 204,7
" AND courriel_utilisateur LIKE '%@%' ".
'GROUP BY courriel_utilisateur '.
'ORDER BY date_min ASC ';
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
// Trie des données et des dates pour les étiquettes des axes
$dates = array();
260,7 → 260,7
$format_date = '%Y%m%d';
$where = 'date_creation > DATE_SUB(NOW(), INTERVAL 31 DAY)';
$obs_totale = $this->executerRequeteEvol('cel_obs', 'id_observation', $format_date, $where);
 
// Tri des dates pour les étiquettes des axes
$dates = array();
$annees = array();
271,7 → 271,7
$mois = substr($annee_mois_jours, 4, 2);
$jour = substr($annee_mois_jours, 6, 2);
$annee_mois_fmt_B = strftime('%B %Y', mktime(0, 0, 0, $mois, 1, $annee));
 
if (!isset($dates[$annee][$mois][$jour])) {
$annees_mois[] = (!isset($dates[$annee][$mois]) ? $annee_mois_fmt_B : '');
$jours[] = $jour;
279,7 → 279,7
$dates[$annee][$mois][$jour] = 1;
}
}
 
// Post traitement des données
$titre = 'Évolution des observations sur un mois glissant';
$valeurs_max = max($obs_totale);
303,7 → 303,7
'chxr' => "0,0,$y_val_fin,$y_pas",
'chm' => 'h,C3C3C3,0,0.5,1,-1|N,000000,0,1::1,8,1.0,ht',
'chxs' => '0,822013|1,822013');
 
return $graph;
}
 
565,7 → 565,7
'chm' => 'B,FF000080,0,1.0,5.0');
return $graph;
}
 
private function creerWhereIndicationGeo($champ) {
$where = null;
if (isset($champ)) {
596,7 → 596,7
"(date_creation LIKE '$aujourdhui%'
OR date_modification LIKE '$aujourdhui%'
OR date_transmission LIKE '$aujourdhui%') ");
 
// Cummul des obs crées, modifiées, transmises par jour
$donnees = array();
foreach ($max_obs as $obs_par_jour) {
643,7 → 643,7
$requete = 'SELECT courriel_utilisateur, COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
'GROUP BY courriel_utilisateur ';
$utilisateurs = Cel::db()->executerRequete($requete);
$utilisateurs = Cel::db()->requeter($requete);
 
// Création des classes d'utilisateurs
$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0);
710,7 → 710,7
$requete = 'SELECT courriel_utilisateur, COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
'GROUP BY courriel_utilisateur ';
$utilisateurs = Cel::db()->executerRequete($requete);
$utilisateurs = Cel::db()->requeter($requete);
 
// Création des classes d'utilisateurs
$classes = array('00->10' => 0, '11->50' => 0, '51->100' => 0, '101->500' => 0, '500->∞' => 0);
780,7 → 780,7
 
private function getNuagePointsObsParHeureEtJourSemaine($param) {
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : false;
 
// Récupération des données de la base
$requete = 'SELECT courriel_utilisateur, DATE_FORMAT(date_creation, "%w-%H") AS periode, (ROUND(LOG10(COUNT(id_observation))) + 1) AS nbre '.
'FROM cel_obs '.
787,8 → 787,8
'WHERE date_creation != "0000-00-00 00:00:00" '.
' AND courriel_utilisateur '.($utilisateur ? "= $utilisateur " : 'LIKE "%@%" ').
'GROUP BY periode, courriel_utilisateur ';
$infos = Cel::db()->executerRequete($requete);
$infos = Cel::db()->requeter($requete);
 
// Traitement résulat requête
$observations = array();
foreach ($infos as $info) {
798,7 → 798,7
$observations[$info['periode']] = $info['nbre'];
}
}
 
// Postraitement des données
// Jour de la semaine
$donnees['joursSemaine'] = array();
861,7 → 861,7
" AND courriel_utilisateur LIKE '%@%' ".
'GROUP BY courriel_utilisateur '.
'ORDER BY date_min ASC ';
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
// Trie des données
$max_obs = 0;
928,7 → 928,7
 
private function executerRequeteEvol($table, $champ, $format_date = '%Y%m', $where = null, $champ_date = 'date_creation', $order_by = null, $limit = null) {
$utilisateur = isset($_GET['utilisateur']) ? Cel::db()->quote($_GET['utilisateur']) : false;
 
$requete = "SELECT DATE_FORMAT($champ_date, '$format_date') AS periode, COUNT($champ) AS nbre ".
"FROM $table ".
"WHERE $champ_date != '0000-00-00 00:00:00' ".
938,7 → 938,7
((is_null($order_by)) ? '' : "ORDER BY $order_by ");
((is_null($limit)) ? '' : "LIMIT $limit ");
 
$evolution = Cel::db()->executerRequete($requete);
$evolution = Cel::db()->requeter($requete);
 
// Traitement du tableau
$donnees_traitees = array();
956,12 → 956,12
$where = isset($where) ? $where.' AND ' : '';
$where .= "courriel_utilisateur = $utilisateur ";
}
 
$requete = "SELECT COUNT($champ) AS nbre ".
"FROM $table ".
((isset($where)) ? "WHERE $where " : '');
 
$nbre = Cel::db()->executerRequete($requete, 'Column');
$nbre = Cel::db()->requeterValeurUnique($requete);
return $nbre;
}
}
/trunk/jrest/services/CelWidgetSaisie.php
137,7 → 137,7
$valeurs = implode(', ', $obs);
$requete = "INSERT INTO cel_obs ($champs) VALUES ($valeurs) ";
 
if (Cel::db()->executerRequeteSimple($requete) === false) {
if (Cel::db()->executer($requete) === false) {
$this->messages[] = "Un problème est survenu lors de l'insertion de l'obs dans la base de données.";
} else {
$obs_a_taguer_ordres[] = trim($obs['ordre'], "'");
151,7 → 151,7
pclose(popen($cmd,"r"));
}
}
 
$this->gestionMotsClesObs = new GestionMotsClesChemin($this->config,'obs');
$this->gestionMotsClesImages = new GestionMotsClesChemin($this->config,'images');
 
347,7 → 347,7
"FROM cel_obs ".
"WHERE ce_utilisateur = ".Cel::db()->proteger($id_utilisateur)." ";
 
$ordre_max = Cel::db()->executerRequete($requete, 'Column');
$ordre_max = Cel::db()->requeterValeurUnique($requete);
if ($ordre_max !== false) {
$ordre = $ordre_max + 1;
}
431,7 → 431,7
$listeIdsTags = array();
foreach ($tags as $tag) {
$tag = $this->nettoyerTag($tag);
if ($tag != '') {
if ($tag != '') {
$id_mot_cle = $this->gestionMotsClesImages->insererParCheminSiInexistant($tag, $chemin_parent, $this->utilisateur_id);
if ($id_mot_cle !== false) {
$listeIdsTags[] = $id_mot_cle;
488,7 → 488,7
' ON DUPLICATE KEY UPDATE id_image = id_image';
 
$liaison = true;
if (Cel::db()->executerRequeteSimple($requete) === false) {
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;
}
505,7 → 505,7
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre = $ordre ";
 
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$id_obs = (count($resultat) > 0) ? $resultat[0]['id_observation'] : false;
return $id_obs;
521,7 → 521,7
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre IN (".implode(',',$ordres).") ";
$this->debug[] = $requete;
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
$ids = array();
foreach($resultat as $id) {
$ids[] = $id['id_observation'];
578,7 → 578,7
$infosImage['md5'] = md5_file($cheminImage);
$this->debug[] = 'Nom fichier img meta :'.$nomFichierImage;
$requete = $this->construireRequeteInsertionImage($infosImage);
$resultat = Cel::db()->executerRequeteSimple($requete);
$resultat = Cel::db()->executer($requete);
if ($resultat !== false) {
$idImage = $this->obtenirIdImagePourIdentifiantEtOrdre($idUtilisateur, $nouvelOrdre);
if ($idImage !== false) {
619,7 → 619,7
$requete = 'SELECT MAX(ordre) as max_ordre '.
'FROM cel_images '.
"WHERE ce_utilisateur = $id_utilisateur ";
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$ordre = ($resultat) ? ++$resultat[0]['max_ordre'] : 0;
return $ordre;
633,7 → 633,7
'FROM cel_images '.
"WHERE ce_utilisateur = $id_utilisateur ".
" AND ordre = $ordre ";
$resultat = Cel::db()->executerRequete($requete);
$resultat = Cel::db()->requeter($requete);
 
$id_image = (count($resultat) > 0) ? $resultat[0]['id_image'] : false;
return $id_image;
/trunk/jrest/services/CelSyndicationImage.php
210,7 → 210,8
$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
}
} catch (PDOException $e) {
$this->messages[] = sprintf(Cel::db()->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
$msgTpl = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s';
$this->messages[] = sprintf($msgTpl, $e->getFile(), $e->getLine(), $e->getMessage());
}
return $infos;
}
238,7 → 239,7
$donnees['guid'] = $this->getUrlServiceBase();
$donnees['lien_service'] = $this->creerUrlService();
$donnees['lien_cel'] = (isset($infos['nom_sel_nn']) && $infos['nom_sel_nn'] != '' && $infos['nom_sel_nn'] != 0) ?
$this->getUrlEflore($infos['nom_referentiel'], $infos['nom_sel_nn']) : '';
$this->getUrlEflore($infos['nom_referentiel'], $infos['nom_sel_nn']) : '';
$donnees['editeur'] = $this->config['settings']['editeur'];
$derniere_info_en_date = reset($infos);
$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
296,7 → 297,7
$lien = $this->getUrlImage($element['id_image'], $this->format_image);
} else {
// Lien vers fiche eFlore onglet Illustration
$lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
$lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'illustration');
}
return $lien;
}
399,7 → 400,7
$contenu = '';
if (isset($_GET['debut'])) $this->start = $_GET['debut'];
if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
 
$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
 
if ($this->parametresSontDemandes()) {
704,9 → 705,9
return $contenu;
}
 
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
$intitule = $this->auteurs[$courriel];
return $intitule;
private function getIntituleAuteur($courriel) {
$courriel = strtolower($courriel);
$intitule = $this->auteurs[$courriel];
return $intitule;
}
}
/trunk/jrest/services/ImageDateList.php
15,55 → 15,55
 
/**
* Liste les date des images par utilisateur
*
*
* in=utf8
* out=utf8
*
*
* uid[0] : utilisateur obligatoire
* uid[1] : si absent : valeur 'all' (annee)
* uid[2] : si absent : valeur 'all' (mois)
* uid[3] : si absent : valeur 'all' (jour)
**/
**/
class ImageDateList extends Cel {
 
private $correspondance_fonction = array(1 => 'year', 2 => 'month', 3 => 'day');
 
 
function getElement($uid){
// Controle detournement utilisateur
 
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if(!is_numeric($uid[0])) {
return;
return;
}
 
$condition_requete = $this->traiterParametresEtConstruireRequete($uid);
 
$requete_liste_dates = 'SELECT DISTINCT '.
'date_prise_de_vue AS id '.
'FROM cel_images WHERE '.$condition_requete.' '.
'ORDER BY date_prise_de_vue';
$liste_dates = Cel::db()->executerRequete($requete_liste_dates);
 
$liste_dates = Cel::db()->requeter($requete_liste_dates);
 
$liste_dates = $this->formaterListeResultats($liste_dates);
$this->envoyerJson($liste_dates);
return true;
 
$this->envoyerJson($liste_dates);
return true;
}
 
private function formaterListeResultats($liste_dates) {
 
if (!$liste_dates) {
$liste_dates = array();
}
 
foreach($liste_dates as &$date) {
 
if($date['id'] == null || trim($date['id']) == '' || $date['id'] == 'null') {
$date = '0000-00-00';
} else {
} else {
$date_heures = explode(' ',$date['id']);
if(count($date_heures) > 1) {
$date = $date_heures[0];
72,25 → 72,25
}
}
}
 
return $liste_dates;
}
 
private function traiterParametresEtConstruireRequete($params) {
 
$requete_condition = ' ce_utilisateur = '.Cel::db()->proteger($params[0]);
 
$taille_tableau_parametres = count($params);
for($i=1; $i < $taille_tableau_parametres; $i++) {
if($this->estUnParametreDate($params[$i])) {
$fonction_date = $this->correspondance_fonction[$i];
$fonction_date = $this->correspondance_fonction[$i];
$requete_condition .= ' AND '.$fonction_date.'(date_prise_de_vue) = '.Cel::db()->proteger($params[$i]);
}
}
 
return $requete_condition;
}
 
private function estUnParametreDate($valeur) {
return is_numeric($valeur) && $valeur != "all";
}
/trunk/jrest/services/SelfRefList.php
4,77 → 4,70
// in utf8
// out utf8
 
// Fournit un référentiel relatif à l'utilisateur sur l'un des champs demandes
// Fournit un référentiel relatif à l'utilisateur sur l'un des champs demandes
class SelfRefList extends Cel {
 
private $referentiels = array('station', 'lieudit', 'milieu');
 
/**
* Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
*
*
* uid[0] : utilisateur obligatoire
* uid[1] : referentiel demandé (obligatoire)
* $_GET["start"] et $GET_["limit"] : selection intervalle
* $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
*
*
*/
function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
if($_GET['recherche'] == '*') {
$_GET['recherche'] = '%';
}
$referentiel_demande = $uid[1];
$value=array();
$requete_referentiel = "SELECT DISTINCT ".$referentiel_demande." " .
"FROM cel_obs WHERE ce_utilisateur = '".$uid[0]."' ";
if($this->filtreRechercheEstDemande()) {
$requete_referentiel .= " AND ".$referentiel_demande." LIKE '".$_GET["recherche"]."%'";
}
public function getElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
if ($this->limiteEstDemandee()) {
$requete_referentiel .= " ORDER BY '.$referentiel_demande.' LIMIT ".$_GET["start"].",".$_GET["limit"];
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
 
if ($_GET['recherche'] == '*') {
$_GET['recherche'] = '%';
}
 
$referentiel_demande = $uid[1];
$idUtilisateur = Cel::db()->proteger($uid[0]);
 
$requete = "SELECT DISTINCT $referentiel_demande " .
'FROM cel_obs '.
"WHERE ce_utilisateur = '$idUtilisateur' ";
if ($this->filtreRechercheEstDemande()) {
$requete .= " AND $referentiel_demande LIKE '".$_GET["recherche"]."%'";
}
if ($this->limiteEstDemandee()) {
$requete .= " ORDER BY $referentiel_demande LIMIT ".$_GET['start'].','.$_GET['limit'];
}
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach ($resultat as $cle => $valeur) {
if ($this->estUneValeurValide($valeur[$referentiel_demande])) {
$referentiel[] = $valeur[$referentiel_demande];
}
$referentiel_resultat = Cel::db()->executerRequete($requete_referentiel);
$referentiel = array();
foreach($referentiel_resultat as $cle => $valeur) {
if($this->estUneValeurValide($valeur[$referentiel_demande])) {
$referentiel[] = $valeur[$referentiel_demande];
}
 
}
$this->envoyerJson($referentiel);
return true;
}
$this->envoyerJson($referentiel);
return true;
}
function paramObligatoiresSontPresents($uid) {
return (isset($uid[1]) && in_array($uid[1],$this->referentiels) && (isset($uid[0]) && $uid[0] != ""));
 
private function paramObligatoiresSontPresents($uid) {
return (isset($uid[1]) && in_array($uid[1], $this->referentiels) && (isset($uid[0]) && $uid[0] != ''));
}
function filtreRechercheEstDemande() {
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != "");
 
private function filtreRechercheEstDemande() {
return (isset($_GET['recherche']) && trim($_GET['recherche']) != '');
}
function limiteEstDemandee() {
return isset($_GET["start"]) && is_numeric($_GET["start"]) && isset($_GET["limit"]) && is_numeric($_GET["limit"]);
 
private function limiteEstDemandee() {
return isset($_GET['start']) && is_numeric($_GET['start']) && isset($_GET['limit']) && is_numeric($_GET['limit']);
}
function estUneValeurValide($chaine) {
return ($chaine != null && $chaine != "000null" && trim($chaine) != "");
 
private function estUneValeurValide($chaine) {
return ($chaine != null && $chaine != '000null' && trim($chaine) != '');
}
}
?>
}
/trunk/jrest/services/InventoryDateList.php
14,16 → 14,16
 
/**
* Liste les date de releves par utilisateur
*
*
* in=utf8
* out=utf8
*
**/
**/
class InventoryDateList extends Cel {
 
private $correspondance_fonction = array(1 => 'year', 2 => 'month', 3 => 'day');
/**
 
/**
* @param int uid[0] : utilisateur obligatoire
* @param int uid[1] : si absent : valeur 'all' (annee)
* @param int uid[2] : si absent : valeur 'all' (mois)
30,58 → 30,58
* @param int uid[3] : si absent : valeur 'all' (jour)
*/
function getElement($uid){
// Controle detournement utilisateur
 
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
 
$condition_requete = $this->traiterParametresEtConstruireRequete($uid);
 
$requete_liste_dates = 'SELECT DISTINCT '.
'date_observation AS id '.
'FROM cel_obs WHERE '.$condition_requete.' '.
'ORDER BY date_observation';
$liste_dates = Cel::db()->executerRequete($requete_liste_dates);
'ORDER BY date_observation';
 
$liste_dates = Cel::db()->requeter($requete_liste_dates);
 
$liste_dates = $this->formaterListeResultats($liste_dates);
$this->envoyerJson($liste_dates);
return true;
 
$this->envoyerJson($liste_dates);
return true;
}
 
private function formaterListeResultats($liste_dates) {
 
if (!$liste_dates) {
$liste_dates = array();
}
 
foreach($liste_dates as &$date) {
$date_heures = explode(' ',$date['id']);
if(count($date_heures) > 1) {
$date = $date_heures[0];
}
 
$date = $date;
}
 
return $liste_dates;
}
 
private function traiterParametresEtConstruireRequete($params) {
 
$requete_condition = ' ce_utilisateur = '.Cel::db()->proteger($params[0]);
 
$taille_tableau_parametres = count($params);
for($i=1; $i < $taille_tableau_parametres; $i++) {
if($this->estUnParametreDate($params[$i])) {
$fonction_date = $this->correspondance_fonction[$i];
$fonction_date = $this->correspondance_fonction[$i];
$requete_condition .= ' AND '.$fonction_date.'(date_observation) = '.Cel::db()->proteger($params[$i]);
}
}
 
return $requete_condition;
}
 
private function estUnParametreDate($valeur) {
return is_numeric($valeur) && $valeur != "all";
}
/trunk/jrest/services/NomsChampsEtendus.php
4,20 → 4,18
// in utf8
// out utf8
 
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
class NomsChampsEtendus extends Cel {
 
/**
* Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
*
*
* uid[0] : "cle" ou "valeur"
* $_GET["start"] et $GET_["limit"] : selection intervalle
* $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
* $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
*
*/
function getElement($uid){
if (!$this->paramObligatoiresSontPresents($uid)) {
return;
}
24,7 → 22,7
 
$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
$referentiel = array();
 
if($uid[0] == "cle") {
$referentiel = $this->rechercherCles($_GET['recherche']);
} else if($uid[0] == "valeur") {
31,55 → 29,52
$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
}
 
$this->envoyerJson($referentiel);
return true;
$this->envoyerJson($referentiel);
return true;
}
 
function rechercherCles($recherche_cle) {
$requete = "SELECT DISTINCT cle, label FROM cel_obs_etendues WHERE ".
"cle LIKE ".Cel::db()->proteger($recherche_cle)." OR ".
"label LIKE ".Cel::db()->proteger($recherche_cle)." ";
$referentiel_resultat = Cel::db()->executerRequete($requete);
"cle LIKE ".Cel::db()->proteger($recherche_cle)." OR ".
"label LIKE ".Cel::db()->proteger($recherche_cle)." ";
$resultat = Cel::db()->requeter($requete);
 
$referentiel = array();
foreach($referentiel_resultat as $valeur) {
foreach($resultat as $valeur) {
$referentiel[$valeur['cle']] = $valeur['label'];
}
return $referentiel;
}
 
function rechercherValeurs($cle, $recherche_valeur) {
$requete = "SELECT DISTINCT valeur FROM cel_obs_etendues WHERE ".
"cle = ".Cel::db()->proteger($cle)." AND ".
"valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";
"cle = ".Cel::db()->proteger($cle)." AND ".
"valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";
 
$referentiel_resultat = Cel::db()->executerRequete($requete);
$referentiel_resultat = Cel::db()->requeter($requete);
$referentiel = array();
foreach($referentiel_resultat as $valeur) {
if(trim($valeur['valeur']) != "") {
 
foreach ($referentiel_resultat as $valeur) {
if (trim($valeur['valeur']) != '') {
$referentiel[] = $valeur['valeur'];
}
}
return $referentiel;
}
 
function paramObligatoiresSontPresents($uid) {
return (isset($uid[0]) && ($uid[0] == "cle" || $uid[0] == "valeur"));
return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
}
 
function filtreRechercheEstDemande() {
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != "");
return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != '');
}
 
function limiteEstDemandee() {
return isset($_GET["start"]) && is_numeric($_GET["start"]) && isset($_GET["limit"]) && is_numeric($_GET["limit"]);
}
 
function estUneValeurValide($chaine) {
return ($chaine != null && $chaine != "000null" && trim($chaine) != "");
return ($chaine != null && $chaine != "000null" && trim($chaine) != '');
}
}
?>
}
/trunk/jrest/services/CelStatistiqueTxt.php
16,7 → 16,7
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
*/
class CelStatistiqueTxt extends Cel {
 
/**
* Méthode appelée avec une requête de type GET.
*/
42,7 → 42,7
$this->envoyerJson($stats);
}
}
 
private function analyserParametresUrl() {
$this->parametres['utilisateur'] = isset($_GET['utilisateur']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['utilisateur'])) : null;
$this->parametres['num_taxon'] = isset($_GET['num_taxon']) ? Cel::db()->quote($this->verifierSecuriteParametreUrl($_GET['num_taxon'])) : null;
51,13 → 51,13
$this->parametres['start'] = isset($_GET['start']) ? $this->verifierSecuriteParametreUrl($_GET['start']) : null;
$this->parametres['limit'] = isset($_GET['limit']) ? $this->verifierSecuriteParametreUrl($_GET['limit']) : null;
}
 
private function getListeUtilisateursNbrePhotos() {
$liste = array();
 
$requete = $this->construireRequeteListeUtilisateurNbrePhoto();
if ($requete != null) {
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
if ($resultats != false) {
foreach ($resultats as $resultat) {
$liste[$resultat['courriel_utilisateur']] = $resultat['nbre'];
66,7 → 66,7
}
return $liste;
}
 
private function construireRequeteListeUtilisateurNbrePhoto() {
$select = 'SELECT co.courriel_utilisateur, COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_obs co '.
76,13 → 76,13
$groupBy = 'GROUP BY co.courriel_utilisateur ';
$orderBy = 'ORDER BY nbre DESC ';
$limitSql = 'LIMIT 0,150 ';
 
$zero_images = false;
if (count($this->parametres) != 0) {
extract($this->parametres);
 
$filtres = array();
 
if (isset($utilisateur)) {
$filtres[] = "co.courriel_utilisateur = $utilisateur ";
}
101,7 → 101,7
}
}
$where .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
 
if (isset($start)) {
$limitSql = str_replace('0,', "$start,", $limitSql);
}
117,7 → 117,7
}
return $requete;
}
 
private function construireWhereTags() {
$where = null;
if (isset($this->parametres['tag'])) {
128,8 → 128,8
$requete = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire '.
'FROM cel_mots_cles_images '.
"WHERE cmc_id_mot_cle_general = $tag_encode ";
$elements = Cel::db()->executerRequete($requete);
$elements = Cel::db()->requeter($requete);
 
if ($elements != false && count($elements) > 0) {
// Pré-construction du where de la requête
$tpl_where = '(ci_meta_mots_cles LIKE "%%%s%%" AND ci_ce_utilisateur = %s )';
144,11 → 144,11
}
return $where;
}
 
private function getListeTaxonsNbrePhotos() {
$requete = $this->construireRequeteListeTaxonNbrePhoto();
 
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
$liste = array();
if ($resultats != false) {
foreach ($resultats as $resultat) {
157,7 → 157,7
}
return $liste;
}
 
private function construireRequeteListeTaxonNbrePhoto() {
$select = 'SELECT nom_ret, COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_obs co '.
168,13 → 168,13
$groupBy = 'GROUP BY nom_ret ';
$orderBy = 'ORDER BY nbre DESC ';
$limitSql = 'LIMIT 0,150 ';
 
 
if (count($this->parametres) != 0) {
extract($this->parametres);
 
$filtres = array();
 
if (isset($utilisateur)) {
$filtres[] = "co.courriel_utilisateur = $utilisateur ";
}
185,7 → 185,7
$filtres[] = "nom_ret LIKE $taxon ";
}
$where .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
 
if (isset($start)) {
$limitSql = str_replace('0,', "$start,", $limitSql);
}
193,33 → 193,33
$limitSql = str_replace('150', $limit, $limitSql);
}
}
 
$requete = $select.$from.$where.$groupBy.$orderBy.$limitSql;
 
return $requete;
}
 
private function getNombres() {
 
$requete = $this->construireRequeteNbreObs();
$info['observations'] = (int) Cel::db()->executerRequete($requete, 'Column');
$requete = $this->construireRequeteNbreObsPubliques();
$info['observationsPubliques'] = (int) Cel::db()->executerRequete($requete, 'Column');
$requete = $this->construireRequeteNbreObs();
$info['observations'] = (int) Cel::db()->requeterValeurUnique($requete);
 
$requete = $this->construireRequeteNbreObsPubliques();
$info['observationsPubliques'] = (int) Cel::db()->requeterValeurUnique($requete);
 
$requete = $this->construireRequeteNbreImg();
$info['images'] =(int) Cel::db()->executerRequete($requete, 'Column');
$info['images'] =(int) Cel::db()->requeterValeurUnique($requete);
 
$requete = $this->construireRequeteNbreImgLiees();
$info['imagesLiees'] =(int) Cel::db()->executerRequete($requete, 'Column');
$info['imagesLiees'] =(int) Cel::db()->requeterValeurUnique($requete);
 
$requete = $this->construireRequeteNbreObsLiees();
$info['observationsLiees'] = (int) Cel::db()->executerRequete($requete, 'Column');
$info['observationsLiees'] = (int) Cel::db()->requeterValeurUnique($requete);
 
$info['moyImagesParObs'] = ($info['observationsLiees'] > 0 ? round($info['imagesLiees']/$info['observationsLiees'], 2) : '');
 
$requete = $this->construireRequeteNbreObsParCommune();
$info['communes'] = ($resultats = Cel::db()->executerRequete($requete)) ? count($resultats) : '' ;
$info['communes'] = ($resultats = Cel::db()->requeter($requete)) ? count($resultats) : '' ;
$info['observationsParCommunesMin'] = 1000;
$info['observationsParCommunesMax'] = 0;
$info['observationsParCommunesTotal'] = 0;
233,10 → 233,10
$info['observationsParCommunesTotal'] += $resultat['nbre'];
}
$info['observationsParCommunesMoyenne'] = ($info['communes'] > 0 ) ? round($info['observationsParCommunesTotal'] / $info['communes'], 2) : 0;
return $info;
 
return $info;
}
 
private function construireRequeteNbreObs() {
$requete = 'SELECT COUNT(id_observation) AS nbre '.
'FROM cel_obs ';
244,7 → 244,7
if (count($this->parametres) != 0) {
$filtres = array();
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
254,13 → 254,13
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$requete .= ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
 
return $requete;
}
 
private function construireRequeteNbreObsPubliques() {
$requete = 'SELECT COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
269,7 → 269,7
if (count($this->parametres) != 0) {
$filtres = array();
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
279,13 → 279,13
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
}
 
return $requete;
}
 
private function construireRequeteNbreObsParCommune() {
$requete = 'SELECT COUNT(id_observation) AS nbre '.
'FROM cel_obs '.
296,7 → 296,7
if (count($this->parametres) != 0) {
$filtres = array();
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
306,28 → 306,28
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$requete .= ((count($filtres) > 0) ? 'AND '.implode(' AND ', $filtres) : '');
}
$requete .= $groupBy;
 
return $requete;
}
 
private function construireRequeteNbreImg() {
$select = 'SELECT COUNT(DISTINCT ci.id_image) AS nbre ';
$from = 'FROM cel_images ci ';
 
if (count($this->parametres) != 0) {
$filtres = array();
 
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
if (isset($num_taxon)) {
 
$filtres[] = "nt = $num_taxon ";
}
if (isset($taxon)) {
337,7 → 337,7
$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) ';
}
 
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
$requete = $select.$from.$where;
344,17 → 344,17
 
return $requete;
}
 
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) ';
 
if (count($this->parametres) != 0) {
$filtres = array();
 
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "ci.courriel_utilisateur = $utilisateur ";
}
364,28 → 364,28
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
if (isset($num_taxon) || isset($taxon)) {
$from .= 'LEFT JOIN cel_obs ON (coi.id_observation = co.id_observation) ';
}
 
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
 
$requete = $select.$from.$where;
return $requete;
}
 
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) ';
 
if (count($this->parametres) != 0) {
$filtres = array();
 
extract($this->parametres);
 
if (isset($utilisateur)) {
$filtres[] = "courriel_utilisateur = $utilisateur ";
}
395,12 → 395,12
if (isset($taxon)) {
$filtres[] = "nom_ret LIKE $taxon ";
}
 
$where = ((count($filtres) > 0) ? 'WHERE '.implode(' AND ', $filtres) : '');
}
 
$requete = $select.$from.$where;
 
return $requete;
}
}
/trunk/jrest/services/InventoryByDept.php
14,14 → 14,14
*/
 
/**
*
*
* in=utf8
* out=iso3859
*
*
* Liste des Nouvelles observations par departement
* A voir avec David mais ne devrait plus être utilisé
* A voir avec David mais ne devrait plus être utilisé
* ou fait autrement
*
*
*/
 
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
33,25 → 33,25
class InventoryByDept extends Cel {
 
var $extendSpreadsheetProductor;
 
function InventoryByDept($config) {
 
parent::__construct($config);
 
// Pas d'heritage multiple en php :(
$this->extendSpreadsheetProductor = new SpreadsheetProductor();
$this->extendSpreadsheetProductor->initSpreadsheet();
$this->extendSpreadsheetProductor->initSpreadsheet();
}
 
//TODO : faire une fonction qui prend en paramètre un departement
function getRessource(){
 
$requete_obs = "SELECT ce_zone_geo, ce_utilisateur, courriel_utilisateur, ordre, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, famille, zone_geo, date_observation," .
" lieudit, station, milieu, commentaire, transmission FROM cel_obs ".
" lieudit, station, milieu, commentaire, transmission FROM cel_obs ".
"WHERE ce_zone_geo != '000null' AND ce_zone_geo != '' AND transmission = 1 AND nt!=0 ORDER BY ce_zone_geo, nom_ret LIMIT 50";
 
$resultat_obs = Cel::db()->executerRequete($requete_obs);
$resultat_obs = Cel::db()->requeter($requete_obs);
 
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
$workbook->setVersion(8);
75,7 → 75,7
$worksheet->write(0,13,'Observateur');
 
$i=1;
 
$observations = array();
$chercheur_infos_taxon = null;
if (is_array($resultat_obs)) {
82,14 → 82,14
$observations = &$resultat_obs;
$chercheur_infos_taxon = new RechercheInfosTaxonBeta($this->config);
}
 
foreach ($observations as $obs) {
 
$code_departement = $this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']);
$taxon_deja_vu = $chercheur_infos_taxon->taxonEstPresentDansDepartement($obs['nt'], $code_departement);
if (!$taxon_deja_vu) {
// Denullifiage
 
if (!$taxon_deja_vu) {
// Denullifiage
foreach($obs as $k=>$v) {
if (($v=="null") || ($v=="000null")) {
$obs[$k]="";
97,7 → 97,7
else {
$obs[$k]=utf8_decode($v);
}
}
}
 
if ($obs['date_observation']!="0000-00-00 00:00:00") {
list($year,$month,$day)= explode('-',$obs['date_observation']);
122,17 → 122,17
$worksheet->write($i,11,$obs['milieu']);
$worksheet->write($i,12,$obs['commentaire']);
$worksheet->write($i,13,$obs['courriel_utilisateur']);
$i++;
}
 
$i++;
}
}
 
// sending HTTP headers
$workbook->send('liste.xls');
$workbook->close();
exit();
}
 
exit();
}
}
 
/* +--Fin du code ---------------------------------------------------------------------------------------+
150,6 → 150,6
* Securisation acces utilisateur
*
*
*
*
*/
?>
/trunk/jrest/services/CelWidgetMap.php
23,7 → 23,7
*/
// TODO : supprimer le TRIM quand les obs seront reliées correctements aux localisations (sur le code INSEE par exemple)
class CelWidgetMap extends Cel {
 
/**
* Méthode appelée avec une requête de type GET.
*/
30,7 → 30,7
public function getElement($ressources) {
$retour = null;
extract($this->parametres);
 
$action = array_shift($ressources);
if (isset($action)) {
$methode = $this->traiterNomMethodeGet($action);
47,7 → 47,7
$info = 'Un problème est survenu : '.print_r($this->messages, true);
$this->envoyer($info);
} else if (isset($retour['type']) && $retour['type'] == 'jsonVar') {
 
$this->envoyerJsonVar($retour['variable_js'], $retour['donnees']);
} else if (isset($retour['type']) && $retour['type'] == 'jsonP') {
$this->envoyerJsonp($retour['donnees']);
78,22 → 78,22
$this->construireWhereTag();
//die($requete);
$resultats = Cel::db()->requeter($requete);
 
// Traitement des résultats
$obs_nbre = $this->traiterNbreObs($resultats);
$stations = $this->traiterStations($resultats);
 
// Création des infos du widget
$json['donnees']['points'] = $stations;
$json['donnees']['stats']['communes'] = count($stations);
$json['donnees']['stats']['observations'] = $obs_nbre;
 
$json['type'] = (isset($this->formatRetour)) ? $this->formatRetour : 'jsonVar';
$json['variable_js'] = 'stations';
 
return $json;
}
 
private function traiterNbreObs($resultats) {
$obs_nbre = 0;
if ($resultats !== false) {
101,7 → 101,7
}
return $obs_nbre;
}
 
private function traiterStations($resultats) {
$stations = array();
if ($resultats !== false) {
124,7 → 124,7
}
return $stations;
}
 
/**
* Données pour l'affichage des obs d'une station
*/
153,11 → 153,11
"LIMIT {$this->start},{$this->limit} ";
//die($requete);
$resultats = Cel::db()->requeter($requete, self::SQL_RETOUR_COMPLET, self::SQL_MODE_OBJET);
 
$requete = 'SELECT FOUND_ROWS()';
$total = (int) Cel::db()->requeter($requete, self::SQL_RETOUR_COLONNE);
}
 
// Post-traitement
$observations = $this->traiterObservations($resultats, $total);
$observations = $this->ajouterImagesAuxObs($observations);
165,7 → 165,7
$observations = $this->supprimerIdDesObs($observations);
return $observations;
}
 
private function traiterObservations($donnees, $total) {
$observations = array('commune' => '', 'observations' => array(), 'observateurs' => array());
$observations['total'] = (isset($total)) ? $total : 0;
182,7 → 182,7
$observation['observateurId'] = $donnee->ce_utilisateur;
$observation['referentiel'] = $this->supprimerVersionDuReferentiel($donnee->nom_referentiel);
$observation['urlEflore'] = $this->getUrlEflore($donnee->nom_referentiel, $donnee->nom_sel_nn);
 
if (isset($donnee->zone_geo)) {
$observations['commune'] = $this->nettoyerTexte($donnee->zone_geo);
}
194,7 → 194,7
}
return $observations;
}
 
private function traiterLieu($donnee) {
$lieu = array();
if (!$this->etreNull($donnee->lieudit)) {
205,7 → 205,7
}
return implode(', ', $lieu);
}
 
private function chargerImages(Array $obs_ids) {
// Récupération des données au format Json
$service = 'CelImage/liste-ids?obsId='.implode(',', $obs_ids);
212,13 → 212,13
$url = sprintf($this->config['settings']['baseURLServicesCelTpl'], $service);
$json = $this->getRestClient()->consulter($url);
$donnees = json_decode($json);
 
// Post-traitement des données
$images = $this->traiterImages($donnees);
 
return $images;
}
 
private function traiterImages($donnees) {
$images = array();
if (count($donnees) > 0) {
229,12 → 229,12
$urls['miniature'] = $this->getUrlImage($id_img, 'CXS');
$urls['normale'] = $this->getUrlImage($id_img, 'XL');
$images[$id_obs][] = $urls;
}
}
}
}
return $images;
}
 
private function ajouterImagesAuxObs($observations) {
$images = $this->chargerImages(array_keys($observations['observations']));
foreach ($observations['observations'] as $id => $infos) {
245,7 → 245,7
}
return $observations;
}
 
private function ajouterAuteursAuxObs($observations) {
$observateurs = $this->recupererUtilisateursIdentite(array_keys($observations['observateurs']));
unset($observations['observateurs']);
257,7 → 257,7
}
return $observations;
}
 
private function supprimerIdDesObs($observations) {
// Le tableau de sortie ne doit pas avoir les id des obs en clé car sinon Jquery Template ne fonctionne pas
$observationSansId = $observations;
267,13 → 267,13
}
return $observationSansId;
}
 
/**
* Liste des taxons présents sur la carte
*/
public function getTaxons($params) {
$json = null;
 
$requete = 'SELECT SQL_CALC_FOUND_ROWS DISTINCT nom_ret, nom_ret_nn, nt, famille '.
'FROM cel_obs AS co '.
' LEFT JOIN cel_zones_geo AS l '.
295,16 → 295,16
//$this->debug[] = $requete;
//die($requete);
$resultats = Cel::db()->requeter($requete, self::SQL_RETOUR_COMPLET, self::SQL_MODE_OBJET);
 
$requete = 'SELECT FOUND_ROWS()';
$taxons['total'] = (int) Cel::db()->requeter($requete, self::SQL_RETOUR_COLONNE);
 
// Post-traitement
$taxons['taxons'] = $this->traiterTaxons($resultats);
 
return $taxons;
}
 
private function traiterTaxons($donnees) {
$taxons = array();
if (is_array($donnees) && count($donnees) > 0) {
322,7 → 322,7
$taxons = array_values($taxons);
return $taxons;
}
 
private function construireWhereCoordonnees() {
$sql = '';
// Récupération des coordonnées depuis l'id station
332,18 → 332,18
$secteur = Cel::db()->proteger($secteur);
$utm_x = Cel::db()->proteger($utm_x);
$utm_y = Cel::db()->proteger($utm_y);
 
$sql = " AND (utm_secteur = $secteur AND utm_x = $utm_x AND utm_y = $utm_y ) ";
} else if ($type == 'LngLat') {
$latitude = Cel::db()->proteger($latitude);
$longitude = Cel::db()->proteger($longitude);
 
$sql = " AND (latitude = $latitude AND longitude = $longitude ) ";
}
}
}
return $sql;
}
 
private function construireWhereCommentaire() {
$sql = '';
list($type, $commentaire) = $this->decomposerParametreCommentaire();
368,12 → 368,12
break;
default:
$sql = " AND co.commentaire LIKE $commentaire ";
}
}
}
return $sql;
}
 
 
private function construireWhereNomTaxon() {
$sql = '';
list($type, $nom) = $this->decomposerParametreTaxon();
394,24 → 394,24
break;
default:
$sql = " AND nom_ret LIKE $nom ";
}
}
}
return $sql;
}
 
private function construireWhereDate() {
$sql = '';
// Récupération des coordonnées depuis l'id station
list($type, $date) = $this->decomposerParametreDate();
 
if (!$this->etreNull($date)) {
$date = Cel::db()->proteger($date.'%');
switch ($type) {
case '*' :
$sql = " AND (
date_observation LIKE $date
OR date_creation LIKE $date
OR date_modification LIKE $date
date_observation LIKE $date
OR date_creation LIKE $date
OR date_modification LIKE $date
OR date_transmission LIKE $date) ";
break;
case 'observation' :
441,7 → 441,7
}
return $sql;
}
 
private function obtenirConditionPourDatePhoto($date) {
$observations = $this->obtenirObsLieesImg('date.photo', $date);
if (is_null($observations)) {
450,7 → 450,7
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
 
private function obtenirConditionPourDateLiaison($date) {
$observations = $this->obtenirObsLieesImg('date.liaison', $date);
if (is_null($observations)) {
468,7 → 468,7
$sql = $this->assemblerObsEnConditionSql($observations);
return $sql;
}
 
private function obtenirConditionPourCommentaireMeta($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.meta', $commentaire);
if (is_null($observations)) {
478,7 → 478,7
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
 
private function obtenirConditionPourCommentaireUtilisateur($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.utilisateur', $commentaire);
if (is_null($observations)) {
488,7 → 488,7
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
 
private function obtenirConditionPourCommentaires($commentaire) {
$observations = $this->obtenirObsLieesImg('commentaire.*', $commentaire);
if (is_null($observations)) {
498,7 → 498,7
$sql = $this->assemblerObsEnConditionSql($observations, $operateur);
return $sql;
}
 
/**
* Récupération des identifiant d'utilisateur et des ordres des observations correspondant à une date.
* Retour sous forme de tableau : array[identifiant] = array(ordre, ordre...);
521,7 → 521,7
//($type == 'commentaire.meta' ? " AND ci.commentaire LIKE $param " : '').
($type == 'commentaire.utilisateur' ? " AND ci.commentaire LIKE $param " : '').
($type == 'commentaire.*' ? " AND (ci.commentaire LIKE $param) " : '').
$this->construireWhereCoordonnees().
$this->construireWhereCoordonnees().
$this->construireWhereDept().
$this->construireWhereCommune().
$this->construireWhereUtilisateur().
532,8 → 532,8
'ORDER BY utilisateur ASC, ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
$observations = null;
if ($resultats != false) {
$observations = array();
550,7 → 550,7
}
return $observations;
}
 
private function assemblerObsEnConditionSql($observations, $operateur = 'AND') {
$sql = '';
if ($observations != null) {
569,7 → 569,7
$sql = " $operateur ($sql) ";
return $sql;
}
 
private function construireWhereDept() {
$sql = '';
// Récupération des coordonnées depuis l'id station
584,7 → 584,7
}
return $sql;
}
 
private function construireWhereCommune() {
$sql = '';
// Récupération des coordonnées depuis l'id station
595,7 → 595,7
}
return $sql;
}
 
private function construireWherePhotosSeulement() {
$sql = '';
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) {
603,8 → 603,8
}
return $sql;
}
 
 
private function construireWhereUtilisateur() {
$sql = '';
// Récupération des coordonnées depuis l'id station
615,7 → 615,7
}
return $sql;
}
 
private function construireWhereNumTaxon() {
$sql = '';
// Récupération des coordonnées depuis l'id station
626,7 → 626,7
}
return $sql;
}
 
private function construireWhereProjet() {
$sql = '';
// Récupération des coordonnées depuis l'id station
637,7 → 637,7
}
return $sql;
}
 
/**
* Traitement de $projet pour construction du filtre dans la requête
*/
648,7 → 648,7
}
return $sql;
}
 
private function construireWhereTag() {
$sql = '';
extract($this->parametres);
658,7 → 658,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
685,11 → 685,11
'ORDER BY utilisateur ASC, ci.ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$elements_tag = Cel::db()->executerRequete($requete);
$elements_tag = Cel::db()->requeter($requete);
 
$requete_tag = array();
if ($elements_tag != false && count($elements_tag) > 0) {
 
$filtres = array();
foreach ($elements_tag as $occurence) {
$utilisateur = $occurence['utilisateur'];
701,13 → 701,13
$filtres[$utilisateur][$id_obs] = $id_obs;
}
}
 
// Pré-construction du where de la requête
$tpl_where = "(id_observation IN (%s))";
foreach ($filtres as $utilisateur => $id_obs) {
$requete_tag[] = sprintf($tpl_where, implode(',', $id_obs));
}
 
} else {
$this->messages[] = "Aucune observation ne possède d'images avec ce mot-clé.";
}
717,7 → 717,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
729,7 → 729,7
//$this->debug[] = $sql;
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
741,9 → 741,9
$where_mots_cles_images = implode(' '.$mots_cles_encodes['type'].' ', $where_mots_cles_images);
return $where_mots_cles_images;
}
 
private function decomposerParametreTag($tags) {
 
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
if (preg_match('/.+OU.+/', $tags)) {
$mots_cles['type'] = 'OR';
754,7 → 754,7
} else {
$mots_cles['motsCles'][] = $tags;
}
 
foreach ($mots_cles['motsCles'] as $mot) {
$mots_cles['motsClesEncodesProteges'][] = Cel::db()->quote('%'.$mot.'%');
}
761,7 → 761,7
$this->debug[] = $mots_cles;
return $mots_cles;
}
 
private function decomposerParametreStation() {
$station_infos = array();
if (isset($this->parametres['station'])) {
768,7 → 768,7
$station = $this->parametres['station'];
$this->debug[] = $station;
list($type, $coord) = explode(':', $station);
 
if ($type == 'UTM') {
list($utm_x, $utm_y, $secteur) = explode('-', $coord);
$station_infos = array('utm_x' => $utm_x, 'utm_y' => $utm_y, 'secteur' => $secteur);
780,7 → 780,7
}
return $station_infos;
}
 
private function decomposerParametreDate() {
$date_infos = array(null,null);
if (isset($this->parametres['date'])) {
790,17 → 790,17
} else {
$type = 'observation';
}
 
$date = str_replace('/', '-', $date);
if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $date, $matches)) {
$date = $matches[3].'-'.$matches[2].'-'.$matches[1];
}
 
$date_infos = array($type, $date);
}
return $date_infos;
}
 
private function decomposerParametreTaxon() {
$nom_infos = array(null, null);
if (isset($this->parametres['taxon'])) {
813,7 → 813,7
}
return $nom_infos;
}
 
private function decomposerParametreCommentaire() {
$commentaire_infos = array(null, null);
if (isset($this->parametres['commentaire'])) {
/trunk/jrest/services/CelImage.php
1,15 → 1,15
<?php
// declare(encoding='UTF-8');
 
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* Service fournissant la liste des ids des images liées à une observation.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* Cas d'utilisation :
* Cas d'utilisation GET :
* /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'.
*
* Cas d'utilisation DELETE :
*
* Sortie :
* Type de sortie : json (par défaut), HTML en cas d'erreur.
*
28,7 → 28,7
$parametres = $this->traiterParametres(array('mode'), $params, false);
extract($parametres);
$contenu = '';
 
$retour = null;
if (isset($mode)) {
$methode = $this->traiterNomMethodeGet($mode);
50,14 → 50,16
}
 
/**
* Carte par défaut
* Service fournissant la liste des ids des images liées à une observation.
* Format de l'url du WS :
* /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'.
*/
private function getListeIds() {
$ids = array();
 
if (isset($_GET['obsId'])) {
$observations = $this->traiterValeursMultiples($_GET['obsId']);
 
if (! is_null($observations)) {
$requete = 'SELECT co.id_observation, cim.id_image '.
'FROM cel_obs AS co '.
66,14 → 68,14
' LEFT JOIN cel_images AS cim '.
' ON (coi.id_image = cim.id_image) '.
"WHERE co.id_observation IN ($observations) ";
 
$resultat_requete_images = Cel::db()->requeter($requete);
 
$infos = array();
if(is_array($resultat_requete_images)) {
$infos = $resultat_requete_images;
}
 
foreach ($infos as $info) {
if(is_numeric($info['id_image'])) {
$ids[$info['id_observation']][] = (int) $info['id_image'];
83,4 → 85,49
}
return $ids;
}
 
/**
* Méthode appelée avec une requête de type DELETE.
* Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
* Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
*
* @param int uid[0] id utilisateur
* @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
*
*/
public function deleteElement($uid){
if ($this->controlerAccessibiliteWs()) {
if ($this->controleAppelIpAutorisee()) {
// Initialisation des paramètres
$idImage = isset($uid[0]) ? $uid[0] : '';
 
// Vérifier les paramêtres
$this->verifierIdentifiantImage($idImage);
$idsImages = explode(',', $idImage);
 
$gestionnaireImage = new GestionImage($this->config);
$suppressionImage = $gestionnaireImage->supprimerImage($idsImages);
 
if ($suppressionImage) {
$this->envoyer('OK');
} else {
$this->envoyer("Au moins une image « $idImage » n'a pu être supprimé.");
}
} else {
header('Status: 401 Unauthorized');
$message = "Accès interdit. \n"."Vous n'êtes pas autorisé à accéder à ce service depuis '{$_SERVER['REMOTE_ADDR']}' !\n";
die($message);
}
}
}
 
private function verifierIdentifiantImage($chaine) {
$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
if ($ok == false) {
header("HTTP/1.0 412 Precondition Failed"); // TODO: PHP: 5.4 http_response_code(412);
header("Content-Type: text/plain; charset=utf-8");
die("Indiquer un ou plusieurs identifiants d'image séparés par des virgules.");
}
return $ok;
}
}
/trunk/jrest/services/CelObs.php
15,9 → 15,9
* @copyright © 2013, Jean-Pascal MILCENT
*/
class CelObs extends Cel {
 
private $rechercheObs = null;
private $chpsEtendus = null;
private $donnees = null;
 
public function __construct($config) {
parent::__construct($config);
96,4 → 96,155
}
return $retour;
}
 
/**
* Méthode appelée avec une requête de type POST et un identifiant d'observation.
* Modifie une observation en fonction des informations envoyées en POST.
* Utilisé par:
* - service:del:0.1/determinations/ : ValiderDetermination.php::modifierObservationParDetermination()
* - service:del:0.1/observations/#idObs [POST] : pour dépublier une observation
*
* @param $uid array $uid[0] (int) : identifiant observation
* @param pairs array tableau contenant les champs à modifier sous la forme : nom_du_champ=nouvelle_valeur
*/
public function updateElement($ressources, $donnees) {
$this->donnees = $donnees;
if ($this->controlerAccessibiliteWs()) {
if ($this->controleAppelIpAutorisee()) {
$idObs = isset($ressources[0]) ? $ressources[0] : '';
$this->verifierIdentifiantObs($idObs);
 
$idObs = explode(',', $idObs);
// Seulement la dépublication
if (isset($this->donnees['transmission']) && count($this->donnees) == 1) {
$gestionnaireObs = new GestionObservation($this->config);
$detransmissionObs = $gestionnaireObs->modifierTransmissionObservation($idObs, false);
if ($detransmissionObs === false) {
$msg = "Un problème est survenu (voir log). Les observations n'ont pas pu être dépubliées.";
$this->envoyerMessageErreur(304, $msg);
}
} if (count($this->donnees) == 3) {
$donneesObligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel');
if ($this->verifierDonneesObligatoires($donneesObligatoires)) {
$this->modifierObservationDepuisDEL($idObs);
}
} else {
$msg = "La modification complète d'une observation n'est pas implémentée. \n".
"Uniquement la dépublication pour l'instant fonctionne";
$this->envoyerMessageErreur(501, $msg);
}
 
$this->envoyer('OK');
} else {
$msg = "Accès interdit. \n"."Vous n'êtes pas autorisé à accéder à ce service depuis '{$_SERVER['REMOTE_ADDR']}' !\n";
$this->envoyerMessageErreur(401, $msg);
}
}
}
 
private function modifierObservationDepuisDEL($idObs) {
$gestion_observation = new GestionObservation($this->config);
$pairs = array_map('trim', $this->donnees);
$utilisateur = $pairs['ce_utilisateur'];
unset($pairs['ce_utilisateur'], $pairs['id_observation']);
 
// mise à jour des mots-clefs suite à une validation:
// typiquement, DEL modifierObservationParDetermination()
// nous enverra obsKeywordDelete=aDeterminer en plus de certitude=Certaine
$obsKeywordDelete = @trim($pairs['obsKeywordDelete']);
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']);
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']);
 
// complete les données de la proposition validée car:
// 1) la table tb_del.del_commentaire ne contient pas toutes les informations nécessaires
// 2) la table tb_del.del_commentaire ne *devrait* pas contenir beaucoup plus que nom_sel et nom_sel_nn
// 3) la génération de ces données ici, au moment de l'UPDATE, est le meilleur garant de leur fiabilité
$more_data = $this->NN2(@$pairs['nom_sel_nn'], @$pairs['nom_referentiel']);
if($more_data) $pairs = array_merge($pairs, $more_data);
 
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $idObs, $pairs);
if($modification) {
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'obs');
// supression des éventuelles liaison de l'obs avec le mot clé contenu dans obsKeywordDelete
$supp_liaison_mot_cle = $gestion_mots_cles->supprimerLiaisonPourMotCleEtIdElementLie($obsKeywordDelete, $idObs, $utilisateur);
// TODO : quel impact de la valeur de retour ?
header("Content-Type: text/plain; charset=utf-8");
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL !
}
// cf TODO: n'arrivera pas tant que l'UPDATE ajoutera systématiquement date_modification = now()
elseif($modification === 0) {
header("HTTP/1.0 304 Not Modified"); // XXX: PHP 5.4 // http_response_code(304); // Not Modified
header("Content-Type: text/plain; charset=utf-8");
die("Not Modified");
}
else {
header("HTTP/1.0 500 Internal Server Error"); // XXX: PHP: 5.4 // http_response_code(500); // Internal Server Error
header("Content-Type: text/plain; charset=utf-8");
die("Impossible de modifier l'observation associée à cet identifiant " . mysql_error());
}
}
 
private function verifierIdentifiantObs($chaine) {
$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
if ($ok == false) {
$msg = "Indiquer un ou plusieurs identifiants d'obs séparés par des virgules.";
$this->envoyerMessageErreur(412, $msg);
}
return $ok;
}
 
private function verifierDonneesObligatoires($champsObligatoires) {
foreach ($champsObligatoires as $param) {
if (! isset($this->donnees[$param])) {
$msg = sprintf("Paramètre %s manquant (parmi %s)", $param, implode(', ', $champsObligatoires));
$this->envoyerMessageErreur(412, $msg);
}
}
}
 
private function NN2($id, $ref) {
if(!$db || !$id || !$ref) return FALSE;
switch($ref) {
case "bdtfx":
return $this->bdd->query(sprintf(, self::db, self::bdtfx, self::db, self::bdtfx, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
case "bdtxa":
return $this->bdd->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_tax AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel". // subtilité: "num_tax"
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
" FROM %s.%s o".
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtxa, self::db, self::bdtxa, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
case "isfan":
return $this->bdd->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel".
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
" FROM %s.%s o".
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
" WHERE o.num_nom = %d -- %s:%d", self::db, self::isfan, self::db, self::isfan, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
case "bdtao":
return $this->bdd->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel".
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret".
" FROM %s.%s o".
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom".
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtao, self::db, self::bdtao, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC);
}
return FALSE;
}
 
const db = 'tb_eflore';
const bdtfx = 'bdtfx_v2_00';
const bdtxa = 'bdtxa_v1_01';
const isfan = 'isfan_v2013';
const bdtao = 'bdtao_v1_00';
 
private function getInfosBdtfx($id_nom) {
$idNomP = $this->bdd->proteger($id_nom);
$requete = "SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, o.famille, ".
" CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel, ".
" CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret ".
"FROM bdtfx_v2_00 AS o ".
" LEFT JOIN bdtfx_v2_00 AS ret ON (o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom) ".
"WHERE o.num_nom = $idNomP ".
' -- '.__FILE__.' : '.__LINE__;
$resultat = Cel::db()->executerRequete($requete, Cel::db::SQL_RETOUR_LIGNE);
return $resultat;
}
}
/trunk/jrest/services/CelWidgetMapPoint.php
91,9 → 91,9
 
public function getTout($params) {
 
$emplacements = null;
$emplacements = null;
$concatenation_id = "CONCAT(IFNULL(latitude,''),IFNULL(longitude,''), IFNULL(wgs84_latitude,''),IFNULL(wgs84_longitude,'')) ";
 
$requete = 'SELECT ce_zone_geo, zone_geo, station, '.
"mots_cles_texte, ".
"latitude, ".
121,12 → 121,12
$this->construireWhereTag().
$this->construireWhereNombreDeJours().
' GROUP BY id_coord';
$resultats_emplacements = Cel::db()->executerRequete($requete);
 
$resultats_emplacements = Cel::db()->requeter($requete);
$emplacements = $this->traiterEmplacements($resultats_emplacements, $this->compterObservations($params));
return $emplacements;
}
 
private function afficherRequeteFormatee($requete) {
$requete = str_replace(')',')<br />',$requete);
$requete = str_replace('(',' <br /> (',$requete);
158,7 → 158,7
$this->construireWhereTag().
$this->construireWhereNombreDeJours();
 
$resultats_nb_obs = Cel::db()->executerRequete($requete);
$resultats_nb_obs = Cel::db()->requeter($requete);
return $resultats_nb_obs[0]['nb'];
}
 
304,7 → 304,7
}
return $sensible;
}
 
private function communeEstDemandee() {
$station_infos = $this->decomposerParametreStation();
$commune_demandee = true;
438,7 → 438,7
}
return $observations;
}
 
private function ajouterAuteursAuxObs($observations) {
$observateurs = $this->recupererUtilisateursIdentite(array_keys($observations['observateurs']));
unset($observations['observateurs']);
536,7 → 536,7
}
return $sql;
}
 
private function construireWhereCoordonneesSansSensibles() {
$sql = '(';
// Récupération des coordonnées depuis l'id station
610,7 → 610,7
}
return $sql;
}
 
private function construireWhereReferentiel() {
$sql = '';
extract($this->parametres);
754,7 → 754,7
'ORDER BY utilisateur ASC, ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$resultats = Cel::db()->executerRequete($requete);
$resultats = Cel::db()->requeter($requete);
 
$observations = null;
if ($resultats != false) {
829,12 → 829,12
$sql = "( (latitude != 0 AND longitude != 0) ".
" AND latitude BETWEEN $latMin AND $latMax ".
" AND longitude BETWEEN $lngMin AND $lngMax )";
 
/*$sql = " MBRWithin(mon_point, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
$latMax.' '.$lngMin.','.
$latMax.' '.$lngMax.','.
$latMax.' '.$lngMin.','.
$latMin.' '.$lngMin."))')) "; */
$latMin.' '.$lngMin."))')) "; */
}
return $sql;
}
873,7 → 873,7
$sql = "( wgs84_longitude != 0 AND wgs84_latitude != 0 ".
" AND wgs84_latitude BETWEEN $latMin AND $latMax ".
" AND wgs84_longitude BETWEEN $lngMin AND $lngMax )";
 
/*$sql = " MBRWithin(point_commune, GeomFromText('POLYGON((".$latMin.' '.$lngMin.','.
$latMax.' '.$lngMin.','.
$latMax.' '.$lngMax.','.
923,12 → 923,12
')'.
' OR mots_cles_texte LIKE "%sensible%"'.
') ';
 
}
return $sql;
}
 
 
private function construireWherePhotosSeulement() {
$sql = '';
if (isset($this->parametres['photos']) && $this->parametres['photos'] == 1) {
948,8 → 948,8
}
return $sql;
}
 
 
private function construireWhereNumTaxon() {
$sql = '';
// Récupération des coordonnées depuis l'id station
960,7 → 960,7
}
return $sql;
}
 
private function construireWhereNumTaxonAvecSousTaxons() {
$sql = '';
// Récupération des coordonnées depuis l'id station
981,7 → 981,7
}
return $sql;
}
 
private function obtenirSousTaxons($nt) {
$referentiel = 'bdtfx';
if(isset($this->parametres['referentiel']) && $this->parametres['referentiel'] != "" && $this->parametres['referentiel'] != '*') {
1005,7 → 1005,7
}
return $sql;
}
 
/**
* Traitement de $projet pour construction du filtre dans la requête
*/
1016,7 → 1016,7
}
return $sql;
}
 
private function construireWhereTag() {
$sql = '';
extract($this->parametres);
1026,7 → 1026,7
}
return $sql;
}
 
private function construireWhereNombreDeJours() {
$sql = null;
extract($this->parametres);
1035,7 → 1035,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
1063,11 → 1063,11
'ORDER BY utilisateur ASC, ci.ordre ASC';
//$this->debug[] = $requete;
//die($requete);
$elements_tag = Cel::db()->executerRequete($requete);
$elements_tag = Cel::db()->requeter($requete);
 
$requete_tag = array();
if ($elements_tag != false && count($elements_tag) > 0) {
 
$filtres = array();
foreach ($elements_tag as $occurence) {
$utilisateur = $occurence['utilisateur'];
1079,13 → 1079,13
$filtres[$utilisateur][$id_obs] = $id_obs;
}
}
 
// Pré-construction du where de la requête
$tpl_where = "(id_observation IN (%s))";
foreach ($filtres as $utilisateur => $id_obs) {
$requete_tag[] = sprintf($tpl_where, implode(',', $id_obs));
}
 
} else {
$this->messages[] = "Aucune observation ne possède d'images avec ce mot-clé.";
}
1095,7 → 1095,7
}
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
1107,7 → 1107,7
//$this->debug[] = $sql;
return $sql;
}
 
/**
* Traitement de $tag pour construction du filtre dans la requête
*/
1119,9 → 1119,9
$where_mots_cles_images = implode(' '.$mots_cles_encodes['type'].' ', $where_mots_cles_images);
return $where_mots_cles_images;
}
 
private function decomposerParametreTag($tags) {
 
$mots_cles = array('type' => null, 'motsCles' => null, 'motsClesEncodesProteges' => null);
if (preg_match('/.+OU.+/', $tags)) {
$mots_cles['type'] = 'OR';
1132,7 → 1132,7
} else {
$mots_cles['motsCles'][] = $tags;
}
 
foreach ($mots_cles['motsCles'] as $mot) {
$mots_cles['motsClesEncodesProteges'][] = Cel::db()->quote('%'.$mot.'%');
}