Subversion Repositories eFlore/Applications.eflore-consultation

Compare Revisions

Ignore whitespace Rev 1393 → Rev 1394

/tags/v5.9-van-tieghem/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);
}
}
}
?>
/tags/v5.9-van-tieghem/bibliotheque/NomCourant.php
New file
0,0 → 1,50
<?php
class NomCourant {
private $nns = null;
private $nnr = null;
private $selectionne = null;
private $retenu = null;
 
public function __construct($num_nom_selectionne, Noms $noms, Taxons $taxons) {
$this->nns = $num_nom_selectionne;
$this->selectionne = new Nom($noms->getNom($this->nns));
$this->retenu = new Nom($taxons->getTaxon($this->nns));
$this->nnr = $this->retenu->get('id');
$taxons_sup = $taxons->getTaxonsSup($this->nnr);
$this->taxons_sup = $taxons_sup[$this->nnr];
$this->retenu->setTaxonsSuperieurs($taxons_sup, $this->nnr);
}
 
/**
* Retour le numéro du nom sélectionné courant.
*
* @return le numéro du nom sélectionné.
*/
public function getNns() {
return $this->nns;
}
public function getNnr() {
return $this->nnr;
}
 
public function getNomSelectionne() {
return $this->selectionne;
}
 
public function getNomRetenu() {
return $this->retenu;
}
public function getNt() {
return $this->retenu->get('num_taxonomique');
}
public function getInpn() {
return $this->selectionne->get('cd_nom');
}
 
}
?>
/tags/v5.9-van-tieghem/bibliotheque/AppUrls.php
New file
0,0 → 1,297
<?php
class AppUrls {
private $urlBase = null;
private $urlMobile = null;
private $urlBaseDossier = null;
private $urlCourante = null;
private $urlRedirection = null;
private $urlPopUp = null;
 
public function __construct(Url $urlBase = null, Url $urlBaseDossier = null, Url $urlPopUp = null, Url $urlMobile = null) {
$this->urlBase = (is_null($urlBase)) ? Registre::get('eFlore.urlBase') : $urlBase;
$this->urlBaseDossier = (is_null($urlBaseDossier)) ? Registre::get('eFlore.urlBaseDossier') : $urlBaseDossier;
$this->urlPopUp = (is_null($urlPopUp)) ? Registre::get('eFlore.urlPopUp') : $urlPopUp;
$this->urlMobileTpl = (is_null($urlMobile)) ? Registre::get('eFlore.urlMobileTpl') : $urlMobile;
}
 
public function obtenirUrlBase() {
$this->urlBase->setRequete(array());
$url = $this->urlBase->getURL();
return $url;
}
 
public function obtenirUrlBaseDossier() {
$this->urlBaseDossier->setRequete(array());
$url = $this->urlBaseDossier->getURL();
return $url;
}
 
public function redirigerVers($url) {
$url = str_replace('&amp;', '&', $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 getParametresUrlRechercheAvancee() {
$parametres = array(
'referentiel' => Registre::get('parametres.referentiel'),
'niveau' => Registre::get('parametres.niveau'),
'module' => 'recherche',
'action' => 'rechercheAvancee',
'type_nom' => 'nom_scientifique'
);
return $parametres;
}
 
public function obtenirUrlResultat($typeResultat, $params = array()) {
$parametres = $this->getParametresUrlResultat();
$parametres['resultat'] = $typeResultat;
$parametres = array_merge($parametres, $params);
$this->urlBase->setRequete($parametres);
$url = $this->urlBase->getURL();
return $url;
}
 
public function obtenirUrlResultatAvanceOnglets($onglet, $params = array()) {
$parametres = $this->getParametresUrlRechercheAvancee();
$parametres['resultat'] = $onglet;
$parametres = array_merge($parametres, $params);
$this->urlBase->setRequete($parametres);
$url = $this->urlBase->getURL();
return $url;
}
 
public function obtenirUrlRechercheAvancee($params = array()) {
$parametres = $this->getParametresUrlRechercheAvancee();
$parametres = array_merge($parametres,$params);
$this->urlBase->setRequete($parametres);
$url = $this->urlBase->getURL();
return $url;
}
 
public function getParametresUrlResultat() {
$parametres = array(
'referentiel' => Registre::get('parametres.referentiel'),
'module' => 'recherche',
'niveau' => Registre::get('parametres.niveau'),
'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'),
'niveau' => Registre::get('parametres.niveau'),
'module' => 'fiche',
'action' => 'fiche'
);
return $parametres;
}
 
public function obtenirUrlFiche($numNom, $type_nom = 'nom_vernaculaire', $nom = '') {
$parametres = $this->getParametresUrlFiche();
$parametres['num_nom'] = $numNom;
$parametres['type_nom'] = $type_nom;
$parametres['nom'] = $nom;
$this->urlBase->setRequete($parametres);
$url = $this->urlBase->getURL();
return $url;
}
 
public function obtenirUrlMobile($numNom) {
$parametres = array(
'referentiel' => Registre::get('parametres.referentiel'),
'num_nom' => $numNom
);
$urlMobile = $this->urlMobileTpl;
foreach ($parametres as $cle => $val) {
$urlMobile = str_replace('{'.$cle.'}', rawurlencode($val), $urlMobile);
}
return $urlMobile;
}
 
public function getParametresUrlMetaDonnees() {
$parametres = array(
'module' => 'fiche-metadonnees',
'action' => 'affichageMetaDonnees'
);
return $parametres;
}
 
public function obtenirUrlMetaDonnees($projet) {
$parametres = $this->getParametresUrlMetaDonnees();
$parametres['projet'] = $projet;
$this->urlPopUp->setRequete($parametres);
$url = $this->urlPopUp->getURL();
return $url;
}
 
 
public function getParametresUrlListeFancyBoxPhytosocio() {
$parametres = array(
'module' => 'liste-fancy-box-phytosocio',
'action' => 'lister'
);
return $parametres;
}
 
public function obtenirUrlListeFancyBoxPhytosocio($liste,$referentiel,$num_nom, $catminat) {
$parametres = $this->getParametresUrlListeFancyBoxPhytosocio();
$parametres['type'] = $liste;
$parametres['referentiel'] = $referentiel;
$parametres['num_nom'] = $num_nom;
$parametres['catminat'] = $catminat;
$this->urlPopUp->setRequete($parametres);
$url = $this->urlPopUp->getURL();
return $url;
}
 
public function getParametresUrlPopUpIllustrations() {
$parametres = array(
'module' => 'popup-illustrations',
'action' => 'fiche',
'referentiel' => Registre::get('parametres.referentiel')
);
return $parametres;
}
 
public function obtenirUrlPopUpIllustrations($idImg) {
$parametres = $this->getParametresUrlPopUpIllustrations();
$parametres['id'] = $idImg;
$this->urlPopUp->setRequete($parametres);
$url = $this->urlPopUp->getURL();
return $url;
}
 
public function getParametresPdfExport() {
$parametres = array(
'referentiel' => Registre::get('parametres.referentiel'),
'niveau' => Registre::get('parametres.niveau'),
'module' => 'pdf-export',
'action' => 'pdf-export'
);
return $parametres;
}
 
 
public function obtenirUrlPdfExport($numNom) {
$parametres = $this->getParametresPdfExport();
$parametres['num_nom'] = $numNom;
$this->urlBase->setRequete($parametres);
$url = $this->urlBase->getURL();
return $url;
}
 
public function getParametresUrlPopUpContact($action) {
$action = is_null($action) ? 'form' : $action;
$parametres = array(
'module' => 'popup-contact',
'action' => $action,
'referentiel' => Registre::get('parametres.referentiel')
);
return $parametres;
}
 
public function obtenirUrlPopUpContact($idDestinataire, $idImage, $action = null) {
$parametres = $this->getParametresUrlPopUpContact($action);
$parametres['id_destinataire'] = $idDestinataire;
$parametres['id_img'] = $idImage;
$this->urlPopUp->setRequete($parametres);
$url = $this->urlPopUp->getURL();
return $url;
}
public function obtenirUrlMauvaiseIdentification($idObs) {
$tpl = Config::get('urlMauvaiseIdentificationTpl');
$url = sprintf($tpl, $idObs);
return $url;
}
public function obtenirUrlProfilAnnuaire($idUtilisateur) {
$tpl = Config::get('baseUrlProfilAnnuaireTpl');
$url = sprintf($tpl, $idUtilisateur);
return $url;
}
}
?>
/tags/v5.9-van-tieghem/bibliotheque/Nom.php
New file
0,0 → 1,34
<?php
class Nom {
private $infos = array();
 
public function __construct(Array $infos) {
$this->infos = $infos;
}
public function setTaxonsSuperieurs(Array $taxonsSup, $nns) {
$this->infos['taxonsSup'] = $taxonsSup[$nns];
}
public function getInfos() {
return $this->infos;
}
 
public function get($cle) {
$valeur = '';
if (array_key_exists($cle, $this->infos)) {
$valeur = $this->infos[$cle];
}
return $valeur;
}
public function getTaxonSupRang($rang) {
$nom_sci = '';
foreach ($this->infos['taxonsSup'] as $taxon) {
if ($taxon['rang.code'] == 'bdnt.rangTaxo:'.$rang) {
$nom_sci = $taxon['nom_sci_complet'];
}
}
return $nom_sci;
}
}
?>
/tags/v5.9-van-tieghem/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 tri 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 tableau des colonnes à trier qui a des noms de clés pour clés et des ordres de tri pour valeurs.
* @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;
}
}
?>
/tags/v5.9-van-tieghem/bibliotheque/Utilisateur.php
New file
0,0 → 1,92
<?php
class Utilisateur {
 
const NIVEAU_DEBUTANT = 1;
const NIVEAU_INTERMEDIAIRE = 2;
const NIVEAU_EXPERT = 3;
 
private $dureeSauvegarde = null;
private $nomCookieUtilisateur = '';
private $nomCookieUtilisateurPersistant = '';
private $nomCookieNiveau = '';
private $niveauDefaut = '';
private $urlWsAnnuaire = '';
private $restClient = null;
 
private $niveau = null;
private $identifie = false;
private $courriel = null;
private $md5Mdp = null;
 
public function __construct(Conteneur $conteneur) {
$this->dureeSauvegarde = $conteneur->getParametre('cookies.duree');
$this->nomCookieUtilisateur = $conteneur->getParametre('cookies.utilisateur');
$this->nomCookieUtilisateurPersistant = $conteneur->getParametre('cookies.utilisateurPersistant');
$this->nomCookieNiveau = $conteneur->getParametre('cookies.niveau');
$this->niveauDefaut = $conteneur->getParametre('utilisateur.niveau.defaut');
$this->urlWsAnnuaire = $conteneur->getParametre('baseUrlServicesAnnuaireTpl');
$this->restClient = $conteneur->getRestClient();
$this->analyserCookies();
}
 
public function getCourriel() {
return $this->courriel;
}
 
public function getNiveau() {
return $this->niveau;
}
 
public function sauver() {
setcookie($this->nomCookieNiveau, time()+$this->dureeSauvegarde, '/');
}
 
public function etreIdentifie() {
$this->analyserCookies();
return $this->identifie;
}
 
public function connecter($courriel, $mdp, $persistance = false) {
$url = sprintf($this->urlWsAnnuaire, 'utilisateur');
$donnees['methode'] = 'connexion';
$donnees['courriel'] = $courriel;
$donnees['mdp'] = $mdp;
$donnees['persistance'] = $persistance;
 
$json = $this->restClient->ajouter($url, $donnees);
$forceTableauAssociatif = true;
$resultat = json_decode($json, $forceTableauAssociatif);
return $resultat['identifie'];
}
 
private function analyserCookies() {
$this->analyserCookiesIdentite();
$this->analyserCookiesNiveau();
}
 
private function analyserCookiesIdentite() {
if ($this->identifie == false) {
if (isset($_COOKIE[$this->nomCookieUtilisateurPersistant])) {
$idTela = $_COOKIE[$this->nomCookieUtilisateurPersistant];
$this->extraireMdpEtCourriel($idTela);
} else if (isset($_COOKIE[$this->nomCookieUtilisateur])) {
$idTela = $_COOKIE[$this->nomCookieUtilisateur];
$this->extraireMdpEtCourriel($idTela);
}
}
}
 
private function extraireMdpEtCourriel($idTela) {
$this->md5Mdp = substr($idTela, 0, 32);
$this->courriel = substr($idTela, 32);
$this->identifie = true;
}
 
private function analyserCookiesNiveau() {
$this->niveau = $this->niveauDefaut;
if (isset($_COOKIE[$this->nomCookieNiveau])) {
$this->niveau = $_COOKIE[$this->nomCookieNiveau];
}
}
}
?>
/tags/v5.9-van-tieghem/bibliotheque/QrCode.php
New file
0,0 → 1,81
<?php
/**
* BarcodeQR - Code QR Barcode Image Generator (PNG)
*
* @package BarcodeQR
* @category BarcodeQR
* @name BarcodeQR
* @version 1.0
* @author Shay Anderson 05.11
* @link http://www.shayanderson.com/php/php-qr-code-generator-class.htm
* @license http://www.gnu.org/licenses/gpl.html GPL License
* This is free software and is distributed WITHOUT ANY WARRANTY
*/
final class QrCode {
 
private $API_CHART_URL = '';
private $taille = '150';
private $contenu;
private $urlQrCodeTpl;
private $dossierQrCode;
 
public function __construct($conteneur) {
$this->API_CHART_URL = $conteneur->getParametre('urlApiChart');
$this->dossierQrCode = $conteneur->getParametre('dossierQrCode');
$this->urlQrCodeTpl = $conteneur->getParametre('urlQrCodeTpl');
}
 
/**
* URL code
*
* @param string $url
*/
public function setUrl($url = '') {
$this->contenu = $url;
}
 
/**
* Taille du QRcode en pixel. Cela sera forcément un carré.
*
* @param string $taille
*/
public function setTaille($taille) {
$this->taille = $taille;
}
 
/**
* Generate QR code image
*
* @param string $filename
* @return bool
*/
public function dessiner($idQrCode = null) {
if (!preg_match('/\.png$/i', $idQrCode)) {
$idQrCode .= '.png';
}
$cheminImg = $this->dossierQrCode.$idQrCode;
if (file_exists($cheminImg) == false) {
$ch = curl_init();
// For Debugging
//curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
//curl_setopt($ch, CURLOPT_STDERR, $f = fopen("$cheminImg.txt", "w+"));
 
curl_setopt($ch, CURLOPT_URL, $this->API_CHART_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "chs={$this->taille}x{$this->taille}&cht=qr&chl=".urlencode($this->contenu));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$img = curl_exec($ch);
curl_close($ch);
 
// For Debugging
//fclose($f);
 
file_put_contents($cheminImg, $img);
}
$urlQrCode = sprintf($this->urlQrCodeTpl, $idQrCode);
return $urlQrCode;
}
}
?>
/tags/v5.9-van-tieghem/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);
}
}
?>
/tags/v5.9-van-tieghem/bibliotheque/Surligneur.php
New file
0,0 → 1,97
<?php
class Surligneur {
private $texte = '';
private $texteSansAccent = '';
private $tags = array();
private $nbreSurlignageMaxParMot = 1;
private $nbreSurlignageCourant = 0;
 
public function __construct($texte = null, $surlignageMaxParMot = null) {
if (is_null($texte) == false) {
$this->setTexte($texte);
}
if (is_null($surlignageMaxParMot) == false) {
$this->setNbreMaxSurlignageParMot($surlignageMaxParMot);
}
}
 
public function setTexte($txt) {
$this->texte = $txt;
}
 
public function setNbreMaxSurlignageParMot($nbre) {
$this->nbreSurlignageMaxParMot = $nbre;
}
function supprimerAccents($chaine){
return strtr($chaine,array('à' => 'a','á' => 'a','â' => 'a','ã' => 'a','ä' => 'a',
'ç' => 'c',
'è' => 'e','é' => 'e','ê' => 'e','ë' => 'e',
'ì' => 'i','í' => 'i','î' => 'i','ï' => 'i',
'ñ' => 'n',
'ò' => 'o', 'ó' => 'o' , 'ô' => 'o', 'õ' => 'o', 'ö' => 'o',
'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u',
'ý' => 'y', 'ÿ' => 'y'));
}
 
public function surlignerMots($mots) {
$this->verifierTableauDeMots($mots);
$this->texte = preg_replace_callback('`<[^>]+>`', array($this, 'sauverTags'), $this->texte);
foreach ($mots as $mot) {
$this->initialiserNbreSurlignageCourant();
$this->texte = $this->surlignerMot($mot);
}
$this->texte = preg_replace_callback('`<([0-9]+)>`', array($this, 'restaurerTags'), $this->texte);
return $this->texte;
}
 
private function verifierTableauDeMots($mots) {
if (is_array($mots) === false) {
$message = "Surligneur::surlignerMots() n'accepte que les tableaux de mots en argument";
throw new InvalidArgumentException($message);
} else {
if (count($mots) == 0) {
$message = "Surligneur::surlignerMots() n'accepte que des tableaux contenant au moins un mot";
throw new LengthException($message);
}
}
}
 
private function sauverTags($match) {
$i = count($this->tags);
$this->tags[$i] = $match[0];
return '<'.$i.'>';
}
 
private function initialiserNbreSurlignageCourant() {
$this->nbreSurlignageCourant = 0;
}
 
private function surlignerMot($mot) {
$positionDebutMot = stripos($this->texte, $mot);
$longueurMot = strlen($mot);
$surlignage = $this->texte;
if ($positionDebutMot !== false) {
$this->nbreSurlignageCourant++;
if ($this->nbreSurlignageCourant <= $this->nbreSurlignageMaxParMot) {
$debut = substr($this->texte, 0, $positionDebutMot);
$milieu = substr($this->texte, $positionDebutMot, $longueurMot);
$this->texte = substr($this->texte, $positionDebutMot + $longueurMot);
$fin = $this->surlignerMot($mot);
$surlignage = $debut.$this->sauverTagSurlignage($milieu).$fin;
}
}
return $surlignage;
}
 
private function sauverTagSurlignage($motTrouve) {
$i = count($this->tags);
$this->tags[$i] = '<span class="surlignage">'.$motTrouve.'</span>';
return '<'.$i.'>';
}
private function restaurerTags($match) {
return $this->tags[$match[1]];
}
}
?>
/tags/v5.9-van-tieghem/bibliotheque/Conteneur.php
New file
0,0 → 1,159
<?php
class Conteneur {
protected $parametres = array();
protected $partages = array();
 
public function __construct(array $parametres = null) {
$this->parametres = is_null($parametres) ? array() : $parametres;
}
 
public function getParametre($cle) {
$valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle);
return $valeur;
}
 
