Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1665 → Rev 1666

/trunk/services/configurations/config_observations.ini
9,7 → 9,7
[observations]
; URL de base des services de ce projet
; url_service = "{ref:url_base}del/services/0.1/observations/"
url_service = "{ref:url_base}service:del:0.1/observations/"
url_service = "{ref:url_base}service:del:0.1/observations/"
url_images = "http://api.tela-botanica.org/img:%09dXL.jpg";
 
; +------------------------------------------------------------------------------------------------------+
21,13 → 21,12
[mapping_observation]
id_observation = "id_observation"
date_observation = "date_observation"
date_transmission = "date_transmission"
date_transmission = "date_transmission"
famille = "determination.famille"
nom_sel = "determination.ns"
nom_sel_nn = "determination.nn"
nt = "determination.nt"
nom_referentiel = "determination.referentiel"
courriel = "observateur"
ce_zone_geo = "id_zone_geo"
zone_geo = "zone_geo"
lieudit = "lieudit"
36,6 → 35,7
nom = "auteur.nom"
prenom = "auteur.prenom"
ce_utilisateur = "auteur.id"
courriel = "auteur.courriel"
mots_cles_texte = "mots_cles_texte"
dob_commentaire = commentaire
 
/trunk/services/bibliotheque/GestionUtilisateur.php
27,6 → 27,7
'mot_de_passe' => '',
'nom' => '',
'prenom' => '',
'admin' => '0',
'session_id' => session_id()
);
}
42,15 → 43,16
 
protected function utilisateurEstIdentifieCookie() {
$retour = null;
if (isset($_COOKIE["del_courriel"]) && isset($_COOKIE["del_mot_de_passe"])) {
$retour = $this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["del_courriel"], $_COOKIE["del_mot_de_passe"]);
 
if (isset($_COOKIE['del_courriel']) && isset($_COOKIE['del_mot_de_passe'])) {
$retour = $this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE['del_courriel'], $_COOKIE['del_mot_de_passe']);
}
return $retour;
}
 
protected function identifierUtilisateur($login, $motDePasse) {
$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM del_utilisateur AS du '.
$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
'FROM del_utilisateur AS du '.
' LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
'WHERE courriel = '.$this->bdd->proteger($login).' '.
'AND mot_de_passe = MD5('.$this->bdd->proteger($motDePasse).')';
$utilisateur = $this->bdd->recupererTous($requete);
58,7 → 60,9
}
 
protected function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe) {
$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM del_utilisateur AS du '.
$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
'FROM del_utilisateur AS du '.
' LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
'WHERE courriel = '.$this->bdd->proteger($login).' '.
'AND mot_de_passe = '.$this->bdd->proteger($mot_de_passe);
$utilisateur = $this->bdd->recuperer($requete);
65,12 → 69,11
return $utilisateur;
}
 
 
protected function setUtilisateur($utilisateur) {
$utilisateur['session_id'] = session_id();
$utilisateur['connecte'] = true;
$this->setPersistentCookie("del_courriel", $utilisateur['courriel'], 1);
$this->setPersistentCookie("del_mot_de_passe", $utilisateur['mot_de_passe'], 1);
$this->setPersistentCookie('del_courriel', $utilisateur['courriel'], 1);
$this->setPersistentCookie('del_mot_de_passe', $utilisateur['mot_de_passe'], 1);
return $utilisateur;
}
 
79,8 → 82,8
}
 
protected function oublierUtilisateur() {
setcookie("del_courriel", $_COOKIE['del_courriel'], time()-3600, '/');
setcookie("del_mot_de_passe", $_COOKIE['del_mot_de_passe'], time()-3600, '/');
setcookie('del_courriel', $_COOKIE['del_courriel'], time()-3600, '/');
setcookie('del_mot_de_passe', $_COOKIE['del_mot_de_passe'], time()-3600, '/');
unset($_COOKIE['del_courriel']);
unset($_COOKIE['del_mot_de_passe']);
}
/trunk/services/bibliotheque/ControleAcces.php
160,16 → 160,6
$courriel = $_COOKIE['del_courriel'];
$motDePasse = $_COOKIE['del_mot_de_passe'];
$utilisateur = $this->obtenirUtilisateurSansEncryptionMdp($courriel, $motDePasse);
 
