Subversion Repositories Applications.annuaire

Compare Revisions

No changes between revisions

Ignore whitespace Rev 521 → Rev 522

/branches/v1.3-balance/jrest/bibliotheque/JRestService.php
24,6 → 24,9
protected $start = 0;
protected $limit = 150;
 
/** pour l'envoi de XML : éventuelle balise dans laquelle placer tout le contenu */
protected $baliseMaitresse;
 
public function __construct($config, $demarrer_session = true) {
// Tableau contenant la config de Jrest
$this->config = $config;
61,6 → 64,39
$this->envoyer($contenu, 'application/json', $encodage, false);
}
 
/** à l'arrache pour rétrocompatibilité avec le service "annuaire_tela" de eFlore_chatin */
protected function envoyerXml($donnees, $encodage = 'utf-8') {
$xml = '<?xml version="1.0" encoding="' . strtoupper($encodage) . '"?>';
if ($this->baliseMaitresse) {
$xml .= '<' . $this->baliseMaitresse . '>';
}
$xml .= $this->genererXmlAPartirDeTableau($donnees);
if ($this->baliseMaitresse) {
$xml .= '</' . $this->baliseMaitresse . '>';
}
$this->envoyer($xml, 'application/xml', $encodage, false);
}
 
/**
* Génère un XML minimaliste à partir d'un tableau associatif
* Note : gère mal les indices numériques
* @TODO utiliser une vraie lib
*/
protected function genererXmlAPartirDeTableau($tableau) {
$xml = '';
foreach ($tableau as $balise => $donnee) {
$xml .= '<' . $balise . '>';
if (is_array($donnee)) {
// récurer, balayer, que ce soit toujours pimpant
$xml .= $this->genererXmlAPartirDeTableau($donnee);
} else {
$xml .= $donnee;
}
$xml .= '</' . $balise . '>';
}
return $xml;
}
 
protected function envoyerJsonVar($variable, $donnees = null, $encodage = 'utf-8') {
$contenu = "var $variable = ".json_encode($donnees);
$this->envoyer($contenu, 'text/html', $encodage, false);
347,6 → 383,28
return $identifie;
}
 
/**
* Envoie une demande d'authentification HTTP puis compare le couple
* login / mot de passe envoyé par l'utilisateur, à ceux définis dans
* la config (section database_ident).
* En cas d'erreur, sort du programme avec un entête HTTP 401
* @TODO redondant avec les trucs du dessus :'(
*/
protected function authentificationHttpSimple() {
$autorise = true;
// contrôle d'accès
$nomUtil = $_SERVER['PHP_AUTH_USER'];
$mdp = $_SERVER['PHP_AUTH_PW'];
$autorise = (($nomUtil == $this->config['database_ident']['username']) && ($mdp == $this->config['database_ident']['password']));
// entêtes HTTP
if (! $autorise) {
header('WWW-Authenticate: Basic realm="Annuaire de Tela Botanica"');
header('HTTP/1.0 401 Unauthorized');
echo 'Veuillez vous authentifier pour utiliser ce service';
exit;
}
}
 
protected function creerCookiePersistant($duree = null, $id = null, $mdp = null) {
$id = is_null($id) ? $_SERVER['PHP_AUTH_USER'] : $id;
$mdp = is_null($mdp) ? $_SERVER['PHP_AUTH_PW'] : $mdp;
/branches/v1.3-balance/jrest/services/Utilisateur.php
23,6 → 23,10
private $annuaireModele = null;
private $messagerieModele = null;
 
const FORMAT_JSON = "json";
const FORMAT_XML = "xml";
const FORMAT_LDEHYDE = "méthanal"; // hihi hoho
 
/*+----------------------------------------------------------------------------------------------------+*/
// GET : consultation
 
47,11 → 51,28
}
}
} else {
$this->messages[] = "Le premier paramêtre du chemin du service doit correspondre au type de ressource demandée.";
$this->messages[] = "Le premier paramètre du chemin du service doit correspondre au type de ressource demandée.";
}
 
// possibilité d'envoyer en plusieurs formats @TODO faire ça plus proprement
$format = self::FORMAT_JSON;
$dernierIndex = count($this->ressources) - 1;
if ($dernierIndex >= 0) {
$dernierParametre = $this->ressources[$dernierIndex];
if (in_array($dernierParametre, array(self::FORMAT_JSON, self::FORMAT_XML))) {
$format = $dernierParametre;
}
}
 