public function getParametreTableau($cle) {
$tableau = array();
$parametre = $this->getParametre($cle);
if (empty($parametre) === false) {
$tableauPartiel = explode(',', $parametre);
$tableauPartiel = array_map('trim', $tableauPartiel);
foreach ($tableauPartiel as $champ) {
if (strpos($champ, '=') === false) {
$tableau[] = trim($champ);
} else {
list($cle, $val) = explode('=', $champ);
$tableau[trim($cle)] = trim($val);
}
}
}
return $tableau;
}
 
public function setParametre($cle, $valeur) {
$this->parametres[$cle] = $valeur;
}
 
public function getAppUrls() {
if (!isset($this->partages['AppUrls'])){
$this->partages['AppUrls'] = new AppUrls();
}
return $this->partages['AppUrls'];
}
 
public function getApiNoms() {
$noms = new Noms($this->getParametre('referentiel'));
return $noms;
}
 
public function getApiTaxons() {
$taxons = new Taxons($this->getParametre('referentiel'));
return $taxons;
}
 
public function getApiBiblioBota() {
$biblioBota = new BiblioBota();
return $biblioBota;
}
 
public function getApiImages() {
$images = new Images();
return $images;
}
 
public function getApiCartes() {
$cartes = new Cartes();
return $cartes;
}
 
