Rev 880 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass OntologiesListeGenerique {private $parametres = null;private $ressources = null;private $ontologieDao = null;private $ontologieFormateur = null;private $listeUrl = null;private $nbreTotalTermes = 0;private $termes = array();public function __construct(Ressources $ressources, Parametres $parametres, OntologieDAO $ontologieDao, OntologieFormateur $ontologieFormateur) {$this->ressources = $ressources;$this->parametres = $parametres;$this->ontologieDao = $ontologieDao;$this->ontologieFormateur = $ontologieFormateur;}public function setListeUrl($url) {$this->listeUrl = $url;}public function consulter() {$this->rechercher();if ($this->avoirResultats()) {$this->trierResultats();$retour = $this->construireTableauRetour();} else {$message = "Aucun résultat ne correspond a votre requête !";$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;throw new Exception($message, $code);}return $retour;}private function rechercher() {$resultats = array();$resultats = $this->ontologieDao->rechercher();$this->termes = $resultats;$this->nbreTotalTermes = $this->ontologieDao->recupererNombreTermesTotal();}private function avoirResultats() {$resultat = ($this->nbreTotalTermes == 0) ? false : true;return $resultat;}private function trierResultats() {$recherche = $this->parametres->get('recherche');if ($recherche == 'floue') {$this->termes = $this->ontologieDao->trierResultatsFloue($this->termes);}}private function construireTableauRetour() {$retour = array('entete' => array(), 'resultats' => array());$retour['resultats'] = $this->construireResultats();$retour['entete'] = $this->construireEntete();return $retour;}private function construireResultats() {$nomsFormates = array();foreach ($this->termes as $terme) {$id = $terme['id_terme'];$termesFormates[$id] = $this->formaterTerme($terme);}return $termesFormates;}private function formaterTerme($infos) {$termeAFormater = new OntologieDO($infos);$this->ontologieFormateur->setTermeAFormater($termeAFormater);$this->ontologieFormateur->setChampsRetour($this->parametres->getListe('retour.champs'));$terme = $this->ontologieFormateur->formaterListe();return $terme;}private function construireEntete() {$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);$entete['masque'] = $this->formaterEnteteMasque();$entete['depart'] = (int) $this->parametres->get('navigation.depart');$entete['limite'] = (int) $this->parametres->get('navigation.limite');$entete['total'] = $this->nbreTotalTermes;if ($hrefPrecedent = $this->formaterEnteteHrefPrecedent()) {$entete['href.precedent'] = $hrefPrecedent;}if ($hrefSuivant = $this->formaterEnteteHrefSuivant()) {$entete['href.suivant'] = $hrefSuivant;}return $entete;}private function formaterEnteteMasque() {$masquesStrictes = array('code');$paramsMasque = array('' => 'terme','code' => 'id_terme','nom' => 'terme','description' => 'definition');$etendre = ($this->parametres->get('recherche') == 'etendue') ? true : false;$masqueComplet = array();foreach ($paramsMasque as $masqueType => $champ) {$masqueParam = 'masque'.($masqueType != '' ? '.'.$masqueType : $masqueType);if ($this->parametres->exister($masqueParam)) {$masqueValeur = $this->parametres->get($masqueParam);$masque = "$champ=$masqueValeur";$masque .= ($etendre && in_array($masqueType, $masquesStrictes) === false) ? '%' : '';$masqueComplet[] = $masque;}}return implode('&', $masqueComplet);}private function formaterEnteteHrefPrecedent() {$limite = $this->parametres->get('navigation.limite');$departActuel = $this->parametres->get('navigation.depart');$departPrecedent = $departActuel - $limite;$href = null;if ($departPrecedent >= 0) {$squelette = $this->construireTplHrefNavigation();$href = sprintf($squelette, $departPrecedent, $limite);}return $href;}private function formaterEnteteHrefSuivant() {$limite = $this->parametres->get('navigation.limite');$departActuel = $this->parametres->get('navigation.depart');$departSuivant = $departActuel + $limite;$href = null;if ($departSuivant < $this->nbreTotalTermes) {$squelette = $this->construireTplHrefNavigation();$href = sprintf($squelette, $departSuivant, $limite);}return $href;}private function construireTplHrefNavigation() {$requetes = array();$this->parametres->rewind();while (is_null($parametre = $this->parametres->key()) === false) {if (strpos($parametre, 'navigation') === false) {$valeur = $this->parametres->current();$requetes[] = "$parametre=$valeur";}$this->parametres->next();}$requetes[] = "navigation.depart=%s";$requetes[] = "navigation.limite=%s";$tpl = $this->listeUrl.'?'.implode('&', $requetes);return $tpl;}}