/trunk/bibliotheque/AppUrls.php |
---|
New file |
0,0 → 1,128 |
<?php |
class AppUrls { |
private $urlBase = null; |
private $urlCourante = null; |
private $urlRedirection = null; |
public function __construct(Url $urlBase = null) { |
$this->urlBase = (is_null($urlBase)) ? Registre::get('eFlore.urlBase') : $urlBase; |
} |
public function obtenirUrlBase() { |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function redirigerVers($url) { |
$url = str_replace('&', '&', $url); |
header("Location: $url"); |
} |
public function getParametresUrlListe() { |
$parametres = array( |
'referentiel' => Registre::get('parametres.referentiel'), |
'module' => 'liste', |
'action' => 'liste', |
'rang' => $this->rang, |
'lettre' => $this->lettre |
); |
return $parametres; |
} |
public function obtenirUrlListeFamille() { |
$parametres = $this->getParametresUrlListe(); |
$parametres['rang'] = 'F'; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function obtenirUrlListeGenre() { |
$parametres = $this->getParametresUrlListe(); |
$parametres['rang'] = 'G'; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function getParametresUrlRecherche() { |
$parametres = array( |
'referentiel' => Registre::get('parametres.referentiel'), |
'module' => 'recherche', |
'action' => 'rechercheSimple', |
'submit' => 'Rechercher' |
); |
return $parametres; |
} |
public function obtenirUrlRechercheSimple($nom = null, $type = 'nom_scientifique') { |
$parametres = $this->getParametresUrlRecherche(); |
$parametres['type_nom'] = $type; |
$parametres['nom'] = $nom; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function getParametresUrlResultat() { |
$parametres = array( |
'referentiel' => Registre::get('parametres.referentiel'), |
'module' => 'recherche', |
'action' => Registre::get('parametres.action'), |
'submit' => 'Rechercher', |
'type_nom' => isset($_GET['type_nom']) ? $_GET['type_nom'] : 'nom_scientifique', |
'nom' => isset($_GET['nom']) ? $_GET['nom'] : '' |
); |
return $parametres; |
} |
public function obtenirUrlResultatDetermination() { |
$parametres = $this->getParametresUrlResultat(); |
$parametres['resultat'] = 'determination'; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function obtenirUrlResultatAlphab() { |
$parametres = $this->getParametresUrlResultat(); |
$parametres['resultat'] = 'alphab'; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function obtenirUrlResultatRetenu() { |
$parametres = $this->getParametresUrlResultat(); |
$parametres['resultat'] = 'retenu'; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function obtenirUrlResultatDecompo() { |
$parametres = $this->getParametresUrlResultat(); |
$parametres['resultat'] = 'decompo'; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
public function getParametresUrlFiche() { |
$parametres = array( |
'referentiel' => Registre::get('parametres.referentiel'), |
'module' => 'fiche', |
'action' => 'fiche' |
); |
return $parametres; |
} |
public function obtenirUrlFiche($numNom) { |
$parametres = $this->getParametresUrlFiche(); |
$parametres['nn'] = $numNom; |
$this->urlBase->setRequete($parametres); |
$url = $this->urlBase->getURL(); |
return $url; |
} |
} |
?> |
/trunk/bibliotheque/Trieur.php |
---|
New file |
0,0 → 1,97 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe fournissant des méthodes de trie de tableaux (Array). |
* |
* @category PHP 5.2 |
* @package eFlore/Bibliotheque |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
// TODO : réaliser une seule méthode pour trierMD et trierMDType |
class Trieur { |
const TRI_NATUREL = 'nat'; |
const TRI_CASSE_SENSIBLE = 'ci'; |
const TRI_CASSE_INSENSIBLE = 'ci'; |
private $manipulateurDeChaine = null; |
private $tableau = array(); |
private $champsEtOrdres = array(); |
private $triType = self::TRI_NATUREL; |
public function __construct(Array $tableau = null, ChaineManipulateur $manipulateurDeChaine = null) { |
if (is_array($tableau)) { |
$this->setTableau($tableau); |
} |
$this->manipulateurDeChaine = is_null($tableau) ? new ChaineManipulateur() : $manipulateurDeChaine; |
} |
public function setTableau($tableau) { |
$this->tableau = $tableau; |
} |
/** |
* Fournir un tableau contenant en clé les noms des champs et en valeur l'ordre de tri. Exemple : |
* array('ma_cle1' => SORT_ASC, 'ma_cle2' => SORT_DESC), $type_de_tri); |
* Utiliser les constantes php SORT_DESC ou SORT_ASC pour l'odre de tri. |
* @param array en clé les noms des champs et en valeur l'ordre de tri. |
*/ |
public function setChampsEtOrdres($champsEtOrdres) { |
$this->champsEtOrdres = $champsEtOrdres; |
} |
/** |
* Pour le type de tri : utiliser : |
* - Trieur::TRI_NATUREL pour un trie naturel, |
* - Tableau::TRI_CASSE_SENSIBLE pour un tri sensible à la casse, |
* - Tableau::TRI_CASSE_INSENSIBLE pour un tri insensible à la casse. |
* @param string le type de tri à appliquer. |
*/ |
public function setTriType($type) { |
$this->triType = $type; |
} |
/** |
* Méthode réalisant un tri d'un tableau multidimension. Attention les clés du tableau ne sont pas modifiées. |
* A utiliser de cette façon: |
* EfloreTriage::trieMultiple( $tableau_multidimension, array('ma_cle1' => SORT_ASC, 'ma_cle2' => SORT_DESC), $type_de_tri); |
* Utiliser les constantes php SORT_DESC ou SORT_ASC pour l'odre de tri. |
* @param array le tableau à trier |
* @param array le talbeau des colonnes à trier constituer de nom de clé en clé et d'ordres de tri en valeur. |
* @param string le type de tri à appliquer. |
* @return array le tableau trié. |
*/ |
public function trier() { |
uasort($this->tableau, array($this, 'comparer')); |
return $this->tableau; |
} |
public function comparer($a, $b) { |
$resultat = 0; |
foreach ($this->champsEtOrdres as $champ => $ordre) { |
if ($resultat == 0) { |
$mot_01 = $this->manipulateurDeChaine->supprimerAccents($b[$champ]); |
$mot_02 = $this->manipulateurDeChaine->supprimerAccents($a[$champ]); |
switch ($this->triType) { |
case self::TRI_NATUREL : |
$resultat = ($ordre == SORT_DESC) ? strnatcmp($mot_01, $mot_02) : strnatcmp($mot_02, $mot_01); |
break; |
case self::TRI_CASSE_SENSIBLE : |
$resultat = ($ordre == SORT_DESC) ? strcmp($mot_01, $mot_02) : strcmp($mot_02, $mot_01); |
break; |
case self::TRI_CASSE_INSENSIBLE : |
$resultat = ($ordre == SORT_DESC) ? strcasecmp($mot_01, $mot_02) : strcasecmp($mot_02, $mot_01); |
break; |
default: |
$resultat = ($ordre == SORT_DESC) ? strcasecmp($mot_01, $mot_02) : strcasecmp($mot_02, $mot_01); |
break; |
} |
} |
} |
return $resultat; |
} |
} |
?> |
/trunk/bibliotheque/ChaineManipulateur.php |
---|
New file |
0,0 → 1,76 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe fournissant des méthodes statiques de manipulation des chaînes de caractères (String). |
* |
* @category PHP 5.2 |
* @package eFlore/Bibliotheque |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
class ChaineManipulateur { |
private $encodage = 'UTF-8'; |
private $caracteresAccentues = array( |
'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', |
'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', |
'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', |
'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', |
'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', |
'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', |
'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', |
'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', |
'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', |
'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', |
'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', |
'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', |
'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', |
'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ'); |
private $caracteresNormaux = array( |
'A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', |
'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', |
'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', |
'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', |
'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', |
'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', |
'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', |
'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', |
'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', |
'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', |
'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', |
'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', |
'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o'); |
public function __construct($encodage = null) { |
if (is_string($encodage)) { |
$this->setEncodage($encodage); |
} |
} |
public function setEncodage($encodage) { |
$this->encodage = $encodage; |
} |
/** |
* Supprime ou remplace les accents d'une chaine en PHP. |
* La solution retenu, provenant du site |
* {@link http://www.lecoindunet.com/zone_php/scripts_utiles/remplacer-les-caracteres-accentues-dune-chaine-en-php-72 lecoindunet.com}, |
* consiste en deux tableaux (caractères avec et sans accents) car cela permetra éventuellement |
* de fournir des méthodes pour récupérer ces tableaux pour d'autres traitements. |
* Une autre solution aurait été d'utiliser les entités HTML comme proposé par le site |
* {@link http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html weirdog.com}. |
* |
* @param String $chaine la chaine de caractères dans laquelle supprimer les accents. |
* @param String $encodage le code d'encodage de la chaine si ce n'est pas de l'UTF-8. |
* @return la chaine de caractères sans accent. |
*/ |
public function supprimerAccents($chaine) { |
if ($this->encodage != 'UTF-8') { |
mb_convert_variables($encodage, 'UTF-8', $this->caracteresAccentues, $this->caracteresNormaux); |
} |
return str_replace($this->caracteresAccentues, $this->caracteresNormaux, $chaine); |
} |
} |
?> |
/trunk/bibliotheque/TableauManipulateur.php |
---|
New file |
0,0 → 1,58 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe fournissant des méthodes de manipulation de tableau (Array). |
* |
* @category PHP 5.2 |
* @package eFlore/Bibliotheque |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
class TableauManipulateur { |
private $tableau = array(); |
public function __construct(Array $tableau = null) { |
if (is_array($tableau)) { |
$this->setTableau($tableau); |
} |
} |
public function setTableau(Array $tableau) { |
$this->tableau = $tableau; |
} |
public function getTableau() { |
return $this->tableau; |
} |
/** |
* Etend le tableau principal avec les données du tableau à copier. Si des clés sont identiques entre les deux tableaux |
* une excetion est déclenchée et la valeur du tableau à étendre est gardée. Si les deux tableaux ont des clés numériques |
* leurs valeurs sont gardées (à la différence de array_merge). |
* Le tableau à copier est passé par copie et il est progressivement détruit pour éviter la consomation |
* de mémoire. |
* |
* @param array $tableau_a_copier |
* @return void |
*/ |
public function etendreAvec(Array $tableau_a_copier) { |
$cles_existantes = null; |
foreach ($tableau_a_copier as $cle => $val) { |
if (array_key_exists($cle, $this->tableau) == false) { |
$this->tableau[$cle] = $val; |
unset($tableau_a_copier[$cle]); |
} else { |
$cles_existantes[] = $cle; |
} |
} |
if (is_array($cles_existantes)) { |
$message = "Le tableau a étendre contenait déjà les clés suivantes : ".implode(', ', $cles_existantes); |
throw new Exception($message); |
} |
} |
} |
?> |