/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 |