/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/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/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/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.'%'); |
} |
/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/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/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/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/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) != ''); |
} |
} |
?> |
} |