/trunk/services/modules/0.1/Commentaires.php |
---|
1,31 → 1,44 |
<?php |
/** |
* Description : |
* Classe principale de chargement des services d'eFlore. |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package eflore-projets |
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org> |
* @author Delphine CAUQUIL <delphine@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 0.1 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
*/ |
* Classe principale de chargement des services concernant les commentaires. |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* |
* URLs possibles : |
* |
* GET : |
* http://localhost/del/services/0.1/commentaires => liste tous les commentaires |
* http://localhost/del/services/0.1/commentaires/#id => retourne le contenu d'un commentaire d'id #id |
* |
* PUT : |
* http://localhost/del/services/0.1/commentaires => Ajoute un nouveau commentaire |
* |
* DELETE : |
* http://localhost/del/services/0.1/commentaires/#id => supprime le commentaire d'id #id |
* |
* @category DEL |
* @package Services |
* @subpackage Commentaires |
* @version 0.1 |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class Commentaires extends RestService { |
private $parametres = array(); |
private $ressources = array(); |
private $methode = null; |
private $projetNom = array(); |
private $serviceNom = array(); |
private $serviceNom = 'commentaires'; |
private $sousServiceNom = null; |
private $cheminCourant = null; |
private $conteneur; |
/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */ |
protected $utilisationParametresBruts = true; |
35,29 → 48,31 |
public function consulter($ressources, $parametres) { |
$this->methode = 'consulter'; |
$resultat = ''; |
$reponseHttp = new ReponseHttp(); |
try { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
$this->conteneur = new Conteneur($this->parametres); |
$resultat = $this->traiterRessources(); |
$reponseHttp->setResultatService($resultat); |
} catch (Exception $e) { |
$reponseHttp->ajouterErreur($e); |
} |
$reponseHttp->emettreLesEntetes(); |
$corps = $reponseHttp->getCorps(); |
return $corps; |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
return $this->executerService(); |
} |
public function ajouter($ressources, $parametres) { |
public function ajouter($ressources, $requeteDonnees) { |
$this->methode = 'ajouter'; |
$this->initialiserRessourcesEtParametres($ressources, $requeteDonnees); |
return $this->executerService(); |
} |
public function supprimer($ressources) { |
$this->methode = 'supprimer'; |
$this->initialiserRessourcesEtParametres($ressources); |
return $this->executerService(); |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres = array()) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
private function executerService() { |
$resultat = ''; |
$reponseHttp = new ReponseHttp(); |
try { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
$this->conteneur = new Conteneur($this->parametres); |
$resultat = $this->traiterRessources(); |
$reponseHttp->setResultatService($resultat); |
64,115 → 79,92 |
} catch (Exception $e) { |
$reponseHttp->ajouterErreur($e); |
} |
$reponseHttp->emettreLesEntetes(); |
$corps = $reponseHttp->getCorps(); |
return $corps; |
} |
public function supprimer($ressources) { |
$this->methode = 'supprimer'; |
$resultat = ''; |
$reponseHttp = new ReponseHttp(); |
try { |
$this->ressources = $ressources; |
$this->conteneur = new Conteneur(); |
$resultat = $this->traiterRessources(); |
$reponseHttp->setResultatService($resultat); |
} catch (Exception $e) { |
$reponseHttp->ajouterErreur($e); |
$reponseHttp->emettreLesEntetes(); |
echo $reponseHttp->getCorps(); |
} |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
private function traiterRessources() { |
$retour = ''; |
$this->initialiserProjet(); |
$this->chargerConfigService(); |
$this->analyserRessources(); |
$retour = $this->initialiserService(); |
return $retour; |
} |
/*------------------------------------------------------------------------------------------------------------------ |
CONFIGURATION DU PROJET |
------------------------------------------------------------------------------------------------------------------*/ |
private function initialiserProjet() { |
$this->projetNom = 'commentaires'; |
$this->chargerConfigProjet(); |
private function chargerConfigService() { |
$chemin = Config::get('chemin_configurations')."config_{$this->serviceNom}.ini"; |
Config::charger($chemin); |
} |
private function chargerConfigProjet() { |
$projet = $this->projetNom; |
$chemin = Config::get('chemin_configurations')."config_$projet.ini"; |
Config::charger($chemin); |
private function analyserRessources() { |
if ($this->methode == 'consulter') { |
if (!isset($this->ressources) || empty($this->ressources)) { |
$this->sousServiceNom = 'liste-commentaires'; |
} else if (isset($this->ressources[0]) && count($this->ressources) == 1 && is_numeric($this->ressources[0])) { |
$this->sousServiceNom = 'consulter-commentaire'; |
} |
} else if ($this->methode == 'ajouter') { |
$this->sousServiceNom = 'ajouter-commentaire'; |
} else if ($this->methode == 'supprimer') { |
if (isset($this->ressources[0]) && count($this->ressources) == 1 && is_numeric($this->ressources[0])) { |
$this->sousServiceNom = 'supprimer-commentaire'; |
} |
} |
if ($this->sousServiceNom == null) { |
$this->lancerMessageErreurRessource(); |
} |
} |
/*------------------------------------------------------------------------------------------------------------------ |
CONFIGURATION DU SERVICE |
------------------------------------------------------------------------------------------------------------------*/ |
private function lancerMessageErreurRessource() { |
$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources); |
$message = "La ressource demandée '$ressource' ". |
"n'est pas disponible pour le service ".$this->serviceNom." !\n". |
"Les URLs disponibles sont : \n". |
" - en GET : commentaires, commentaires/#id \n". |
" - en PUT : commentaires". |
" - en DELETE : commentaires/#id"; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
private function initialiserService() { |
$this->chargerNomService(); |
$classe = $this->obtenirNomClasseService($this->serviceNom); |
$classe = $this->obtenirNomClasseService($this->sousServiceNom); |
//echo $this->sousServiceNom.':'.$classe."\n"; |
//echo 'Ressources :'.print_r($this->ressources, true); |
//echo 'Parametres :'.print_r($this->parametres, true); |
$chemins = array(); |
$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php'; |
$chemins[] = $this->cheminCourant.$this->serviceNom.DS.$classe.'.php'; |
$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php'; |
$retour = ''; |
$service = null; |
foreach ($chemins as $chemin) { |
if (file_exists($chemin)) { |
$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.ini'); |
$this->conteneur->chargerConfiguration('config_'.$this->serviceNom.'.ini'); |
require_once $chemin; |
$service = new $classe($this->conteneur); |
if ($this->methode == 'consulter') { |
$retour = $service->consulter($this->ressources, $this->parametres); |
} elseif ($this->methode == 'ajouter') { |
$retour = $service->ajouter($this->ressources, $this->parametres); |
$retour = $service->ajouter($this->ressources, $this->parametres); |
} elseif ($this->methode == 'supprimer') { |
$retour = $service->supprimer($this->ressources, $this->parametres); |
$retour = $service->supprimer($this->ressources); |
} |
} |
} |
if (is_null($service)) { |
$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !"; |
$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources); |
$message = "Le classe '$classe' correspondant à la ressource '$ressource' ". |
"n'existe pas dans le service '{$this->serviceNom}' !"; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
return $retour; |
} |
private function chargerNomService() { |
// si la méthode est POST, on ajouter un commentaire |
if ($this->methode == 'ajouter') { |
$this->serviceNom = 'ajouter-commentaire'; |
} else if ($this->methode == 'supprimer') { |
$this->serviceNom = 'supprimer-commentaire'; |
} |
else { |
//S'il n'y a pas de ressources => tous les commentaires |
if (!isset($this->ressources) || empty($this->ressources)) { |
$this->serviceNom = 'liste-commentaires'; |
} else { |
if (!is_numeric($this->ressources[0])) { |
$message = "La première ressource doit être un identifiant"; |
$code = RestServeur::HTTP_CODE_ERREUR; |
throw new Exception($message, $code); |
} else { |
$this->serviceNom = 'consulter-commentaire'; |
} |
} |
} |
} |
private function obtenirNomClasseService($mot) { |
$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot)))); |
return $classeNom; |
} |
} |
?> |
} |
/trunk/services/modules/0.1/observations/ListeObservations.php |
---|
28,31 → 28,29 |
class ListeObservations { |
private $conteneur; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
private $conteneur; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
static $tris_possibles = array('date_observation'); |
// paramètres autorisés |
static $tris_possibles = array('date_observation'); |
// paramètres autorisés |
static $sql_fields_liaisons = array( |
'dob' => array('id_observation', 'nom_sel AS `determination.ns`', 'nt AS `determination.nt`', |
'nom_sel_nn AS `determination.nn`', 'famille AS `determination.famille`', |
'nom_referentiel AS `determination.referentiel`', |
'ce_zone_geo AS id_zone_geo', 'zone_geo', 'lieudit', |
'station', 'milieu', 'date_observation', 'mots_cles_texte', 'date_transmission', |
'ce_utilisateur AS `auteur.id`', 'prenom_utilisateur AS `auteur.prenom`', |
'nom_utilisateur AS `auteur.nom`', 'courriel_utilisateur AS `auteur.courriel` ', |
'commentaire'), |
'di' => array('id_image', 'date_prise_de_vue AS `date`', 'hauteur',/* 'largeur','nom_original' // apparemment inutilisés */), |
'du' => array('prenom', 'nom', 'courriel'), |
'dc' => array('commentaire') |
); |
static $sql_fields_liaisons = array( |
'dob' => array('id_observation', 'nom_sel AS `determination.ns`', 'nt AS `determination.nt`', |
'nom_sel_nn AS `determination.nn`', 'famille AS `determination.famille`', |
'nom_referentiel AS `determination.referentiel`', |
'ce_zone_geo AS id_zone_geo', 'zone_geo', 'lieudit', |
'station', 'milieu', 'date_observation', 'mots_cles_texte', 'date_transmission', |
'ce_utilisateur AS `auteur.id`', 'prenom_utilisateur AS `auteur.prenom`', |
'nom_utilisateur AS `auteur.nom`', 'courriel_utilisateur AS `auteur.courriel` ', |
'commentaire'), |
'di' => array('id_image', 'date_prise_de_vue AS `date`', 'hauteur',/* 'largeur','nom_original' // apparemment inutilisés */), |
'du' => array('prenom', 'nom', 'courriel'), |
'dc' => array('commentaire') |
); |
public function __construct(Conteneur $conteneur = null) { |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_departements_bruts.ini'); |
$this->conteneur->chargerConfiguration('config_observations.ini'); |
60,38 → 58,37 |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
static function reformateObservation($obs, $url_pattern = '') { |
static function reformateObservation($obs, $url_pattern = '') { |
$obs = array_map('array_filter', $obs); |
$obs_merged = array(); |
foreach($obs as $o) { |
$id = $o['id_observation']; |
foreach ($obs as $o) { |
$id = $o['id_observation']; |
// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID |
// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire |
if(!isset($o['auteur.id']) || !is_numeric($o['auteur.id'])) $o['auteur.id'] = "0"; |
if(!isset($o['auteur.nom'])) $o['auteur.nom'] = '[inconnu]'; |
// car auteur.id peut être un email, un hash, ou un annuaire_tela.U_ID |
// mais dans les deux premiers cas SELECT courriel AS observateur fait déjà l'affaire |
if (!isset($o['auteur.id']) || !is_numeric($o['auteur.id'])) $o['auteur.id'] = "0"; |
if (!isset($o['auteur.nom'])) $o['auteur.nom'] = '[inconnu]'; |
$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original'))); |
$image['binaire.href'] = sprintf($url_pattern, $image['id_image']); |
unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']); |
if(!isset($obs_merged['"' . $id . '"'])) $obs_merged['"' . $id . '"'] = $o; |
$obs_merged['"' . $id . '"']['images'][] = $image; |
$image = array_intersect_key($o, array_flip(array('id_image', 'date', 'hauteur' , 'largeur', 'nom_original'))); |
$image['binaire.href'] = sprintf($url_pattern, $image['id_image']); |
unset($o['id_image'], $o['date'], $o['hauteur'], $o['largeur'], $o['nom_original']); |
if (!isset($obs_merged['"' . $id . '"'])) $obs_merged['"' . $id . '"'] = $o; |
$obs_merged['"' . $id . '"']['images'][] = $image; |
} |
return $obs_merged; |
} |
/** |
* Méthode principale de la classe. |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* pour l'afficher. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
* @param array $parametres les paramètres situés après le ? dans l'url |
**/ |
public function consulter($ressources, $parametres) { |
/** |
* Méthode principale de la classe. |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* pour l'afficher. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
* @param array $parametres les paramètres situés après le ? dans l'url |
**/ |
public function consulter($ressources, $parametres) { |
// SELECT, à terme, pourrait affecter getInfos(), mais en aucune manière getIdObs() |
$req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array()); |
119,318 → 116,311 |
// idobs est une liste (toujours ordonnée) des id d'observations recherchées |
$idobs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $idobs_tab)); |
if($idobs) { |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']); |
if ($idobs) { |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']); |
// 2) récupération des données nécessaires pour ces observations (obs + images) |
// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes |
// car tout provient de v_del_image |
$obs_unfmt = self::getInfos($idobs, $db); |
// 2) récupération des données nécessaires pour ces observations (obs + images) |
// ici les champs récupérés sont issus de self::$sql_fields_liaisons mais sans préfixes |
// car tout provient de v_del_image |
$obs_unfmt = self::getInfos($idobs, $db); |
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur->getParametre('url_images')); |
// 3) suppression, merge des données en tableau assez représentatif du futur JSON en output |
$observations = self::reformateObservation($obs_unfmt, $this->conteneur->getParametre('url_images')); |
// 4) récupération des données nécessaires pour ces observations (commentaires + votes) |
// modifie $observations |
$this->configurer(); |
$this->chargerDeterminations($observations); |
// 4) récupération des données nécessaires pour ces observations (commentaires + votes) |
// modifie $observations |
$this->configurer(); |
$this->chargerDeterminations($observations); |
// 5) restauration de l'ordre souhaité initialement |
$observations = self::sortArrayByArray($observations, $idobs); |
// 5) restauration de l'ordre souhaité initialement |
$observations = self::sortArrayByArray($observations, $idobs); |
} else { |
$observations = array(); |
$total = 0; |
$observations = array(); |
$total = 0; |
} |
// 6) JSON output |
$resultat = new ResultatService(); |
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')), |
'resultats' => $observations); |
'resultats' => $observations); |
return $resultat; |
} |
} |
static function sortArrayByArray($array, $orderArray) { |
static function sortArrayByArray($array, $orderArray) { |
$ordered = array(); |
foreach($orderArray as $key) { |
if(array_key_exists('"' . $key . '"', $array)) { |
$ordered['"' . $key . '"'] = $array['"' . $key . '"']; |
unset($array['"' . $key . '"']); |
} |
foreach ($orderArray as $key) { |
if (array_key_exists('"' . $key . '"', $array)) { |
$ordered['"' . $key . '"'] = $array['"' . $key . '"']; |
unset($array['"' . $key . '"']); |
} |
} |
return $ordered + $array; |
} |
} |
// SQL helpers |
/* |
* Retourne une liste ordonnée d'id d'observation correspondant aux critères |
* passés dans p et aux clauses where/join présentes dans le tableau $req |
* |
* @param p: $params (filtrés sauf escape-string) |
* @param req: le tableau représentant les composants de la requete SQL |
* @param db: l'instance de db |
*/ |
static function getIdObs($p, $req, $db) { |
$req_s = sprintf('SELECT SQL_CALC_FOUND_ROWS id_observation' . |
' FROM v_del_image vdi'. |
' %s' . // LEFT JOIN if any |
' WHERE %s'. // where-clause ou TRUE |
' %s'. // group-by |
' %s'. // having (si commentaires) |
' ORDER BY %s %s %s'. |
' LIMIT %d, %d -- %s', |
// SQL helpers |
/* |
* Retourne une liste ordonnée d'id d'observation correspondant aux critères |
* passés dans p et aux clauses where/join présentes dans le tableau $req |
* |
* @param p: $params (filtrés sauf escape-string) |
* @param req: le tableau représentant les composants de la requete SQL |
* @param db: l'instance de db |
*/ |
static function getIdObs($p, $req, $db) { |
$req_s = sprintf('SELECT SQL_CALC_FOUND_ROWS id_observation' . |
' FROM v_del_image vdi'. |
' %s' . // LEFT JOIN if any |
' WHERE %s'. // where-clause ou TRUE |
' %s'. // group-by |
' %s'. // having (si commentaires) |
' ORDER BY %s %s %s'. |
' LIMIT %d, %d -- %s', |
$req['join'] ? implode(' ', $req['join']) : '', |
$req['where'] ? implode(' AND ', $req['where']) : 'TRUE', |
$req['join'] ? implode(' ', $req['join']) : '', |
$req['where'] ? implode(' AND ', $req['where']) : 'TRUE', |
$req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '', |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '', |
$req['groupby'] ? ('GROUP BY ' . implode(', ', array_unique($req['groupby']))) : '', |
$req['having'] ? ('HAVING ' . implode(' AND ', $req['having'])) : '', |
$p['tri'], strtoupper($p['ordre']), |
// date_transmission peut-être NULL et nous voulons de la consistence |
// (sauf après r1860 de Cel) |
$p['tri'] == 'date_transmission' ? ', id_observation' : '', |
$p['tri'], strtoupper($p['ordre']), |
// date_transmission peut-être NULL et nous voulons de la consistence |
// (sauf après r1860 de Cel) |
$p['tri'] == 'date_transmission' ? ', id_observation' : '', |
$p['navigation.depart'], $p['navigation.limite'], __FILE__ . ':' . __LINE__); |
$p['navigation.depart'], $p['navigation.limite'], __FILE__ . ':' . __LINE__); |
$res = $db->recupererTous($req_s); |
$err = mysql_error(); |
if(!$res && $err) { |
// http_response_code(400); |
// if(defined('DEBUG') && DEBUG) header("X-Debug: $req_s"); |
throw new Exception('not found', 400); |
$res = $db->recupererTous($req_s); |
$err = mysql_error(); |
if (!$res && $err) { |
// http_response_code(400); |
// if(defined('DEBUG') && DEBUG) header("X-Debug: $req_s"); |
throw new Exception('not found', 400); |
} |
// ordre préservé, à partir d'ici c'est important. |
return $res; |
} |
// ordre préservé, à partir d'ici c'est important. |
return $res; |
} |
/* |
Champs récupérés: |
Pour del_images, la vue retourne déjà ce que nous recherchons de cel_obs et cel_images |
(cel_obs.* et cel_[obs_]images.{id_observation, id_image, date_prise_de_vue AS date, hauteur, largeur}) |
Pour del_commentaires: nous voulons * |
Reste ensuite à formatter. |
Note: le préfixe de table utilisé ici (vdi) n'impacte *aucune* autre partie du code car rien |
n'en dépend pour l'heure. (inutilisation de $req['select']) |
*/ |
static function getInfos($idobs, $db) { |
/*$select_fields = implode(',', array_merge( |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['dob']), |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['di']), |
array_map(create_function('$a', 'return "du.".$a;'), self::$sql_fields_liaisons['du'])));*/ |
$select_fields = array_merge(self::$sql_fields_liaisons['dob'], |
self::$sql_fields_liaisons['di']); |
$req_s = sprintf('SELECT %s FROM v_del_image vdi'. |
// ' LEFT JOIN del_commentaire AS dc ON di.id_observation = dc.ce_observation AND dc.nom_sel IS NOT NULL'. |
' WHERE id_observation IN (%s)', |
implode(',', $select_fields), |
implode(',', $idobs)); |
return $db->recupererTous($req_s); |
} |
/** |
* Champs récupérés: |
* Pour del_images, la vue retourne déjà ce que nous recherchons de cel_obs et cel_images |
* (cel_obs.* et cel_[obs_]images.{id_observation, id_image, date_prise_de_vue AS date, hauteur, largeur}) |
* Pour del_commentaires: nous voulons * |
* Reste ensuite à formatter. |
* Note: le préfixe de table utilisé ici (vdi) n'impacte *aucune* autre partie du code car rien |
* n'en dépend pour l'heure. (inutilisation de $req['select']) |
*/ |
static function getInfos($idobs, $db) { |
/*$select_fields = implode(',', array_merge( |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['dob']), |
array_map(create_function('$a', 'return "vdi.".$a;'), self::$sql_fields_liaisons['di']), |
array_map(create_function('$a', 'return "du.".$a;'), self::$sql_fields_liaisons['du'])));*/ |
$select_fields = array_merge(self::$sql_fields_liaisons['dob'], self::$sql_fields_liaisons['di']); |
$req_s = sprintf('SELECT %s FROM v_del_image vdi'. |
// ' LEFT JOIN del_commentaire AS dc ON di.id_observation = dc.ce_observation AND dc.nom_sel IS NOT NULL'. |
' WHERE id_observation IN (%s)', |
implode(',', $select_fields), |
implode(',', $idobs)); |
return $db->recupererTous($req_s); |
} |
/** |
* Complément à DelTk::sqlAddConstraint() |
* |
* @param $p les paramètres (notamment de masque) passés par l'URL et déjà traités/filtrés (sauf quotes) |
* @param $req le tableau, passé par référence représentant les composants de la requête à bâtir |
* @param $c conteneur, utilisé soit pour l'appel récursif à requestFilterParams() en cas de param "masque" |
* soit pour la définition du type (qui utilise la variable nb_commentaires_discussion) |
*/ |
static function sqlAddConstraint($p, $db, &$req, Conteneur $c = NULL) { |
if (!empty($p['masque.tag'])) { |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule |
// i_mots_cles_texte provient de la VIEW v_del_image |
if (isset($p['masque.tag']['AND'])) { |
/* Lorsque nous interprêtons la chaîne provenant du masque général (cf: buildTagsAST($p['masque'], 'OR', ' ') dans sqlAddMasqueConstraint()), |
nous sommes splittés par espace. Cependant, assurons que si une virgule à été saisie, nous n'aurons pas le motif |
" AND CONCAT(mots_cles_texte, i_mots_cles_texte) REGEXP ',' " dans notre requête. |
XXX: Au 12/11/2013, une recherche sur tag depuis le masque général implique un OU, donc le problème ne se pose pas ici */ |
$subwhere = array(); |
foreach ($p['masque.tag']['AND'] as $tag) { |
if (trim($tag) == ',') continue; |
/** |
* Complément à DelTk::sqlAddConstraint() |
* |
* @param $p les paramètres (notamment de masque) passés par l'URL et déjà traités/filtrés (sauf quotes) |
* @param $req le tableau, passé par référence représentant les composants de la requête à bâtir |
* @param $c conteneur, utilisé soit pour l'appel récursif à requestFilterParams() en cas de param "masque" |
* soit pour la définition du type (qui utilise la variable nb_commentaires_discussion) |
*/ |
static function sqlAddConstraint($p, $db, &$req, Conteneur $c = NULL) { |
if(!empty($p['masque.tag'])) { |
// TODO: remove LOWER() lorsqu'on est sur que les tags sont uniformés en minuscule |
// i_mots_cles_texte provient de la VIEW v_del_image |
if(isset($p['masque.tag']['AND'])) { |
/* Lorsque nous interprêtons la chaîne provenant du masque général (cf: buildTagsAST($p['masque'], 'OR', ' ') dans sqlAddMasqueConstraint()), |
nous sommes splittés par espace. Cependant, assurons que si une virgule à été saisie, nous n'aurons pas le motif |
" AND CONCAT(mots_cles_texte, i_mots_cles_texte) REGEXP ',' " dans notre requête. |
XXX: Au 12/11/2013, une recherche sur tag depuis le masque général implique un OU, donc le problème ne se pose pas ici */ |
$subwhere = array(); |
foreach($p['masque.tag']['AND'] as $tag) { |
if(trim($tag) == ',') continue; |
$subwhere[] = sprintf('LOWER(CONCAT(%s)) REGEXP %s', |
DelTk::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')), |
$db->proteger(strtolower($tag))); |
} |
$req['where'][] = '(' . implode(' AND ', $subwhere) . ')'; |
} else { |
$req['where'][] = sprintf('LOWER(CONCAT(%s)) REGEXP %s', |
DelTk::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')), |
$db->proteger(strtolower(implode('|', $p['masque.tag']['OR'])))); |
} |
} |
$subwhere[] = sprintf('LOWER(CONCAT(%s)) REGEXP %s', |
DelTk::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')), |
$db->proteger(strtolower($tag))); |
if (!empty($p['masque.type'])) { |
self::addTypeConstraints($p['masque.type'], $db, $req, $c); |
} |
$req['where'][] = '(' . implode(' AND ', $subwhere) . ')'; |
} |
else { |
$req['where'][] = sprintf('LOWER(CONCAT(%s)) REGEXP %s', |
DelTk::sqlAddIfNullPourConcat(array('vdi.mots_cles_texte', 'vdi.i_mots_cles_texte')), |
$db->proteger(strtolower(implode('|', $p['masque.tag']['OR'])))); |
} |
} |
if(!empty($p['masque.type'])) { |
self::addTypeConstraints($p['masque.type'], $db, $req, $c); |
} |
} |
/** Le masque fait une recherche générique parmi de nombreux champs ci-dessus. |
* Nous initialisons donc ces paramètres (excepté masque biensur), et nous rappelons |
* récursivement. À la seule différence que nous n'utiliserons que $or_req['where'] |
* imploded par des " OR ". |
*/ |
static function sqlAddMasqueConstraint($p, $db, &$req, Conteneur $c = NULL) { |
if (!empty($p['masque'])) { |
$or_params = array('masque.auteur' => $p['masque'], |
'masque.departement' => $p['masque'], |
'masque.id_zone_geo' => $p['masque'], |
'masque.tag' => $p['masque'], |
'masque.ns' => $p['masque'], |
'masque.famille' => $p['masque'], |
'masque.date' => $p['masque'], |
'masque.genre' => $p['masque'], |
/* milieu: TODO ? */ ); |
/* Cependant les champs spécifiques ont priorité sur le masque général. |
Pour cette raison nous supprimons la génération de SQL du masque général sur les |
champ spécifiques qui feront l'objet d'un traitement avec une valeur propre. */ |
if (isset($p['masque.auteur'])) unset($or_params['masque.auteur']); |
if (isset($p['masque.departement'])) unset($or_params['masque.departement']); |
if (isset($p['masque.id_zone_geo'])) unset($or_params['masque.id_zone_geo']); |
if (isset($p['masque.tag'])) unset($or_params['masque.tag']); |
if (isset($p['masque.famille'])) unset($or_params['masque.famille']); |
if (isset($p['masque.date'])) unset($or_params['masque.date']); |
if (isset($p['masque.genre'])) unset($or_params['masque.genre']); |
/* Le masque fait une recherche générique parmi de nombreux champs ci-dessus. |
Nous initialisons donc ces paramètres (excepté masque biensur), et nous rappelons |
récursivement. À la seule différence que nous n'utiliserons que $or_req['where'] |
imploded par des " OR ". */ |
static function sqlAddMasqueConstraint($p, $db, &$req, Conteneur $c = NULL) { |
if(!empty($p['masque'])) { |
$or_params = array('masque.auteur' => $p['masque'], |
'masque.departement' => $p['masque'], |
'masque.id_zone_geo' => $p['masque'], |
'masque.tag' => $p['masque'], |
'masque.ns' => $p['masque'], |
'masque.famille' => $p['masque'], |
'masque.date' => $p['masque'], |
'masque.genre' => $p['masque'], |
/* milieu: TODO ? */ ); |
/* Cependant les champs spécifiques ont priorité sur le masque général. |
Pour cette raison nous supprimons la génération de SQL du masque général sur les |
champ spécifiques qui feront l'objet d'un traitement avec une valeur propre. */ |
if(isset($p['masque.auteur'])) unset($or_params['masque.auteur']); |
if(isset($p['masque.departement'])) unset($or_params['masque.departement']); |
if(isset($p['masque.id_zone_geo'])) unset($or_params['masque.id_zone_geo']); |
if(isset($p['masque.tag'])) unset($or_params['masque.tag']); |
if(isset($p['masque.famille'])) unset($or_params['masque.famille']); |
if(isset($p['masque.date'])) unset($or_params['masque.date']); |
if(isset($p['masque.genre'])) unset($or_params['masque.genre']); |
$or_masque = DelTk::requestFilterParams($or_params, array_keys($or_params), $c); |
if (isset($or_params['masque.tag'])) { |
$or_masque['masque.tag'] = DelTk::buildTagsAST($p['masque'], 'OR', ' '); |
} |
$or_masque = DelTk::requestFilterParams($or_params, array_keys($or_params), $c); |
if(isset($or_params['masque.tag'])) { |
$or_masque['masque.tag'] = DelTk::buildTagsAST($p['masque'], 'OR', ' '); |
} |
// $or_req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array()); |
$or_req = array('join' => array(), 'where' => array()); |
DelTk::sqlAddConstraint($or_masque, $db, $or_req); |
self::sqlAddConstraint($or_masque, $db, $or_req); |
// $or_req = array('select' => array(), 'join' => array(), 'where' => array(), 'groupby' => array(), 'having' => array()); |
$or_req = array('join' => array(), 'where' => array()); |
DelTk::sqlAddConstraint($or_masque, $db, $or_req); |
self::sqlAddConstraint($or_masque, $db, $or_req); |
if ($or_req['where']) { |
$req['where'][] = '(' . implode(' OR ', $or_req['where']) . ')'; |
// utile au cas ou des jointures seraient rajoutées |
$req['join'] = array_unique(array_merge($req['join'], $or_req['join'])); |
} |
} |
} |
if($or_req['where']) { |
$req['where'][] = '(' . implode(' OR ', $or_req['where']) . ')'; |
// utile au cas ou des jointures seraient rajoutées |
$req['join'] = array_unique(array_merge($req['join'], $or_req['join'])); |
} |
private function configurer() { |
$this->mappingVotes = $this->conteneur->getParametre('mapping_votes'); |
$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire'); |
} |
} |
/** |
* @param $req: la représentation de la requête MySQL complète, à amender. |
*/ |
static function addTypeConstraints($val, $db, &$req, Conteneur $c) { |
if (array_key_exists('adeterminer', $val)) { |
// On récupère toutes les observations qui on le tag "aDeterminer" *ou* qui n'ont pas de nom d'espèce |
// *ou* qui ont la "certitude" à ("aDeterminer" *ou* "douteux") |
$req['where'][] = '(' . implode(' OR ', array( |
'vdi.certitude = "aDeterminer"', |
'vdi.certitude = "douteux"', |
'vdi.mots_cles_texte LIKE "%aDeterminer%"', |
'vdi.nom_sel_nn IS NULL', |
'vdi.nom_sel_nn = 0', // il ne DEVRAIT pas y avoir d'entrées à 0, mais il y en a quand-même !! |
)) . ')'; |
} |
if (array_key_exists('validees', $val)) { |
//On récupère toutes les observations ayant un commentaire doté de proposition_retenue = 1 |
$req['join'][] = 'INNER JOIN del_commentaire AS dc ON vdi.id_observation = dc.ce_observation AND dc.proposition_retenue = 1'; |
} |
private function configurer() { |
$this->mappingVotes = $this->conteneur->getParametre('mapping_votes'); |
$this->mappingCommentaire = $this->conteneur->getParametre('mapping_commentaire'); |
} |
// solution n°1: impraticable |
if (false && array_key_exists('endiscussion', $val)) { |
//Si on veut les observations en discussion, |
// on va récupérer les ids des observations dont le nombre de commentaire est supérieur à N |
$req['select'][] = 'COUNT(dc.id_commentaire) AS comm_count'; |
$req['join'][] = 'INNER JOIN del_commentaire AS dc ON vdi.id_observation = dc.ce_observation'; |
$req['groupby'][] = 'vdi.id_observation'; |
$req['having'][] = "COUNT(id_commentaire) > " . $c->getParametre('nb_commentaires_discussion'); |
} |
/* |
* @param $req: la représentation de la requête MySQL complète, à amender. |
*/ |
static function addTypeConstraints($val, $db, &$req, Conteneur $c) { |
if(array_key_exists('adeterminer', $val)) { |
// On récupère toutes les observations qui on le tag "aDeterminer" *ou* qui n'ont pas de nom d'espèce |
// *ou* qui ont la "certitude" à ("aDeterminer" *ou* "douteux") |
$req['where'][] = '(' . implode(' OR ', array( |
'vdi.certitude = "aDeterminer"', |
'vdi.certitude = "douteux"', |
'vdi.mots_cles_texte LIKE "%aDeterminer%"', |
'vdi.nom_sel_nn IS NULL', |
'vdi.nom_sel_nn = 0', // il ne DEVRAIT pas y avoir d'entrées à 0, mais il y en a quand-même !! |
)) . ')'; |
if (array_key_exists('endiscussion', $val)) { |
$req['where'][] = '(SELECT COUNT(id_commentaire) FROM del_commentaire AS dc'. |
' WHERE ce_observation = id_observation) > ' . intval($c->getParametre('nb_commentaires_discussion')); |
} |
} |
if(array_key_exists('validees', $val)) { |
//On récupère toutes les observations ayant un commentaire doté de proposition_retenue = 1 |
$req['join'][] = 'INNER JOIN del_commentaire AS dc ON vdi.id_observation = dc.ce_observation AND dc.proposition_retenue = 1'; |
} |
// solution n°1: impraticable |
if(false && array_key_exists('endiscussion', $val)) { |
//Si on veut les observations en discussion, |
// on va récupérer les ids des observations dont le nombre de commentaire est supérieur à N |
$req['select'][] = 'COUNT(dc.id_commentaire) AS comm_count'; |
$req['join'][] = 'INNER JOIN del_commentaire AS dc ON vdi.id_observation = dc.ce_observation'; |
$req['groupby'][] = 'vdi.id_observation'; |
$req['having'][] = "COUNT(id_commentaire) > " . $c->getParametre('nb_commentaires_discussion'); |
} |
/** |
* Récupérer toutes les déterminations et le nombre de commentaire au total |
* @param array $observations la liste des observations à mettre à jour |
*/ |
private function chargerDeterminations(&$observations) { |
$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), $observations)); |
$r = sprintf('SELECT * FROM del_commentaire AS dc WHERE dc.nom_sel IS NOT NULL AND ce_observation IN (%s) -- %s', |
implode(',',$idObs), |
__FILE__ . ':' . __LINE__); |
$propositions = $this->bdd->recupererTous($r); |
if (!$propositions) return; |
foreach ($propositions as $proposition) { |
$idObs = $proposition['ce_observation']; |
$idComment = $proposition['id_commentaire']; |
$comment = $this->formaterDetermination($idComment, $proposition); |
if ($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment; |
if(array_key_exists('endiscussion', $val)) { |
$req['where'][] = '(SELECT COUNT(id_commentaire) FROM del_commentaire AS dc'. |
' WHERE ce_observation = id_observation) > ' . intval($c->getParametre('nb_commentaires_discussion')); |
} |
} |
} |
private function formaterDetermination($commentId, $proposition) { |
if (!$proposition) return NULL; |
/** |
* Récupérer toutes les déterminations et le nombre de commentaire au total |
* @param array $observations la liste des observations à mettre à jour |
* */ |
private function chargerDeterminations(&$observations) { |
$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'), |
$observations)); |
$r = sprintf('SELECT * FROM del_commentaire AS dc WHERE dc.nom_sel IS NOT NULL AND ce_observation IN (%s) -- %s', |
implode(',',$idObs), |
__FILE__ . ':' . __LINE__); |
$propositions = $this->bdd->recupererTous($r); |
if(!$propositions) return; |
foreach ($propositions as $proposition) { |
$idObs = $proposition['ce_observation']; |
$idComment = $proposition['id_commentaire']; |
$comment = $this->formaterDetermination($idComment, $proposition); |
if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment; |
$proposition_formatee = array('nb_commentaires' => '0'); |
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) { |
if (isset($proposition[$nomOriginal])) { |
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal]; |
} |
} |
} |
} |
// Charger les votes sur les déterminations |
$resultatsVotes = $this->bdd->recupererTous( |
sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition = %d', $commentId)); |
private function formaterDetermination($commentId, $proposition) { |
if(!$proposition) return NULL; |
foreach ($resultatsVotes as $vote) { |
$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote); |
} |
$proposition_formatee = array('nb_commentaires' => '0'); |
foreach ($this->mappingCommentaire as $nomOriginal => $nomFinal) { |
if (isset($proposition[$nomOriginal])) { |
$proposition_formatee[$nomFinal] = $proposition[$nomOriginal]; |
} |
} |
// chargerNombreCommentaire() |
// Charger le nombre de commentaires (sans détermination) associé à l'observation |
$listeCommentaires = $this->bdd->recupererTous(sprintf( |
'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '. |
'FROM del_commentaire WHERE ce_proposition = %d GROUP BY ce_proposition -- %s', |
$commentId, __FILE__ . ':' . __LINE__)); |
foreach ($listeCommentaires as $ligneProposition) { |
// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires |
if ($ligneProposition['ce_commentaire_parent']) { |
// TODO/debug: id_commentaire_parent != $commentId ?? |
// reprendre la "logique" du code... moins de boucles, moins de requêtes, ... |
if ($ligneProposition['ce_commentaire_parent'] != $commentId) { |
// restore_error_handler(); |
error_log(sprintf("possible error: nb_commentaires = %s: comment = %d, parent = %d, %s", |
$ligneProposition['nb'], $commentId, $ligneProposition['ce_commentaire_parent'], __FILE__)); |
} |
$proposition_formatee['nb_commentaires'] = $ligneProposition['nb']; |
} else { |
$proposition_formatee['observation']['nb_commentaires'] = $ligneProposition['nb']; |
} |
} |
// Charger les votes sur les déterminations |
$resultatsVotes = $this->bdd->recupererTous( |
sprintf('SELECT * FROM del_commentaire_vote WHERE ce_proposition = %d', $commentId)); |
foreach ($resultatsVotes as $vote) { |
$proposition_formatee['votes'][$vote['id_vote']] = $this->formaterVote($vote); |
return $proposition_formatee; |
} |
// chargerNombreCommentaire() |
// Charger le nombre de commentaires (sans détermination) associé à l'observation |
$listeCommentaires = $this->bdd->recupererTous(sprintf( |
'SELECT ce_commentaire_parent, ce_proposition, COUNT( id_commentaire ) AS nb '. |
'FROM del_commentaire WHERE ce_proposition = %d GROUP BY ce_proposition -- %s', |
$commentId, __FILE__ . ':' . __LINE__)); |
foreach ($listeCommentaires as $ligneProposition) { |
// ce test sert à exclure les proposition de 1er niveau qui sont elles aussi des commentaires |
if($ligneProposition['ce_commentaire_parent']) { |
// TODO/debug: id_commentaire_parent != $commentId ?? |
// reprendre la "logique" du code... moins de boucles, moins de requêtes, ... |
if($ligneProposition['ce_commentaire_parent'] != $commentId) { |
// restore_error_handler(); |
error_log(sprintf("possible error: nb_commentaires = %s: comment = %d, parent = %d, %s", |
$ligneProposition['nb'], $commentId, $ligneProposition['ce_commentaire_parent'], __FILE__)); |
/** |
* Formater un vote en fonction du fichier de configuration config_votes.ini |
* @param $votes array() |
*/ |
private function formaterVote($vote) { |
$retour = array(); |
foreach ($vote as $param=>$valeur) { |
$retour[$this->mappingVotes[$param]] = $valeur; |
} |
$proposition_formatee['nb_commentaires'] = $ligneProposition['nb']; |
} else { |
$proposition_formatee['observation']['nb_commentaires'] = $ligneProposition['nb']; |
} |
return $retour; |
} |
return $proposition_formatee; |
} |
/** |
* Formater un vote en fonction du fichier de configuration config_votes.ini |
* @param $votes array() |
* */ |
private function formaterVote($vote) { |
$retour = array(); |
foreach ($vote as $param=>$valeur) { |
$retour[$this->mappingVotes[$param]] = $valeur; |
} |
return $retour; |
} |
} |
} |
/trunk/services/modules/0.1/observations/ListeObservationsWidget.php |
---|
18,7 → 18,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
31,8 → 30,7 |
$this->conteneur->chargerConfiguration('config_departements_bruts.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
347,7 → 345,7 |
' INNER JOIN del_obs_image AS doi ON doi.id_observation = dob.id_observation '. |
$this->chargerClauseWhere().' '. |
"ORDER BY {$this->tri} {$this->directionTri} ". |
$this->gestionBdd->getLimitSql(); |
' LIMIT '.$this->navigation->getDepart().', '.$this->navigation->getLimite(); |
return $this->bdd->recupererTous($requete); |
} |
/trunk/services/modules/0.1/observations/VoteObservation.php |
---|
16,7 → 16,6 |
class VoteObservation extends RestService { |
protected $conteneur; |
protected $gestionBdd; |
protected $bdd; |
protected $navigation; |
23,8 → 22,7 |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
$this->navigation = $conteneur->getNavigation(); |
$this->conteneur->chargerConfiguration('config_mapping_votes.ini'); |
} |
/trunk/services/modules/0.1/observations/Observation.php |
---|
23,7 → 23,6 |
class Observation { |
private $conteneur; |
private $gestionBdd; |
private $bdd; |
/* Map les champs MySQL vers les champs utilisés dans le JSON pour les clients pour |
chacune des différentes tables utilisées pour le chargement de résultats ci-dessous. |
117,8 → 116,7 |
$this->conteneur->chargerConfiguration('config_votes.ini'); |
$this->conteneur->chargerConfiguration('config_mapping_votes.ini'); |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini'); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/syndication/SyndicationCommentaires.php |
---|
21,7 → 21,7 |
private $masque = array(); |
private $mappingFiltre = array(); |
private $conteneur = null; |
private $gestionBdd = null; |
private $bdd = null; |
private $navigation = null; |
public function __construct(Conteneur $conteneur = null) { |
29,7 → 29,7 |
$this->conteneur->chargerConfiguration('config_syndication_commentaires.ini'); |
$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque'); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $conteneur->getBdd(); |
$this->navigation = $conteneur->getNavigation(); |
} |
245,7 → 245,7 |
'ORDER BY dc.date DESC '. |
'LIMIT '.$this->navigation->getDepart().','.$this->navigation->getLimite().' '; |
$elements = $this->gestionBdd->getBdd()->recupererTous($requete); |
$elements = $this->bdd->recupererTous($requete); |
return $elements; |
} |
260,8 → 260,8 |
foreach ($tableauMasque as $idMasque => $valeurMasque) { |
$idMasque = str_replace('masque.', '', $idMasque); |
$champ = $this->mappingFiltre[$idMasque]; |
$valeurMasquePattern = $this->gestionBdd->getBdd()->proteger($valeurMasque.'%'); |
$valeurMasqueProtegee = $this->gestionBdd->getBdd()->proteger($valeurMasque); |
$valeurMasquePattern = $this->bdd->proteger($valeurMasque.'%'); |
$valeurMasqueProtegee = $this->bdd->proteger($valeurMasque); |
switch ($idMasque) { |
case 'espece': |
288,14 → 288,14 |
if (is_numeric($auteurId)) { |
$whereAuteur = " dc.ce_utilisateur = $auteurId "; |
} else { |
$auteurIdMotif = $this->gestionBdd->getBdd()->proteger($auteurId.'%'); |
$auteurIdMotif = $this->bdd->proteger($auteurId.'%'); |
if (strpos($auteurId, '@') === false) { |
$tableauNomPrenom = explode(' ', $auteurId, 2); |
if (count($tableauNomPrenom) == 2) { |
// on teste potentiellement un nom prenom ou bien un prénom nom |
$nomMotif = $this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%'); |
$prenomMotif = $this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%'); |
$nomMotif = $this->bdd->proteger($tableauNomPrenom[0].'%'); |
$prenomMotif = $this->bdd->proteger($tableauNomPrenom[1].'%'); |
$whereAuteur = ' ('. |
"(dc.utilisateur_nom LIKE $nomMotif AND dc.utilisateur_prenom LIKE $prenomMotif) ". |
/trunk/services/modules/0.1/syndication/SyndicationTagsParProtocole.php |
---|
25,7 → 25,7 |
private $masque = array(); |
private $mappingFiltre = array(); |
private $conteneur = null; |
private $gestionBdd = null; |
private $bdd = null; |
private $navigation = null; |
private $type_rss = null; |
38,7 → 38,7 |
$this->conteneur->chargerConfiguration('config_syndication_tagsparprotocole.ini'); |
$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque'); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $conteneur->getBdd(); |
$this->navigation = $conteneur->getNavigation(); |
} |
286,7 → 286,7 |
$this->chargerClauseWhere().' '. |
'ORDER BY date DESC '. |
'LIMIT '.$this->navigation->getDepart().','.$this->navigation->getLimite(); |
$elements = $this->gestionBdd->getBdd()->recupererTous($requete); |
$elements = $this->bdd->recupererTous($requete); |
return $elements; |
} |
300,7 → 300,7 |
foreach ($tableauMasque as $idMasque => $valeurMasque) { |
$idMasque = str_replace('masque.', '', $idMasque); |
$champMasque = $this->mappingFiltre[$idMasque]; |
$masqueMotif = $this->gestionBdd->getBdd()->proteger($valeurMasque); |
$masqueMotif = $this->bdd->proteger($valeurMasque); |
switch ($idMasque) { |
case 'image': |
/trunk/services/modules/0.1/syndication/SyndicationVotesParProtocole.php |
---|
24,7 → 24,7 |
private $masque = array(); |
private $mappingFiltre = array(); |
private $conteneur = null; |
private $gestionBdd = null; |
private $bdd = null; |
private $navigation = null; |
private $type_rss = null; |
37,7 → 37,7 |
$this->conteneur->chargerConfiguration('config_syndication_votesparprotocole.ini'); |
$this->mappingFiltre = $this->conteneur->getParametre('mapping_masque'); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $conteneur->getBdd(); |
$this->navigation = $conteneur->getNavigation(); |
} |
276,7 → 276,7 |
'ORDER BY divo.date DESC '. |
'LIMIT '.$this->navigation->getDepart().','.$this->navigation->getLimite(); |
$elements = $this->gestionBdd->getBdd()->recupererTous($requete); |
$elements = $this->bdd->recupererTous($requete); |
return $elements; |
} |
291,13 → 291,13 |
$idMasque = str_replace('masque.', '', $idMasque); |
switch ($idMasque) { |
case 'image': |
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->gestionBdd->getBdd()->proteger($valeurMasque); |
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->bdd->proteger($valeurMasque); |
break; |
case 'protocole': |
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->gestionBdd->getBdd()->proteger($valeurMasque).' '; |
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->bdd->proteger($valeurMasque).' '; |
break; |
default: |
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->gestionBdd->getBdd()->proteger($valeurMasque); |
$where[] = ' '.$this->mappingFiltre[$idMasque].' = '.$this->bdd->proteger($valeurMasque); |
break; |
} |
} |
320,19 → 320,19 |
if(count($tableauNomPrenom) == 2) { |
// on teste potentiellement un nom prenom ou bien un prénom nom |
$masque = '('. |
'(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%').' AND '. |
'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%').') OR '. |
'(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[1].'%').' AND '. |
'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($tableauNomPrenom[0].'%').')'. |
'(dc.utilisateur_nom LIKE '.$this->bdd->proteger($tableauNomPrenom[0].'%').' AND '. |
'dc.utilisateur_prenom LIKE '.$this->bdd->proteger($tableauNomPrenom[1].'%').') OR '. |
'(dc.utilisateur_nom LIKE '.$this->bdd->proteger($tableauNomPrenom[1].'%').' AND '. |
'dc.utilisateur_prenom LIKE '.$this->bdd->proteger($tableauNomPrenom[0].'%').')'. |
')'; |
} else { |
$masque = '( |
(dc.utilisateur_nom LIKE '.$this->gestionBdd->getBdd()->proteger($auteurId.'%').' OR '. |
'dc.utilisateur_prenom LIKE '.$this->gestionBdd->getBdd()->proteger($auteurId.'%').')'. |
(dc.utilisateur_nom LIKE '.$this->bdd->proteger($auteurId.'%').' OR '. |
'dc.utilisateur_prenom LIKE '.$this->bdd->proteger($auteurId.'%').')'. |
')'; |
} |
} else { |
$masque = " do.utilisateur_courriel LIKE ".$this->gestionBdd->getBdd()->proteger($valeurMasque.'%')." "; |
$masque = " do.utilisateur_courriel LIKE ".$this->bdd->proteger($valeurMasque.'%')." "; |
} |
} |
return $masque; |
/trunk/services/modules/0.1/plantnet/Changements.php |
---|
1,11 → 1,11 |
<?php |
/** |
* Le web service plantnet récupère toutes les image de la table v_del_image |
* Le web service plantnet récupère toutes les image de la table v_del_image |
* ordonées par date de modification |
* Les images sont regroupées en observations |
* Les tags, les votes et les propositions de determinations sont intégrés à l'observation |
* |
* |
* |
* @category php 5.2 |
* @author Samuel Dufour-Kowalski <samuel.dufour@cirad.fr> |
* @author Mathias Chouet <mathias@tela-botanica.org> |
19,34 → 19,32 |
*/ |
class Changements { |
private $indexImagesIds = array(); |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
private $date_defaut = '1900-01-01'; |
public function __construct(Conteneur $conteneur = null) { |
/* restore_exception_handler(); */ |
/* restore_error_handler(); */ |
/* ini_set("display_errors", "1"); */ |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_plantnet.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
* Méthode principale de la classe. |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* pour l'afficher. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
* @param array $parametres les paramètres situés après le ? dans l'url |
57,13 → 55,13 |
// initialiserRessourcesEtParametres() |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
if(!isset($parametres['date'])) { |
$this->parametres['date'] = $this->date_defaut; |
} |
// Lancement du service |
$liaisons = $this->chargerLiaisons(); |
$images = array(); |
72,7 → 70,7 |
if($liaisons) { |
$compte = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre'); |
$total = (int) $compte['nbre']; |
$imgdata = $this->recupererDonneeObs($liaisons); |
$obs = $this->regrouperObs($liaisons, $imgdata); |
79,18 → 77,18 |
$obs = $this->chargerPropositionPlusProbable($obs); |
$obs = $this->orderArray($obs); |
} |
$this->navigation->setTotal($total); |
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
//$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $images); |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $obs); |
return $resultat; |
} |
private function orderArray(&$obs) { |
$ret = array(); |
102,12 → 100,12 |
function cmp($a, $b) { |
return ($a['date_changement'] < $b['date_changement']) ? 1 : -1; |
} |
usort($ret, 'cmp'); |
return $ret; |
} |
/*------------------------------------------------------------------------------- |
CHARGEMENT DES IMAGES |
CHARGEMENT DES IMAGES |
--------------------------------------------------------------------------------*/ |
private function chargerLiaisons() { |
116,10 → 114,10 |
$limite = @min(intval($this->parametres['navigation.limite']), 1000); |
$limite = $limite ? $limite : 10; // 0 => 10 |
$depart = intval(@$this->parametres['navigation.depart']); |
$requete_sql = |
$requete_sql = |
'select SQL_CALC_FOUND_ROWS vdi.id_observation, vdi.id_image, '. |
'GROUP_CONCAT(del_image_vote.valeur) as votes, GROUP_CONCAT(DISTINCT tag) as tags, '. |
145,7 → 143,7 |
'having MAX(vdi.date_creation) >= '.$date_debut.' or '. |
' MAX(vdi.date_modification) >= '.$date_debut.' or '. |
' MAX(del_image_tag.date) >= '.$date_debut.' or '. |
' MAX(del_image_tag.date_modification) >= '.$date_debut.' or '. |
' MAX(del_image_tag.date_modification) >= '.$date_debut.' or '. |
' MAX(del_image_vote.date) >= '.$date_debut.' or '. |
' MAX(del_commentaire.date) >= '.$date_debut.' or '. |
' MAX(del_commentaire_vote.date) >= '.$date_debut.' '. |
155,16 → 153,16 |
//echo $requete_sql; exit; |
return $this->bdd->recupererTous($requete_sql); |
// GROUP BY (très couteux) car multiples observations associées à une image |
// charlie est ici :-) |
// charlie est ici :-) |
// eg: 16150,16185,16245,16246,118995,129989 |
} |
// recupere les donnée associées (fait en 2 requetes pour optimiser) |
private function recupererDonneeObs(&$liaisons) { |
174,7 → 172,7 |
$id = $img['id_image']; |
$ids[] = $id; |
} |
// recuperer les donnees |
$resultats = $this->bdd->recupererTous(sprintf( |
'SELECT '. |
181,13 → 179,13 |
'vdi.id_observation, vdi.id_image, '. |
'vdi.nom_sel, '. |
'vdi.nom_referentiel, vdi.nom_ret, vdi.nom_ret_nn, vdi.nt, vdi.famille, '. |
'vdi.zone_geo, vdi.latitude, vdi.longitude, '. |
'vdi.date_observation, vdi.date_creation, vdi.date_transmission, '. |
'vdi.mots_cles_texte as mots_cles_texte, '. |
'vdi.i_mots_cles_texte as mots_cles_texte_image, '. |
'vdi.zone_geo, vdi.latitude, vdi.longitude, '. |
'vdi.date_observation, vdi.date_creation, vdi.date_transmission, '. |
'vdi.mots_cles_texte as mots_cles_texte, '. |
'vdi.i_mots_cles_texte as mots_cles_texte_image, '. |
'vdi.ce_utilisateur as ce_utilisateur, '. |
'vdi.prenom_utilisateur, vdi.courriel_utilisateur, vdi.nom_utilisateur, vdi.nom_original as nom_image '. |
'vdi.prenom_utilisateur, vdi.courriel_utilisateur, vdi.nom_utilisateur, vdi.nom_original as nom_image '. |
'FROM v_del_image as vdi '. |
'WHERE vdi.id_image IN (%s) '. |
215,7 → 213,7 |
$idimg = $img['id_image']; |
$imgdata = $imgdatas[$idimg]; |
if (!isset($obs[$idobs])) { |
$obs[$idobs] = array(); |
} |
227,7 → 225,7 |
$obs[$idobs]['auteur_courriel'] = $imgdata['courriel_utilisateur']; |
$obs[$idobs]['mots_cles_obs_cel'] = $this->formaterMotsClesCel($imgdata['mots_cles_texte']); |
$obs[$idobs]['date_observation'] = $imgdata['date_observation']; |
$obs[$idobs]['date_publication'] = $imgdata['date_transmission']; |
$obs[$idobs]['date_creation'] = $imgdata['date_creation']; |
243,8 → 241,8 |
$obs[$idobs]['zone_geo'] = $imgdata['zone_geo']; |
$obs[$idobs]['latitude'] = floatval($imgdata['latitude']); |
$obs[$idobs]['longitude'] = floatval($imgdata['longitude']); |
if (!isset($obs[$idobs]['images'])) { |
$obs[$idobs]['images'] = array(); |
} |
261,11 → 259,11 |
$obs[$idobs]['images'][] = $img_obj; |
} |
return $obs; |
} |
/** |
* Charger les votes pour chaque image |
**/ |
281,9 → 279,9 |
'AND del_commentaire.id_commentaire=del_commentaire_vote.ce_proposition '. |
'', implode(',', $obsIds))); |
$votes = array(); // map ce_proposition -> score |
// calcul des votes |
// un vote identifié a un facteur de 3 |
// additionne tous les vote par ce_proposition |
294,15 → 292,15 |
$valeur = ($vote['valeur'] == 1) ? 1 : -1; |
$votes[$vote['id_commentaire']] += is_numeric($vote['ce_utilisateur']) ? 3 * $valeur : $valeur; |
} |
foreach($resultats as $vote) { |
$idobs = $vote['ce_observation']; |
if(!isset($obs[$idobs]['determinations'])) { |
$obs[$idobs]['determinations'] = array(); |
} |
$obs[$idobs]['determinations'][$vote['id_commentaire']] = |
$obs[$idobs]['determinations'][$vote['id_commentaire']] = |
array('nom_sel' => $vote['nom_sel'], |
'nom_ret' => $vote['nom_ret'], |
'score' => $votes[$vote['id_commentaire']], |
309,12 → 307,12 |
'nn' => $vote['nom_sel_nn'] |
); |
} |
return $obs; |
} |
/*------------------------------------------------------------------------------- |
FORMATER ET METTRE EN FORME |
--------------------------------------------------------------------------------*/ |
339,5 → 337,5 |
$ret = explode(',', implode(',', $result)); |
return $ret; |
} |
} |
/trunk/services/modules/0.1/determinations/ListeImagesDeterminationsProbables.php |
---|
22,7 → 22,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
36,8 → 35,7 |
$this->conteneur->chargerConfiguration('config_determinations.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/determinations/ValiderDetermination.php |
---|
18,7 → 18,6 |
class ValiderDetermination { |
private $conteneur; |
private $gestionBdd; |
private $bdd; |
private $idObs = null; |
private $idProposition = null; |
28,8 → 27,7 |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_determinations.ini'); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
public function modifier($ressources, $parametres) { |
45,7 → 43,7 |
} |
return 'OK'; |
} |
private function validateurEstPresent($parametres) { |
return isset($parametres['validateur.id']) && is_numeric($parametres['validateur.id']) && $parametres['validateur.id'] != 0; |
} |
61,11 → 59,11 |
if (!isset($parametres['auteur.id'])) { |
$erreurs[] = "- le paramètre 'auteur.id' est manquant"; |
} |
// Le paramètre validateur.id (id de la personne validant la détemrinatiuon) |
// est là pour éviter que le $_POST ne soit vide |
if (isset($parametres['validateur.id']) && !is_numeric($parametres['validateur.id'])) { |
$erreurs[] = "- le paramètre 'validateur.id' doit être un entier"; |
// Le paramètre validateur.id (id de la personne validant la détemrinatiuon) |
// est là pour éviter que le $_POST ne soit vide |
if (isset($parametres['validateur.id']) && !is_numeric($parametres['validateur.id'])) { |
$erreurs[] = "- le paramètre 'validateur.id' doit être un entier"; |
} |
if ($erreurs) { |
131,7 → 129,7 |
$controleAcces = $this->conteneur->getControleAcces(); |
$utilisateurInfos = $controleAcces->getInfosUtilisateurConnecte(); |
$utilisateurId = $utilisateurInfos['id_utilisateur']; |
// si l'utilisateur connecté n'est ni auteur de l'observation, ni au moins administrateur de niveau 1 |
if (($this->idAuteurObs != $utilisateurId) && $utilisateurInfos['admin'] < 1) { |
$msg = "Seul l'utilisateur ayant saisi l'observation, un administrateur ou un validateur peut la valider : veuillez vous identifier.\n"; |
/trunk/services/modules/0.1/commentaires/AjouterCommentaire.php |
---|
1,18 → 1,18 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Le web service image récupère toutes les données de la table del_obs_images |
* pour retourner une liste d'images associée à une observation |
* Permet d'ajouter un commentaire. |
* |
* @category php 5.2 |
* @package del |
* @subpackage images |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $ |
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=ApiIdentiplante01Images |
* @category DEL |
* @package Services |
* @subpackage Commentaires |
* @version 0.1 |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class AjouterCommentaire { |
20,7 → 20,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
27,14 → 26,13 |
private $commentaire; |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
public function __construct(Conteneur $conteneur) { |
$this->conteneur = $conteneur; |
$this->conteneur->chargerConfiguration('config_commentaires.ini'); |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
257,5 → 255,4 |
return implode(', ', $valeurs); |
} |
} |
?> |
} |
/trunk/services/modules/0.1/commentaires/ConsulterCommentaire.php |
---|
20,7 → 20,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
32,8 → 31,7 |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
170,9 → 168,9 |
* Chargement depuis la bdd de tous les commentaires |
* */ |
private function chargerCommentaires() { |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * FROM del_commentaire '; |
$requeteLiaisons .= $this->chargerClauseWhere(); |
$requeteLiaisons .= $this->gestionBdd->getLimitSql(); |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * FROM del_commentaire '. |
$this->chargerClauseWhere(). |
' LIMIT '.$this->navigation->getDepart().', '.$this->navigation->getLimite(); |
return $this->bdd->recupererTous($requeteLiaisons); |
} |
/trunk/services/modules/0.1/commentaires/ListeCommentaires.php |
---|
20,7 → 20,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
31,8 → 30,7 |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
154,9 → 152,9 |
* */ |
private function chargerCommentaires() { |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * FROM del_commentaire '; |
$requeteLiaisons .= $this->chargerClauseWhere(); |
$requeteLiaisons .= $this->gestionBdd->getLimitSql(); |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * FROM del_commentaire '. |
$this->chargerClauseWhere(). |
' LIMIT '.$this->navigation->getDepart().', '.$this->navigation->getLimite(); |
return $this->bdd->recupererTous($requeteLiaisons); |
} |
/trunk/services/modules/0.1/commentaires/SupprimerCommentaire.php |
---|
20,7 → 20,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
34,8 → 33,7 |
$this->conteneur->chargerConfiguration('config_mapping_commentaires.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/motscles/AjouterMotCle.php |
---|
17,15 → 17,14 |
require_once('MotClePictoflora.php'); |
class AjouterMotCle { |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
private $commentaire; |
public function __construct(Conteneur $conteneur = null) { |
32,11 → 31,9 |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
* Ajoute un mot-clé si les objets fournis en paramètres sont valides |
* pour l'afficher. |
45,46 → 42,46 |
* */ |
public function ajouter($ressources, $parametres) { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
// Gestion des configuration du script |
$this->verifierConfiguration(); |
$insertion = $this->insererMotCle($this->parametres); |
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
$resultat->corps = array('id_mot_cle' => $insertion); |
return $resultat; |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->parametres = $parametres; |
} |
/*------------------------------------------------------------------------------- |
CONFIGURATION DU SERVICE |
--------------------------------------------------------------------------------*/ |
--------------------------------------------------------------------------------*/ |
/** |
* Vérifier que le service est bien configuré |
* Vérifier que le service est bien configuré |
* */ |
public function verifierConfiguration() { |
$erreurs = array(); |
if (!isset($this->parametres['image'])) { |
$erreurs[] = ' - impossible d\'ajouter un mot clé sans image associée ;'; |
} else if(!is_numeric($this->parametres['image'])) { |
$erreurs[] = ' - l\'identifiant d\'image doit être un entier ;'; |
} |
if (!isset($this->parametres['mot_cle'])) { |
$erreurs[] = ' - impossible d\'ajouter un mot clé sans le mot clé ;'; |
} |
if (!isset($this->parametres['auteur.id'])) { |
$erreurs[] = ' - impossible d\'ajouter un mot clé sans auteur associé ;'; |
} |
if (!empty($erreurs)) { |
$e = 'Erreur de configuration :'; |
$e = implode("\n", $erreurs); |
92,10 → 89,10 |
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR); |
} |
} |
/*------------------------------------------------------------------------------- |
INSERTION DES MOTS CLES |
--------------------------------------------------------------------------------*/ |
INSERTION DES MOTS CLES |
--------------------------------------------------------------------------------*/ |
/** |
* Insère un mot clé dans la table |
* @param $mot_cle array la liste des paramètres |
104,9 → 101,9 |
$id_image = intval($mot_cle['image']); |
$id_auteur = $mot_cle['auteur.id']; |
$mots_cles = explode(",", $mot_cle['mot_cle']); |
array_walk($mots_cles, create_function('&$val', '$val = trim($val);')); |
array_walk($mots_cles, create_function('&$val', '$val = trim($val);')); |
$valeurs_a_inserer = array(); |
$valeurs_a_inserer = array(); |
foreach ($mots_cles as $mot_cle_a_inserer) { |
$mot_cle_normalise = MotClePictoflora::normaliserMotCle($mot_cle_a_inserer); |
$valeurs_a_inserer[] = sprintf('(%d, %s, %s, %s, NOW(), 1, NOW())', |
/trunk/services/modules/0.1/motscles/ListeMotsCles.php |
---|
19,7 → 19,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
30,8 → 29,7 |
$this->conteneur->chargerConfiguration('config_mapping_mots_cles.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/motscles/SupprimerMotCle.php |
---|
17,15 → 17,14 |
require_once('MotClePictoflora.php'); |
class SupprimerMotCle { |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
private $motCleId; |
public function __construct(Conteneur $conteneur = null) { |
32,10 → 31,9 |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
* Supprime un mot-clé si les objets fournis en paramètres sont valides |
* pour l'afficher. |
44,37 → 42,37 |
* */ |
public function supprimer($ressources, $parametres) { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
// Gestion des configuration du script |
$this->verifierConfiguration(); |
$insertion = $this->supprimerMotCle($this->motCleId); |
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
return $resultat; |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->parametres = $parametres; |
} |
/*------------------------------------------------------------------------------- |
CONFIGURATION DU SERVICE |
--------------------------------------------------------------------------------*/ |
--------------------------------------------------------------------------------*/ |
/** |
* Vérifier que le service est bien configuré |
* Vérifier que le service est bien configuré |
* */ |
public function verifierConfiguration() { |
$erreurs = array(); |
if (!isset($this->ressources[0])) { |
$erreurs[] = ' - impossible de supprimer un mot clé sans l\'identifiant associé ;'; |
} else if(!is_numeric($this->ressources[0])) { |
$erreurs[] = ' - l\'identifiant de mot clé doit être un entier ;'; |
} |
if (!empty($erreurs)) { |
$e = 'Erreur de configuration :'; |
$e = implode("\n", $erreurs); |
84,10 → 82,10 |
$this->motCleId = $this->ressources[0]; |
} |
} |
/*------------------------------------------------------------------------------- |
SUPPRESSION DES MOTS CLES |
--------------------------------------------------------------------------------*/ |
SUPPRESSION DES MOTS CLES |
--------------------------------------------------------------------------------*/ |
/** |
* Supprime un mot clé dans la table |
* @param $id_mot_cle string identifiant de mot clé |
/trunk/services/modules/0.1/protocoles/ListeProtocoles.php |
---|
19,7 → 19,6 |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
protected $bdd; |
private $parametres = array(); |
private $ressources = array(); |
29,8 → 28,7 |
$this->conteneur->chargerConfiguration('config_mapping_votes.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/Images.php |
---|
235,5 → 235,4 |
$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot)))); |
return $classeNom; |
} |
} |
?> |
} |
/trunk/services/modules/0.1/utilisateurs/Preferences.php |
---|
17,7 → 17,6 |
class Preferences { |
private $conteneur; |
private $gestionBdd; |
private $bdd; |
public function __construct(Conteneur $conteneur = null) { |
24,8 → 23,7 |
session_start(); |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_utilisateurs.ini'); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/images/VotesImage.php |
---|
21,7 → 21,6 |
private $conteneur; |
private $navigation; |
private $masque; |
protected $gestionBdd; |
protected $bdd; |
private $ressources; |
private $parametres; |
32,8 → 31,7 |
$this->conteneur->chargerConfiguration('config_mapping_votes.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
/trunk/services/modules/0.1/images/ListeImages.php |
---|
125,7 → 125,7 |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_images.ini'); |
$this->bdd = $conteneur->getGestionBdd()->getBdd(); |
$this->bdd = $conteneur->conteneur->getBdd(); |
} |
public function consulter($ressources, $parametres) { |
/trunk/services/modules/0.1/nomstaxons/ListeTaxons.php |
---|
16,25 → 16,23 |
*/ |
class ListeTaxons { |
private $conteneur; |
private $navigation; |
private $masque; |
private $gestionBdd; |
private $bdd; |
private $parametres = array(); |
private $ressources = array(); |
private $requete = null; |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_nomstaxons.ini'); |
$this->navigation = $conteneur->getNavigation(); |
$this->masque = $conteneur->getMasque(); |
$this->gestionBdd = $conteneur->getGestionBdd(); |
$this->bdd = $this->gestionBdd->getBdd(); |
$this->bdd = $this->conteneur->getBdd(); |
} |
/** |
* Méthode principale de la classe. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
42,7 → 40,7 |
* */ |
public function consulter($ressources, $parametres) { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
// Lancement du service |
$taxons = $this->chargerNoms($this->masque->getMasque('referentiel'), $this->masque->getMasque('nom')); |
$total = $this->compterNoms($taxons); |
49,18 → 47,18 |
$this->navigation->setTotal($total); |
$this->conteneur->setSansLimite(); |
$resultat = new ResultatService(); |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $taxons); |
return $resultat; |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
/*------------------------------------------------------------------------------- |
CHARGEMENT DES COMMENTAIRES |
CHARGEMENT DES COMMENTAIRES |
--------------------------------------------------------------------------------*/ |
/** |
* Chargement depuis le serveur de tous les noms |
77,7 → 75,7 |
} |
return $res_fmt; |
} |
/** |
* Compter le nombre total de noms pour affichage dans entete. |
* */ |
/trunk/services/modules/0.1/Determinations.php |
---|
4,14 → 4,17 |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package eflore-projets |
* |
* @category DEL |
* @package Services |
* @subpackage Determinations |
* @version 0.1 |
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org> |
* @author Delphine CAUQUIL <delphine@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 0.1 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class Determinations extends RestService { |