if (!is_null($infos)) {
$this->envoyerJson($infos);
switch ($format) {
case self::FORMAT_XML :
$this->envoyerXml($infos);
break;
case self::FORMAT_JSON :
default :
$this->envoyerJson($infos);
}
} else {
$info = 'Un problème est survenu : '.print_r($this->messages, true);
$this->envoyerTxt($info);
58,11 → 79,10
}
}
 
 
/**
* Permet d'obtenir des infos pour un id utilisateur indiqué dans la ressource.
* RESSOURCE : /utilisateur/#id
* PARAMÊTRES : aucun
* PARAMÈTRES : aucun
* RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
* - id : identifiant numérique de l'utilisateur
* - pseudoUtilise : indique si on doit utiliser le pseudo à la place de Prénom NOM
85,7 → 105,7
/**
* Permet d'obtenir les prénoms et noms des courriels des utilisateurs indiqués dans la ressource.
* RESSOURCE : /utilisateur/prenom-nom-par-courriel/[courriel,courriel,...]
* PARAMÊTRES : aucun
* PARAMÈTRES : aucun
* RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
* - id : identifiant numérique de l'utilisateur
* - prenom : prénom
94,11 → 114,6
public function getPrenomNomParCourriel() {
$courriels = explode(',', $this->ressources[0]);
$infos = $this->getAnnuaire()->obtenirPrenomNomParCourriel($this->idAnnuaire, $courriels);
$infous_courriel_minuscule = array();
foreach ($infos as $courriel => $utilisateur) {
$courriel = strtolower($courriel);
$infous_courriel_minuscule[$courriel] = $utilisateur;
}
return $infos;
}
 
105,7 → 120,7
/**
* Permet d'obtenir les identités des utilisateurs indiqués dans la ressource.
* RESSOURCE : /utilisateur/identite-par-courriel/[courriel,courriel,...]
* PARAMÊTRES : aucun
* PARAMÈTRES : aucun
* RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
* - id : identifiant numérique de l'utilisateur
* - pseudoUtilise : indique si on doit utiliser le pseudo à la place de Prénom NOM
127,6 → 142,49
return $infos_utilisateurs;
}
 
/**
* Même principe que getIdentiteParCourriel() mais pour un seul courriel, et renvoie plus d'infos :
* RESSOURCE : /utilisateur/identite-complete-par-courriel/courriel[/format]
* PARAMÈTRES : format : "json" (par défaut) ou "xml" (pour
* rétrocompatibilité avec le service eFlore_chatin/annuaire_tela/xxx/courriel)
* RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
* - id : identifiant numérique de l'utilisateur
* - pseudoUtilise : indique si on doit utiliser le pseudo à la place de Prénom NOM
* - pseudo : pseudo de l'utilisateur.
* - prenom : prénom
* - nom : nom de famille.
* - mot_de_passe : le mot de passe haché (15% de matières grasses, peut contenir des traces de soja)
* - fonction
* - titre
* - site_web
* - adresse01
* - adresse02
* - code_postal
* - ville
* - departement
* - region
* - pays
* - date_inscription
*/
public function getIdentiteCompleteParCourriel() {
 
$this->authentificationHttpSimple();
 
$infos_utilisateurs = array();
$courriel = $this->ressources[0];
$utilisateur = $this->getAnnuaire()->obtenirMaximumInfosParCourriel($this->idAnnuaire, $courriel);
 
$id = $utilisateur['id'];
$utilisateur['pseudo'] = $this->obtenirPseudo($id);
$utilisateur['pseudoUtilise'] = $this->obtenirPseudoUtilise($id);
$utilisateur['intitule'] = $this->formaterIntitule($utilisateur);
 
// ouksépabo
$this->baliseMaitresse = "personne";
 
return $utilisateur;
}
 
private function getAnnuaire() {
if (!isset($this->annuaireModele)) {
$this->annuaireModele = new AnnuaireModele();
/branches/v1.3-balance/modeles/AnnuaireModele.php
3,6 → 3,8
/**
* Modèle d'accès à la base de données des listes
* d'ontologies
*
* @TODO factoriser les 40 000 fonctions qui diffèrent d'un poil de Q
*
* @package Framework
* @category Class
724,6 → 726,62
}
 
/**
* Renvoie toutes les infos disponibles associées à l'adresse email fournie, dans un annuaire donné
* @param int $id_annuaire l'identifiant de l'annuaire
* @param array $courriels un (et un seul pour l'instant) courriel
* @return array un tableau associatif contenant les infos
*/
public function obtenirMaximumInfosParCourriel($id_annuaire, $courriel) {
$requete = 'SELECT * '.
'FROM annu_annuaire '.
'WHERE aa_id_annuaire = '.$id_annuaire.' ';
 
$annuaire = $this->requeteUn($requete);
if (!$annuaire) {
return false;
}
 
$mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
$mappage = $mappage[0];
 
$courriel = $this->proteger($courriel);
$requete = 'SELECT *'
. ' FROM ' . $annuaire['aa_bdd'] . '.' . $annuaire['aa_table']
. ' WHERE ' . $mappage['champ_mail'] . " = $courriel";
$resultat = $this->requeteUn($requete);
 
if (!$resultat) {
return false;
}
$infos = array();
foreach (array_keys($mappage) as $cle) {
// j'ai honte d'écrire un truc pareil
$infos[substr($cle, 6)] = $resultat[$mappage[$cle]];
}
// pour certains champs (fonction par ex.) il n'y a pas de mappage
// dans annu_triples : comment qu'on fait ? Ben on fait une dégueulasserie !
$mappagesALArrache = array(
"fonction" => "U_FONCTION",
"titre" => "U_TITLE",
"site_web" => "U_WEB",
"region" => "U_STATE"
);
foreach ($mappagesALArrache as $k => $v) {
$infos[$k] = (empty($resultat[$v]) ? '' : $resultat[$v]);
}
// les mappages ne correspondent pas à l'héritage de eFlore chatin, comment
// qu'on fait ? Quelle est la norme ? Ben on fait des trucs cracra redondants
// pour assurer la rétrocompatibilité !
$infos['adresse01'] = $infos['adresse'];
$infos['adresse02'] = $infos['adresse_comp'];
$infos['courriel'] = $infos['mail'];
$infos['mot_de_passe'] = $infos['pass'];
return $infos;
}
 
/**
* Renvoie les infos pour un utilisateur et un annuaire donné
* @param int $id_annuaire l'identifiant de l'annuaire
* @param array $id identifiant d'utilisateur
/branches/v1.3-balance/.
Property changes:
Modified: svn:mergeinfo
Merged /trunk:r519-521