public function getApiNomsVernaculaires() {
$nomsVernaculaires = new NomsVernaculaires();
return $nomsVernaculaires;
}
 
public function getApiTextes() {
$textes = new Textes();
return $textes;
}
 
public function getApiWikini() {
$wiki = new Wikini();
return $wiki;
}
public function getApiGraphiques() {
$graphique = new Graphiques();
return $graphique;
}
public function getApiSyntaxons() {
$syntaxon = new Syntaxons();
return $syntaxon;
}
 
public function getApiMetaDonnees() {
$meta = new MetaDonnees();
return $meta;
}
public function getApiInformations() {
$informations = new Informations();
return $informations;
}
public function getApiStatuts() {
$statuts = new Statuts();
return $statuts;
}
 
public function getNomCourant() {
if (!isset($this->partages['NomCourant'])){
$nns = $this->getParametre('num_nom');
$noms = $this->getApiNoms();
$taxons = $this->getApiTaxons();
$this->partages['NomCourant'] = new NomCourant($nns, $noms, $taxons);
}
return $this->partages['NomCourant'];
}
 
public function getUtilisateur() {
if (!isset($this->partages['Utilisateur'])){
$this->partages['Utilisateur'] = new Utilisateur($this);
}
return $this->partages['Utilisateur'];
}
 
public function getBdd() {
if (!isset($this->partages['Bdd'])){
$this->partages['Bdd'] = new Bdd();
}
return $this->partages['Bdd'];
}
public function getCache($dossierStockage = null) {
if (!isset($this->partages['Cache'])){
$params = array(
'mise_en_cache' => $this->getParametre('cache'),
'stockage_chemin' => is_null($dossierStockage) ? $this->getParametre('chemincache') : $dossierStockage,
'duree_de_vie' => $this->getParametre('dureecache')
);
$this->partages['Cache'] = new CacheSimple($params);
}
return $this->partages['Cache'];
}
 
public function getRestClient() {
if (!isset($this->partages['RestClient'])){
$this->partages['RestClient'] = new RestClient();
}
return $this->partages['RestClient'];
}
public function getQrCode() {
if (!isset($this->partages['QrCode'])){
$this->partages['QrCode'] = new QrCode($this);
}
return $this->partages['QrCode'];
}
}
?>