Rev 979 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass 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);// Trop de courriels dans l'url fait planter la requete// à cause des limites de taille d'url// (150 semble être un bon compromis)$courriels_spl = array_chunk($courriels, 150);$utilisateursInfos = array();foreach($courriels_spl as $courriels_st) {$utilisateursInfosSt = json_decode($this->clientRest->consulter(sprintf(self::TPL_URL_WS_ANNUAIRE,implode(',', $courriels_st))), true);$utilisateursInfos = array_merge($utilisateursInfos, $utilisateursInfosSt);}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);}}?>