Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1410 | Rev 1441 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
990 isa 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Classe Mobile Wikini.
5
 *
6
 * @category	PHP 5.2
7
 * @package		eflore-consultation
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
10
 * @author		Isabelle NEMBROT <isabelle.nembrot@tela-botanica.org>
11
 * @copyright	2013 Tela-Botanica
12
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
13
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
14
 * @version		$Id$
15
 */
16
class Texte extends aControleur {
17
 
18
	private $conteneur = null;
19
	private $donnees = array();
20
	private $format = "text/html";
21
 
22
	public function __construct(Conteneur $conteneur) {
23
		$this->conteneur = $conteneur;
24
		$this->nomCourant = $this->conteneur->getNomCourant();
25
 
26
		parent::__construct();
27
	}
28
 
29
	public function getDonnees() {
30
		$url_wiki = $this->obtenirUrlWikini();
31
		$obj =  json_decode(file_get_contents($url_wiki));
32
 
1410 aurelien 33
		//echo '<pre>'.print_r($obj, true).'</pre>';exit;
34
 
990 isa 35
		$this->donnees['corps'] = $obj->{'texte'};
36
		if (strpos($this->format, "html") != false) {
37
			$this->obtenirCorpsHtml();
38
		} else {
39
			$this->obtenirCorpsPlain();
40
		}
41
 
42
		if ($this->donnees['corps'] != "") {
43
			$this->donnees['corps'] = preg_split('/===/', $this->donnees['corps'], -1, PREG_SPLIT_NO_EMPTY);
44
 
1410 aurelien 45
			$this->extraireInfosTableauCorps();
46
 
990 isa 47
			if (strpos($this->format, "html") != false) {
48
				$this->obtenirTitreHtml();
49
			} else {
50
				$this->obtenirTitrePlain();
51
			}
52
		}
53
 
54
		return $this->donnees;
55
	}
56
 
1410 aurelien 57
	private function extraireInfosTableauCorps() {
58
 
59
		$this->donnees['titre'] = array_shift($this->donnees['corps']);
60
		$this->donnees['sources'] = array_pop($this->donnees['corps']);
61
		// array_pop "gratuit" pour supprimer la case qui ne contient que le terme "sources"
62
		array_pop($this->donnees['corps']);
63
 
64
		$corps_fmt = array();
65
		// Le tableau contient un titre de section puis son contenu, puis le titre de la section suivante
66
		// puis son contenu on dépile les éléments deux par deux pour faire un tableau associatif pas trop relou à afficher
67
		for($i = 0; $i < count($this->donnees['corps']); $i = $i+2) {
68
				$corps_fmt[$this->donnees['corps'][$i]] = $this->donnees['corps'][$i + 1];
69
		}
70
 
71
		$this->donnees['corps'] = $corps_fmt;
72
	}
990 isa 73
 
1410 aurelien 74
 
990 isa 75
	//formater pour AppUrls ?
76
	public function obtenirUrlWikini() {
77
		$titre = urlencode("Fiche simplifiée Smart'flore");
1388 aurelien 78
		$base_url_wiki = Config::get('smartFloreWikiTpl');
79
		$url_wiki = $base_url_wiki
990 isa 80
			.strtoupper($this->conteneur->getParametre('referentiel'))."nt".$this->nomCourant->getNomSelectionne()->get('num_taxonomique')
81
			."?txt.format=".$this->format."&txt.section.titre=".$titre;
82
 
83
		return ($url_wiki);
84
	}
85
 
86
	private function obtenirCorpsHtml() {
87
		$a_remplacer = array('<h3>', '</h3>');
88
		$this->donnees['corps'] = str_replace($a_remplacer, "===", $this->donnees['corps']);
89
	}
90
 
91
	private function obtenirCorpsPlain() {
92
		$a_enlever = array(Chr(10).'=', '='.Chr(10), Chr(10).''.Chr(10));
93
		$this->donnees['corps'] = str_replace($a_enlever, '', $this->donnees['corps']);
94
		$this->donnees['corps'] = str_replace(Chr(10), '<br />', $this->donnees['corps']);
95
	}
96
 
97
	private function obtenirTitreHtml() {
98
		$a_remplacer = array('<b>', '</b>', '(<br />', '<br />)');
99
		$this->donnees['titre'] = str_replace($a_remplacer, '<br />', $this->donnees['titre']);
100
 
101
		$a_enlever = array(Chr(10).'<br />', '<br />'.Chr(10), Chr(10).''.Chr(10), '<br />'.Chr(10).'<br />'.Chr(10));
102
		$this->donnees['titre'] = str_replace($a_enlever, '', $this->donnees['titre']);
103
 
104
		$this->separer_NomCommun_NomSci();
105
	}
106
 
107
	private function separer_NomCommun_NomSci() {
108
		$this->donnees['titre'] = str_replace('<br />', '::', $this->donnees['titre']);
109
		$this->donnees['titre'] = preg_split("/::/", $this->donnees['titre'], -1, PREG_SPLIT_NO_EMPTY);
1163 raphael 110
		$this->donnees['nom-commun'] = $this->donnees['titre'][0]; // sauf erreur ? parser le wikini serait peut-être plus adapté
990 isa 111
	}
112
 
113
	private function obtenirTitrePlain() {
114
		$this->donnees['titre'] = str_replace('**', '<br />', $this->donnees['titre']);
115
 
116
		$a_remplacer = array('(<br />', '<br />)', '<br /><br />');
117
		$this->donnees['titre'] = str_replace($a_remplacer, '<br />', $this->donnees['titre']);
118
 
119
		$this->separer_NomCommun_NomSci();
120
		$this->separer_NomSci_NomAuteur();
121
	}
122
 
123
	private function separer_NomSci_NomAuteur() {
124
		$nom_sci = str_replace('//', '::', $this->donnees['titre'][1]);
125
		$nom_sci = preg_split("/::/", $nom_sci, -1, PREG_SPLIT_NO_EMPTY);
126
		$this->donnees['titre'][1] = "<i>".$nom_sci[0]."</i> ".$nom_sci[1];
127
	}
128
}
129
?>