Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 1117 → Rev 1118

/tags/v5.9-aulnaie/services/bibliotheque/Utilisateurs.php
New file
0,0 → 1,105
<?php
class Utilisateurs {
const TPL_URL_WS_ANNUAIRE = 'http://www.tela-botanica.org/service:annuaire:utilisateur/identite-par-courriel/%s';
 
private $courriels = array();
private $identites = array();
private $clientRest = null;
 
/**
* Prend en paramêtre un tableau de courriels.
*
* @param array $courriels un tableau de courriels pour lesquels il faut rechercher les infos d'identité
*/
public function __construct(Array $courriels = array(), RestClient $clientRest = null) {
$this->courriels = $courriels;
$this->clientRest = is_null($clientRest) ? new RestClient() : $clientRest;
}
 
public function setCourriels($courriels) {
$this->courriels = $courriels;
}
/**
* Lance l'interrogation du service de l'annuaire.
*
* @return null.
*/
public function chargerIdentites() {
$this->identites = $this->getIdentites($this->courriels);
}
 
/**
* Retourne après avoir interrogé un service de l'annuaire, les intitulés correspondant aux
* courriels des utilisateurs.
*
* @return mixed tableau avec en clé le courriel et en valeur l'intitulé de la personne à
* afficher, false en cas d'erreur ou de résultat vide.
*/
public function getIntitules() {
$this->chargerIdentites();
if (! $this->identites) return false;
 
$intitules = array();
foreach ($this->identites as $courriel => $infos) {
$intitules[$courriel] = $infos['intitule'];
}
return $intitules;
}
 
/**
* Retourne un intitulé en fonction d'un courriel.
*
* @return String l'intitulé de l'utilisateur ou une chaine vide en cas de problème.
*/
public function getIntitule($courriel) {
if ($this->contenirCourriel($courriel)) {
return $this->identites[$courriel]['intitule'];
}
return '';
}
 
/**
* Retourne l'identifiant de l'utilisateur en fonction d'un courriel.
*
* @return String l'id de l'utilisateur ou une chaine vide en cas de problème.
*/
public function getId($courriel) {
if ($this->contenirCourriel($courriel)) {
return $this->identites[$courriel]['id'];
}
return '';
}
 
private function contenirCourriel($courriel) {
return ($this->identites && isset($this->identites[$courriel])) ? true : false;
}
 
private function getIdentites($courriels) {
// consulterServiceAnnuaire
$courriels = array_unique($courriels);
$utilisateursInfos = json_decode($this->clientRest->consulter(sprintf(self::TPL_URL_WS_ANNUAIRE,
implode(',', $courriels))),
true);
return self::extraireIdentites($utilisateursInfos, $this->courriels);
}
 
static function extraireIdentites($utilisateursInfos, $courriels) {
$identites = array();
foreach ($courriels as $courriel) {
$info = array('id' => null, 'intitule' => '');
if (isset($utilisateursInfos[$courriel])) {
$info['intitule'] = $utilisateursInfos[$courriel]['intitule'];
$info['id'] = $utilisateursInfos[$courriel]['id'];
} else {
$info['intitule'] = self::tronquerCourriel($courriel);
}
$identites[$courriel] = $info;
}
return $identites;
}
 
static function tronquerCourriel($courriel) {
return str_replace(substr($courriel, strpos($courriel, '@')), '@...', $courriel);
}
}
?>