if ($utilisateur == false) {
$message = "Vos login et/ou mot de passe ne sont pas corrects !\n";
$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
throw new Exception($message, $code);
}
} else {
$message = "Vous n'êtes pas identifié à DEL et/ou le cookie de DEL n'est pas accessible !\n";
$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
throw new Exception($message, $code);
}
return $utilisateur;
}
/trunk/services/modules/0.1/Images.php
53,7 → 53,7
}
 
public function modifier($ressources, $requeteDonnees) {
$this->methode = 'supprimer';
$this->methode = 'modifier';
$this->initialiserRessourcesEtParametres($ressources, $requeteDonnees);
return $this->executerService();
}
97,25 → 97,36
}
 
/**
* URLs possibles GET :
* URLs possibles :
*
* GET :
* http://localhost/del/services/0.1/images/ => toutes les images : classe ListeImages
* http://localhost/del/services/0.1/images/#id/votes => tous les votes d'une image classés par protocole : classe VotesImage
* http://localhost/del/services/0.1/images/#idImg/votes => tous les votes d'une image (#idImg) classés par protocole : classe VotesImage
*
* Non Implémenté : http://localhost/del/services/0.1/images/#id => une image donnée => en test pour remplacer les appels à eflore/cel
* Non Implémenté : http://localhost/del/services/0.1/images/#id/votes?protocole=#id => tous les votes d'une image et d'un protocole donné
*
* URLs possibles DELETE :
* http://localhost/del/services/0.1/images/#id => supprimer une image donnée
* PUT :
* http://localhost/del/services/0.1/images/#idImg => ajouter un vote sur une image donnée (#idImg)
*
* POST :
* http://localhost/del/services/0.1/images/#idImg => modifier un vote sur une image donnée (#idImg)
*
* DELETE :
* http://localhost/del/services/0.1/images/#idImg => supprimer une image donnée (#idImg)
* http://localhost/del/services/0.1/images/#idImg/votes/#idVote => supprimer un vote (#idVote) d'une image donnée (#idImg)
*/
private function analyserRessources() {
if ($this->methode == 'consulter' || $this->methode == 'modifier' || $this->methode == 'ajouter') {
$this->analyserRessoucerConsultation();
if ($this->methode == 'consulter') {
$this->analyserRessoucesConsultation();
} else if ($this->methode == 'modifier' || $this->methode == 'ajouter') {
$this->analyserRessoucesModification();
} else if ($this->methode == 'supprimer') {
$this->analyserRessoucerSuppression();
$this->analyserRessoucesSuppression();
}
}
 
private function analyserRessoucerConsultation() {
private function analyserRessoucesConsultation() {
if (count($this->ressources) == 0) {
$this->sousServiceNom = 'liste-images';
} else if (count($this->ressources) == 2) {
129,9 → 140,25
}
}
 
private function analyserRessoucerSuppression() {
private function analyserRessoucesModification() {
if (count($this->ressources) == 2) {
if ($this->etreRessourceIdentifiant(0) && $this->verifierRessourceValeur(1, 'votes')) {
$this->sousServiceNom = 'votes-image';
}
}
 
if ($this->sousServiceNom == null) {
$this->lancerMessageErreurRessource();
}
}
 
private function analyserRessoucesSuppression() {
if (count($this->ressources) == 1 && $this->etreRessourceIdentifiant(0)) {
$this->sousServiceNom = 'liste-images';
} else if (count($this->ressources) == 3) {
if ($this->etreRessourceIdentifiant(0) && $this->verifierRessourceValeur(1, 'votes') && $this->etreRessourceIdentifiant(2) ) {
$this->sousServiceNom = 'votes-image';
}
}
 
if ($this->sousServiceNom == null) {
183,6 → 210,10
$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);
} elseif ($this->methode == 'modifier') {
$retour = $service->modifier($this->ressources, $this->parametres);
} elseif ($this->methode == 'supprimer') {
$retour = $service->supprimer($this->ressources);
}
/trunk/services/modules/0.1/utilisateurs/Preferences.php
15,11 → 15,11
*/
 
class Preferences {
 
private $conteneur;
private $gestionBdd;
private $bdd;
 
public function __construct(Conteneur $conteneur = null) {
session_start();
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
27,7 → 27,7
$this->gestionBdd = $conteneur->getGestionBdd();
$this->bdd = $this->gestionBdd->getBdd();
}
 
/**
* Renvoie les préférences utilisateurs
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2)
34,7 → 34,6
* @param array $parametres les paramètres situés après le ? dans l'url
* */
public function consulter($ressources, $parametres) {
$id_utilisateur = $ressources[0];
$prefs = $this->obtenirPreferencesUtilisateur($id_utilisateur);
// Mettre en forme le résultat et l'envoyer pour affichage
42,27 → 41,12
$resultat->corps = $prefs;
return $resultat;
}
/**
* Méthode principale de la classe.
* Modifie les préférences utilisateurs
* @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 dans le post
* */
public function modifier($ressources, $parametres) {
$id_utilisateur = $ressources[0];
$prefs = $this->modifierPreferencesUtilisateur($id_utilisateur, $parametres);
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
$resultat->corps = $prefs;
return $resultat;
}
 
private function obtenirPreferencesUtilisateur($id_utilisateur) {
$requete = 'SELECT * FROM del_utilisateur_infos WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur);
$prefs_utilisateur = $this->bdd->recupererTous($requete);
if(empty($prefs_utilisateur)) {
 
if (empty($prefs_utilisateur)) {
$this->initialiserInfosUtilisateur($id_utilisateur);
$prefs_utilisateur = $this->renvoyerInfosUtilisateurDefaut($id_utilisateur);
} else {
70,43 → 54,56
$prefs_utilisateur['preferences'] = json_decode($prefs_utilisateur['preferences']);
$prefs_utilisateur['admin'] = $prefs_utilisateur['admin'];
}
 
return $prefs_utilisateur;
}
private function modifierPreferencesUtilisateur($id_utilisateur, $prefs) {
$requete = 'UPDATE del_utilisateur_infos '.
'SET preferences = '.$this->bdd->proteger(json_encode($prefs)).' '.
'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur);
$resultat = $this->bdd->requeter($requete);
return $resultat;
}
 
private function initialiserInfosUtilisateur($id_utilisateur) {
$preferences_defaut = $this->obtenirTableauPreferenceDefaut();
$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut));
$idUtilisateurP = $this->bdd->proteger($id_utilisateur);
$requete = 'INSERT INTO del_utilisateur_infos '.
'(id_utilisateur, admin, preferences, date_premiere_utilisation )'.
'VALUES '.
"(".$this->bdd->proteger($id_utilisateur).", 0, ".$this->bdd->proteger(json_encode($preferences_defaut)).", NOW()) ".
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';
'(id_utilisateur, admin, preferences, date_premiere_utilisation )'.
"VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ".
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';
 
$resultat = $this->bdd->requeter($requete);
return $resultat;
}
 
private function obtenirTableauPreferenceDefaut() {
return array('mail_notification_mes_obs' => '1', 'mail_notification_toutes_obs' => '0');
}
 
private function renvoyerInfosUtilisateurDefaut($id_utilisateur) {
return array('id_utilisateur' => $id_utilisateur,
'admin' => "0",
'preferences' => $this->obtenirTableauPreferenceDefaut(),
'date_premiere_utilisation' => date('Y-m-d H:i:s'));
return array('id_utilisateur' => $id_utilisateur,
'admin' => '0',
'preferences' => $this->obtenirTableauPreferenceDefaut(),
'date_premiere_utilisation' => date('Y-m-d H:i:s'));
}
private function obtenirTableauPreferenceDefaut() {
return array('mail_notification_mes_obs' => "1",
'mail_notification_toutes_obs' => "0");
 
/**
* Méthode principale de la classe.
* Modifie les préférences utilisateurs
* @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 dans le post
* */
public function modifier($ressources, $parametres) {
$id_utilisateur = $ressources[0];
$prefs = $this->modifierPreferencesUtilisateur($id_utilisateur, $parametres);
// Mettre en forme le résultat et l'envoyer pour affichage
$resultat = new ResultatService();
$resultat->corps = $prefs;
return $resultat;
}
 
private function modifierPreferencesUtilisateur($id_utilisateur, $prefs) {
$requete = 'UPDATE del_utilisateur_infos '.
'SET preferences = '.$this->bdd->proteger(json_encode($prefs)).' '.
'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur);
 
$resultat = $this->bdd->requeter($requete);
return $resultat;
}
}
?>
/trunk/services/modules/0.1/images/VotesImage.php
71,7 → 71,7
$this->proteger($parametres['protocole']).','.
$this->proteger($parametres['utilisateur']).','.
$this->proteger($parametres['valeur']).', '.
'NOW()'.
'NOW()'.
');';
 
$resultat = $this->bdd->requeter($insertion);
78,6 → 78,7
if ($resultat == false) {
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
} else {
// ATTENTION : idVote doit être récupéré avant toute nouvelle requete !
$idVote = $this->bdd->recupererIdDernierAjout();
 
self::updateStats($this->bdd, $ressources[0], $parametres['protocole']);
105,10 → 106,9
$resultat = $this->bdd->requeter($modification);
if ($resultat == false) {
throw new Exception($e, RestServeur::HTTP_CODE_ERREUR);
} else {
self::updateStats($this->bdd, $ressources[0],$parametres['protocole']);
RestServeur::envoyerEnteteStatutHttp(RestServeur::HTTP_CODE_OK);
}
self::updateStats($this->bdd, $ressources[0],$parametres['protocole']);
return 'ok';
}
 
public function supprimer($ressources) {
126,21 → 126,19
$controle_acces = $this->conteneur->getControleAcces();
$utilisateur = $controle_acces->getInfosUtilisateurConnecte();
 
if ($utilisateur['id_utilisateur'] != $infos_vote['ce_utilisateur'] &&
$controle_acces->getIdAnonymeTemporaire() != $infos_vote['ce_utilisateur']) {
throw new Exception("Vous n'êtes pas autorisé à supprimer ce vote",
RestServeur::HTTP_CODE_ACCES_NON_AUTORISE);
if (isset($utilisateur['id_utilisateur']) &&
$utilisateur['id_utilisateur'] != $infos_vote['ce_utilisateur'] &&
$controle_acces->getIdAnonymeTemporaire() != $infos_vote['ce_utilisateur']) {
$message = "Vous n'êtes pas autorisé à supprimer le vote : $id_vote";
throw new Exception($message, RestServeur::HTTP_CODE_ACCES_NON_AUTORISE);
}
 
$suppression = 'DELETE FROM del_image_vote '.
'WHERE id_vote = '.$id_vote_p;
 
$suppression = "DELETE FROM del_image_vote WHERE id_vote = $id_vote_p ";
$resultat = $this->bdd->requeter($suppression);
if ($resultat == false) {
throw new Exception("Impossible de supprimer le vote", RestServeur::HTTP_CODE_ERREUR);
} else {
self::updateStats($this->bdd, $ressources[0],$infos_vote['ce_protocole']);
}
self::updateStats($this->bdd, $ressources[0],$infos_vote['ce_protocole']);
}
 
// intermédiaire pour la méthode contenue dans "Commun"
/trunk/services/modules/0.1/images/ListeImages.php
113,7 → 113,8
"commentaire" => 1,
"ce_utilisateur" => "auteur.id",
"nom_utilisateur" => "auteur.nom",
"prenom_utilisateur" => "auteur.prenom",),
"prenom_utilisateur" => "auteur.prenom",
"courriel_utilisateur" => "auteur.courriel",),
'images' => array( // v_del_image
'id_image' => 1,
// l'alias suivant est particulier: in-fine il doit s'appeler mots_cles_texte
/trunk/services/modules/0.1/observations/Observation.php
30,7 → 30,7
'observations' => array( // v_del_image
"id_observation" => 1,
"date_observation" => 1,
"date_transmission" => 1,
"date_transmission" => 1,
"famille" => "determination.famille",
"nom_sel" => "determination.ns",
"nom_sel_nn" => "determination.nn",
107,11 → 107,11
"proposition_initiale" => 1),
);
 
 
private $conteneur;
private $gestionBdd;
private $bdd;
 
public function __construct(Conteneur $conteneur = null) {
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
$this->conteneur->chargerConfiguration('config_votes.ini');
120,10 → 120,10
$this->gestionBdd = $conteneur->getGestionBdd();
$this->bdd = $this->gestionBdd->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
148,7 → 148,7
 
// 1) récupération de l'observation (et de ses images (v_del_image est une vue utilisant des INNER JOIN))
$liaisons = self::chargerObservation($this->bdd, $idobs);
 
if(!$liaisons) {
header('HTTP/1.0 404 Not Found');
// don't die (phpunit)
184,8 → 184,8
// autre élément de post-processing: le ce_utilisateur de l'observation non-numeric...
if(!is_numeric($observation['auteur.id'])) $observation['auteur.id'] = "0";
if(!isset($observation['auteur.nom'])) $observation['auteur.nom'] = '[inconnu]';
 
 
if(isset($parametres['justthrow'])) return $observation;
 
// Mettre en forme le résultat et l'envoyer pour affichage
204,7 → 204,7
// champs de l'annuaire (del_utilisateur): id_utilisateur prenom, nom, courriel
$annuaire_fields = implode(', ', array("IFNULL(du.prenom, prenom_utilisateur) AS `auteur.prenom`",
"IFNULL(du.nom, nom_utilisateur) AS `auteur.nom`",
"IFNULL(du.courriel, courriel_utilisateur) AS observateur"));
"IFNULL(du.courriel, courriel_utilisateur) AS `auteur.courriel`"));
return $db->recupererTous(sprintf(
'SELECT %s, %s, %s FROM v_del_image as dob'.
' LEFT JOIN del_utilisateur du ON CAST(du.id_utilisateur AS CHAR) = CAST(dob.ce_utilisateur AS CHAR)'.
212,7 → 212,7
$obs_fields, $image_fields, $annuaire_fields, $idobs, __FILE__ . ':' . __LINE__));
}
 
 
// Charger les images et leurs votes associés
static function chargerVotesImage($db, $images, $protocole = NULL) {
if(!$images) return NULL;
219,11 → 219,11
 
$select = array('votes' =>
array('id_vote', 'ce_image', 'ce_protocole', 'ce_utilisateur', 'valeur', 'date', /* del_image_vote */),
'protocole' =>
'protocole' =>
array('id_protocole', 'intitule', 'descriptif', 'tag' /* del_image_protocole */ ));
$vote_fields = DelTk::sqlFieldsToAlias(self::$mappings['votes'], $select['votes'], 'v'); // "v": cf alias dans la requête
$proto_fields = DelTk::sqlFieldsToAlias(self::$mappings['protocoles'], $select['protocole'], 'p');
 
$where = array();
$idsImages = array_values(array_map(create_function('$a', 'return $a["id_image"];'), $images));
$where[] = sprintf('v.ce_image IN (%s)',
245,12 → 245,12
($where ? implode(' AND ', $where) : 1),
$ordreDesIdsRecus,
__FILE__ . ':' . __LINE__);
 
//echo "REQUETE: $req"; exit;
 
return $db->recupererTous($req);
}
 
/**
* Formater une observation depuis une ligne liaison
* @param $liaison liaison issue de la recherche
269,10 → 269,10
foreach ($votes as $vote) {
$imgid = $vote['image.id'];
$protoid = $vote['protocole.id'];
 
// un vote sans image associée ? est-ce possible ?
// if(!isset($images[$imgid])) continue;
 
if(!array_key_exists('protocoles_votes', $images[$imgid]) ||
!array_key_exists($protoid, $images[$imgid]['protocoles_votes'])) {
// extrait les champs spécifique au protocole (le LEFT JOIN de chargerVotesImage les ramène en doublons
/trunk/services/modules/0.1/observations/ListeObservations.php
44,7 → 44,7
'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 observateur',
'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'),
69,12 → 69,12
$obs_merged = array();
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]';
 
$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']);
90,51 → 90,51
* 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());
 
// toujours nécessaire puisque nous tapons sur v_del_image qui INNER JOIN cel_images, or nous voulons certes
// toutes les images, mais nous voulons $limite observations uniques.
$req['groupby'][] = 'vdi.id_observation';
 
$db = $this->bdd;
 
// filtrage de l'INPUT
$params = DelTk::requestFilterParams($parametres, DelTk::$parametres_autorises, $this->conteneur);
 
$params['masque.tag'] = DelTk::buildTagsAST(@$parametres['masque.tag'], 'OR', ',');
 
// ... et paramètres par défaut
$params = array_merge(DelTk::$default_params, $params);
 
// création des contraintes (masques)
DelTk::sqlAddConstraint($params, $db, $req);
self::sqlAddConstraint($params, $db, $req, $this->conteneur);
self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur);
 
// 1) grunt-work: *la* requête de récupération des id valides (+ SQL_CALC_FOUND_ROWS)
$idobs_tab = self::getIdObs($params, $req, $db);
// 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']);
 
// 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'));
 
// 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);
} else {
141,12 → 141,12
$observations = array();
$total = 0;
}
 
// 6) JSON output
$resultat = new ResultatService();
$resultat->corps = array('entete' => DelTk::makeJSONHeader($total, $params, Config::get('url_service')),
'resultats' => $observations);
 
return $resultat;
}
 
179,7 → 179,7
' %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',
 
373,7 → 373,7
$idComment = $proposition['id_commentaire'];
$comment = $this->formaterDetermination($idComment, $proposition);
if($comment) $observations['"' . $idObs . '"']['commentaires'][$idComment] = $comment;
 
}
}
 
390,7 → 390,7
// 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);
}
/trunk/services/modules/0.1/Utilisateurs.php
16,7 → 16,7
*/
class Utilisateurs extends RestService {
 
 
private $parametres = array();
private $ressources = array();
private $methode = null;
25,7 → 25,7
private $cheminCourant = null;
 
private $conteneur;
 
/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
protected $utilisationParametresBruts = true;
 
49,7 → 49,7
$corps = $reponseHttp->getCorps();
return $corps;
}
 
public function modifier($ressources, $parametres) {
$this->methode = 'modifier';
$resultat = '';
66,7 → 66,7
$corps = $reponseHttp->getCorps();
return $corps;
}
 
private function initialiserRessourcesEtParametres($ressources, $parametres) {
$this->ressources = $ressources;
$this->parametres = $parametres;
78,8 → 78,8
$retour = $this->initialiserService();
return $retour;
}
 
 
/*------------------------------------------------------------------------------------------------------------------
CONFIGURATION DU PROJET
------------------------------------------------------------------------------------------------------------------*/
98,9 → 98,9
CONFIGURATION DU SERVICE
------------------------------------------------------------------------------------------------------------------*/
private function initialiserService() {
 
$this->chargerNomService();
 
$classe = $this->obtenirNomClasseService($this->serviceNom);
$chemins = array();
$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php';
110,19 → 110,19
foreach ($chemins as $chemin) {
if (file_exists($chemin)) {
$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.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 == 'modifier') {
$retour = $service->modifier($this->ressources, $this->parametres);
$retour = $service->modifier($this->ressources, $this->parametres);
}
}
}
 
if (is_null($service)) {
$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
130,7 → 130,7
}
return $retour;
}
 
private function chargerNomService() {
//S'il n'y a pas de ressources => envoyer sur identification anonyme
if (!isset($this->ressources) || empty($this->ressources)) {
153,7 → 153,5
$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
return $classeNom;
}
 
 
}
?>