Subversion Repositories eFlore/Applications.coel-consultation

Compare Revisions

No changes between revisions

Ignore whitespace Rev 278 → Rev 279

/branches/v1.13-la-grande-rue/collection_papyrus.php
New file
0,0 → 1,74
<?php
// declare(encoding='UTF-8');
/**
* Application de consultation des Collections.
* Fichier contenant les fonctions nécessaire pour l'insertion de l'application dans Papyrus.
*
* @category PHP5
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version SVN:<svn_id>
*/
 
// Gestion des paramêtres définis dans Papyrus
if (isset($GLOBALS['_GEN_commun']['info_application']->module) && !isset($_GET['module'])) {
$_GET['module'] = $GLOBALS['_GEN_commun']['info_application']->module;
}
 
/** Inclusion du fichier principal de l'application*/
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'collection.php';
 
// Définition des feuilles de style de l'application pour Papyrus
$chemin = str_replace(PAP_CHEMIN_RACINE, '', Config::get('chemin_squelettes'));
GEN_stockerStyleExterne('collection', $chemin.'css'.DS.'collection'.DS.'collection.css');
GEN_stockerStyleExterne('jquery-ui-1.8', $chemin.'css'.DS.'humanity'.DS.'jquery-ui-1.8.custom.min.css');
 
// Définition des fichiers JS de l'application pour Papyrus
//GEN_stockerFichierScript('jquery-1.4.2', 'commun'.DS.'jquery'.DS.'1.4.2'.DS.'jquery-1.4.2.min.js');
GEN_stockerFichierScript('jquery-cookie', 'commun'.DS.'jquery'.DS.'cookie'.DS.'1.0'.DS.'jquery.cookie.min.js');
GEN_stockerFichierScript('jquery-ui-1.8.custom', $chemin.'js'.DS.'jquery-ui-1.8.custom.min.js');
GEN_stockerFichierScript('jquery-collection', $chemin.'js'.DS.'jquery-collection.js');
 
// +--------------------------------------------------------------------------------------------------+
// Remplacement de méta tags fournit par Papyrus par ceux créés dans l'appli
if (AppControleur::getMetaTitre() != '') {
$GLOBALS['_PAPYRUS_']['rendu']['TITRE_PAGE'] = AppControleur::getMetaTitre();
}
if (AppControleur::getMetaDescription() != '') {
GEN_modifierMetaName('description', AppControleur::getMetaDescription());
}
if (AppControleur::getMetaTags() != '') {
GEN_modifierMetaName('keywords', AppControleur::getMetaTags());
}
 
// meta OpenGraph pour les réseaux socialo
GEN_modifierMetaProperty('og:title', 'CoEL - consultation des collections');
GEN_modifierMetaProperty('og:description', 'Moteur de recherche sur les collections recens&eacute;es dans Collections en Ligne ');
 
// +--------------------------------------------------------------------------------------------------+
// Fonctions d'affichage dans Papyrus
/**
* Fonction d'affichage de Papyrus, pour le corps de page.
*/
function afficherContenuCorps() {
return AppControleur::getContenuCorps();
}
 
function afficherContenuTete() {
return AppControleur::getContenuTete();
}
 
function afficherContenuPied() {
return AppControleur::getContenuPied();
}
 
function afficherContenuNavigation() {
return AppControleur::getContenuNavigation();
}
 
function afficherContenuMenu() {
return '';
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/index_iso-8859-15.php
New file
0,0 → 1,96
<?php
// declare(encoding='ISO-8859-15');
/** Inclusion du fichier principal de l'application*/
require_once 'collection.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head xml:lang="fr" lang="fr">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<title><?php echo AppControleur::getMetaTitre(); ?></title>
<meta name="description" content="<?php echo AppControleur::getMetaDescription();?>" />
<meta name="keywords" content="<?php echo AppControleur::getMetaTags();?>" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
 
<link rel="shortcut icon" type="image/x-icon" href="https://resources.tela-botanica.org/tb/img/16x16/favicon.ico" />
<link rel="icon" type="image/png" href="https://resources.tela-botanica.org/tb/img/16x16/favicon.png" />
 
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/generale.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/collection.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/humanity/jquery-ui-1.8.custom.css" />
<link rel="stylesheet" type="text/css" media="print" href="https://www.tela-botanica.org/sites/commun/fr/styles/impression.css" />
<script type="text/javascript" src="squelettes/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery.cookie.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-ui-1.8.custom.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-collection.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 
ga('create', 'UA-57885-3', 'auto');
ga('require', 'displayfeatures');
ga('send', 'pageview');
 
</script>
</head>
<body xml:lang="fr" lang="fr">
<div id="reducteur">
 
<div id="logo_tela">
<a href="/" title="Retour � l'accueil du site">
<img src="https://resources.tela-botanica.org/tb/img/135x102/logo_carre_officiel.png" alt="le logo de Tela Botanica"/>
</a>
</div>
<div id="bandeau">
<div id="bandeau_contenu">
<div id="titre_monde">
<h1>Collections</h1>
</div>
</div>
</div>
<div id="droite">
<div id="onglets">
<?php echo AppControleur::getContenuNavigation(); ?>
</div>
<div id="contenu">
<div id="entete">
<?php echo AppControleur::getContenuTete(); ?>
</div>
<div id="texte">
<?php echo AppControleur::getContenuCorps(); ?>
</div>
<div id="pied_texte">
<?php echo AppControleur::getContenuPied(); ?>
</div>
</div>
<div>
<?php echo AppControleur::getExceptions(); ?>
</div>
<div id="pied">
<p> &copy;<a href="http://www.tela-botanica.org/" accesskey="1">Tela Botanica</a> / 2000-<?=date('Y')?> - Le r�seau des Botanistes Francophones</p>
</div>
</div>
<div id="nav_gauche">
<ul>
<li><a href="<?=basename(__FILE__)?>?module=Recherche">Recherche</a></li>
<li><a href="<?=basename(__FILE__)?>?module=Carte">Carte</a></li>
<li><a href="<?=basename(__FILE__)?>?module=Syndication">Syndication</a></li>
</ul>
</div>
</div>
</body>
</html>
/branches/v1.13-la-grande-rue/AUTEURS.txt
New file
0,0 → 1,0
Jean-Pascal MILCENT <jpm@tela-botanica.org>.
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:eol-style
+native
\ No newline at end of property
/branches/v1.13-la-grande-rue/A_LIRE.txt
New file
0,0 → 1,4
Cette application nécessite le framework de Tela Botanica pour fonctionner.
Il est disponible ici : http://svn.tela-botanica.net/websvn/listing.php?repname=Applications.framework
 
L'ensemble des fichiers de l'application sont dans l'encodage UTF-8.
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:eol-style
+native
\ No newline at end of property
/branches/v1.13-la-grande-rue/.htaccess
New file
0,0 → 1,13
#AddHandler x-httpd-php5 .php
#AddDefaultCharset UTF-8
 
# Activation de la réecriture d'url
RewriteEngine on
 
# si le fichier ou le dossier existe dans le système de fichier on l'utilise directement
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteRule ^urn:lsid:tela-botanica.org:coel:str([0-9]+)$ index.php?module=FicheStructure&id=$1 [L]
RewriteRule ^urn:lsid:tela-botanica.org:coel:col([0-9]+)$ index.php?module=FicheCollection&id=$1 [L]
RewriteRule ^urn:lsid:tela-botanica.org:coel:per([0-9]+)$ index.php?module=FichePersonne&id=$1 [L]
/branches/v1.13-la-grande-rue/bibliotheque/dao/CollectionDao.php
New file
0,0 → 1,176
<?php
// declare(encoding='UTF-8');
/**
* DAO des Collections pour le module Collections.
*
* @package Collection
* @category php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class CollectionDao extends Dao {
const SERVICE_COLLECTION = 'CoelCollection';
const SERVICE_COLLECTION_A_PERSONNE = 'CoelCollectionAPersonne';
const SERVICE_COLLECTION_A_PUBLICATION = 'CoelCollectionAPublication';
const SERVICE_COLLECTION_A_COMMENTAIRE = 'CoelCollectionACommentaire';
const ROLE_EXPERT = '30763';
const ROLE_CONTRIBUTEUR = '2134';
/**
* Retourne l'ensemble des information sur une collection.
*
* @param integer l'id de la collection.
* @return array un tableau contenant les informations sur la collection.
*/
public function getCollection($id) {
$url = $this->url_jrest.self::SERVICE_COLLECTION."/$id/*";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees['collections'];
}
/**
* Retourne le nombre de collections correspondant à un id strucutre précis.
*
* @param integer l'id d'une structure.
* @return array un tableau contenant les collections correspondant à l'id structure.
*/
public function getNbreParIdStructure($id_structure) {
$url = $this->url_jrest.self::SERVICE_COLLECTION."/NbreParIdStructure/$id_structure";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne les collection correspondant à un id strucutre précis.
*
* @param integer l'id d'une structure.
* @return array un tableau contenant les collections correspondant à l'id structure.
*/
public function getParIdStructure($id_structure) {
$url = $this->url_jrest.self::SERVICE_COLLECTION."/ParIdStructure/$id_structure";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des personnes liées à une collection.
*
* @param integer l'id de la collection.
* @return array un tableau contenant les informations sur les personnes liées à la collection.
*/
public function getPersonnesLiees($id_collection) {
$this->addOrdre('cp_nom');
$donnees = $this->getCollectionAPersonne($id_collection);
return $donnees['collectionsAPersonne'];
}
public function getPersonnesLieesExpertes($id_collection) {
$this->addOrdre('cp_nom');
$donnees = $this->getCollectionAPersonne($id_collection, self::ROLE_EXPERT);
return $donnees['collectionsAPersonne'];
}
public function getPersonnesLieesContributrices($id_collection) {
$this->addOrdre('cp_nom');
$donnees = $this->getCollectionAPersonne($id_collection, self::ROLE_CONTRIBUTEUR);
return $donnees['collectionsAPersonne'];
}
/**
* Retourne le nombre de personnes liées à une collection.
*
* @param integer l'id de la collection.
* @return integer le nombre de personnes liées à la collection.
*/
public function getNbrePersonnesLiees($id_collection) {
$donnees = $this->getCollectionAPersonne($id_collection);
return $donnees['nbElements'];
}
private function getCollectionAPersonne($id_collection, $role = null) {
$url = $this->url_jrest.self::SERVICE_COLLECTION_A_PERSONNE."/$id_collection";
$url .= ($role != null) ? '/'.$role : '';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des publications liées à une collection.
*
* @param integer l'id de la collection.
* @return array un tableau contenant les informations sur les publications liées à la collection.
*/
public function getPublicationsLiees($id_collection) {
$donnees = $this->getCollectionAPublication($id_collection);
return $donnees['collectionsAPublication'];
}
/**
* Retourne l'ensemble des publications liées à une collection.
*
* @param integer l'id de la collection.
* @return array un tableau contenant les informations sur les publications liées à la collection.
*/
public function getPublicationsSourcesLiees($id_collection) {
$donnees = $this->getCollectionAPublication($id_collection, "1");
return $donnees['collectionsAPublication'];
}
/**
* Retourne le nombre de publications liées à une collection.
*
* @param integer l'id de la collection.
* @return integer le nombre de publications liées à la collection.
*/
public function getNbrePublicationsLiees($id_collection) {
$donnees = $this->getCollectionAPublication($id_collection);
return $donnees['nbElements'];
}
private function getCollectionAPublication($id_collection, $source = null) {
$url = $this->url_jrest.self::SERVICE_COLLECTION_A_PUBLICATION."/$id_collection";
$url .= ($source != null) ? '/'.$source : '';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des commentaires publics liés à une collection.
*
* @param integer l'id de la collection.
* @return array un tableau contenant les informations sur les publications liées à la collection.
*/
public function getCommentairesLies($id_collection) {
$donnees = $this->getCollectionACommentaire($id_collection);
return $donnees['collectionsACommentaire'];
}
/**
* Retourne le nombre de commentaires publics liés à une collection.
*
* @param integer l'id de la collection.
* @return integer le nombre de commentaires publics liés à la collection.
*/
public function getNbreCommentairesLies($id_collection) {
$donnees = $this->getCollectionACommentaire($id_collection);
return $donnees['nbElements'];
}
private function getCollectionACommentaire($id_collection) {
$commentaire_public = '1';
$url = $this->url_jrest.self::SERVICE_COLLECTION_A_COMMENTAIRE."/$id_collection/$commentaire_public";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/dao/Ontologie.php
New file
0,0 → 1,133
<?php
// declare(encoding='UTF-8');
/**
* Classe contenant les données de l'ontologie des Collections en Ligne.
* Elle contient un cache de l'ontologie.
* C'est un Singleton.
*
* @package Collection
* @category php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class Ontologie {
public static $ontologie_liste = array();
public static $ontologie_valeur = array();
 
public static function chargerListe($id_liste) {
$retour = false;
if (!isset(self::$ontologie_liste[$id_liste])) {
$metadonnees = new MetadonneeDao();
$donnees = $metadonnees->getOntologie($id_liste);
$traitementValeursOk = self::traiterValeurs($donnees['valeurs']);
if ($traitementValeursOk) {
self::$ontologie_liste[$id_liste] = $donnees['valeurs'];
$retour = true;
}
} else {
$retour = true;
}
return $retour;
}
public static function getListe($id_liste) {
$retour = false;
$chargementOk = self::chargerListe($id_liste);
if ($chargementOk) {
$retour = self::$ontologie_liste[$id_liste];
}
return $retour;
}
public static function getListeFormatee($id_liste) {
$retour = false;
$liste = self::getListe($id_liste);
if ($liste !== false) {
foreach ($liste as $cle => $valeur) {
$liste[$cle] = self::formaterTableauValeur($valeur);
}
$retour = $liste;
}
return $retour;
}
 
public static function getListeTrieeParAbreviation($id_liste) {
$retour = false;
$liste = self::getListe($id_liste);
if ($liste !== false) {
$liste_par_abr = array();
foreach ($liste as $cle => $valeur) {
$valeur_fromatee = self::formaterTableauValeur($valeur);
$abreviation = $valeur_fromatee['abreviation'];
$liste_par_abr[$abreviation] = $valeur_fromatee;
}
$retour = $liste_par_abr;
}
return $retour;
}
public static function chargerValeur($id_valeur) {
$retour = true;
if (empty($id_valeur)) {
$retour = false;
} else if (!isset(self::$ontologie_valeur[$id_valeur])) {
$metadonnees = new MetadonneeDao();
$donnees = $metadonnees->getOntologieValeur($id_valeur);
$retour = self::traiterValeurs($donnees['valeurs']);
}
return $retour;
}
public static function getValeur($id_valeur) {
$retour = false;
$chargementOk = self::chargerValeur($id_valeur);
if ($chargementOk) {
$retour = self::$ontologie_valeur[$id_valeur];
}
return $retour;
}
public static function getValeurNom($id_valeur) {
$retour = false;
$valeur = self::getValeur($id_valeur);
if ($valeur !== false) {
$retour = $valeur['nom'];
}
return $retour;
}
private static function traiterValeurs($valeurs) {
$retour = true;
if (is_null($valeurs)) {
$retour = false;
} else {
if (count($valeurs) == 0) {
$retour = false;
} else {
foreach ($valeurs as $valeur) {
self::$ontologie_valeur[$valeur['cmlv_id_valeur']] = self::formaterTableauValeur($valeur);
}
}
}
return $retour;
}
private static function formaterTableauValeur($valeur) {
$valeur_formatee = array();
if (is_array($valeur) && count($valeur) > 0) {
$valeur_formatee = array(
'id' => $valeur['cmlv_id_valeur'],
'parent' => $valeur['cmlv_ce_parent'],
'nom' => $valeur['cmlv_nom'],
'abreviation' => $valeur['cmlv_abreviation'],
'description' => $valeur['cmlv_description'],
'meta' => $valeur['cmlv_ce_meta']);
}
return $valeur_formatee;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/dao/Dao.php
New file
0,0 → 1,217
<?php
// declare(encoding='UTF-8');
/**
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur.
* Elle est abstraite donc doit obligatoirement être étendue.
*
* @category Php5
* @package Referentiel
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
abstract class Dao {
const ORDRE_ASCENDANT = 'ASC';
const ORDRE_DESCENDANT = 'DESC';
const HTTP_REQUETE_SEPARATEUR = '&';
protected $distinction = '0';
protected $limite_debut = null;
protected $limite_nbre = null;
protected $ordre = null;
protected $url_jrest = null;
public function __construct() {
$this->url_jrest = Config::get('url_jrest');
}
//+----------------------------------------------------------------------------------------------------------------+
// ACCESSEURS
public function setDistinction($distinct) {
$this->distinction = $distinct;
}
public function getDistinction() {
return $this->distinction;
}
public function viderDistinction() {
$this->distinction = null;
}
 
public function avoirLimitation() {
$limitation = false;
if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) {
$limitation = true;
}
return $limitation;
}
public function setLimitation($limite_debut, $limite_nbre) {
$this->limite_debut = $limite_debut;
$this->limite_nbre = $limite_nbre;
}
public function getLimiteDebut() {
return $this->limite_debut;
}
public function getLimiteNbre() {
return $this->limite_nbre;
}
public function viderLimite() {
$this->limite_debut = null;
$this->limite_nbre = null;
}
public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) {
if (!isset($this->ordre[$champ])) {
if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) {
$this->ordre[$champ] = $trie;
} else {
$e = "La valeur pour le trie doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}.";
trigger_error($e, E_USER_WARNING);
}
} else {
$e = "Le champ $champ existe déjà dans le tableau des ordres.";
trigger_error($e, E_USER_WARNING);
}
}
public function getOrdre() {
$champs = array();
foreach ($this->ordre as $champ => $trie) {
$champs[] = "$champ $trie";
}
return implode(', ', $champs);
}
public function viderOrdre() {
$this->ordre = null;
}
//+----------------------------------------------------------------------------------------------------------------+
// MÉTHODES
protected function envoyerRequeteConsultation($url) {
$url = $this->traiterUrlParametres($url);
$retour = $this->envoyerRequete($url, 'GET');
return $retour;
}
protected function envoyerRequeteAjout($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'PUT', $donnees);
return $retour;
}
protected function envoyerRequeteModif($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'POST', $donnees);
return $retour;
}
protected function envoyerRequeteSuppression($url) {
$retour = $this->envoyerRequete($url, 'DELETE');
return $retour;
}
private function envoyerRequete($url, $mode, Array $donnees = array()) {
$contenu = false;
if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') {
$e = "Le mode de requête '$mode' n'est pas accepté!";
trigger_error($e, E_USER_WARNING);
} else {
$contexte = stream_context_create(array(
'http' => array(
'method' => $mode,
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR))));
$flux = @fopen($url, 'r', false, $contexte);
if (!$flux) {
$this->traiterEntete($http_response_header, $url);
$e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!";
trigger_error($e, E_USER_WARNING);
} else {
// Informations sur les en-têtes et métadonnées du flux
$entetes = stream_get_meta_data($flux);
$this->traiterEntete($entetes, $url);
// Contenu actuel de $url
$contenu = stream_get_contents($flux);
fclose($flux);
}
}
$this->reinitialiser();
return $contenu;
}
private function traiterUrlParametres($url) {
$parametres = array();
if (! is_null($this->getLimiteDebut())) {
$parametres[] = 'start='.$this->getLimiteDebut();
}
if (! is_null($this->getLimiteNbre())) {
$parametres[] = 'limit='.$this->getLimiteNbre();
}
if (! is_null($this->ordre)) {
$parametres[] = 'orderby='.urlencode($this->getOrdre());
}
if ($this->getDistinction() != 0) {
$parametres[] = 'distinct='.$this->getDistinction();
}
if (count($parametres) > 0) {
$url_parametres = implode('&', $parametres);
$url = $url.'?'.$url_parametres;
}
return $url;
}
private function traiterEntete($entetes, $uri) {
$infos = $this->analyserEntete($entetes, $uri);
$this->traiterEnteteDebug($infos);
$this->traiterEnteteMessage($infos);
}
private function analyserEntete($entetes, $uri) {
$infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null);
if (isset($entetes['wrapper_data'])) {
$entetes = $entetes['wrapper_data'];
}
foreach ($entetes as $entete) {
if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) {
$infos['debugs'] = json_decode($match[1]);
}
if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) {
$infos['messages'] = json_decode($match[1]);
}
if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) {
$infos['date'] = $match[1];
}
}
return $infos;
}
private function traiterEnteteDebug($entetes) {
if (isset($entetes['debugs'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$debugs = $entetes['debugs'];
foreach ($debugs as $debug) {
Debug::printr("DEBUG : $date - $uri :\n$debug");
}
}
}
private function traiterEnteteMessage($entetes) {
if (isset($entetes['messages'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$messages = $entetes['messages'];
foreach ($messages as $message) {
Debug::printr("MESSAGE : $date - $uri :\n$message");
}
}
}
private function reinitialiser() {
$this->viderDistinction();
$this->viderLimite();
$this->viderOrdre();
}
}
/branches/v1.13-la-grande-rue/bibliotheque/dao/MetadonneeDao.php
New file
0,0 → 1,47
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données des Collections pour le module Métadonnées.
*
* @package Collection
* @category php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class MetadonneeDao extends Dao {
const SERVICE_ONTOLOGIE = 'CoelValeurListe';
/**
* Retourne l'ensemble des information d'une liste de valeurs.
*
* @param integer l'id de la liste.
* @return array un tableau contenant les valeurs de la liste.
*/
public function getOntologie($id) {
$url = $this->url_jrest.self::SERVICE_ONTOLOGIE."/id/$id?limit=500";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des information d'une liste de valeurs.
*
* @param integer l'id d'une valeur ou un ensemble d'id de valeurs séparés par des virgules.
* @return array un tableau contenant les valeurs.
*/
public function getOntologieValeur($id_valeurs) {
$donnees = array();
if (!empty($id_valeurs)) {
$url = $this->url_jrest.self::SERVICE_ONTOLOGIE."/idv/$id_valeurs";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
}
return $donnees;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/dao/StructureDao.php
New file
0,0 → 1,88
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données des Collections pour le module Structure.
*
* @package Collection
* @category php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class StructureDao extends Dao {
const ROLE_EQUIPE = 2027;
const SERVICE_STRUCTURE = 'CoelStructure';
const SERVICE_STRUCTURE_A_PERSONNE = 'CoelStructureAPersonne';
/**
* Retourne l'ensemble des information sur une structure.
*
* @param integer l'id de la structure.
* @return array un tableau contenant les informations sur la structure.
*/
public function getStructure($id_structure) {
$url = $this->url_jrest.self::SERVICE_STRUCTURE."/$id_structure/*";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees['structures'];
}
/**
* Retourne le nombre de structure par zone géographique.
*
* @param integer le type de recherche à effectuée.
* @return array un tableau contenant les informations sur le nombre de structures par zone.
*/
public function getStructureParZoneGeo($type_recherche) {
$url = $this->url_jrest.self::SERVICE_STRUCTURE."/ParZoneGeo/$type_recherche";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des informations du personnel d'une structure.
*
* @param integer l'id de la structure.
* @return array un tableau contenant les informations sur le personnel de la structure.
*/
public function getPersonnel($id_structure) {
$donnees = $this->getStructureAPersonne($id_structure);
$personnel = $this->filtrerRoleEquipe($donnees['structuresAPersonne']);
return $personnel;
}
/**
* Retourne le nombre de personnel d'une structure.
*
* @param integer l'id de la structure.
* @return integer le nombre de personnel de la structure.
*/
public function getNbrePersonnel($id_structure) {
$donnees = $this->getStructureAPersonne($id_structure);
$personnel = $this->filtrerRoleEquipe($donnees['structuresAPersonne']);
$nbre_personnel = count($personnel);
return $nbre_personnel;
}
private function getStructureAPersonne($id_structure) {
$url = $this->url_jrest.self::SERVICE_STRUCTURE_A_PERSONNE."/$id_structure";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
private function filtrerRoleEquipe($personnes) {
$personnel = array();
foreach ($personnes as $personne) {
if ($personne['csap_id_role'] == self::ROLE_EQUIPE) {
$personnel[] = $personne;
}
}
return $personnel;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/dao/SyndicationDao.php
New file
0,0 → 1,30
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données des Collections pour les flux de Syndication.
*
* @package Collection
* @category php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class SyndicationDao extends Dao {
const SERVICE = 'CoelSyndication';
/**
* Retourne l'ensemble des information sur les flux de syndication disponibles.
*
* @return array un tableau contenant les informations.
*/
public function getListeDesFlux() {
$url = $this->url_jrest.self::SERVICE.'/liste_des_flux';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
?>
/branches/v1.13-la-grande-rue/bibliotheque/dao/RechercheDao.php
New file
0,0 → 1,132
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données des Collections pour la Recherche
*
* @package Collection
* @category php5
* @author aurelien <aurelien@tela-botanica.org>
* @author mathias <mathias@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class RechercheDao extends Dao {
const SERVICE = 'CoelRecherche';
 
/** @deprecated retro-compatibilité */
public function chercherStructureNbre($parametres) {
return $this->chercherCollectionsNbre($parametres);
}
/** @deprecated retro-compatibilité */
public function chercher($parametres) {
return $this->chercherCollections($parametres);
}
 
// recherche du nombre de collections : nouveau
public function chercherCollectionsNbre($parametres) {
$url = $this->construireUrlRechercheCollections('NombreCollections', $parametres, false);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
 
// recherche du nombre de personnes : nouveau
public function chercherPersonnesNbre($parametres) {
$url = $this->construireUrlRecherchePersonnes('NombrePersonnes', $parametres, false);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
// recherche du nombre de publications : nouveau
public function chercherPublicationsNbre($parametres) {
$url = $this->construireUrlRecherchePublications('NombrePublications', $parametres, false);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
// recherche de collections : nouveau
public function chercherCollections($parametres) {
$url = $this->construireUrlRechercheCollections('Collections', $parametres);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
 
// recherche de personnes : nouveau
public function chercherPersonnes($parametres) {
$url = $this->construireUrlRecherchePersonnes('Personnes', $parametres);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
// recherche de publications : nouveau
public function chercherPublications($parametres) {
$url = $this->construireUrlRecherchePublications('Publications', $parametres);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
// construit l'URL du service CoelRecherche pour obtenir des collections
// Attention au nombre et à l'ordre des paramètres !
private function construireUrlRechercheCollections($type, $parametres, $limitation = true) {
return $this->construireUrlRecherche(
$type,
$parametres,
$limitation,
array('mots', 'sci', 'bot', 'lieu-stockage', 'zg', 'p', 'pr', 'str-d', 'veg')
);
}
 
// construit l'URL du service CoelRecherche pour obtenir des personnes
// Attention au nombre et à l'ordre des paramètres !
private function construireUrlRecherchePersonnes($type, $parametres, $limitation = true) {
return $this->construireUrlRecherche(
$type,
$parametres,
$limitation,
array('nom-famille', 'adresse', 'date-vivant')
);
}
// construit l'URL du service CoelRecherche pour obtenir des publications
// Attention au nombre et à l'ordre des paramètres !
private function construireUrlRecherchePublications($type, $parametres, $limitation = true) {
return $this->construireUrlRecherche(
$type,
$parametres,
$limitation,
array('libre', 'titre', 'auteur', 'mot-cle', 'ouvrage', 'date')
);
}
 
// fabrique une URL pour le service CoelRecherche en collant les paramètres fournis (sinon "*")
// dans l'ordre attendu par le service demandé ($type)
private function construireUrlRecherche($type, $parametres, $limitation, $paramsAPasser) {
 
$url = $this->url_jrest . self::SERVICE . '/' . $type;
 
foreach ($paramsAPasser as $param_cle) {
if (isset($parametres[$param_cle]) && $parametres[$param_cle] != '') {
$valeur = rawurlencode(trim($parametres[$param_cle]));
$url .= '/'.$valeur;
} else {
$url .= '/*';
}
}
return $url;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/dao/PersonneDao.php
New file
0,0 → 1,183
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données des Collections pour le module Personnes.
*
* @package Collection
* @category php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*
*/
class PersonneDao extends Dao {
const SERVICE_PERSONNE = 'CoelPersonne';
const SERVICE_PERSONNE_A_PUBLICATION = 'CoelPublicationAPersonne';
const SERVICE_PERSONNE_A_COLLECTION = 'CoelCollectionAPersonne';
const SERVICE_PERSONNE_A_STRUCTURE = 'CoelStructureAPersonne';
private $cache = array();
 
/**
* Retourne l'ensemble des information d'une personne.
*
* @param integer l'id de la personne.
* @return array un tableau contenant les informations sur la personne.
*/
public function getPersonne($id) {
$donnees = array();
if (is_numeric($id)) {
$url = $this->url_jrest.self::SERVICE_PERSONNE."/$id";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
if ($donnees['nbElements'] == 1) {
$donnees = $donnees['personnes'][0];
}
}
return $donnees;
}
/**
* Retourne l'ensemble des publications liées à une personne.
*
* @param integer l'id de la personne.
* @return array un tableau contenant les informations sur les publications liées à la personne.
*/
public function getPublicationsLiees($id_personne) {
$donnees = $this->getPersonneAPublication($id_personne);
return $donnees['publicationsAPersonne'];
}
/**
* Retourne le nombre des publications liées à une personne.
*
* @param integer l'id de la personne.
* @return integer le nombre de publications liées à la personne.
*/
public function getNbrePublicationsLiees($id_personne) {
$donnees = $this->getPersonneAPublication($id_personne);
return $donnees['nbElements'];
}
private function getPersonneAPublication($id_personne) {
$cache =& $this->cache['PersonneAPublication'];
if (isset($cache[$id_personne])) {
$donnees = $cache[$id_personne];
} else {
$url = $this->url_jrest.self::SERVICE_PERSONNE_A_PUBLICATION."/*/$id_personne/";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
$cache[$id_personne] = $donnees;
}
return $donnees;
}
/**
* Retourne l'ensemble des collections liées à une personne.
*
* @param integer l'id de la personne.
* @return array un tableau contenant les informations sur les collections liées à la personne.
*/
public function getCollectionsLiees($id_personne) {
$donnees = $this->getPersonneACollection($id_personne);
return $donnees['collectionsAPersonne'];
}
/**
* Retourne le nombre de collections liées à une personne.
*
* @param integer l'id de la personne.
* @return integer le nombre de collections liées à la personne.
*/
public function getNbreCollectionsLiees($id_personne) {
$donnees = $this->getPersonneACollection($id_personne);
return $donnees['nbElements'];
}
private function getPersonneACollection($id_personne) {
$cache =& $this->cache['PersonneACollection'];
if (isset($cache[$id_personne])) {
$donnees = $cache[$id_personne];
} else {
$url = $this->url_jrest.self::SERVICE_PERSONNE_A_COLLECTION."/*/*/$id_personne";
$this->addOrdre('cc_nom', self::ORDRE_ASCENDANT);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
$cache[$id_personne] = $donnees;
}
return $donnees;
}
/**
* Retourne l'ensemble des structures liées à une personne.
*
* @param integer l'id de la personne.
* @return array un tableau contenant les informations sur les structures liées à la personne.
*/
public function getStructuresLiees($id_personne) {
$donnees = $this->getPersonneAStructure($id_personne);
return $donnees['structuresAPersonne'];
}
/**
* Retourne le nombre de structures liées à une personne.
*
* @param integer l'id de la personne.
* @return integer le nombre de structures liées à la personne.
*/
public function getNbreStructuresLiees($id_personne) {
$donnees = $this->getPersonneAStructure($id_personne);
return $donnees['nbElements'];
}
private function getPersonneAStructure($id_personne) {
$cache =& $this->cache['PersonneAStructure'];
if (isset($cache[$id_personne])) {
$donnees = $cache[$id_personne];
} else {
$url = $this->url_jrest.self::SERVICE_PERSONNE_A_STRUCTURE."/*/*/$id_personne";
$this->addOrdre('cp_nom', self::ORDRE_ASCENDANT);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
$cache[$id_personne] = $donnees;
}
return $donnees;
}
/**
* Retourne le nom complet d'une personne.
*
* @param integer l'id de la personne.
* @return string le nom complet de la personne.
*/
public function getPersonneNomComplet($id) {
$nom_complet = '';
$donnees = $this->getPersonne($id);
if (isset($donnees['nbElements']) && $donnees['nbElements'] >= 1) {
$nom_complet = $donnees['personnes'][0]['cp_fmt_nom_complet'];
} else if (isset($donnees['cp_fmt_nom_complet'])) {
$nom_complet = $donnees['cp_fmt_nom_complet'];
}
return $nom_complet;
}
/**
* Retourne la chaine "truk" des courriels d'une personne.
*
* @param integer l'id de la personne.
* @return string la chaine "truk" des courriels de la personne.
*/
public function getPersonneCourriels($id) {
$courriels = '';
$donnees = $this->getPersonne($id);
if (isset($donnees['nbElements']) && $donnees['nbElements'] >= 1) {
$courriels = $donnees['personnes'][0]['cp_truk_courriel'];
} else if (isset($donnees['cp_truk_courriel'])) {
$courriels = $donnees['cp_truk_courriel'];
}
return $courriels;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/A_LIRE.txt
New file
0,0 → 1,4
Paquetages PEAR :
PEAR -> 1.6.2
Pager -> 2.4.4
Auth -> 1.5.4
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:eol-style
+native
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/PEAR.php
New file
0,0 → 1,1108
<?php
/**
* PEAR, the PHP Extension and Application Repository
*
* PEAR class and PEAR_Error class
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
* @category pear
* @package PEAR
* @author Sterling Hughes <sterling@php.net>
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id$
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
 
/**#@+
* ERROR constants
*/
define('PEAR_ERROR_RETURN', 1);
define('PEAR_ERROR_PRINT', 2);
define('PEAR_ERROR_TRIGGER', 4);
define('PEAR_ERROR_DIE', 8);
define('PEAR_ERROR_CALLBACK', 16);
/**
* WARNING: obsolete
* @deprecated
*/
define('PEAR_ERROR_EXCEPTION', 32);
/**#@-*/
define('PEAR_ZE2', (function_exists('version_compare') &&
version_compare(zend_version(), "2-dev", "ge")));
 
if (substr(PHP_OS, 0, 3) == 'WIN') {
define('OS_WINDOWS', true);
define('OS_UNIX', false);
define('PEAR_OS', 'Windows');
} else {
define('OS_WINDOWS', false);
define('OS_UNIX', true);
define('PEAR_OS', 'Unix'); // blatant assumption
}
 
// instant backwards compatibility
if (!defined('PATH_SEPARATOR')) {
if (OS_WINDOWS) {
define('PATH_SEPARATOR', ';');
} else {
define('PATH_SEPARATOR', ':');
}
}
 
$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN;
$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE;
$GLOBALS['_PEAR_destructor_object_list'] = array();
$GLOBALS['_PEAR_shutdown_funcs'] = array();
$GLOBALS['_PEAR_error_handler_stack'] = array();
 
@ini_set('track_errors', true);
 
/**
* Base class for other PEAR classes. Provides rudimentary
* emulation of destructors.
*
* If you want a destructor in your class, inherit PEAR and make a
* destructor method called _yourclassname (same name as the
* constructor, but with a "_" prefix). Also, in your constructor you
* have to call the PEAR constructor: $this->PEAR();.
* The destructor method will be called without parameters. Note that
* at in some SAPI implementations (such as Apache), any output during
* the request shutdown (in which destructors are called) seems to be
* discarded. If you need to get any debug information from your
* destructor, use error_log(), syslog() or something similar.
*
* IMPORTANT! To use the emulated destructors you need to create the
* objects by reference: $obj =& new PEAR_child;
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V. Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version Release: 1.6.1
* @link http://pear.php.net/package/PEAR
* @see PEAR_Error
* @since Class available since PHP 4.0.2
* @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear
*/
class PEAR
{
// {{{ properties
 
/**
* Whether to enable internal debug messages.
*
* @var bool
* @access private
*/
var $_debug = false;
 
/**
* Default error mode for this object.
*
* @var int
* @access private
*/
var $_default_error_mode = null;
 
/**
* Default error options used for this object when error mode
* is PEAR_ERROR_TRIGGER.
*
* @var int
* @access private
*/
var $_default_error_options = null;
 
/**
* Default error handler (callback) for this object, if error mode is
* PEAR_ERROR_CALLBACK.
*
* @var string
* @access private
*/
var $_default_error_handler = '';
 
/**
* Which class to use for error objects.
*
* @var string
* @access private
*/
var $_error_class = 'PEAR_Error';
 
/**
* An array of expected errors.
*
* @var array
* @access private
*/
var $_expected_errors = array();
 
// }}}
 
// {{{ constructor
 
/**
* Constructor. Registers this object in
* $_PEAR_destructor_object_list for destructor emulation if a
* destructor object exists.
*
* @param string $error_class (optional) which class to use for
* error objects, defaults to PEAR_Error.
* @access public
* @return void
*/
function PEAR($error_class = null)
{
$classname = strtolower(get_class($this));
if ($this->_debug) {
print "PEAR constructor called, class=$classname\n";
}
if ($error_class !== null) {
$this->_error_class = $error_class;
}
while ($classname && strcasecmp($classname, "pear")) {
$destructor = "_$classname";
if (method_exists($this, $destructor)) {
global $_PEAR_destructor_object_list;
$_PEAR_destructor_object_list[] = &$this;
if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
register_shutdown_function("_PEAR_call_destructors");
$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
}
break;
} else {
$classname = get_parent_class($classname);
}
}
}
 
// }}}
// {{{ destructor
 
/**
* Destructor (the emulated type of...). Does nothing right now,
* but is included for forward compatibility, so subclass
* destructors should always call it.
*
* See the note in the class desciption about output from
* destructors.
*
* @access public
* @return void
*/
function _PEAR() {
if ($this->_debug) {
printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
}
}
 
// }}}
// {{{ getStaticProperty()
 
/**
* If you have a class that's mostly/entirely static, and you need static
* properties, you can use this method to simulate them. Eg. in your method(s)
* do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
* You MUST use a reference, or they will not persist!
*
* @access public
* @param string $class The calling classname, to prevent clashes
* @param string $var The variable to retrieve.
* @return mixed A reference to the variable. If not set it will be
* auto initialised to NULL.
*/
function &getStaticProperty($class, $var)
{
static $properties;
if (!isset($properties[$class])) {
$properties[$class] = array();
}
if (!array_key_exists($var, $properties[$class])) {
$properties[$class][$var] = null;
}
return $properties[$class][$var];
}
 
// }}}
// {{{ registerShutdownFunc()
 
/**
* Use this function to register a shutdown method for static
* classes.
*
* @access public
* @param mixed $func The function name (or array of class/method) to call
* @param mixed $args The arguments to pass to the function
* @return void
*/
function registerShutdownFunc($func, $args = array())
{
// if we are called statically, there is a potential
// that no shutdown func is registered. Bug #6445
if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
register_shutdown_function("_PEAR_call_destructors");
$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
}
$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
}
 
// }}}
// {{{ isError()
 
/**
* Tell whether a value is a PEAR error.
*
* @param mixed $data the value to test
* @param int $code if $data is an error object, return true
* only if $code is a string and
* $obj->getMessage() == $code or
* $code is an integer and $obj->getCode() == $code
* @access public
* @return bool true if parameter is an error
*/
function isError($data, $code = null)
{
if (is_a($data, 'PEAR_Error')) {
if (is_null($code)) {
return true;
} elseif (is_string($code)) {
return $data->getMessage() == $code;
} else {
return $data->getCode() == $code;
}
}
return false;
}
 
// }}}
// {{{ setErrorHandling()
 
/**
* Sets how errors generated by this object should be handled.
* Can be invoked both in objects and statically. If called
* statically, setErrorHandling sets the default behaviour for all
* PEAR objects. If called in an object, setErrorHandling sets
* the default behaviour for that object.
*
* @param int $mode
* One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
* PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
* PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
*
* @param mixed $options
* When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
* of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
*
* When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
* to be the callback function or method. A callback
* function is a string with the name of the function, a
* callback method is an array of two elements: the element
* at index 0 is the object, and the element at index 1 is
* the name of the method to call in the object.
*
* When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
* a printf format string used when printing the error
* message.
*
* @access public
* @return void
* @see PEAR_ERROR_RETURN
* @see PEAR_ERROR_PRINT
* @see PEAR_ERROR_TRIGGER
* @see PEAR_ERROR_DIE
* @see PEAR_ERROR_CALLBACK
* @see PEAR_ERROR_EXCEPTION
*
* @since PHP 4.0.5
*/
 
function setErrorHandling($mode = null, $options = null)
{
if (isset($this) && is_a($this, 'PEAR')) {
$setmode = &$this->_default_error_mode;
$setoptions = &$this->_default_error_options;
} else {
$setmode = &$GLOBALS['_PEAR_default_error_mode'];
$setoptions = &$GLOBALS['_PEAR_default_error_options'];
}
 
switch ($mode) {
case PEAR_ERROR_EXCEPTION:
case PEAR_ERROR_RETURN:
case PEAR_ERROR_PRINT:
case PEAR_ERROR_TRIGGER:
case PEAR_ERROR_DIE:
case null:
$setmode = $mode;
$setoptions = $options;
break;
 
case PEAR_ERROR_CALLBACK:
$setmode = $mode;
// class/object method callback
if (is_callable($options)) {
$setoptions = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
}
break;
 
default:
trigger_error("invalid error mode", E_USER_WARNING);
break;
}
}
 
// }}}
// {{{ expectError()
 
/**
* This method is used to tell which errors you expect to get.
* Expected errors are always returned with error mode
* PEAR_ERROR_RETURN. Expected error codes are stored in a stack,
* and this method pushes a new element onto it. The list of
* expected errors are in effect until they are popped off the
* stack with the popExpect() method.
*
* Note that this method can not be called statically
*
* @param mixed $code a single error code or an array of error codes to expect
*
* @return int the new depth of the "expected errors" stack
* @access public
*/
function expectError($code = '*')
{
if (is_array($code)) {
array_push($this->_expected_errors, $code);
} else {
array_push($this->_expected_errors, array($code));
}
return sizeof($this->_expected_errors);
}
 
// }}}
// {{{ popExpect()
 
/**
* This method pops one element off the expected error codes
* stack.
*
* @return array the list of error codes that were popped
*/
function popExpect()
{
return array_pop($this->_expected_errors);
}
 
// }}}
// {{{ _checkDelExpect()
 
/**
* This method checks unsets an error code if available
*
* @param mixed error code
* @return bool true if the error code was unset, false otherwise
* @access private
* @since PHP 4.3.0
*/
function _checkDelExpect($error_code)
{
$deleted = false;
 
foreach ($this->_expected_errors AS $key => $error_array) {
if (in_array($error_code, $error_array)) {
unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
$deleted = true;
}
 
// clean up empty arrays
if (0 == count($this->_expected_errors[$key])) {
unset($this->_expected_errors[$key]);
}
}
return $deleted;
}
 
// }}}
// {{{ delExpect()
 
/**
* This method deletes all occurences of the specified element from
* the expected error codes stack.
*
* @param mixed $error_code error code that should be deleted
* @return mixed list of error codes that were deleted or error
* @access public
* @since PHP 4.3.0
*/
function delExpect($error_code)
{
$deleted = false;
 
if ((is_array($error_code) && (0 != count($error_code)))) {
// $error_code is a non-empty array here;
// we walk through it trying to unset all
// values
foreach($error_code as $key => $error) {
if ($this->_checkDelExpect($error)) {
$deleted = true;
} else {
$deleted = false;
}
}
return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
} elseif (!empty($error_code)) {
// $error_code comes alone, trying to unset it
if ($this->_checkDelExpect($error_code)) {
return true;
} else {
return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
}
} else {
// $error_code is empty
return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
}
}
 
// }}}
// {{{ raiseError()
 
/**
* This method is a wrapper that returns an instance of the
* configured error class with this object's default error
* handling applied. If the $mode and $options parameters are not
* specified, the object's defaults are used.
*
* @param mixed $message a text error message or a PEAR error object
*
* @param int $code a numeric error code (it is up to your class
* to define these if you want to use codes)
*
* @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
* PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
* PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
*
* @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
* specifies the PHP-internal error level (one of
* E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
* If $mode is PEAR_ERROR_CALLBACK, this
* parameter specifies the callback function or
* method. In other error modes this parameter
* is ignored.
*
* @param string $userinfo If you need to pass along for example debug
* information, this parameter is meant for that.
*
* @param string $error_class The returned error object will be
* instantiated from this class, if specified.
*
* @param bool $skipmsg If true, raiseError will only pass error codes,
* the error message parameter will be dropped.
*
* @access public
* @return object a PEAR error object
* @see PEAR::setErrorHandling
* @since PHP 4.0.5
*/
function &raiseError($message = null,
$code = null,
$mode = null,
$options = null,
$userinfo = null,
$error_class = null,
$skipmsg = false)
{
// The error is yet a PEAR error object
if (is_object($message)) {
$code = $message->getCode();
$userinfo = $message->getUserInfo();
$error_class = $message->getType();
$message->error_message_prefix = '';
$message = $message->getMessage();
}
 
if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
if ($exp[0] == "*" ||
(is_int(reset($exp)) && in_array($code, $exp)) ||
(is_string(reset($exp)) && in_array($message, $exp))) {
$mode = PEAR_ERROR_RETURN;
}
}
// No mode given, try global ones
if ($mode === null) {
// Class error handler
if (isset($this) && isset($this->_default_error_mode)) {
$mode = $this->_default_error_mode;
$options = $this->_default_error_options;
// Global error handler
} elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
$mode = $GLOBALS['_PEAR_default_error_mode'];
$options = $GLOBALS['_PEAR_default_error_options'];
}
}
 
if ($error_class !== null) {
$ec = $error_class;
} elseif (isset($this) && isset($this->_error_class)) {
$ec = $this->_error_class;
} else {
$ec = 'PEAR_Error';
}
if ($skipmsg) {
$a = &new $ec($code, $mode, $options, $userinfo);
return $a;
} else {
$a = &new $ec($message, $code, $mode, $options, $userinfo);
return $a;
}
}
 
// }}}
// {{{ throwError()
 
/**
* Simpler form of raiseError with fewer options. In most cases
* message, code and userinfo are enough.
*
* @param string $message
*
*/
function &throwError($message = null,
$code = null,
$userinfo = null)
{
if (isset($this) && is_a($this, 'PEAR')) {
$a = &$this->raiseError($message, $code, null, null, $userinfo);
return $a;
} else {
$a = &PEAR::raiseError($message, $code, null, null, $userinfo);
return $a;
}
}
 
// }}}
function staticPushErrorHandling($mode, $options = null)
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
$def_mode = &$GLOBALS['_PEAR_default_error_mode'];
$def_options = &$GLOBALS['_PEAR_default_error_options'];
$stack[] = array($def_mode, $def_options);
switch ($mode) {
case PEAR_ERROR_EXCEPTION:
case PEAR_ERROR_RETURN:
case PEAR_ERROR_PRINT:
case PEAR_ERROR_TRIGGER:
case PEAR_ERROR_DIE:
case null:
$def_mode = $mode;
$def_options = $options;
break;
 
case PEAR_ERROR_CALLBACK:
$def_mode = $mode;
// class/object method callback
if (is_callable($options)) {
$def_options = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
}
break;
 
default:
trigger_error("invalid error mode", E_USER_WARNING);
break;
}
$stack[] = array($mode, $options);
return true;
}
 
function staticPopErrorHandling()
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
$setmode = &$GLOBALS['_PEAR_default_error_mode'];
$setoptions = &$GLOBALS['_PEAR_default_error_options'];
array_pop($stack);
list($mode, $options) = $stack[sizeof($stack) - 1];
array_pop($stack);
switch ($mode) {
case PEAR_ERROR_EXCEPTION:
case PEAR_ERROR_RETURN:
case PEAR_ERROR_PRINT:
case PEAR_ERROR_TRIGGER:
case PEAR_ERROR_DIE:
case null:
$setmode = $mode;
$setoptions = $options;
break;
 
case PEAR_ERROR_CALLBACK:
$setmode = $mode;
// class/object method callback
if (is_callable($options)) {
$setoptions = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
}
break;
 
default:
trigger_error("invalid error mode", E_USER_WARNING);
break;
}
return true;
}
 
// {{{ pushErrorHandling()
 
/**
* Push a new error handler on top of the error handler options stack. With this
* you can easily override the actual error handler for some code and restore
* it later with popErrorHandling.
*
* @param mixed $mode (same as setErrorHandling)
* @param mixed $options (same as setErrorHandling)
*
* @return bool Always true
*
* @see PEAR::setErrorHandling
*/
function pushErrorHandling($mode, $options = null)
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
if (isset($this) && is_a($this, 'PEAR')) {
$def_mode = &$this->_default_error_mode;
$def_options = &$this->_default_error_options;
} else {
$def_mode = &$GLOBALS['_PEAR_default_error_mode'];
$def_options = &$GLOBALS['_PEAR_default_error_options'];
}
$stack[] = array($def_mode, $def_options);
 
if (isset($this) && is_a($this, 'PEAR')) {
$this->setErrorHandling($mode, $options);
} else {
PEAR::setErrorHandling($mode, $options);
}
$stack[] = array($mode, $options);
return true;
}
 
// }}}
// {{{ popErrorHandling()
 
/**
* Pop the last error handler used
*
* @return bool Always true
*
* @see PEAR::pushErrorHandling
*/
function popErrorHandling()
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
array_pop($stack);
list($mode, $options) = $stack[sizeof($stack) - 1];
array_pop($stack);
if (isset($this) && is_a($this, 'PEAR')) {
$this->setErrorHandling($mode, $options);
} else {
PEAR::setErrorHandling($mode, $options);
}
return true;
}
 
// }}}
// {{{ loadExtension()
 
/**
* OS independant PHP extension load. Remember to take care
* on the correct extension name for case sensitive OSes.
*
* @param string $ext The extension name
* @return bool Success or not on the dl() call
*/
function loadExtension($ext)
{
if (!extension_loaded($ext)) {
// if either returns true dl() will produce a FATAL error, stop that
if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
return false;
}
if (OS_WINDOWS) {
$suffix = '.dll';
} elseif (PHP_OS == 'HP-UX') {
$suffix = '.sl';
} elseif (PHP_OS == 'AIX') {
$suffix = '.a';
} elseif (PHP_OS == 'OSX') {
$suffix = '.bundle';
} else {
$suffix = '.so';
}
return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
}
return true;
}
 
// }}}
}
 
// {{{ _PEAR_call_destructors()
 
function _PEAR_call_destructors()
{
global $_PEAR_destructor_object_list;
if (is_array($_PEAR_destructor_object_list) &&
sizeof($_PEAR_destructor_object_list))
{
reset($_PEAR_destructor_object_list);
if (PEAR::getStaticProperty('PEAR', 'destructlifo')) {
$_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
}
while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
$classname = get_class($objref);
while ($classname) {
$destructor = "_$classname";
if (method_exists($objref, $destructor)) {
$objref->$destructor();
break;
} else {
$classname = get_parent_class($classname);
}
}
}
// Empty the object list to ensure that destructors are
// not called more than once.
$_PEAR_destructor_object_list = array();
}
 
// Now call the shutdown functions
if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
call_user_func_array($value[0], $value[1]);
}
}
}
 
// }}}
/**
* Standard PEAR error class for PHP 4
*
* This class is supserseded by {@link PEAR_Exception} in PHP 5
*
* @category pear
* @package PEAR
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V. Cox <cox@idecnet.com>
* @author Gregory Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version Release: 1.6.1
* @link http://pear.php.net/manual/en/core.pear.pear-error.php
* @see PEAR::raiseError(), PEAR::throwError()
* @since Class available since PHP 4.0.2
*/
class PEAR_Error
{
// {{{ properties
 
var $error_message_prefix = '';
var $mode = PEAR_ERROR_RETURN;
var $level = E_USER_NOTICE;
var $code = -1;
var $message = '';
var $userinfo = '';
var $backtrace = null;
 
// }}}
// {{{ constructor
 
/**
* PEAR_Error constructor
*
* @param string $message message
*
* @param int $code (optional) error code
*
* @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN,
* PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
* PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
*
* @param mixed $options (optional) error level, _OR_ in the case of
* PEAR_ERROR_CALLBACK, the callback function or object/method
* tuple.
*
* @param string $userinfo (optional) additional user/debug info
*
* @access public
*
*/
function PEAR_Error($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null)
{
if ($mode === null) {
$mode = PEAR_ERROR_RETURN;
}
$this->message = $message;
$this->code = $code;
$this->mode = $mode;
$this->userinfo = $userinfo;
if (!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
$this->backtrace = debug_backtrace();
if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
unset($this->backtrace[0]['object']);
}
}
if ($mode & PEAR_ERROR_CALLBACK) {
$this->level = E_USER_NOTICE;
$this->callback = $options;
} else {
if ($options === null) {
$options = E_USER_NOTICE;
}
$this->level = $options;
$this->callback = null;
}
if ($this->mode & PEAR_ERROR_PRINT) {
if (is_null($options) || is_int($options)) {
$format = "%s";
} else {
$format = $options;
}
printf($format, $this->getMessage());
}
if ($this->mode & PEAR_ERROR_TRIGGER) {
trigger_error($this->getMessage(), $this->level);
}
if ($this->mode & PEAR_ERROR_DIE) {
$msg = $this->getMessage();
if (is_null($options) || is_int($options)) {
$format = "%s";
if (substr($msg, -1) != "\n") {
$msg .= "\n";
}
} else {
$format = $options;
}
die(sprintf($format, $msg));
}
if ($this->mode & PEAR_ERROR_CALLBACK) {
if (is_callable($this->callback)) {
call_user_func($this->callback, $this);
}
}
if ($this->mode & PEAR_ERROR_EXCEPTION) {
trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
eval('$e = new Exception($this->message, $this->code);throw($e);');
}
}
 
// }}}
// {{{ getMode()
 
/**
* Get the error mode from an error object.
*
* @return int error mode
* @access public
*/
function getMode() {
return $this->mode;
}
 
// }}}
// {{{ getCallback()
 
/**
* Get the callback function/method from an error object.
*
* @return mixed callback function or object/method array
* @access public
*/
function getCallback() {
return $this->callback;
}
 
// }}}
// {{{ getMessage()
 
 
/**
* Get the error message from an error object.
*
* @return string full error message
* @access public
*/
function getMessage()
{
return ($this->error_message_prefix . $this->message);
}
 
 
// }}}
// {{{ getCode()
 
/**
* Get error code from an error object
*
* @return int error code
* @access public
*/
function getCode()
{
return $this->code;
}
 
// }}}
// {{{ getType()
 
/**
* Get the name of this error/exception.
*
* @return string error/exception name (type)
* @access public
*/
function getType()
{
return get_class($this);
}
 
// }}}
// {{{ getUserInfo()
 
/**
* Get additional user-supplied information.
*
* @return string user-supplied information
* @access public
*/
function getUserInfo()
{
return $this->userinfo;
}
 
// }}}
// {{{ getDebugInfo()
 
/**
* Get additional debug information supplied by the application.
*
* @return string debug information
* @access public
*/
function getDebugInfo()
{
return $this->getUserInfo();
}
 
// }}}
// {{{ getBacktrace()
 
/**
* Get the call backtrace from where the error was generated.
* Supported with PHP 4.3.0 or newer.
*
* @param int $frame (optional) what frame to fetch
* @return array Backtrace, or NULL if not available.
* @access public
*/
function getBacktrace($frame = null)
{
if (defined('PEAR_IGNORE_BACKTRACE')) {
return null;
}
if ($frame === null) {
return $this->backtrace;
}
return $this->backtrace[$frame];
}
 
// }}}
// {{{ addUserInfo()
 
function addUserInfo($info)
{
if (empty($this->userinfo)) {
$this->userinfo = $info;
} else {
$this->userinfo .= " ** $info";
}
}
 
// }}}
// {{{ toString()
 
/**
* Make a string representation of this object.
*
* @return string a string with an object summary
* @access public
*/
function toString() {
$modes = array();
$levels = array(E_USER_NOTICE => 'notice',
E_USER_WARNING => 'warning',
E_USER_ERROR => 'error');
if ($this->mode & PEAR_ERROR_CALLBACK) {
if (is_array($this->callback)) {
$callback = (is_object($this->callback[0]) ?
strtolower(get_class($this->callback[0])) :
$this->callback[0]) . '::' .
$this->callback[1];
} else {
$callback = $this->callback;
}
return sprintf('[%s: message="%s" code=%d mode=callback '.
'callback=%s prefix="%s" info="%s"]',
strtolower(get_class($this)), $this->message, $this->code,
$callback, $this->error_message_prefix,
$this->userinfo);
}
if ($this->mode & PEAR_ERROR_PRINT) {
$modes[] = 'print';
}
if ($this->mode & PEAR_ERROR_TRIGGER) {
$modes[] = 'trigger';
}
if ($this->mode & PEAR_ERROR_DIE) {
$modes[] = 'die';
}
if ($this->mode & PEAR_ERROR_RETURN) {
$modes[] = 'return';
}
return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
'prefix="%s" info="%s"]',
strtolower(get_class($this)), $this->message, $this->code,
implode("|", $modes), $levels[$this->level],
$this->error_message_prefix,
$this->userinfo);
}
 
// }}}
}
 
/*
* Local Variables:
* mode: php
* tab-width: 4
* c-basic-offset: 4
* End:
*/
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/Pager/Pager_savebc.php
New file
0,0 → 1,3
<?php
require_once 'Pager.php';
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/Pager/Common.php
New file
0,0 → 1,1539
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* Contains the Pager_Common class
*
* PHP versions 4 and 5
*
* LICENSE: Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @author Richard Heyes <richard@phpguru.org>
* @copyright 2003-2006 Lorenzo Alberton, Richard Heyes
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @version CVS: $Id$
* @link http://pear.php.net/package/Pager
*/
 
/**
* Two constants used to guess the path- and file-name of the page
* when the user doesn't set any other value
*/
if (substr($_SERVER['PHP_SELF'], -1) == '/') {
$http = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://';
define('CURRENT_FILENAME', '');
define('CURRENT_PATHNAME', $http.$_SERVER['HTTP_HOST'].str_replace('\\', '/', $_SERVER['PHP_SELF']));
} else {
define('CURRENT_FILENAME', preg_replace('/(.*)\?.*/', '\\1', basename($_SERVER['PHP_SELF'])));
define('CURRENT_PATHNAME', str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])));
}
/**
* Error codes
*/
define('PAGER_OK', 0);
define('ERROR_PAGER', -1);
define('ERROR_PAGER_INVALID', -2);
define('ERROR_PAGER_INVALID_PLACEHOLDER', -3);
define('ERROR_PAGER_INVALID_USAGE', -4);
define('ERROR_PAGER_NOT_IMPLEMENTED', -5);
 
/**
* Pager_Common - Common base class for [Sliding|Jumping] Window Pager
* Extend this class to write a custom paging class
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @author Richard Heyes <richard@phpguru.org>
* @copyright 2003-2005 Lorenzo Alberton, Richard Heyes
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @link http://pear.php.net/package/Pager
*/
class Pager_Common
{
// {{{ class vars
 
/**
* @var integer number of items
* @access private
*/
var $_totalItems;
 
/**
* @var integer number of items per page
* @access private
*/
var $_perPage = 10;
 
/**
* @var integer number of page links for each window
* @access private
*/
var $_delta = 10;
 
/**
* @var integer current page number
* @access private
*/
var $_currentPage = 1;
 
/**
* @var integer total pages number
* @access private
*/
var $_totalPages = 1;
 
/**
* @var string CSS class for links
* @access private
*/
var $_linkClass = '';
 
/**
* @var string wrapper for CSS class name
* @access private
*/
var $_classString = '';
 
/**
* @var string path name
* @access private
*/
var $_path = CURRENT_PATHNAME;
 
/**
* @var string file name
* @access private
*/
var $_fileName = CURRENT_FILENAME;
/**
* @var boolean If false, don't override the fileName option. Use at your own risk.
* @access private
*/
var $_fixFileName = true;
 
/**
* @var boolean you have to use FALSE with mod_rewrite
* @access private
*/
var $_append = true;
 
/**
* @var string specifies which HTTP method to use
* @access private
*/
var $_httpMethod = 'GET';
/**
* @var string specifies which HTML form to use
* @access private
*/
var $_formID = '';
 
/**
* @var boolean whether or not to import submitted data
* @access private
*/
var $_importQuery = true;
 
/**
* @var string name of the querystring var for pageID
* @access private
*/
var $_urlVar = 'pageID';
 
/**
* @var array data to pass through the link
* @access private
*/
var $_linkData = array();
 
/**
* @var array additional URL vars
* @access private
*/
var $_extraVars = array();
/**
* @var array URL vars to ignore
* @access private
*/
var $_excludeVars = array();
 
/**
* @var boolean TRUE => expanded mode (for Pager_Sliding)
* @access private
*/
var $_expanded = true;
/**
* @var boolean TRUE => show accesskey attribute on <a> tags
* @access private
*/
var $_accesskey = false;
 
/**
* @var string extra attributes for the <a> tag
* @access private
*/
var $_attributes = '';
/**
* @var string onclick
* @access private
*/
var $_onclick = '';
 
/**
* @var string alt text for "first page" (use "%d" placeholder for page number)
* @access private
*/
var $_altFirst = 'first page';
 
/**
* @var string alt text for "previous page"
* @access private
*/
var $_altPrev = 'previous page';
 
/**
* @var string alt text for "next page"
* @access private
*/
var $_altNext = 'next page';
 
/**
* @var string alt text for "last page" (use "%d" placeholder for page number)
* @access private
*/
var $_altLast = 'last page';
 
/**
* @var string alt text for "page"
* @access private
*/
var $_altPage = 'page';
 
/**
* @var string image/text to use as "prev" link
* @access private
*/
var $_prevImg = '&lt;&lt; Back';
 
/**
* @var string image/text to use as "next" link
* @access private
*/
var $_nextImg = 'Next &gt;&gt;';
 
/**
* @var string link separator
* @access private
*/
var $_separator = '';
 
/**
* @var integer number of spaces before separator
* @access private
*/
var $_spacesBeforeSeparator = 0;
 
/**
* @var integer number of spaces after separator
* @access private
*/
var $_spacesAfterSeparator = 1;
 
/**
* @var string CSS class name for current page link
* @access private
*/
var $_curPageLinkClassName = '';
 
/**
* @var string Text before current page link
* @access private
*/
var $_curPageSpanPre = '';
 
/**
* @var string Text after current page link
* @access private
*/
var $_curPageSpanPost = '';
 
/**
* @var string Text before first page link
* @access private
*/
var $_firstPagePre = '[';
 
/**
* @var string Text to be used for first page link
* @access private
*/
var $_firstPageText = '';
 
/**
* @var string Text after first page link
* @access private
*/
var $_firstPagePost = ']';
 
/**
* @var string Text before last page link
* @access private
*/
var $_lastPagePre = '[';
 
/**
* @var string Text to be used for last page link
* @access private
*/
var $_lastPageText = '';
 
/**
* @var string Text after last page link
* @access private
*/
var $_lastPagePost = ']';
 
/**
* @var string Will contain the HTML code for the spaces
* @access private
*/
var $_spacesBefore = '';
 
/**
* @var string Will contain the HTML code for the spaces
* @access private
*/
var $_spacesAfter = '';
 
/**
* @var string $_firstLinkTitle
* @access private
*/
var $_firstLinkTitle = 'first page';
 
/**
* @var string $_nextLinkTitle
* @access private
*/
var $_nextLinkTitle = 'next page';
 
/**
* @var string $_prevLinkTitle
* @access private
*/
var $_prevLinkTitle = 'previous page';
 
/**
* @var string $_lastLinkTitle
* @access private
*/
var $_lastLinkTitle = 'last page';
 
/**
* @var string Text to be used for the 'show all' option in the select box
* @access private
*/
var $_showAllText = '';
 
/**
* @var array data to be paged
* @access private
*/
var $_itemData = null;
 
/**
* @var boolean If TRUE and there's only one page, links aren't shown
* @access private
*/
var $_clearIfVoid = true;
 
/**
* @var boolean Use session for storing the number of items per page
* @access private
*/
var $_useSessions = false;
 
/**
* @var boolean Close the session when finished reading/writing data
* @access private
*/
var $_closeSession = false;
 
/**
* @var string name of the session var for number of items per page
* @access private
*/
var $_sessionVar = 'setPerPage';
 
/**
* Pear error mode (when raiseError is called)
* (see PEAR doc)
*
* @var int $_pearErrorMode
* @access private
*/
var $_pearErrorMode = null;
 
// }}}
// {{{ public vars
 
/**
* @var string Complete set of links
* @access public
*/
var $links = '';
 
/**
* @var string Complete set of link tags
* @access public
*/
var $linkTags = '';
 
/**
* @var array Array with a key => value pair representing
* page# => bool value (true if key==currentPageNumber).
* can be used for extreme customization.
* @access public
*/
var $range = array();
/**
* @var array list of available options (safety check)
* @access private
*/
var $_allowed_options = array(
'totalItems',
'perPage',
'delta',
'linkClass',
'path',
'fileName',
'fixFileName',
'append',
'httpMethod',
'formID',
'importQuery',
'urlVar',
'altFirst',
'altPrev',
'altNext',
'altLast',
'altPage',
'prevImg',
'nextImg',
'expanded',
'accesskey',
'attributes',
'onclick',
'separator',
'spacesBeforeSeparator',
'spacesAfterSeparator',
'curPageLinkClassName',
'curPageSpanPre',
'curPageSpanPost',
'firstPagePre',
'firstPageText',
'firstPagePost',
'lastPagePre',
'lastPageText',
'lastPagePost',
'firstLinkTitle',
'nextLinkTitle',
'prevLinkTitle',
'lastLinkTitle',
'showAllText',
'itemData',
'clearIfVoid',
'useSessions',
'closeSession',
'sessionVar',
'pearErrorMode',
'extraVars',
'excludeVars',
'currentPage',
);
 
// }}}
// {{{ build()
 
/**
* Generate or refresh the links and paged data after a call to setOptions()
*
* @access public
*/
function build()
{
//reset
$this->_pageData = array();
$this->links = '';
 
$this->_generatePageData();
$this->_setFirstLastText();
 
if ($this->_totalPages > (2 * $this->_delta + 1)) {
$this->links .= $this->_printFirstPage();
}
 
$this->links .= $this->_getBackLink();
$this->links .= $this->_getPageLinks();
$this->links .= $this->_getNextLink();
 
$this->linkTags .= $this->_getFirstLinkTag();
$this->linkTags .= $this->_getPrevLinkTag();
$this->linkTags .= $this->_getNextLinkTag();
$this->linkTags .= $this->_getLastLinkTag();
 
if ($this->_totalPages > (2 * $this->_delta + 1)) {
$this->links .= $this->_printLastPage();
}
}
 
// }}}
// {{{ getPageData()
 
/**
* Returns an array of current pages data
*
* @param $pageID Desired page ID (optional)
* @return array Page data
* @access public
*/
function getPageData($pageID = null)
{
$pageID = empty($pageID) ? $this->_currentPage : $pageID;
 
if (!isset($this->_pageData)) {
$this->_generatePageData();
}
if (!empty($this->_pageData[$pageID])) {
return $this->_pageData[$pageID];
}
return array();
}
 
// }}}
// {{{ getPageIdByOffset()
 
/**
* Returns pageID for given offset
*
* @param $index Offset to get pageID for
* @return int PageID for given offset
*/
function getPageIdByOffset($index)
{
$msg = '<b>PEAR::Pager Error:</b>'
.' function "getPageIdByOffset()" not implemented.';
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED);
}
 
// }}}
// {{{ getOffsetByPageId()
 
/**
* Returns offsets for given pageID. Eg, if you
* pass it pageID one and your perPage limit is 10
* it will return (1, 10). PageID of 2 would
* give you (11, 20).
*
* @param integer PageID to get offsets for
* @return array First and last offsets
* @access public
*/
function getOffsetByPageId($pageid = null)
{
$pageid = isset($pageid) ? $pageid : $this->_currentPage;
if (!isset($this->_pageData)) {
$this->_generatePageData();
}
 
if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) {
return array(
max(($this->_perPage * ($pageid - 1)) + 1, 1),
min($this->_totalItems, $this->_perPage * $pageid)
);
} else {
return array(0, 0);
}
}
 
// }}}
// {{{ getPageRangeByPageId()
 
/**
* @param integer PageID to get offsets for
* @return array First and last offsets
*/
function getPageRangeByPageId($pageID)
{
$msg = '<b>PEAR::Pager Error:</b>'
.' function "getPageRangeByPageId()" not implemented.';
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED);
}
 
// }}}
// {{{ getLinks()
 
/**
* Returns back/next/first/last and page links,
* both as ordered and associative array.
*
* NB: in original PEAR::Pager this method accepted two parameters,
* $back_html and $next_html. Now the only parameter accepted is
* an integer ($pageID), since the html text for prev/next links can
* be set in the factory. If a second parameter is provided, then
* the method act as it previously did. This hack was done to mantain
* backward compatibility only.
*
* @param integer $pageID Optional pageID. If specified, links
* for that page are provided instead of current one. [ADDED IN NEW PAGER VERSION]
* @param string $next_html HTML to put inside the next link [deprecated: use the factory instead]
* @return array back/next/first/last and page links
*/
function getLinks($pageID=null, $next_html='')
{
$msg = '<b>PEAR::Pager Error:</b>'
.' function "getLinks()" not implemented.';
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED);
}
 
// }}}
// {{{ getCurrentPageID()
 
/**
* Returns ID of current page
*
* @return integer ID of current page
*/
function getCurrentPageID()
{
return $this->_currentPage;
}
 
// }}}
// {{{ getNextPageID()
 
/**
* Returns next page ID. If current page is last page
* this function returns FALSE
*
* @return mixed Next page ID
*/
function getNextPageID()
{
return ($this->getCurrentPageID() == $this->numPages() ? false : $this->getCurrentPageID() + 1);
}
 
// }}}
// {{{ getPreviousPageID()
 
/**
* Returns previous page ID. If current page is first page
* this function returns FALSE
*
* @return mixed Previous pages' ID
*/
function getPreviousPageID()
{
return $this->isFirstPage() ? false : $this->getCurrentPageID() - 1;
}
 
// }}}
// {{{ numItems()
 
/**
* Returns number of items
*
* @return int Number of items
*/
function numItems()
{
return $this->_totalItems;
}
 
// }}}
// {{{ numPages()
 
/**
* Returns number of pages
*
* @return int Number of pages
*/
function numPages()
{
return (int)$this->_totalPages;
}
 
// }}}
// {{{ isFirstPage()
 
/**
* Returns whether current page is first page
*
* @return bool First page or not
*/
function isFirstPage()
{
return ($this->_currentPage < 2);
}
 
// }}}
// {{{ isLastPage()
 
/**
* Returns whether current page is last page
*
* @return bool Last page or not
*/
function isLastPage()
{
return ($this->_currentPage == $this->_totalPages);
}
 
// }}}
// {{{ isLastPageComplete()
 
/**
* Returns whether last page is complete
*
* @return bool Last age complete or not
*/
function isLastPageComplete()
{
return !($this->_totalItems % $this->_perPage);
}
 
// }}}
// {{{ _generatePageData()
 
/**
* Calculates all page data
* @access private
*/
function _generatePageData()
{
// Been supplied an array of data?
if (!is_null($this->_itemData)) {
$this->_totalItems = count($this->_itemData);
}
$this->_totalPages = ceil((float)$this->_totalItems / (float)$this->_perPage);
$i = 1;
if (!empty($this->_itemData)) {
foreach ($this->_itemData as $key => $value) {
$this->_pageData[$i][$key] = $value;
if (count($this->_pageData[$i]) >= $this->_perPage) {
$i++;
}
}
} else {
$this->_pageData = array();
}
 
//prevent URL modification
$this->_currentPage = min($this->_currentPage, $this->_totalPages);
}
 
// }}}
// {{{ _renderLink()
 
/**
* Renders a link using the appropriate method
*
* @param altText Alternative text for this link (title property)
* @param linkText Text contained by this link
* @return string The link in string form
* @access private
*/
function _renderLink($altText, $linkText)
{
if ($this->_httpMethod == 'GET') {
if ($this->_append) {
$href = '?' . $this->_http_build_query_wrapper($this->_linkData);
} else {
$href = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_fileName);
}
$onclick = '';
if (array_key_exists($this->_urlVar, $this->_linkData)) {
$onclick = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_onclick);
}
return sprintf('<a href="%s"%s%s%s%s title="%s">%s</a>',
htmlentities($this->_url . $href),
empty($this->_classString) ? '' : ' '.$this->_classString,
empty($this->_attributes) ? '' : ' '.$this->_attributes,
empty($this->_accesskey) ? '' : ' accesskey="'.$this->_linkData[$this->_urlVar].'"',
empty($onclick) ? '' : ' onclick="'.$onclick.'"',
$altText,
$linkText
);
} elseif ($this->_httpMethod == 'POST') {
return sprintf("<a href='javascript:void(0)' onclick='%s'%s%s%s title='%s'>%s</a>",
$this->_generateFormOnClick($this->_url, $this->_linkData),
empty($this->_classString) ? '' : ' '.$this->_classString,
empty($this->_attributes) ? '' : ' '.$this->_attributes,
empty($this->_accesskey) ? '' : ' accesskey=\''.$this->_linkData[$this->_urlVar].'\'',
$altText,
$linkText
);
}
return '';
}
 
// }}}
// {{{ _generateFormOnClick()
 
/**
* Mimics http_build_query() behavior in the way the data
* in $data will appear when it makes it back to the server.
* For example:
* $arr = array('array' => array(array('hello', 'world'),
* 'things' => array('stuff', 'junk'));
* http_build_query($arr)
* and _generateFormOnClick('foo.php', $arr)
* will yield
* $_REQUEST['array'][0][0] === 'hello'
* $_REQUEST['array'][0][1] === 'world'
* $_REQUEST['array']['things'][0] === 'stuff'
* $_REQUEST['array']['things'][1] === 'junk'
*
* However, instead of generating a query string, it generates
* Javascript to create and submit a form.
*
* @param string $formAction where the form should be submitted
* @param array $data the associative array of names and values
* @return string A string of javascript that generates a form and submits it
* @access private
*/
function _generateFormOnClick($formAction, $data)
{
// Check we have an array to work with
if (!is_array($data)) {
trigger_error(
'_generateForm() Parameter 1 expected to be Array or Object. Incorrect value given.',
E_USER_WARNING
);
return false;
}
 
if (!empty($this->_formID)) {
$str = 'var form = document.getElementById("'.$this->_formID.'"); var input = ""; ';
} else {
$str = 'var form = document.createElement("form"); var input = ""; ';
}
// We /shouldn't/ need to escape the URL ...
$str .= sprintf('form.action = "%s"; ', htmlentities($formAction));
$str .= sprintf('form.method = "%s"; ', $this->_httpMethod);
foreach ($data as $key => $val) {
$str .= $this->_generateFormOnClickHelper($val, $key);
}
 
if (empty($this->_formID)) {
$str .= 'document.getElementsByTagName("body")[0].appendChild(form);';
}
$str .= 'form.submit(); return false;';
return $str;
}
 
// }}}
// {{{ _generateFormOnClickHelper
 
/**
* This is used by _generateFormOnClick().
* Recursively processes the arrays, objects, and literal values.
*
* @param data Data that should be rendered
* @param prev The name so far
* @return string A string of Javascript that creates form inputs
* representing the data
* @access private
*/
function _generateFormOnClickHelper($data, $prev = '')
{
$str = '';
if (is_array($data) || is_object($data)) {
// foreach key/visible member
foreach ((array)$data as $key => $val) {
// append [$key] to prev
$tempKey = sprintf('%s[%s]', $prev, $key);
$str .= $this->_generateFormOnClickHelper($val, $tempKey);
}
} else { // must be a literal value
// escape newlines and carriage returns
$search = array("\n", "\r");
$replace = array('\n', '\n');
$escapedData = str_replace($search, $replace, $data);
// am I forgetting any dangerous whitespace?
// would a regex be faster?
// if it's already encoded, don't encode it again
if (!$this->_isEncoded($escapedData)) {
$escapedData = urlencode($escapedData);
}
$escapedData = htmlentities($escapedData, ENT_QUOTES, 'UTF-8');
 
$str .= 'input = document.createElement("input"); ';
$str .= 'input.type = "hidden"; ';
$str .= sprintf('input.name = "%s"; ', $prev);
$str .= sprintf('input.value = "%s"; ', $escapedData);
$str .= 'form.appendChild(input); ';
}
return $str;
}
 
// }}}
// {{{ _getLinksData()
 
/**
* Returns the correct link for the back/pages/next links
*
* @return array Data
* @access private
*/
function _getLinksData()
{
$qs = array();
if ($this->_importQuery) {
if ($this->_httpMethod == 'POST') {
$qs = $_POST;
} elseif ($this->_httpMethod == 'GET') {
$qs = $_GET;
}
}
foreach ($this->_excludeVars as $exclude) {
if (array_key_exists($exclude, $qs)) {
unset($qs[$exclude]);
}
}
if (count($this->_extraVars)){
$this->_recursive_urldecode($this->_extraVars);
$qs = array_merge($qs, $this->_extraVars);
}
if (count($qs) && get_magic_quotes_gpc()){
$this->_recursive_stripslashes($qs);
}
return $qs;
}
 
// }}}
// {{{ _recursive_stripslashes()
/**
* Helper method
* @param mixed $var
* @access private
*/
function _recursive_stripslashes(&$var)
{
if (is_array($var)) {
foreach (array_keys($var) as $k) {
$this->_recursive_stripslashes($var[$k]);
}
} else {
$var = stripslashes($var);
}
}
 
// }}}
// {{{ _recursive_urldecode()
 
/**
* Helper method
* @param mixed $var
* @access private
*/
function _recursive_urldecode(&$var)
{
if (is_array($var)) {
foreach (array_keys($var) as $k) {
$this->_recursive_urldecode($var[$k]);
}
} else {
$trans_tbl = array_flip(get_html_translation_table(HTML_ENTITIES));
$var = strtr($var, $trans_tbl);
}
}
 
// }}}
// {{{ _getBackLink()
 
/**
* Returns back link
*
* @param $url URL to use in the link [deprecated: use the factory instead]
* @param $link HTML to use as the link [deprecated: use the factory instead]
* @return string The link
* @access private
*/
function _getBackLink($url='', $link='')
{
//legacy settings... the preferred way to set an option
//now is passing it to the factory
if (!empty($url)) {
$this->_path = $url;
}
if (!empty($link)) {
$this->_prevImg = $link;
}
$back = '';
if ($this->_currentPage > 1) {
$this->_linkData[$this->_urlVar] = $this->getPreviousPageID();
$back = $this->_renderLink($this->_altPrev, $this->_prevImg)
. $this->_spacesBefore . $this->_spacesAfter;
}
return $back;
}
 
// }}}
// {{{ _getPageLinks()
 
/**
* Returns pages link
*
* @param $url URL to use in the link [deprecated: use the factory instead]
* @return string Links
* @access private
*/
function _getPageLinks($url='')
{
$msg = '<b>PEAR::Pager Error:</b>'
.' function "_getPageLinks()" not implemented.';
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED);
}
 
// }}}
// {{{ _getNextLink()
 
/**
* Returns next link
*
* @param $url URL to use in the link [deprecated: use the factory instead]
* @param $link HTML to use as the link [deprecated: use the factory instead]
* @return string The link
* @access private
*/
function _getNextLink($url='', $link='')
{
//legacy settings... the preferred way to set an option
//now is passing it to the factory
if (!empty($url)) {
$this->_path = $url;
}
if (!empty($link)) {
$this->_nextImg = $link;
}
$next = '';
if ($this->_currentPage < $this->_totalPages) {
$this->_linkData[$this->_urlVar] = $this->getNextPageID();
$next = $this->_spacesAfter
. $this->_renderLink($this->_altNext, $this->_nextImg)
. $this->_spacesBefore . $this->_spacesAfter;
}
return $next;
}
 
// }}}
// {{{ _getFirstLinkTag()
 
/**
* @return string
* @access private
*/
function _getFirstLinkTag()
{
if ($this->isFirstPage() || ($this->_httpMethod != 'GET')) {
return '';
}
return sprintf('<link rel="first" href="%s" title="%s" />'."\n",
$this->_getLinkTagUrl(1),
$this->_firstLinkTitle
);
}
 
// }}}
// {{{ _getPrevLinkTag()
 
/**
* Returns previous link tag
*
* @return string the link tag
* @access private
*/
function _getPrevLinkTag()
{
if ($this->isFirstPage() || ($this->_httpMethod != 'GET')) {
return '';
}
return sprintf('<link rel="previous" href="%s" title="%s" />'."\n",
$this->_getLinkTagUrl($this->getPreviousPageID()),
$this->_prevLinkTitle
);
}
 
// }}}
// {{{ _getNextLinkTag()
 
/**
* Returns next link tag
*
* @return string the link tag
* @access private
*/
function _getNextLinkTag()
{
if ($this->isLastPage() || ($this->_httpMethod != 'GET')) {
return '';
}
return sprintf('<link rel="next" href="%s" title="%s" />'."\n",
$this->_getLinkTagUrl($this->getNextPageID()),
$this->_nextLinkTitle
);
}
 
// }}}
// {{{ _getLastLinkTag()
 
/**
* @return string the link tag
* @access private
*/
function _getLastLinkTag()
{
if ($this->isLastPage() || ($this->_httpMethod != 'GET')) {
return '';
}
return sprintf('<link rel="last" href="%s" title="%s" />'."\n",
$this->_getLinkTagUrl($this->_totalPages),
$this->_lastLinkTitle
);
}
 
// }}}
// {{{ _getLinkTagUrl()
 
/**
* Helper method
* @return string the link tag url
* @access private
*/
function _getLinkTagUrl($pageID)
{
$this->_linkData[$this->_urlVar] = $pageID;
if ($this->_append) {
$href = '?' . $this->_http_build_query_wrapper($this->_linkData);
} else {
$href = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_fileName);
}
return htmlentities($this->_url . $href);
}
// }}}
// {{{ getPerPageSelectBox()
 
/**
* Returns a string with a XHTML SELECT menu,
* useful for letting the user choose how many items per page should be
* displayed. If parameter useSessions is TRUE, this value is stored in
* a session var. The string isn't echoed right now so you can use it
* with template engines.
*
* @param integer $start
* @param integer $end
* @param integer $step
* @param boolean $showAllData If true, perPage is set equal to totalItems.
* @param array (or string $optionText for BC reasons)
* - 'optionText': text to show in each option.
* Use '%d' where you want to see the number of pages selected.
* - 'attributes': (html attributes) Tag attributes or
* HTML attributes (id="foo" pairs), will be inserted in the
* <select> tag
* @return string xhtml select box
* @access public
*/
function getPerPageSelectBox($start=5, $end=30, $step=5, $showAllData=false, $extraParams=array())
{
require_once 'Pager/HtmlWidgets.php';
$widget = new Pager_HtmlWidgets($this);
return $widget->getPerPageSelectBox($start, $end, $step, $showAllData, $extraParams);
}
 
// }}}
// {{{ getPageSelectBox()
 
/**
* Returns a string with a XHTML SELECT menu with the page numbers,
* useful as an alternative to the links
*
* @param array - 'optionText': text to show in each option.
* Use '%d' where you want to see the number of pages selected.
* - 'autoSubmit': if TRUE, add some js code to submit the
* form on the onChange event
* @param string $extraAttributes (html attributes) Tag attributes or
* HTML attributes (id="foo" pairs), will be inserted in the
* <select> tag
* @return string xhtml select box
* @access public
*/
function getPageSelectBox($params = array(), $extraAttributes = '')
{
require_once 'Pager/HtmlWidgets.php';
$widget = new Pager_HtmlWidgets($this);
return $widget->getPageSelectBox($params, $extraAttributes);
}
 
// }}}
// {{{ _printFirstPage()
 
/**
* Print [1]
*
* @return string String with link to 1st page,
* or empty string if this is the 1st page.
* @access private
*/
function _printFirstPage()
{
if ($this->isFirstPage()) {
return '';
}
$this->_linkData[$this->_urlVar] = 1;
return $this->_renderLink(
str_replace('%d', 1, $this->_altFirst),
$this->_firstPagePre . $this->_firstPageText . $this->_firstPagePost
) . $this->_spacesBefore . $this->_spacesAfter;
}
 
// }}}
// {{{ _printLastPage()
 
/**
* Print [numPages()]
*
* @return string String with link to last page,
* or empty string if this is the 1st page.
* @access private
*/
function _printLastPage()
{
if ($this->isLastPage()) {
return '';
}
$this->_linkData[$this->_urlVar] = $this->_totalPages;
return $this->_renderLink(
str_replace('%d', $this->_totalPages, $this->_altLast),
$this->_lastPagePre . $this->_lastPageText . $this->_lastPagePost
);
}
 
// }}}
// {{{ _setFirstLastText()
 
/**
* sets the private _firstPageText, _lastPageText variables
* based on whether they were set in the options
*
* @access private
*/
function _setFirstLastText()
{
if ($this->_firstPageText == '') {
$this->_firstPageText = '1';
}
if ($this->_lastPageText == '') {
$this->_lastPageText = $this->_totalPages;
}
}
 
// }}}
// {{{ _http_build_query_wrapper()
/**
* This is a slightly modified version of the http_build_query() function;
* it heavily borrows code from PHP_Compat's http_build_query().
* The main change is the usage of htmlentities instead of urlencode,
* since it's too aggressive
*
* @author Stephan Schmidt <schst@php.net>
* @author Aidan Lister <aidan@php.net>
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @param array $data
* @return string
* @access private
*/
function _http_build_query_wrapper($data)
{
$data = (array)$data;
if (empty($data)) {
return '';
}
$separator = ini_get('arg_separator.output');
if ($separator == '&amp;') {
$separator = '&'; //the string is escaped by htmlentities anyway...
}
$tmp = array ();
foreach ($data as $key => $val) {
if (is_scalar($val)) {
//array_push($tmp, $key.'='.$val);
$val = urlencode($val);
array_push($tmp, $key .'='. str_replace('%2F', '/', $val));
continue;
}
// If the value is an array, recursively parse it
if (is_array($val)) {
array_push($tmp, $this->__http_build_query($val, htmlentities($key)));
continue;
}
}
return implode($separator, $tmp);
}
 
// }}}
// {{{ __http_build_query()
 
/**
* Helper function
* @author Stephan Schmidt <schst@php.net>
* @author Aidan Lister <aidan@php.net>
* @access private
*/
function __http_build_query($array, $name)
{
$tmp = array ();
$separator = ini_get('arg_separator.output');
if ($separator == '&amp;') {
$separator = '&'; //the string is escaped by htmlentities anyway...
}
foreach ($array as $key => $value) {
if (is_array($value)) {
//array_push($tmp, $this->__http_build_query($value, sprintf('%s[%s]', $name, $key)));
array_push($tmp, $this->__http_build_query($value, $name.'%5B'.$key.'%5D'));
} elseif (is_scalar($value)) {
//array_push($tmp, sprintf('%s[%s]=%s', $name, htmlentities($key), htmlentities($value)));
array_push($tmp, $name.'%5B'.htmlentities($key).'%5D='.htmlentities($value));
} elseif (is_object($value)) {
//array_push($tmp, $this->__http_build_query(get_object_vars($value), sprintf('%s[%s]', $name, $key)));
array_push($tmp, $this->__http_build_query(get_object_vars($value), $name.'%5B'.$key.'%5D'));
}
}
return implode($separator, $tmp);
}
 
// }}}
// {{{ _isEncoded()
 
/**
* Helper function
* Check if a string is an encoded multibyte string
* @param string $string
* @return boolean
* @access private
*/
function _isEncoded($string)
{
$hexchar = '&#[\dA-Fx]{2,};';
return preg_match("/^(\s|($hexchar))*$/Uims", $string) ? true : false;
}
 
// }}}
// {{{ raiseError()
 
/**
* conditionally includes PEAR base class and raise an error
*
* @param string $msg Error message
* @param int $code Error code
* @access private
*/
function raiseError($msg, $code)
{
include_once 'PEAR.php';
if (empty($this->_pearErrorMode)) {
$this->_pearErrorMode = PEAR_ERROR_RETURN;
}
return PEAR::raiseError($msg, $code, $this->_pearErrorMode);
}
 
// }}}
// {{{ setOptions()
 
/**
* Set and sanitize options
*
* @param mixed $options An associative array of option names and
* their values.
* @return integer error code (PAGER_OK on success)
* @access public
*/
function setOptions($options)
{
foreach ($options as $key => $value) {
if (in_array($key, $this->_allowed_options) && (!is_null($value))) {
$this->{'_' . $key} = $value;
}
}
 
//autodetect http method
if (!isset($options['httpMethod'])
&& !isset($_GET[$this->_urlVar])
&& isset($_POST[$this->_urlVar])
) {
$this->_httpMethod = 'POST';
} else {
$this->_httpMethod = strtoupper($this->_httpMethod);
}
 
$this->_fileName = ltrim($this->_fileName, '/'); //strip leading slash
$this->_path = rtrim($this->_path, '/'); //strip trailing slash
 
if ($this->_append) {
if ($this->_fixFileName) {
$this->_fileName = CURRENT_FILENAME; //avoid possible user error;
}
$this->_url = $this->_path.'/'.$this->_fileName;
} else {
$this->_url = $this->_path;
if (strncasecmp($this->_fileName, 'javascript', 10) != 0) {
$this->_url .= '/';
}
if (strpos($this->_fileName, '%d') === false) {
trigger_error($this->errorMessage(ERROR_PAGER_INVALID_USAGE), E_USER_WARNING);
}
}
 
$this->_classString = '';
if (strlen($this->_linkClass)) {
$this->_classString = 'class="'.$this->_linkClass.'"';
}
 
if (strlen($this->_curPageLinkClassName)) {
$this->_curPageSpanPre = '<span class="'.$this->_curPageLinkClassName.'">';
$this->_curPageSpanPost = '</span>';
}
 
$this->_perPage = max($this->_perPage, 1); //avoid possible user errors
 
if ($this->_useSessions && !isset($_SESSION)) {
session_start();
}
if (!empty($_REQUEST[$this->_sessionVar])) {
$this->_perPage = max(1, (int)$_REQUEST[$this->_sessionVar]);
if ($this->_useSessions) {
$_SESSION[$this->_sessionVar] = $this->_perPage;
}
}
 
if (!empty($_SESSION[$this->_sessionVar])) {
$this->_perPage = $_SESSION[$this->_sessionVar];
}
 
if ($this->_closeSession) {
session_write_close();
}
 
$this->_spacesBefore = str_repeat('&nbsp;', $this->_spacesBeforeSeparator);
$this->_spacesAfter = str_repeat('&nbsp;', $this->_spacesAfterSeparator);
 
if (isset($_REQUEST[$this->_urlVar]) && empty($options['currentPage'])) {
$this->_currentPage = (int)$_REQUEST[$this->_urlVar];
}
$this->_currentPage = max($this->_currentPage, 1);
$this->_linkData = $this->_getLinksData();
 
return PAGER_OK;
}
 
// }}}
// {{{ getOption()
/**
* Return the current value of a given option
*
* @param string option name
* @return mixed option value
*/
function getOption($name)
{
if (!in_array($name, $this->_allowed_options)) {
$msg = '<b>PEAR::Pager Error:</b>'
.' invalid option: '.$name;
return $this->raiseError($msg, ERROR_PAGER_INVALID);
}
return $this->{'_' . $name};
}
 
// }}}
// {{{ getOptions()
 
/**
* Return an array with all the current pager options
*
* @return array list of all the pager options
*/
function getOptions()
{
$options = array();
foreach ($this->_allowed_options as $option) {
$options[$option] = $this->{'_' . $option};
}
return $options;
}
 
// }}}
// {{{ errorMessage()
 
/**
* Return a textual error message for a PAGER error code
*
* @param int $code error code
* @return string error message
* @access public
*/
function errorMessage($code)
{
static $errorMessages;
if (!isset($errorMessages)) {
$errorMessages = array(
ERROR_PAGER => 'unknown error',
ERROR_PAGER_INVALID => 'invalid',
ERROR_PAGER_INVALID_PLACEHOLDER => 'invalid format - use "%d" as placeholder.',
ERROR_PAGER_INVALID_USAGE => 'if $options[\'append\'] is set to false, '
.' $options[\'fileName\'] MUST contain the "%d" placeholder.',
ERROR_PAGER_NOT_IMPLEMENTED => 'not implemented'
);
}
 
return '<b>PEAR::Pager error:</b> '. (isset($errorMessages[$code]) ?
$errorMessages[$code] : $errorMessages[ERROR_PAGER]);
}
 
// }}}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/Pager/Jumping.php
New file
0,0 → 1,254
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* Contains the Pager_Jumping class
*
* PHP versions 4 and 5
*
* LICENSE: Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @author Richard Heyes <richard@phpguru.org>,
* @copyright 2003-2006 Lorenzo Alberton, Richard Heyes
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @version CVS: $Id$
* @link http://pear.php.net/package/Pager
*/
 
/**
* require PEAR::Pager_Common base class
*/
require_once 'Pager/Common.php';
 
/**
* Pager_Jumping - Generic data paging class ("jumping window" style)
* Handles paging a set of data. For usage see the example.php provided.
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @author Richard Heyes <richard@phpguru.org>,
* @copyright 2003-2005 Lorenzo Alberton, Richard Heyes
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @link http://pear.php.net/package/Pager
*/
class Pager_Jumping extends Pager_Common
{
// {{{ Pager_Jumping()
 
/**
* Constructor
*
* @param array $options An associative array of option names
* and their values
* @access public
*/
function Pager_Jumping($options = array())
{
$err = $this->setOptions($options);
if ($err !== PAGER_OK) {
return $this->raiseError($this->errorMessage($err), $err);
}
$this->build();
}
 
// }}}
// {{{ getPageIdByOffset()
 
/**
* Returns pageID for given offset
*
* @param $index Offset to get pageID for
* @return int PageID for given offset
*/
function getPageIdByOffset($index)
{
if (!isset($this->_pageData)) {
$this->_generatePageData();
}
 
if (($index % $this->_perPage) > 0) {
$pageID = ceil((float)$index / (float)$this->_perPage);
} else {
$pageID = $index / $this->_perPage;
}
return $pageID;
}
 
// }}}
// {{{ getPageRangeByPageId()
 
/**
* Given a PageId, it returns the limits of the range of pages displayed.
* While getOffsetByPageId() returns the offset of the data within the
* current page, this method returns the offsets of the page numbers interval.
* E.g., if you have pageId=3 and delta=10, it will return (1, 10).
* PageID of 8 would give you (1, 10) as well, because 1 <= 8 <= 10.
* PageID of 11 would give you (11, 20).
* If the method is called without parameter, pageID is set to currentPage#.
*
* @param integer PageID to get offsets for
* @return array First and last offsets
* @access public
*/
function getPageRangeByPageId($pageid = null)
{
$pageid = isset($pageid) ? (int)$pageid : $this->_currentPage;
if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) {
// I'm sure I'm missing something here, but this formula works
// so I'm using it until I find something simpler.
$start = ((($pageid + (($this->_delta - ($pageid % $this->_delta))) % $this->_delta) / $this->_delta) - 1) * $this->_delta +1;
return array(
max($start, 1),
min($start+$this->_delta-1, $this->_totalPages)
);
} else {
return array(0, 0);
}
}
 
// }}}
// {{{ getLinks()
 
/**
* Returns back/next/first/last and page links,
* both as ordered and associative array.
*
* NB: in original PEAR::Pager this method accepted two parameters,
* $back_html and $next_html. Now the only parameter accepted is
* an integer ($pageID), since the html text for prev/next links can
* be set in the constructor. If a second parameter is provided, then
* the method act as it previously did. This hack's only purpose is to
* mantain backward compatibility.
*
* @param integer $pageID Optional pageID. If specified, links
* for that page are provided instead of current one.
* [ADDED IN NEW PAGER VERSION]
* @param string $next_html HTML to put inside the next link
* [deprecated: use the constructor instead]
* @return array Back/pages/next links
*/
function getLinks($pageID=null, $next_html='')
{
//BC hack
if (!empty($next_html)) {
$back_html = $pageID;
$pageID = null;
} else {
$back_html = '';
}
 
if (!is_null($pageID)) {
$this->links = '';
if ($this->_totalPages > $this->_delta) {
$this->links .= $this->_printFirstPage();
}
 
$_sav = $this->_currentPage;
$this->_currentPage = $pageID;
 
$this->links .= $this->_getBackLink('', $back_html);
$this->links .= $this->_getPageLinks();
$this->links .= $this->_getNextLink('', $next_html);
if ($this->_totalPages > $this->_delta) {
$this->links .= $this->_printLastPage();
}
}
 
$back = str_replace('&nbsp;', '', $this->_getBackLink());
$next = str_replace('&nbsp;', '', $this->_getNextLink());
$pages = $this->_getPageLinks();
$first = $this->_printFirstPage();
$last = $this->_printLastPage();
$all = $this->links;
$linkTags = $this->linkTags;
 
if (!is_null($pageID)) {
$this->_currentPage = $_sav;
}
 
return array(
$back,
$pages,
trim($next),
$first,
$last,
$all,
$linkTags,
'back' => $back,
'pages' => $pages,
'next' => $next,
'first' => $first,
'last' => $last,
'all' => $all,
'linktags' => $linkTags
);
}
 
// }}}
// {{{ _getPageLinks()
 
/**
* Returns pages link
*
* @param $url URL to use in the link
* [deprecated: use the constructor instead]
* @return string Links
* @access private
*/
function _getPageLinks($url = '')
{
//legacy setting... the preferred way to set an option now
//is adding it to the constuctor
if (!empty($url)) {
$this->_path = $url;
}
 
//If there's only one page, don't display links
if ($this->_clearIfVoid && ($this->_totalPages < 2)) {
return '';
}
 
$links = '';
$limits = $this->getPageRangeByPageId($this->_currentPage);
 
for ($i=$limits[0]; $i<=min($limits[1], $this->_totalPages); $i++) {
if ($i != $this->_currentPage) {
$this->range[$i] = false;
$this->_linkData[$this->_urlVar] = $i;
$links .= $this->_renderLink($this->_altPage.' '.$i, $i);
} else {
$this->range[$i] = true;
$links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost;
}
$links .= $this->_spacesBefore
. (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : '');
}
return $links;
}
 
// }}}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/Pager/Sliding.php
New file
0,0 → 1,289
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* Contains the Pager_Sliding class
*
* PHP versions 4 and 5
*
* LICENSE: Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @copyright 2003-2006 Lorenzo Alberton
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @version CVS: $Id$
* @link http://pear.php.net/package/Pager
*/
 
/**
* require PEAR::Pager_Common base class
*/
require_once dirname(__FILE__).'/Common.php';
 
/**
* Pager_Sliding - Generic data paging class ("sliding window" style)
* Usage examples can be found in the PEAR manual
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @copyright 2003-2005 Lorenzo Alberton
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @link http://pear.php.net/package/Pager
*/
class Pager_Sliding extends Pager_Common
{
// {{{ Pager_Sliding()
 
/**
* Constructor
*
* @param array $options An associative array of option names
* and their values
* @access public
*/
function __construct($options = array())
{
//set default Pager_Sliding options
$this->_delta = 2;
$this->_prevImg = '&laquo;';
$this->_nextImg = '&raquo;';
$this->_separator = '|';
$this->_spacesBeforeSeparator = 3;
$this->_spacesAfterSeparator = 3;
$this->_curPageSpanPre = '<b><u>';
$this->_curPageSpanPost = '</u></b>';
 
//set custom options
$err = $this->setOptions($options);
if ($err !== PAGER_OK) {
return $this->raiseError($this->errorMessage($err), $err);
}
$this->build();
}
 
// }}}
// {{{ getPageIdByOffset()
 
/**
* "Overload" PEAR::Pager method. VOID. Not needed here...
* @param integer $index Offset to get pageID for
* @deprecated
* @access public
*/
function getPageIdByOffset($index=null) { }
 
// }}}
// {{{ getPageRangeByPageId()
 
/**
* Given a PageId, it returns the limits of the range of pages displayed.
* While getOffsetByPageId() returns the offset of the data within the
* current page, this method returns the offsets of the page numbers interval.
* E.g., if you have pageId=5 and delta=2, it will return (3, 7).
* PageID of 9 would give you (4, 8).
* If the method is called without parameter, pageID is set to currentPage#.
*
* @param integer PageID to get offsets for
* @return array First and last offsets
* @access public
*/
function getPageRangeByPageId($pageid = null)
{
$pageid = isset($pageid) ? (int)$pageid : $this->_currentPage;
if (!isset($this->_pageData)) {
$this->_generatePageData();
}
if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) {
if ($this->_expanded) {
$min_surplus = ($pageid <= $this->_delta) ? ($this->_delta - $pageid + 1) : 0;
$max_surplus = ($pageid >= ($this->_totalPages - $this->_delta)) ?
($pageid - ($this->_totalPages - $this->_delta)) : 0;
} else {
$min_surplus = $max_surplus = 0;
}
return array(
max($pageid - $this->_delta - $max_surplus, 1),
min($pageid + $this->_delta + $min_surplus, $this->_totalPages)
);
}
return array(0, 0);
}
 
// }}}
// {{{ getLinks()
 
/**
* Returns back/next/first/last and page links,
* both as ordered and associative array.
*
* @param integer $pageID Optional pageID. If specified, links
* for that page are provided instead of current one.
* @return array back/pages/next/first/last/all links
* @access public
*/
function getLinks($pageID = null, $next_html = '')
{
if ($pageID != null) {
$_sav = $this->_currentPage;
$this->_currentPage = $pageID;
 
$this->links = '';
if ($this->_totalPages > (2 * $this->_delta + 1)) {
$this->links .= $this->_printFirstPage();
}
$this->links .= $this->_getBackLink();
$this->links .= $this->_getPageLinks();
$this->links .= $this->_getNextLink();
if ($this->_totalPages > (2 * $this->_delta + 1)) {
$this->links .= $this->_printLastPage();
}
}
 
$back = str_replace('&nbsp;', '', $this->_getBackLink());
$next = str_replace('&nbsp;', '', $this->_getNextLink());
$pages = $this->_getPageLinks();
$first = $this->_printFirstPage();
$last = $this->_printLastPage();
$all = $this->links;
$linkTags = $this->linkTags;
 
if ($pageID != null) {
$this->_currentPage = $_sav;
}
 
return array(
$back,
$pages,
trim($next),
$first,
$last,
$all,
$linkTags,
'back' => $back,
'pages' => $pages,
'next' => $next,
'first' => $first,
'last' => $last,
'all' => $all,
'linktags' => $linkTags
);
}
 
// }}}
// {{{ _getPageLinks()
 
/**
* Returns pages link
*
* @return string Links
* @access private
*/
function _getPageLinks($url = '')
{
//legacy setting... the preferred way to set an option now
//is adding it to the constuctor
if (!empty($url)) {
$this->_path = $url;
}
//If there's only one page, don't display links
if ($this->_clearIfVoid && ($this->_totalPages < 2)) {
return '';
}
 
$links = '';
if ($this->_totalPages > (2 * $this->_delta + 1)) {
if ($this->_expanded) {
if (($this->_totalPages - $this->_delta) <= $this->_currentPage) {
$expansion_before = $this->_currentPage - ($this->_totalPages - $this->_delta);
} else {
$expansion_before = 0;
}
for ($i = $this->_currentPage - $this->_delta - $expansion_before; $expansion_before; $expansion_before--, $i++) {
$print_separator_flag = ($i != $this->_currentPage + $this->_delta); // && ($i != $this->_totalPages - 1)
$this->range[$i] = false;
$this->_linkData[$this->_urlVar] = $i;
$links .= $this->_renderLink($this->_altPage.' '.$i, $i)
. $this->_spacesBefore
. ($print_separator_flag ? $this->_separator.$this->_spacesAfter : '');
}
}
 
$expansion_after = 0;
for ($i = $this->_currentPage - $this->_delta; ($i <= $this->_currentPage + $this->_delta) && ($i <= $this->_totalPages); $i++) {
if ($i < 1) {
++$expansion_after;
continue;
}
 
// check when to print separator
$print_separator_flag = (($i != $this->_currentPage + $this->_delta) && ($i != $this->_totalPages));
 
if ($i == $this->_currentPage) {
$this->range[$i] = true;
$links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost;
} else {
$this->range[$i] = false;
$this->_linkData[$this->_urlVar] = $i;
$links .= $this->_renderLink($this->_altPage.' '.$i, $i);
}
$links .= $this->_spacesBefore
. ($print_separator_flag ? $this->_separator.$this->_spacesAfter : '');
}
 
if ($this->_expanded && $expansion_after) {
$links .= $this->_separator . $this->_spacesAfter;
for ($i = $this->_currentPage + $this->_delta +1; $expansion_after; $expansion_after--, $i++) {
$print_separator_flag = ($expansion_after != 1);
$this->range[$i] = false;
$this->_linkData[$this->_urlVar] = $i;
$links .= $this->_renderLink($this->_altPage.' '.$i, $i)
. $this->_spacesBefore
. ($print_separator_flag ? $this->_separator.$this->_spacesAfter : '');
}
}
 
} else {
//if $this->_totalPages <= (2*Delta+1) show them all
for ($i=1; $i<=$this->_totalPages; $i++) {
if ($i != $this->_currentPage) {
$this->range[$i] = false;
$this->_linkData[$this->_urlVar] = $i;
$links .= $this->_renderLink($this->_altPage.' '.$i, $i);
} else {
$this->range[$i] = true;
$links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost;
}
$links .= $this->_spacesBefore
. (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : '');
}
}
return $links;
}
 
// }}}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/Pager/HtmlWidgets.php
New file
0,0 → 1,229
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* Contains the Pager_HtmlWidgets class
*
* PHP versions 4 and 5
*
* LICENSE: Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @copyright 2003-2006 Lorenzo Alberton
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @version CVS: $Id$
* @link http://pear.php.net/package/Pager
*/
 
/**
* Two constants used to guess the path- and file-name of the page
* when the user doesn't set any other value
*/
class Pager_HtmlWidgets
{
var $pager = null;
// {{{ constructor
function Pager_HtmlWidgets(&$pager)
{
$this->pager =& $pager;
}
// }}}
// {{{ getPerPageSelectBox()
 
/**
* Returns a string with a XHTML SELECT menu,
* useful for letting the user choose how many items per page should be
* displayed. If parameter useSessions is TRUE, this value is stored in
* a session var. The string isn't echoed right now so you can use it
* with template engines.
*
* @param integer $start
* @param integer $end
* @param integer $step
* @param boolean $showAllData If true, perPage is set equal to totalItems.
* @param array (or string $optionText for BC reasons)
* - 'optionText': text to show in each option.
* Use '%d' where you want to see the number of pages selected.
* - 'attributes': (html attributes) Tag attributes or
* HTML attributes (id="foo" pairs), will be inserted in the
* <select> tag
* - 'checkMaxLimit': if true, Pager checks if $end is bigger
* than $totalItems, and doesn't show the extra select options
* @return string xhtml select box
* @access public
*/
function getPerPageSelectBox($start=5, $end=30, $step=5, $showAllData=false, $extraParams=array())
{
// FIXME: needs POST support
$optionText = '%d';
$attributes = '';
$checkMaxLimit = false;
if (is_string($extraParams)) {
//old behavior, BC maintained
$optionText = $extraParams;
} else {
if (array_key_exists('optionText', $extraParams)) {
$optionText = $extraParams['optionText'];
}
if (array_key_exists('attributes', $extraParams)) {
$attributes = $extraParams['attributes'];
}
if (array_key_exists('checkMaxLimit', $extraParams)) {
$checkMaxLimit = $extraParams['checkMaxLimit'];
}
}
 
if (!strstr($optionText, '%d')) {
return $this->pager->raiseError(
$this->pager->errorMessage(ERROR_PAGER_INVALID_PLACEHOLDER),
ERROR_PAGER_INVALID_PLACEHOLDER
);
}
$start = (int)$start;
$end = (int)$end;
$step = (int)$step;
if (!empty($_SESSION[$this->pager->_sessionVar])) {
$selected = (int)$_SESSION[$this->pager->_sessionVar];
} else {
$selected = $this->pager->_perPage;
}
if ($checkMaxLimit && $this->pager->_totalItems > 0 && $this->pager->_totalItems < $end) {
$end = $this->pager->_totalItems;
}
 
$tmp = '<select name="'.$this->pager->_sessionVar.'"';
if (!empty($attributes)) {
$tmp .= ' '.$attributes;
}
$tmp .= '>';
$last = $start;
for ($i=$start; $i<=$end; $i+=$step) {
$last = $i;
$tmp .= '<option value="'.$i.'"';
if ($i == $selected) {
$tmp .= ' selected="selected"';
}
$tmp .= '>'.sprintf($optionText, $i).'</option>';
}
if ($showAllData && $last != $this->pager->_totalItems) {
$tmp .= '<option value="'.$this->pager->_totalItems.'"';
if ($this->pager->_totalItems == $selected) {
$tmp .= ' selected="selected"';
}
$tmp .= '>';
if (empty($this->pager->_showAllText)) {
$tmp .= str_replace('%d', $this->pager->_totalItems, $optionText);
} else {
$tmp .= $this->pager->_showAllText;
}
$tmp .= '</option>';
}
$tmp .= '</select>';
return $tmp;
}
 
// }}}
// {{{ getPageSelectBox()
 
/**
* Returns a string with a XHTML SELECT menu with the page numbers,
* useful as an alternative to the links
*
* @param array - 'optionText': text to show in each option.
* Use '%d' where you want to see the number of pages selected.
* - 'autoSubmit': if TRUE, add some js code to submit the
* form on the onChange event
* @param string $extraAttributes (html attributes) Tag attributes or
* HTML attributes (id="foo" pairs), will be inserted in the
* <select> tag
* @return string xhtml select box
* @access public
*/
function getPageSelectBox($params = array(), $extraAttributes = '')
{
$optionText = '%d';
if (array_key_exists('optionText', $params)) {
$optionText = $params['optionText'];
}
 
if (!strstr($optionText, '%d')) {
return $this->pager->raiseError(
$this->pager->errorMessage(ERROR_PAGER_INVALID_PLACEHOLDER),
ERROR_PAGER_INVALID_PLACEHOLDER
);
}
$tmp = '<select name="'.$this->pager->_urlVar.'"';
if (!empty($extraAttributes)) {
$tmp .= ' '.$extraAttributes;
}
if (!empty($params['autoSubmit'])) {
if ($this->pager->_httpMethod == 'GET') {
$selector = '\' + '.'this.options[this.selectedIndex].value + \'';
if ($this->pager->_append) {
$href = '?' . $this->pager->_http_build_query_wrapper($this->pager->_linkData);
$href = htmlentities($this->pager->_url). preg_replace(
'/(&|&amp;|\?)('.$this->pager->_urlVar.'=)(\d+)/',
'\\1\\2'.$selector,
htmlentities($href)
);
} else {
$href = htmlentities($this->pager->_url . str_replace('%d', $selector, $this->pager->_fileName));
}
$tmp .= ' onchange="document.location.href=\''
. $href .'\''
. '"';
} elseif ($this->pager->_httpMethod == 'POST') {
$tmp .= " onchange='"
. $this->pager->_generateFormOnClick($this->pager->_url, $this->pager->_linkData)
. "'";
$tmp = preg_replace(
'/(input\.name = \"'.$this->pager->_urlVar.'\"; input\.value =) \"(\d+)\";/',
'\\1 this.options[this.selectedIndex].value;',
$tmp
);
}
}
$tmp .= '>';
$start = 1;
$end = $this->pager->numPages();
$selected = $this->pager->getCurrentPageID();
for ($i=$start; $i<=$end; $i++) {
$tmp .= '<option value="'.$i.'"';
if ($i == $selected) {
$tmp .= ' selected="selected"';
}
$tmp .= '>'.sprintf($optionText, $i).'</option>';
}
$tmp .= '</select>';
return $tmp;
}
// }}}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/bibliotheque/pear/Pager.php
New file
0,0 → 1,193
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* Contains the Pager class
*
* PHP versions 4 and 5
*
* LICENSE: Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @author Richard Heyes <richard@phpguru.org>
* @copyright 2003-2006 Lorenzo Alberton, Richard Heyes
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @version CVS: $Id$
* @link http://pear.php.net/package/Pager
*/
 
/**
* Pager - Wrapper class for [Sliding|Jumping]-window Pager
* Usage examples can be found in the PEAR manual
*
* @category HTML
* @package Pager
* @author Lorenzo Alberton <l dot alberton at quipo dot it>
* @author Richard Heyes <richard@phpguru.org>,
* @copyright 2003-2005 Lorenzo Alberton, Richard Heyes
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @link http://pear.php.net/package/Pager
*/
class Pager
{
// {{{ Pager()
 
/**
* Constructor
*
* -------------------------------------------------------------------------
* VALID options are (default values are set some lines before):
* - mode (string): "Jumping" or "Sliding" -window - It determines
* pager behaviour. See the manual for more details
* - totalItems (int): # of items to page.
* - perPage (int): # of items per page.
* - delta (int): # of page #s to show before and after the current
* one
* - linkClass (string): name of CSS class used for link styling.
* - append (bool): if true pageID is appended as GET value to the
* URL - if false it is embedded in the URL
* according to "fileName" specs
* - httpMethod (string): Specifies the HTTP method to use. Valid values
* are 'GET' or 'POST'
* according to "fileName" specs
* - importQuery (bool): if true (default behaviour), variables and
* values are imported from the submitted data
* (query string) and used in the generated links
* otherwise they're ignored completely
* - path (string): complete path to the page (without the page name)
* - fileName (string): name of the page, with a %d if append=true
* - urlVar (string): name of pageNumber URL var, for example "pageID"
* - altPrev (string): alt text to display for prev page, on prev link.
* - altNext (string): alt text to display for next page, on next link.
* - altPage (string): alt text to display before the page number.
* - prevImg (string): sth (it can be text such as "<< PREV" or an
* <img/> as well...) to display instead of "<<".
* - nextImg (string): same as prevImg, used for NEXT link, instead of
* the default value, which is ">>".
* - separator (string): what to use to separate numbers (can be an
* <img/>, a comma, an hyphen, or whatever.
* - spacesBeforeSeparator
* (int): number of spaces before the separator.
* - firstPagePre (string):
* string used before first page number (can be an
* <img/>, a "{", an empty string, or whatever.
* - firstPageText (string):
* string used in place of first page number
* - firstPagePost (string):
* string used after first page number (can be an
* <img/>, a "}", an empty string, or whatever.
* - lastPagePre (string):
* similar to firstPagePre.
* - lastPageText (string):
* similar to firstPageText.
* - lastPagePost (string):
* similar to firstPagePost.
* - spacesAfterSeparator
* (int): number of spaces after the separator.
* - firstLinkTitle (string):
* string used as title in <link rel="first"> tag
* - lastLinkTitle (string):
* string used as title in <link rel="last"> tag
* - prevLinkTitle (string):
* string used as title in <link rel="prev"> tag
* - nextLinkTitle (string):
* string used as title in <link rel="next"> tag
* - curPageLinkClassName
* (string): name of CSS class used for current page link.
* - clearIfVoid(bool): if there's only one page, don't display pager.
* - extraVars (array): additional URL vars to be added to the querystring
* - excludeVars (array): URL vars to be excluded in the querystring
* - itemData (array): array of items to page.
* - useSessions (bool): if true, number of items to display per page is
* stored in the $_SESSION[$_sessionVar] var.
* - closeSession (bool): if true, the session is closed just after R/W.
* - sessionVar (string): name of the session var for perPage value.
* A value != from default can be useful when
* using more than one Pager istance in the page.
* - pearErrorMode (constant):
* PEAR_ERROR mode for raiseError().
* Default is PEAR_ERROR_RETURN.
* -------------------------------------------------------------------------
* REQUIRED options are:
* - fileName IF append==false (default is true)
* - itemData OR totalItems (if itemData is set, totalItems is overwritten)
* -------------------------------------------------------------------------
*
* @param mixed $options An associative array of option names and
* their values.
* @access public
*/
function Pager($options = array())
{
//this check evaluates to true on 5.0.0RC-dev,
//so i'm using another one, for now...
//if (version_compare(phpversion(), '5.0.0') == -1) {
if (get_class($this) == 'pager') { //php4 lowers class names
// assign factoried method to this for PHP 4
eval('$this = Pager::factory($options);');
} else { //php5 is case sensitive
$msg = 'Pager constructor is deprecated.'
.' You must use the "Pager::factory($params)" method'
.' instead of "new Pager($params)"';
trigger_error($msg, E_USER_ERROR);
}
}
 
// }}}
// {{{ factory()
 
/**
* Return a pager based on $mode and $options
*
* @param array $options Optional parameters for the storage class
* @return object Object Storage object
* @static
* @access public
*/
static function &factory($options = array())
{
$mode = (isset($options['mode']) ? ucfirst($options['mode']) : 'Jumping');
$classname = 'Pager_' . $mode;
$classfile = 'Pager' . DIRECTORY_SEPARATOR . $mode . '.php';
 
// Attempt to include a custom version of the named class, but don't treat
// a failure as fatal. The caller may have already included their own
// version of the named class.
if (!class_exists($classname)) {
include_once $classfile;
}
 
// If the class exists, return a new instance of it.
if (class_exists($classname)) {
$pager = new $classname($options);
return $pager;
}
 
$null = null;
return $null;
}
 
// }}}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/controleurs/FichePersonne.php
New file
0,0 → 1,216
<?php
// declare(encoding='UTF-8');
/**
* Classe Controleur du module Fiche Personne.
*
* @category Php 5.2
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 96 2010-06-21 16:46:31Z jpm $
*/
class FichePersonne extends Fiche {
private $donnees = array();
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
return $this->afficherPersonne();
}
// +---------------------------------------------------------------------------------------------------------------+
// FICHE PERSONNE
public function afficherPersonne() {
// Gestion des actions par défaut
$this->executerAction('Recherche', 'chargerMoteurRecherche');
// Gestion des données de la requête
if (!isset($_GET['id'])) {
} else {
// Récupération des données
$this->donnees['id'] = $_GET['id'];
$this->donnees['info'] = $this->personneDao->getPersonne($this->donnees['id']);
// Création des paginations
$this->creerPaginationPublications($this->donnees['id']);
$this->creerPaginationCollections($this->donnees['id']);
$this->creerPaginationStructures($this->donnees['id']);
// Traitement des données
$this->traiterDonneesPersonne($this->donnees['info']);
$this->traiterDonneesPersonneAPublication($this->donnees['publications']);
$this->traiterDonneesPersonneACollection($this->donnees['collections']);
$this->traiterDonneesPersonneAStructure($this->donnees['structures']);
$this->postraiterDonnees($this->donnees);
$this->donnees['metadonnees'] = $this->traiterMetaDonnees($this->donnees['info']);
// Création des méta-données de la page
$this->definirMetadonneesPageWeb();
// Envoie à la sortie
//Debug::printr($donnees);
$this->setSortie(self::RENDU_CORPS, $this->getVue('fiche_personne', $this->donnees));
$this->chargerPiedDePage();
}
}
private function creerPaginationPublications($id_personne) {
// Gestion du nombre de résultats
$donnees_total = $this->personneDao->getNbrePublicationsLiees($id_personne);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFichePersonne($id_personne);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['publicationsFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->personneDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->personneDao->setDistinction(1);
$this->donnees['publications'] = $this->personneDao->getPublicationsLiees($id_personne);
}
private function creerPaginationCollections($id_personne) {
// Gestion du nombre de résultats
$donnees_total = $this->personneDao->getNbreCollectionsLiees($id_personne);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFichePersonne($id_personne);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['collectionsFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->personneDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->personneDao->setDistinction(1);
$this->donnees['collections'] = $this->personneDao->getCollectionsLiees($id_personne);
}
private function creerPaginationStructures($id_personne) {
// Gestion du nombre de résultats
$donnees_total = $this->personneDao->getNbreStructuresLiees($id_personne);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFichePersonne($id_personne);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['structuresFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->personneDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->personneDao->setDistinction(1);
$this->donnees['structures'] = $this->personneDao->getStructuresLiees($id_personne);
}
private function traiterDonneesPersonne(&$donnees) {
// Liste des préfixes
Ontologie::chargerListe(1004);
// Liste des suffixes
Ontologie::chargerListe(1005);
// Liste tel:
Ontologie::chargerListe(1007);
// Liste sexe:
Ontologie::chargerListe(1067);
// liste 77 : Liste indéterminé/oui/non
Ontologie::chargerListe(1080);
// Liste des types de publication vis à vis d'une personne
//relationPersonnePublication:1065,
 
$guid_id_valeur = Config::get('guid_id_personne').$donnees['cp_id_personne'];
$donnees['_guid_'] = sprintf(Config::get('guid'), $guid_id_valeur);
$donnees['_sexe_'] = $this->construireTxtListeOntologie($donnees['cp_ce_sexe']);
$donnees['_prefixe_'] = $this->construireTxtListeOntologie($donnees['cp_ce_truk_prefix']);
$donnees['_suffixe_'] = $this->construireTxtListeOntologie($donnees['cp_ce_truk_suffix']);
$donnees['_autre_noms_'] = $this->construireTxtTruck($donnees['cp_truk_nom_autre']);
$donnees['_autre_abreviations_'] = $this->construireTxtTruck($donnees['cp_truk_abreviation_autre']);
$donnees['_deces_'] = $this->construireTxtListeOntologie($donnees['cp_ce_deces']);
$donnees['_naissance_date_'] = $this->formaterDate($donnees['cp_naissance_date'], aControleur::FMT_DATE);
$donnees['_deces_date_'] = $this->formaterDate($donnees['cp_deces_date'], aControleur::FMT_DATE, '');
$donnees['_telephones_'] = $this->construireTxtListeOntologie($donnees['cp_truk_telephone']);
$donnees['_courriels_'] = $this->traiterTxtTruck($donnees['cp_truk_courriel']);
$donnees['_courriels_'] = $this->formaterCourriels($donnees['_courriels_']);
$donnees['_sites_web_'] = $this->getTableauTruck($donnees['cp_truk_url']);
$donnees['_image_principale_url_'] = $this->getTxtTruckParPosition($donnees['cp_truk_logo'], 1);
$donnees['_pays_'] = $this->construireTxtListeOntologie($donnees['cp_ce_truk_pays']);
$donnees['_specialites_'] = $this->construireTxtListeOntologie($donnees['cp_ce_truk_specialite']);
$donnees['_recoltes_'] = $this->construireTxtListeOntologie($donnees['cp_truk_recolte']);
$donnees['_logos_'] = $this->getTableauTruck($donnees['cp_truk_logo']);
}
private function traiterDonneesPersonneAPublication(&$publications) {
$this->traiterDonneesElementAPublication($publications);
// liste 62 : Liste des types de publication vis à vis d'une personne
Ontologie::chargerListe(1065);
foreach ($publications as &$publication) {
$publication['_role_'] = $this->construireTxtListeOntologie($publication['cpuap_id_role']);
}
}
private function traiterDonneesPersonneACollection(&$collections) {
// liste 27 : Liste des relations entre une collection et une personne
Ontologie::chargerListe(1030);
foreach ($collections as &$collection) {
$collection['_role_'] = $this->construireTxtListeOntologie($collection['ccap_id_role']);
$collection['_url_'] = $this->obtenirUrlFicheCollection($collection['ccap_id_collection']);
}
}
private function traiterDonneesPersonneAStructure(&$structures) {
// liste 09 : Liste des fonctions d'une personne au sein d'une structure
Ontologie::chargerListe(1012);
// liste 10 : Liste des statuts d'une personne au sein d'une structure
Ontologie::chargerListe(1013);
foreach ($structures as &$structure) {
$structure['_fonction_'] = $this->construireTxtListeOntologie($structure['csap_ce_truk_fonction']);
$structure['_statut_'] = $this->construireTxtListeOntologie($structure['csap_ce_truk_statut']);
$structure['_url_'] = $this->obtenirUrlFicheStructure($structure['csap_id_structure']);
}
}
private function definirMetadonneesPageWeb() {
$titre = $this->donnees['info']['cp_fmt_nom_complet'];
$description = $this->donnees['info']['cp_description'];
$tags = "Botaniste, naturaliste, personne, id:{$this->donnees['id']}, {$this->donnees['info']['_guid_']}";
// Envoie à la sortie
$this->setSortie(self::META_TITRE, $titre);
$this->setSortie(self::META_DESCRIPTION, $description);
$this->setSortie(self::META_TAGS, $tags);
}
}
/branches/v1.13-la-grande-rue/controleurs/Recherche.php
New file
0,0 → 1,238
<?php
// declare(encoding='UTF-8');
/**
* classe Controleur du module Recherche.
*
* @package Collection
* @category Php5
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
class Recherche extends aControleur {
//protected $chaine_recherche = null;
protected $masque = null;
protected static $url_exemple = null;
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut, elle appelle la liste des administrateurs
*/
public function executerActionParDefaut() {
return $this->rechercher();
}
/**
* Charge le moteur de recherche et l'envoie à la vue.
*/
public function chargerMoteurRecherche() {
$donnees = array();
// Gestion des données de la requête
//$donnees['recherche'] = htmlspecialchars($this->obtenirChaineRecherche());
// masque multi-critères
$donnees['masque'] = $this->obtenirMasqueRecherche();
 
// Gestion des urls
$donnees['url_form'] = $this->obtenirUrlRecherche();
$donnees['url_module'] = 'Recherche';
$donnees['url_action'] = 'rechercher';
$donnees['url_contexte'] = $this->registre->get('contexte');
self::$url_exemple = $this->obtenirUrlRecherche('%s');
// remplissage de case de tableaux vides pour éviter des warnings
$donnees['masque'] = $this->initialiserMasquesVides($donnees['masque']);
//echo '<pre>'.print_r($donnees['masque'],true).'</pre>';exit;
// Gestion du squelette et de la sortie
$this->setSortie(self::RENDU_TETE, $this->getVue('moteur', $donnees));
}
 
protected function obtenirMasqueRecherche() {
$masque = array();
if (!is_null($this->masque)) {
$masque = $this->masque;
} else if (isset($_GET['masque'])) {
$masque = $_GET['masque'];
$_SESSION['col']['masque'] = $masque;
} else if (isset($_SESSION['col']['masque'])) {
$masque = $_SESSION['col']['masque'];
}
$this->masque = $masque;
return $masque;
}
 
public static function getUrlExemple($chaine) {
$url = '';
if (!is_null(self::$url_exemple)) {
// L'utilisation d'urlencode nécessiate de pré-encodé la chaine dans le format de sortie si nécessaire
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$chaine = mb_convert_encoding($chaine, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
$chaine = urlencode($chaine);
$url = sprintf(self::$url_exemple, $chaine);
}
return $url;
}
 
// recherche des collections ou des personnes, dépendemment de la cible
public function rechercher() {
// un seul pour les collections ou les personnes, on ne cherche pas 2 choses à la fois !
$masque = $this->obtenirMasqueRecherche();
 
$donnees = array();
$donnees['masque'] = $masque;
$rechercheDao = new RechercheDao();
$parametres = array('mots' => '*');
 
// Récupération des paramètres depuis le masque
$parametres = $masque;
 
$this->remplacerAbreviationParId($parametres);
//echo "PARAM 2: <pre>" . print_r($parametres, true) . "</pre><br/>";
// Gestion du nombre de résultats
$donnees_total = null;
if (isset($masque['cible'])) {
switch ($masque['cible']) {
case 'collections':
$donnees_total = $rechercheDao->chercherCollectionsNbre($parametres);
break;
case 'personnes':
$donnees_total = $rechercheDao->chercherPersonnesNbre($parametres);
break;
default:
// @TODO qu'est-ce qui se passe ?
}
}
 
// Gestion du fragmenteur
$options = array(
'url' => $this->url,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$donnees['fragmenteur'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('recherche', 'page'));
 
// Gestion de l'accès aux données
$rechercheDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$rechercheDao->setDistinction(1);
// Récupération des résultats
if (isset($masque['cible'])) {
switch ($masque['cible']) {
case 'collections':
$resultats = $rechercheDao->chercherCollections($parametres);
break;
case 'personnes':
$resultats = $rechercheDao->chercherPersonnes($parametres);
break;
default:
}
}
 
// Affichage de la liste de résultats
if (isset($masque['cible'])) {
switch ($masque['cible']) {
case 'collections':
if (! empty($resultats)) {
foreach ($resultats as $resultat) {
// Ajout des données concernant la structure si ce n'est pas déjà fait
$structure_id = $resultat['cs_id_structure'];
if (!isset($donnees['infos'][$structure_id])) {
$structure = array(
'nom' => $resultat['cs_nom'],
'ville' => $resultat['cs_ville'],
'url' => $this->obtenirUrlFicheStructure($resultat['cs_id_structure'])
);
$donnees['infos'][$structure_id]['structure'] = $structure;
}
 
// Si la structure possède des collections
if (!empty($resultat['cc_id_collection'])) {
$collection = array(
'nom' => $resultat['cc_nom'],
'url' => $this->obtenirUrlFicheCollection($resultat['cc_id_collection'])
);
$donnees['infos'][$structure_id]['collections'][] = $collection;
}
}
}
break;
case 'personnes':
if (! empty($resultats)) {
foreach ($resultats as $resultat) {
//echo "<pre>".print_r($resultat,true)."</pre>";
if (!empty($resultat['cp_id_personne'])) {
$personne = array(
'nomcomplet' => $resultat['cp_fmt_nom_complet'],
'nom' => $resultat['cp_nom'],
'prenom' => $resultat['cp_prenom'],
'url' => $this->obtenirUrlFichePersonne($resultat['cp_id_personne'])
);
$donnees['infos']['personnes'][] = $personne;
}
}
}
break;
default:
}
}
 
// Post-traitement des résultats pour l'affichage
$this->postraiterDonnees($donnees['infos']);
// Gestion des squelettes
$this->chargerMoteurRecherche();
$resultat = $this->getVue('resultat', $donnees);
$this->setSortie(self::RENDU_CORPS, $resultat);
$this->chargerPiedDePage();
}
protected function initialiserMasquesVides($masque) {
$masques_possibles = array('lieu-stockage',
'veg','zg','bot','p','pr','nom-famille','date-vivant','date-deces','adresse');
foreach($masques_possibles as $masque_possible) {
if(!isset($masque[$masque_possible])) {
$masque[$masque_possible] = '';
}
}
return $masque;
}
 
protected function remplacerAbreviationParId(&$parametres) {
// liste 27 : Liste des relations entre une collection et une personne (id:1030)
// liste 80 : Liste des types de collection botanique (id:1083)
$params_a_remplacer = array('veg' => 1043, 'bot' => 1083, 'pr' => 1030);
foreach ($params_a_remplacer as $param => $id_liste) {
if (isset($parametres[$param])) {
// Si plusieurs valeurs séparées par des virgules
$valeurs = explode(',', $parametres[$param]);
$valeurs_nbre = count($valeurs);
$liste = Ontologie::getListeTrieeParAbreviation($id_liste);
foreach ($valeurs as $valeur) {
$cle = strtoupper($valeur);
if (isset($liste[$cle])) {
if ($valeurs_nbre == 1) {
$parametres[$param] = $liste[$cle]['id'];
} else if ($valeurs_nbre > 1) {
$valeur = preg_quote($valeur, '/');
$parametres[$param] = preg_replace("/$valeur/", $liste[$cle]['id'], $parametres[$param]);
}
}
}
}
}
}
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/controleurs/FicheCollection.php
New file
0,0 → 1,475
<?php
// declare(encoding='UTF-8');
/**
* Classe Controleur du module Fiche Collection.
*
* @category Php 5.2
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 96 2010-06-21 16:46:31Z jpm $
*/
class FicheCollection extends Fiche {
private $donnees = array();
protected $collectionDao = null;
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
return $this->afficherCollection();
}
// +---------------------------------------------------------------------------------------------------------------+
// FICHE COLLECTION
public function afficherCollection() {
// Gestion des actions par défaut
$this->executerAction('Recherche', 'chargerMoteurRecherche');
// Gestion des données de la requête
if (!isset($_GET['id'])) {
 
} else {
// Récupération des données
$this->donnees['id'] = $_GET['id'];
$this->donnees['info'] = $this->collectionDao->getCollection($this->donnees['id']);
$this->creerPaginationPersonnes($this->donnees['id']);
$this->creerPaginationPublications($this->donnees['id']);
$this->creerPaginationCommentaires($this->donnees['id']);
 
// Traitements des données
$this->traiterDonneesCollection($this->donnees['info']);
$this->traiterDonneesCollectionAPersonne($this->donnees['personnes']);
$this->traiterDonneesElementAPublication($this->donnees['publications']);
$this->traiterDonneesCollectionDescription($this->donnees['info']);
$this->traiterDonneesCollectionContenu($this->donnees['info']);
$this->traiterDonneesCollectionInventaire($this->donnees['info']);
$this->traiterDonneesCollectionACommentaire($this->donnees['commentaires']);
$this->postraiterDonnees($this->donnees);
 
$this->donnees['info'] = $this->formaterMetaDonneesSpecifiques($this->donnees['info']);
$this->donnees['metadonnees'] = $this->traiterMetaDonnees($this->donnees['info']);
// Création des méta-données de la page
$titre = $this->donnees['info']['cc_nom'];
$description = $this->donnees['info']['cc_description'];
$tags = "Collection, id:{$this->donnees['id']}, {$this->donnees['info']['_guid_']}";
// Envoie à la sortie
//Debug::printr($this->donnees);
$this->setSortie(self::META_TITRE, $titre);
$this->setSortie(self::META_DESCRIPTION, $description);
$this->setSortie(self::META_TAGS, $tags);
$this->setSortie(self::RENDU_CORPS, $this->getVue('fiche_collection', $this->donnees));
$this->chargerPiedDePage();
}
}
private function formaterMetaDonneesSpecifiques($donnees_info) {
// TODO: ceci cause trois appels de web services supplémentaires
// l'idéal serait d'avoir un service qui renvoie tout ça une fois
// (après l'appel n'est pas très couteux en temps et performance)
$sources = $this->collectionDao->getPublicationsSourcesLiees($this->donnees['id']);
$experts = $this->collectionDao->getPersonnesLieesExpertes($this->donnees['id']);
$contributeurs = $this->collectionDao->getPersonnesLieesContributrices($this->donnees['id']);
$donnees_info['contributeur'] = $this->formaterTableauMetadonnees($contributeurs, 'cp_fmt_nom_complet');
$donnees_info['expert'] = $this->formaterTableauMetadonnees($experts, 'cp_fmt_nom_complet');
$donnees_info['cmhl_source'] = $this->formaterTableauMetadonnees($sources, 'cpu_fmt_nom_complet', "<br />");
return $donnees_info;
}
private function formaterTableauMetadonnees(&$donnees, $champ_a_extraire, $separateur = ", ") {
$donnees_fmt = array();
foreach($donnees as &$donnee) {
$donnees_fmt[] = $donnee[$champ_a_extraire];
}
return implode($separateur, $donnees_fmt);
}
private function creerPaginationPersonnes($id_collection) {
// Gestion du nombre de résultats
$donnees_total = $this->collectionDao->getNbrePersonnesLiees($id_collection);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFicheCollection($id_collection);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['personnesFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->collectionDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->collectionDao->setDistinction(1);
$this->donnees['personnes'] = $this->collectionDao->getPersonnesLiees($id_collection);
}
private function creerPaginationPublications($id_collection) {
// Gestion du nombre de résultats
$donnees_total = $this->collectionDao->getNbrePublicationsLiees($id_collection);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFicheCollection($id_collection);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['publicationsFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->collectionDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->collectionDao->setDistinction(1);
$this->donnees['publications'] = $this->collectionDao->getPublicationsLiees($id_collection);
}
private function creerPaginationCommentaires($id_collection) {
// Gestion du nombre de résultats
$donnees_total = $this->collectionDao->getNbreCommentairesLies($id_collection);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFicheCollection($id_collection);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['commentairesFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->collectionDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->collectionDao->setDistinction(1);
$this->donnees['commentaires'] = $this->collectionDao->getCommentairesLies($id_collection);
}
 
private function traiterDonneesCollection(&$donnees) {
// liste 29 : Liste des types de collection dans le standard NCD
Ontologie::chargerListe(1032);
// liste 30 : Liste des types de dépôt de collection
Ontologie::chargerListe(1033);
// liste 31 : Liste des principes de groupement d'une collection dans le standard NCD
Ontologie::chargerListe(1034);
// liste 32 : Liste des buts de réalisation d'une collection dans le standard NCD
Ontologie::chargerListe(1035);
// liste 38 : Liste indéterminé/peut-être/oui/non
Ontologie::chargerListe(1041);
// liste 39 : Liste des types de classement des spécimens types dans une collection
Ontologie::chargerListe(1042);
// liste 79 : Liste exact/approximatif
Ontologie::chargerListe(1082);
 
$guid_id_valeur = Config::get('guid_id_collection').$donnees['cc_id_collection'];
$donnees['_guid_'] = sprintf(Config::get('guid'), $guid_id_valeur);
$donnees['_structure_url_'] = $this->obtenirUrlFicheStructure($donnees['cc_ce_structure']);
$donnees['_nom_alternatif_'] = $this->construireTxtTruck($donnees['cc_truk_nom_alternatif']);
$donnees['_type_ncd_'] = $this->construireTxtListeOntologie($donnees['cc_ce_type']);
$donnees['_type_depot_'] = $this->construireTxtListeOntologie($donnees['cc_ce_type_depot']);
$donnees['_code_'] = $this->construireTxtTruckSansMajuscule($donnees['cc_truk_code']);
$donnees['_url_'] = $this->construireTxtTruckSansMajuscule($donnees['cc_truk_url']);
$donnees['_specimen_type_'] = $this->construireTxtListeOntologie($donnees['cc_ce_specimen_type']);
$donnees['_specimen_type_nbre_'] = ($donnees['cc_specimen_type_nbre'] == 0) ? '' : $donnees['cc_specimen_type_nbre'];
$donnees['_specimen_type_nbre_precision_'] = $this->construireTxtListeOntologie($donnees['cc_ce_specimen_type_nbre_precision']);
$donnees['_specimen_type_nbre_precision_'] = $this->formaterParenthese($donnees['_specimen_type_nbre_precision_']);
$donnees['_specimen_type_classement_'] = $this->construireTxtListeOntologie($donnees['cc_ce_specimen_type_classement']);
$donnees['_couverture_lieu_'] = $this->construireTxtTruck($donnees['cc_truk_couverture_lieu']);
$donnees['_couverture_periode_'] = $donnees["cc_periode_constitution_debut"];
$donnees['_couverture_periode_'] .= ($donnees["cc_periode_constitution_fin"] != "") ? " - ".$donnees["cc_periode_constitution_fin"] : "";
}
private function traiterDonneesCollectionAPersonne(&$personnes) {
// liste 27 : Liste des relations entre une collection et une personne
Ontologie::chargerListe(1030);
// liste 77 : Liste indéterminé/oui/non
Ontologie::chargerListe(1080);
foreach ($personnes as &$personne) {
$personne['_role_'] = $this->construireTxtListeOntologie($personne['ccap_id_role']);
$personne['_deces_'] = $this->construireTxtListeOntologie($personne['cp_ce_deces']);
$personne['_naissance_date_'] = $this->formaterDate($personne['cp_naissance_date'], aControleur::FMT_DATE);
$personne['_deces_date_'] = $this->formaterDate($personne['cp_deces_date'], aControleur::FMT_DATE, '');
$personne['_url_'] = $this->obtenirUrlFichePersonne($personne['ccap_id_personne']);
}
}
private function traiterDonneesCollectionDescription(&$donnees) {
// liste 22 : Liste de traitement anti-insecte pour les collections botaniques
Ontologie::chargerListe(1025);
// liste 23 : Liste des poisons utilisés pour les collections botaniques
Ontologie::chargerListe(1026);
// liste 38 : Liste indéterminé/peut-être/oui/non
Ontologie::chargerListe(1041);
// liste 41 : Liste des types d'unité de rangement pour les collections botaniques
Ontologie::chargerListe(1044);
// liste 42 : Liste des états
Ontologie::chargerListe(1045);
// liste 43 : Liste des types de support pour les spécimens des collections botaniques
Ontologie::chargerListe(1046);
// liste 44 : Liste des types de papier de support pour les spécimens des collections botaniques
Ontologie::chargerListe(1047);
// liste 45 : Liste des méthodes de rangement des supports pour les spécimens des collections botaniques
Ontologie::chargerListe(1048);
// liste 46 : Liste des méthodes de fixation sur le support pour les collections botaniques
Ontologie::chargerListe(1049);
// liste 47 : Liste des méthodes de fixation des étiquettes sur les spécimens pour les collections botaniques
Ontologie::chargerListe(1050);
// liste 48 : Liste des types d'écriture d'étiquette
Ontologie::chargerListe(1051);
// liste 49 : Liste des origines des dégradations des spécimens de collections botaniques
Ontologie::chargerListe(1052);
// liste 50 : Liste des origines des dégradations des supports de collections botaniques
Ontologie::chargerListe(1053);
// liste 51 : Liste des niveaux de détermination des spécimens de collections botaniques
Ontologie::chargerListe(1054);
 
$donnees['_type_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_truk_type']);
$etats = array("1" => "Très mauvais", "2" => "Mauvais", 3 => "Moyen", "4" => "Bon", 5 => "Très bon");
$donnees['_unite_rangement_etat_'] = isset($etats[$donnees['ccb_ce_unite_rangement_etat']]) ? $etats[$donnees['ccb_ce_unite_rangement_etat']] : "";
$donnees['_cartons_'] = ($donnees['ccb_format_cartons_herbier'] === "") ? $donnees['ccb_nb_cartons_herbier'] : $donnees['ccb_nb_cartons_herbier']." ".$donnees['ccb_format_cartons_herbier'];
$donnees['_liasses_'] = ($donnees['ccb_format_liasses'] === "") ? $donnees['ccb_nb_liasses'] : $donnees['ccb_nb_liasses']." ".$donnees['ccb_format_liasses'];
$donnees['_autres_rangements_'] = $donnees["ccb_autres_unites_rangement"];
$donnees['_nb_planches_herbier_'] = $donnees["ccb_nb_planches_herbiers"];
$donnees['_nb_especes_'] = $donnees["ccb_nb_especes"];
$donnees['_conservation_papier_type_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_conservation_papier_type']);
$donnees['_conservation_methode_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_conservation_methode']);
$donnees['_specimen_fixation_methode_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_specimen_fixation_methode']);
$donnees['_etiquette_fixation_support_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_etiquette_fixation_support']);
$donnees['_etiquette_fixation_specimen_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_etiquette_fixation_specimen']);
$donnees['_etiquette_ecriture_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_etiquette_ecriture']);
$donnees['_traitement_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_traitement']);
$donnees['_traitement_poison_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_traitement_poison']);
$donnees['_traitement_insecte_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_traitement_insecte']);
$donnees['_etat_general_'] = isset($etats[$donnees['ccb_ce_etat_general']]) ? $etats[$donnees['ccb_ce_etat_general']] : "";
$valeurEstOntologie = false;
$typeEstOntologie = true;
$donneeEstOntologie = true;
$donnees['_degradation_specimen_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_degradation_specimen'], $valeurEstOntologie, $typeEstOntologie, $donneeEstOntologie);
$donnees['_degradation_presentation_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_degradation_presentation'], $valeurEstOntologie, $typeEstOntologie, $donneeEstOntologie);
$donnees['_determination_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_determination']);
}
private function traiterDonneesCollectionContenu(&$donnees) {
// liste 20 : Liste oui/non/en partie
Ontologie::chargerListe(1023);
// liste 37 : Liste des siècles pour les collections naturalistes
Ontologie::chargerListe(1040);
// liste 38 : Liste indéterminé/peut-être/oui/non
Ontologie::chargerListe(1041);
// liste 42 : Liste des états
Ontologie::chargerListe(1045);
// liste 52 : Liste des types de date de début
Ontologie::chargerListe(1055);
// liste 53 : Liste des types de date de fin
Ontologie::chargerListe(1056);
// liste 80 : Liste des types de collection botanique
Ontologie::chargerListe(1083);
$donnees['_nature_'] = $this->construireTxtListeOntologie($donnees['ccb_truk_nature']);
$donnees['_periode_constitution_'] = $this->construireTxtListeOntologie($donnees['cc_truk_periode_constitution']);
$donnees['_classement_etat_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_classement_etat']);
$donnees['_etiquette_renseignement_'] = $this->construireTxtEtiquetteRenseignement($donnees['ccb_truk_etiquette_renseignement']);
$donnees['_precision_localite_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_precision_localite']);
$donnees['_precision_date_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_precision_date']);
$donnees['_collection_integre_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_collection_integre']);
$donnees['_collection_integre_info_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_collection_integre_info']);
}
private function traiterDonneesCollectionInventaire(&$donnees) {
// liste 38 : Liste indéterminé/peut-être/oui/non
Ontologie::chargerListe(1041);
// liste 57 : Liste indéterminé/parfois/oui/non
Ontologie::chargerListe(1060);
// liste 58 : Liste des formes d'inventaire
Ontologie::chargerListe(1061);
// liste 59 : Liste des types de logiciel pour les inventaires informatiques
Ontologie::chargerListe(1062);
// liste 60 : Liste des états d'inventaire
Ontologie::chargerListe(1063);
$donnees['_inventaire_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_inventaire']);
$donnees['_inventaire_auteur_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_inventaire_auteur']);
$donnees['_inventaire_forme_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_inventaire_forme']);
$donnees['_inventaire_digital_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_truk_inventaire_digital']);
$donnees['_inventaire_etat_'] = $this->construireTxtListeOntologie($donnees['ccb_ce_inventaire_etat']);
}
private function traiterDonneesCollectionACommentaire(&$commentaires) {
// liste 65 : Liste des types de commentaires associés à une collection
Ontologie::chargerListe(1068);
foreach ($commentaires as &$commentaire) {
$commentaire['_type_'] = $this->construireTxtListeOntologie($commentaire['ccac_truk_type']);
}
}
private function construireTxtEtiquetteRenseignement($valeur) {
$etiquetteRenseignements = '';
$infos = $this->parserEtiquetteRenseignement($valeur);
if (count($infos) > 0) {
foreach ($infos as $cle => $info) {
if ($cle == 'AT') {
$etiquetteRenseignements .= 'auteur de la collection';
} else if ($cle == 'F') {
$etiquetteRenseignements .= 'famille';
} else if ($cle == 'G') {
$etiquetteRenseignements .= 'genre';
} else if ($cle == 'SP') {
$etiquetteRenseignements .= 'espèce';
} else if ($cle == 'ASP') {
$etiquetteRenseignements .= "auteur de l'espèce";
} else if ($cle == 'L') {
$etiquetteRenseignements .= 'localité';
} else if ($cle == 'D') {
$etiquetteRenseignements .= 'date de récolte';
} else {
$etiquetteRenseignements .= 'Inconnue';
}
$etiquetteRenseignements .= ': '.$info.'%, ';
}
$etiquetteRenseignements = rtrim($etiquetteRenseignements, ', ').'.';
}
return $etiquetteRenseignements;
}
private function parserEtiquetteRenseignement($valeurTruk) {
$infos = array();
if ($valeurTruk != '') {
$pourcentages = explode(self::SEPARATEUR_VALEURS, $valeurTruk);
foreach ($pourcentages as $pourcentage) {
$pourcentageIdValeur = explode(self::SEPARATEUR_TYPE_VALEUR, $pourcentage);
$id = $pourcentageIdValeur[0];
$valeur = $pourcentageIdValeur[1];
$infos[$id] = $valeur;
}
}
return $infos;
}
private function parserValeurUniteBase($valeurTruk) {
$unitesEnregistrees = array();
if ($valeurTruk != '') {
$unites = explode(self::SEPARATEUR_VALEURS, $valeurTruk);
$unites_nbre = count($unites);
for ($i = 0; $i < $unites_nbre; $i++) {
$uniteTypeIdDonnees = explode(self::SEPARATEUR_TYPE_VALEUR, $unites[$i]);
$uniteChaineDonnees = $uniteTypeIdDonnees[1];
$uniteDonnees = explode(self::SEPARATEUR_DONNEES, $uniteChaineDonnees);
$uniteDonneesNbre = count($uniteDonnees);
$uniteBase = array();
if ($uniteDonneesNbre > 0) {
$uniteBase['nbre'] = $uniteDonnees[0];
}
if ($uniteDonnees[0] > 0 || $uniteDonnees[2] != '' || $uniteDonnees[3] > 0 || $uniteDonnees[5] > 0) {
if ($uniteDonneesNbre > 1) {
$uniteBase['precision'] = self::getPrecisionNom($uniteDonnees[1]);
}
if ($uniteDonneesNbre > 2) {
$uniteBase['format'] = $uniteDonnees[2];
}
if ($uniteDonneesNbre > 3) {
$uniteBase['part_nbre'] = $uniteDonnees[3];
}
if ($uniteDonneesNbre > 4) {
$uniteBase['part_precision'] = self::getPrecisionNom($uniteDonnees[4]);
}
if ($uniteDonneesNbre > 5) {
$uniteBase['sp_nbre'] = $uniteDonnees[5];
}
if ($uniteDonneesNbre > 6) {
$uniteBase['sp_precision'] = self::getPrecisionNom($uniteDonnees[6]);
}
if (preg_match('/^[0-9]+$/', $uniteTypeIdDonnees[0])) {
$uniteBase['id'] = $uniteTypeIdDonnees[0];
$uniteBase['type'] = Ontologie::getValeurNom($uniteTypeIdDonnees[0]);
} else {
$uniteBase['type'] = $uniteTypeIdDonnees[0];
}
$unitesEnregistrees[] = $uniteBase;
}
}
}
return $unitesEnregistrees;
}
private function parserValeurUniteRangement($valeurTruk) {
$unitesEnregistrees = array();
if ($valeurTruk != '') {
$unites = explode(self::SEPARATEUR_VALEURS, $valeurTruk);
$unites_nbre = count($unites);
for ($i = 0; $i < $unites_nbre; $i++) {
$uniteTypeIdDonnees = explode(self::SEPARATEUR_TYPE_VALEUR, $unites[$i]);
$uniteChaineDonnees = $uniteTypeIdDonnees[1];
$uniteDonnees = explode(self::SEPARATEUR_DONNEES, $uniteChaineDonnees);
$uniteDonneesNbre = count($uniteDonnees);
$uniteRangement = array();
if ($uniteDonneesNbre > 0) {
$uniteRangement['nbre'] = $uniteDonnees[0];
}
if ($uniteRangement['nbre'] > 0) {
if ($uniteDonneesNbre > 1) {
$uniteRangement['precision'] = self::getPrecisionNom($uniteDonnees[1]);
}
if ($uniteDonneesNbre > 2) {
$uniteRangement['format'] = $uniteDonnees[2];
}
if (preg_match('/^[0-9]+$/', $uniteTypeIdDonnees[0])) {
$uniteRangement['id'] = $uniteTypeIdDonnees[0];
$uniteRangement['type'] = Ontologie::getValeurNom($uniteTypeIdDonnees[0]);
} else {
$uniteRangement['type'] = $uniteTypeIdDonnees[0];
}
$unitesEnregistrees[] = $uniteRangement;
}
}
}
return $unitesEnregistrees;
}
private static function getPrecisionNom($precisionAbr) {
$precision_nom = '';
if ($precisionAbr != 'NULL') {
// liste 79 : Liste exact/approximatif
$precisions = Ontologie::getListeFormatee(1082);
foreach ($precisions as $precision) {
if ($precision['abreviation'] == $precisionAbr) {
$precision_nom = $precision['nom'];
break;
}
}
}
return $precision_nom;
}
}
/branches/v1.13-la-grande-rue/controleurs/AppControleur.php
New file
0,0 → 1,213
<?php
// declare(encoding='UTF-8');
/**
* Collection est le controlleur principal de l'application.
* Elle repartie les demandes utilisateurs dans les différents modules, executent les actions et redistribue le code
* html dans les différentes fonctions d'affichage.
* C'est une Singleton.
*
* @category PHP 5.2
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version $Id$
*/
 
class AppControleur extends Controleur {
/**
* Instance de la classe pointant sur elle même (pour le pattern singleton)
*/
private static $instance = null;
/**
* Paramètres pour les collections
*/
private static $parametres = array();
/**
* Constructeur vide
*/
public function __construct() {
$sortie = array('titre' => '', 'description' => '', 'tags' => '',
'corps' => '', 'tete' => '', 'pied' => '', 'navigation' => '');
$url = new Url(Config::get('url_base_index'));
self::$parametres = array( 'module' => 'Recherche',
'action' => 'executerActionParDefaut',
'sortie' => $sortie,
'url' => $url);
parent::__construct();
}
/**
* Initialisation du controleur principal en fonction des paramêtres de l'url.
*/
public static function initialiser() {
self::verifierCreationInstance();
self::gererSession();
if (isset($_GET['module'])) {
self::$parametres['module'] = $_GET['module'];
}
self::$parametres['url']->setVariableRequete('module', self::$parametres['module']);
if (isset($_GET['action'])) {
self::$parametres['action'] = $_GET['action'];
}
self::$parametres['url']->setVariableRequete('action', self::$parametres['action']);
self::initialiserRegistre();
$ClasseModule = self::$parametres['module'];
$action = self::$parametres['action'];
$module = new $ClasseModule();
$module->$action();
self::fusionnerSortie($module->getSortie());
}
private static function initialiserRegistre() {
$registre = Registre::getInstance();
// Ajout des paramètres au registre
$registre->set('parametres', self::$parametres);
// Ajout du contexte au registre
if (isset($_GET['contexte'])) {
$registre->set('contexte', $_GET['contexte']);
}
}
private static function gererSession() {
if (Config::get('session_demarrage')) {
// Attribution d'un nom à la session
session_name(Config::get('session_nom'));
// Démarrage de la session
session_start();
}
}
/**
* Fusionne un tableau de sortie par défaut avec le tableau renvoyé par l'action du module.
* @param array le tableau à fusionner
*/
private static function fusionnerSortie($sortie) {
self::$parametres['sortie'] = array_merge(self::$parametres['sortie'], $sortie);
}
/**
* Vérifie si l'instance de classe à été crée, si non la crée.
*/
private static function verifierCreationInstance() {
if (empty(self::$instance)) {
self::$instance = new AppControleur();
}
}
/**
* Retourne le titre du contenu de l'application.
*/
public static function getMetaTitre() {
$sortie = self::$parametres['sortie']['titre'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne la description du contenu de l'application.
*/
public static function getMetaDescription() {
$sortie = self::$parametres['sortie']['description'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les mots-clés (tags) du contenu de l'application.
*/
public static function getMetaTags() {
$sortie = self::$parametres['sortie']['tags'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu du corps de l'application.
*/
public static function getContenuCorps() {
$sortie = self::$parametres['sortie']['corps'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu de la tête de l'application.
*/
public static function getContenuTete() {
$sortie = self::$parametres['sortie']['tete'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu du pied de l'application.
*/
public static function getContenuPied() {
$sortie = self::$parametres['sortie']['pied'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les éléments de navigation de l'application.
*/
public static function getContenuNavigation() {
$sortie = self::$parametres['sortie']['navigation'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
 
/**
* Retourne le nom du module en cours (défini par GET ou par la config),
* pour l'intégration Wordpress notamment
*/
public static function getModule() {
return self::$parametres['module'];
}
/**
* Retourne les chronos pris dans l'appli
*/
public static function getChrono() {
$sortie = '';
if (Config::get('chronometrage')) {
$chrono = Chronometre::afficherChrono();
$sortie = mb_convert_encoding($chrono, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les messages d'exceptions et d'erreurs.
*/
public static function getExceptions() {
$sortie = (Config::get('fw_debogage')) ? GestionnaireException::getExceptions() : '';
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/controleurs/aControleur.php
New file
0,0 → 1,469
<?php
// declare(encoding='UTF-8');
/**
* Classe Controleur générale de l'application Collection.
*
* @category php5.2
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
abstract class aControleur extends Controleur {
const FMT_DATE = '%d/%m/%Y';// Supporte les formats de dates non valides (1989-00-00)
const FMT_DATE_TXT = '%A %d %B %Y';
const FMT_DATE_HEURE = '%d/%m/%Y %H:%i:%s';// Supporte les formats de dates non valides (1989-00-00 00:00:00)
const FMT_DATE_HEURE_TXT = '%A %d %B %Y à %H:%M';
const META_TITRE = 'titre';
const META_DESCRIPTION = 'description';
const META_TAGS = 'tags';
const RENDU_TETE = 'tete';
const RENDU_CORPS = 'corps';
const RENDU_PIED = 'pied';
const TYPE_AUTRE = 'AUTRE';
const TYPE_TOTAL = 'TOTAL';
const SEPARATEUR_TYPE_VALEUR = '##';
const SEPARATEUR_VALEURS = ';;';
const SEPARATEUR_DONNEES = '||';
const VALEUR_NULL = 'NC';
private $sortie = array();
private $parametres = array();
// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
protected $url = null;
protected $registre = array();
public function __construct() {
$this->registre = Registre::getInstance();
$this->parametres = $this->registre->get('parametres');
$this->url = $this->parametres['url'];
parent::__construct();
}
/**
* Attribue une position de sortie à un contenu.
*/
protected function setSortie($position, $contenu, $fusionner = false) {
if ($this->verifierExistenceTypeSortie($position)) {
if ($fusionner) {
$this->sortie[$position] .= $contenu;
} else {
$this->sortie[$position] = $contenu;
}
}
}
/**
* Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
* @param string le type de sortie à tester.
* @return bool true si le type de sortie est valide, sinon false.
*/
private function verifierExistenceTypeSortie($type) {
$existe = true;
if ($type != self::RENDU_TETE &&
$type != self::RENDU_CORPS &&
$type != self::RENDU_PIED &&
$type != self::META_TITRE &&
$type != self::META_DESCRIPTION &&
$type != self::META_TAGS) {
trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
$existe = false;
}
return $existe;
}
/**
* Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
*/
public function getSortie() {
return $this->sortie;
}
 
/**
* Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
*/
protected function executerAction($ClasseModule, $action) {
$module = new $ClasseModule();
$module->$action();
$this->fusionnerSortie($module->getSortie());
}
/**
* Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
* @param array le tableau à fusionner
*/
private function fusionnerSortie($sortie) {
$this->sortie = array_merge($this->sortie, $sortie);
}
protected function construireTxtTruckSimple($chaine_a_analyser) {
return $this->construireTxtTruck($chaine_a_analyser, false, false);
}
protected function construireTxtTruckSansMajuscule($chaine_a_analyser) {
return $this->construireTxtTruck($chaine_a_analyser, false, true);
}
protected function construireTxtTruckSansPointFinal($chaine_a_analyser) {
return $this->construireTxtTruck($chaine_a_analyser, true, false);
}
protected function construireTxtTruck($chaine_a_analyser, $majuscule = true, $point_final = true) {
$termes = $this->traiterTxtTruck($chaine_a_analyser);
$chaine_a_retourner = $this->formaterTableauDeTxt($termes, $majuscule, $point_final);
return $chaine_a_retourner;
}
protected function traiterTxtTruck($chaine_a_analyser) {
$termes = array();
if ((!is_null($chaine_a_analyser)) && (trim($chaine_a_analyser) != '')) {
$valeurs = explode(self::SEPARATEUR_VALEURS, $chaine_a_analyser);
$nbre_valeurs = count($valeurs);
if ($nbre_valeurs > 0) {
for ($i = 0; $i < $nbre_valeurs; $i++) {
$valeur = trim($valeurs[$i]);
if ($valeur != '') {
$valeur_formatee = $this->formaterValeurTruck($valeur);
$termes[] = $valeur_formatee;
}
}
}
}
return $termes;
}
protected function getTxtTruckParPosition($chaine_a_analyser, $position = 1) {
$retour = '';
if ((!is_null($chaine_a_analyser)) && (trim($chaine_a_analyser) != '')) {
$valeurs = explode(self::SEPARATEUR_VALEURS, $chaine_a_analyser);
$nbre_valeurs = count($valeurs);
if ($nbre_valeurs > 0) {
$position = $position - 1;
$valeur = trim($valeurs[$position]);
if ($valeur != '') {
$retour = $this->formaterValeurTruck($valeur);
}
}
}
return $retour;
}
protected function getTableauTruck($chaine_a_analyser) {
$tableau_retour = array();
if ((!is_null($chaine_a_analyser)) && (trim($chaine_a_analyser) != '')) {
$valeurs = explode(self::SEPARATEUR_VALEURS, $chaine_a_analyser);
$nbre_valeurs = count($valeurs);
if ($nbre_valeurs > 0) {
for ($i = 0; $i < $nbre_valeurs; $i++) {
$valeur = trim($valeurs[$i]);
if ($valeur != '') {
$tableau_retour[] = $valeur;
}
}
}
}
return $tableau_retour;
}
private function formaterValeurTruck($valeur) {
$chaine_a_retourner = '';
if (preg_match('/^[^#]+##[^$]+$/', $valeur)) {
$cle_valeur = explode(self::SEPARATEUR_TYPE_VALEUR, $valeur);
$chaine_a_retourner = (($cle_valeur[1] == '' || $cle_valeur[1] == 'null') ? self::VALEUR_NULL : $cle_valeur[1]);
$chaine_a_retourner .= ' '.$this->formaterParenthese($cle_valeur[0]);
} else if ($valeur != '') {
$chaine_a_retourner = $valeur;
} else {
trigger_error("Valeur truck posant problème :$valeur", E_USER_NOTICE);
}
return $chaine_a_retourner;
}
protected function formaterParenthese($chaine_a_afficher) {
if ($chaine_a_afficher != '') {
$chaine_a_afficher = '('.$chaine_a_afficher.')';
}
return $chaine_a_afficher;
}
protected function formaterSautDeLigne($chaine_a_formater) {
$txt_a_retourner = preg_replace('/\n/', '<br />', $chaine_a_formater);
return $txt_a_retourner;
}
protected function formaterTableauDeTxt($tableau_de_txt, $majuscule = true, $point_final = true) {
$chaine_a_afficher = '';
$taille_du_tableau = count($tableau_de_txt);
if ($taille_du_tableau > 0) {
$index_avt_dernier = $taille_du_tableau - 1;
for ($i = 0; $i < $taille_du_tableau; $i++) {
$mot = $tableau_de_txt[$i];
if ($i != $index_avt_dernier) {
$chaine_a_afficher .= $mot.', ';
} else {
$chaine_a_afficher .= $this->nettoyerPointFinal($mot);
if ($point_final) {
$chaine_a_afficher .= '.';
}
}
}
}
if ($majuscule) {
$chaine_a_afficher = ucfirst($chaine_a_afficher);
}
return $chaine_a_afficher;
}
protected function formaterAutre($chaine_a_afficher) {
if ($chaine_a_afficher != '') {
$chaine_a_afficher = ' [Autre : '.$chaine_a_afficher.']';
}
return $chaine_a_afficher;
}
protected function formaterOuiNon($chaine_a_formater) {
$txt_a_retourner = '';
if ($chaine_a_formater == '0') {
$txt_a_retourner = 'non';
} else if ($chaine_a_formater == '1') {
$txt_a_retourner = 'oui';
}
return $txt_a_retourner;
}
protected function formaterDate($date, $format = self::FMT_DATE_HEURE, $chaineSiVide = 'Inconnue') {
if ($date == '' || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') {
$date = $chaineSiVide;
} else {
if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})(?: ([0-9]{2}):([0-9]{2}):([0-9]{2})|)$/', $date, $match)) {// Date Heure
$annee = $match[1];
$mois = $match[2];
$jour = $match[3];
$heure = (isset($match[4])) ? $match[4] : '00';
$minute = (isset($match[5])) ? $match[5] : '00';
$seconde = (isset($match[6])) ? $match[6] : '00';
if ($format == self::FMT_DATE && $jour == '00' && $mois == '00') {
$date = $annee;
} else if ($format == self::FMT_DATE && $jour == '00') {
$date = strftime('%b', mktime(0, 0, 0, $mois, 1)).' '.$annee;
} else {
$timestamp = strtotime($date);
if ($timestamp !== false) {
$date = strftime($format, $timestamp);
}
}
} else {
$e = "La chaine '$date' n'est pas reconnue.";
trigger_error($e, E_USER_WARNING);
}
}
return $date;
}
protected function formaterCourriels($courriels) {
$fmt_courriels = '';
if (!empty($courriels)) {
$courriels = (is_array($courriels)) ? $courriels : array($courriels);
foreach ($courriels as $cle => $courriel) {
$courriel = preg_replace('/@/', ' [arrobase] ', $courriel);
$courriel = preg_replace('/[.]([^.]+)$/', " [point] $1", $courriel);
$fmt_courriels[] = $this->getVue('courriel', array('courriel' => $courriel));
}
$fmt_courriels = implode(', ', $fmt_courriels);
}
return $fmt_courriels;
}
protected function nettoyerPointFinal($mot) {
$mot = preg_replace('/[.]$/', '', $mot);
return $mot;
}
public function construireTxtListeOntologie($chaineAAnalyser, $valeurEstOntologie = true, $typeEstOntologie = true, $donneeEstOntologie = false) {
$termes = array();
$autres = array();
$chaineAAnalyser = trim($chaineAAnalyser);
if ($chaineAAnalyser != '') {
$valeurs = explode(self::SEPARATEUR_VALEURS, $chaineAAnalyser);
$nbreValeurs = count($valeurs);
if ($nbreValeurs > 0) {
for ($i = 0; $i < $nbreValeurs; $i++) {
$valeur = $valeurs[$i];
// VALEUR SANS TYPE
// La valeur sans type est une entrée de l'ontologie
if ($valeurEstOntologie && preg_match('/^[0-9]+$/u', $valeur)) {
if ($valeur == '0') {
$valeur = '';
} else {
$valeurOntologie = Ontologie::getValeur($valeur);
if ($valeurOntologie != '') {
$valeur = $valeurOntologie['nom'];
}
}
}
// VALEUR AVEC TYPE
// Type : AUTRE
$valeurTypeAutre = self::TYPE_AUTRE.self::SEPARATEUR_TYPE_VALEUR;
if (preg_match('/^'.$valeurTypeAutre.'.+$/u', $valeur)) {
$txtAutre = preg_replace('/^'.$valeurTypeAutre.'/u', '', $valeur);
if ($txtAutre != '') {
$autres[] = $txtAutre;
}
$valeur = '';
}
// Type correspondant à une entrée de l'ontologie
if ($typeEstOntologie) {
$valeurTypeOntologie = '([0-9]+)'.self::SEPARATEUR_TYPE_VALEUR;
$valeurTypeAutre = '([[:alnum:]]+)'.self::SEPARATEUR_TYPE_VALEUR;
if (preg_match('/^'.$valeurTypeOntologie.'.*$/u', $valeur, $match)) {// Cas type : réf. numérique
$type = $match[1];
$valeurOntologieNom = Ontologie::getValeurNom($type);
if ($valeurOntologieNom !== false) {
$valeurOntologieNom .= ' : ';
$valeur = preg_replace('/^'.$type.'/u', $valeurOntologieNom, $valeur);
}
} else if (preg_match('/^'.$valeurTypeAutre.'.*$/u', $valeur, $match)) {// Cas type : AUTRE
$type = $match[1];
$valeur = preg_replace('/^'.$type.'/u', $type.' : ', $valeur);
}
}
// Donnée correspondant à une entrée de l'ontologie
if ($donneeEstOntologie) {
$donneeOntologie = self::SEPARATEUR_TYPE_VALEUR.'([0-9]+)';
if (preg_match('/^.+'.$donneeOntologie.'$/u', $valeur, $match)) {
$donnee = $match[1];
$donnee = str_replace(self::SEPARATEUR_TYPE_VALEUR, '', $donnee);
$valeurOntologieNom = Ontologie::getValeurNom($donnee);
if ($valeurOntologieNom !== false) {
$valeur = preg_replace('/'.$donnee.'$/u', $valeurOntologieNom, $valeur);
}
}
}
// Nettoyage final
$valeur = preg_replace('/'.self::SEPARATEUR_TYPE_VALEUR.'/', '', $valeur);
if ($valeur != '') {
$termes[] = $valeur;
}
}
}
}
$chaineTermes = $this->formaterTableauDeTxt($termes);
$chaineAutres = $this->formaterTableauDeTxt($autres);
$chaineARetourner = $chaineTermes.$this->formaterAutre($chaineAutres);
return $chaineARetourner;
}
protected function obtenirUrlRecherche($txt = null) {
$this->url->setRequete(false);
if (!is_null($this->registre->get('contexte'))) {
$this->url->setVariableRequete('contexte', $this->registre->get('contexte'));
}
$this->url->setVariableRequete('module', 'Recherche');
$this->url->setVariableRequete('action', 'rechercher');
if (!is_null($txt)) {
$this->url->setVariableRequete('recherche', $txt);
}
$url = $this->url->getURL();
$this->url->unsetVariablesRequete(array('module', 'action', 'recherche'));
return $url;
}
protected function obtenirUrlFicheStructure($id_structure) {
$url = $this->obtenirObjetUrlFicheStructure($id_structure);
return $url->getURL();
}
protected function obtenirObjetUrlFicheStructure($id_structure) {
$this->url->setRequete(false);
if (!is_null($this->registre->get('contexte'))) {
$this->url->setVariableRequete('contexte', $this->registre->get('contexte'));
}
$this->url->setVariableRequete('module', 'FicheStructure');
$this->url->setVariableRequete('id', $id_structure);
$url = clone $this->url;
$this->url->unsetVariablesRequete(array('module', 'id'));
return $url;
}
protected function obtenirUrlFicheCollection($id_collection) {
$url = $this->obtenirObjetUrlFicheCollection($id_collection);
return $url->getURL();
}
protected function obtenirObjetUrlFicheCollection($id_collection) {
$this->url->setRequete(false);
if (!is_null($this->registre->get('contexte'))) {
$this->url->setVariableRequete('contexte', $this->registre->get('contexte'));
}
$this->url->setVariableRequete('module', 'FicheCollection');
$this->url->setVariableRequete('id', $id_collection);
$url = clone $this->url;
$this->url->unsetVariablesRequete(array('module', 'id'));
return $url;
}
protected function obtenirUrlFichePersonne($id_personne) {
$url = $this->obtenirObjetUrlFichePersonne($id_personne);
return $url->getURL();
}
protected function obtenirObjetUrlFichePersonne($id_personne) {
$this->url->setRequete(false);
if (!is_null($this->registre->get('contexte'))) {
$this->url->setVariableRequete('contexte', $this->registre->get('contexte'));
}
$this->url->setVariableRequete('module', 'FichePersonne');
$this->url->setVariableRequete('id', $id_personne);
$url = clone $this->url;
$this->url->unsetVariablesRequete(array('module', 'id'));
return $url;
}
protected function obtenirPermalienGuid($guid) {
$url = Config::get('url_base_permalien');
$url .= (substr($url, -1, 1) == '/') ? '' : '/';
$url .= $guid;
return $url;
}
protected function postraiterDonnees(&$tableau) {
if (count($tableau) > 0) {
foreach ($tableau as $cle => &$valeur) {
// ajout d'un nbsp pour ne pas fausser l'affichage du template
// afin que les <dd> et <dt> aient la même largeur
if ($valeur == '') {
$valeur = '&nbsp;';
} else if (is_string($valeur)) {
$valeur = $this->remplacerEsperluette($valeur);
} else if (is_array($valeur)) {
$this->postraiterDonnees($valeur);
}
}
}
}
private function remplacerEsperluette($txt) {
$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
return $txt;
}
protected function chargerPiedDePage() {
$donnees['appli'] = Application::getInfo();
$donnees['url_base_widget_remarques'] = Config::get('url_base_widget_remarques');
$this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees));
}
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/controleurs/Carte.php
New file
0,0 → 1,37
<?php
// declare(encoding='UTF-8');
/**
* classe Controleur du module Carte.
*
* @package Collection
* @category Php5
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
class Carte extends aControleur {
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut, elle appelle la liste des administrateurs
*/
public function executerActionParDefaut() {
return $this->cartographier();
}
/**
* Cartographier les collections.
* @return string la vue correspondante
*/
public function cartographier() {
 
$resultat = $this->getVue('carte', array());
$this->setSortie(self::RENDU_CORPS, $resultat);
$this->chargerPiedDePage();
}
}
?>
/branches/v1.13-la-grande-rue/controleurs/Fiche.php
New file
0,0 → 1,69
<?php
// declare(encoding='UTF-8');
/**
* Classe mère des Controleurs des modules présentant des Fiches.
*
* @package Collection
* @category Php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
abstract class Fiche extends aControleur {
protected $structureDao = null;
protected $collectionDao = null;
protected $personneDao = null;
public function __construct() {
parent::__construct();
$this->structureDao = new StructureDao();
$this->collectionDao = new CollectionDao();
$this->personneDao = new PersonneDao();
}
// +---------------------------------------------------------------------------------------------------------------+
// MÉTHODES GÉNÉRIQUES
protected function obtenirNomCompletPersonne($personne_id) {
$personne_nom = $this->personneDao->getPersonneNomComplet($personne_id);
return $personne_nom;
}
protected function obtenirCourrielsPersonne($personne_id) {
$courriels = $this->personneDao->getPersonneCourriels($personne_id);
$courriels = $this->traiterTxtTruck($courriels);
$courriels = $this->formaterCourriels($courriels);
return $courriels;
}
protected function traiterDonneesElementAPublication(&$publications) {
foreach ($publications as &$publication) {
$publication['_editeur_'] = $this->construireTxtTruck($publication['cpu_ce_truk_editeur']);
$publication['_date_parution_'] = rtrim($publication['cpu_date_parution'],'-00-00');
if(isset($publication['ccapu_source'])) {
$publication['ccapu_source'] = $publication['ccapu_source'] == "1" ? "oui" : "non";
}
}
}
protected function traiterMetaDonnees(&$donnees) {
$meta = array();
$meta['_guid_'] = $donnees['_guid_'];
$meta['_guid_url_'] = $this->obtenirPermalienGuid($donnees['_guid_']);
$meta['_notes_'] = $donnees['cmhl_notes'];
$meta['_source_'] = $donnees['cmhl_source'];
// les deux champs suivants sont spécifique à la collection
// TODO: si d'autres champs spécifiques s'ajoutent, faire un système
// générique pour les champs de meta données supplémentaires
$meta['_expert_'] = isset($donnees['expert']) ? $donnees['expert'] : null;
$meta['_contributeur_'] = isset($donnees['contributeur']) ? $donnees['contributeur'] : null;
$meta['_date_modification_'] = $donnees['cmhl_date_modification'];
$meta['_modifier_par_'] = $this->obtenirNomCompletPersonne($donnees['cmhl_ce_modifier_par']);
$meta['_modifier_par_courriel_'] = $this->obtenirCourrielsPersonne($donnees['cmhl_ce_modifier_par']);
$meta['_etat_'] = $this->construireTxtListeOntologie($donnees['cmhl_ce_etat']);
return $this->getVue('metadonnees', $meta);
}
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/controleurs/FicheStructure.php
New file
0,0 → 1,241
<?php
// declare(encoding='UTF-8');
/**
* Classe Controleur du module Fiche Structure.
*
* @category Php 5.2
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 96 2010-06-21 16:46:31Z jpm $
*/
class FicheStructure extends Fiche {
private $donnees = array();
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
return $this->afficherStructure();
}
// +---------------------------------------------------------------------------------------------------------------+
// FICHE STRUCTURE
public function afficherStructure() {
// Gestion des actions par défaut
$this->executerAction('Recherche', 'chargerMoteurRecherche');
// Gestion des données de la requête
if (!isset($_GET['id'])) {
} else {
// Gestion des données
$this->donnees['id'] = $_GET['id'];
$this->donnees['info'] = $this->structureDao->getStructure($this->donnees['id']);
 
$this->traiterDonneesStructure($this->donnees['info']);
$this->creerPaginationPersonnel($this->donnees['id']);
$this->traiterDonneesStructureConservation($this->donnees['info']);
$this->traiterDonneesStructureValorisation($this->donnees['info']);
$this->creerPaginationCollections($this->donnees['id']);
$this->postraiterDonnees($this->donnees);
$this->donnees['metadonnees'] = $this->traiterMetaDonnees($this->donnees['info']);
// Création des méta-données de la page
$titre = $this->donnees['info']['cs_nom'];
$description = $this->donnees['info']['cs_description'];
$tags = "Structure, id:{$this->donnees['id']}, {$this->donnees['info']['_guid_']}";
// Envoie à la sortie
//Debug::printr($donnees);
$this->setSortie(self::META_TITRE, $titre);
$this->setSortie(self::META_DESCRIPTION, $description);
$this->setSortie(self::META_TAGS, $tags);
$this->setSortie(self::RENDU_CORPS, $this->getVue('fiche_structure', $this->donnees));
$this->chargerPiedDePage();
}
}
private function traiterDonneesStructure(&$donnees) {
// liste 01 : Liste des états des enregistrements de la base de données
Ontologie::chargerListe(1001);
// liste 12 : Liste des types de structure privé
Ontologie::chargerListe(1015);
// liste 13 : Liste des types de structure public
Ontologie::chargerListe(1016);
// liste 71 : Liste des pays du standard ISO-3166-1
Ontologie::chargerListe(1074);
 
$guid_id_valeur = Config::get('guid_id_structure').$donnees['cs_id_structure'];
$donnees['_guid_'] = sprintf(Config::get('guid'), $guid_id_valeur);
$donnees['_date_fondation_'] = $this->formaterDate($donnees['cs_date_fondation'], aControleur::FMT_DATE);
$donnees['_nbre_personne_'] = (empty($donnees['cs_nbre_personne'])) ? '' : $donnees['cs_nbre_personne'];
$donnees['_acronyme_'] = $this->construireTxtTruck($donnees['cs_truk_identifiant_alternatif']);
$donnees['_telephone_fax_'] = $this->construireTxtTruck($donnees['cs_truk_telephone']);
$donnees['_type_prive_'] = $this->construireTxtListeOntologie($donnees['cs_ce_truk_type_prive']);
$donnees['_type_public_'] = $this->construireTxtListeOntologie($donnees['cs_ce_truk_type_public']);
$donnees['_pays_'] = $this->construireTxtListeOntologie($donnees['cs_ce_truk_pays']);
$donnees['_web_'] = $this->construireTxtTruckSansMajuscule($donnees['cs_truk_url']);
$donnees['_courriel_'] = $this->formaterCourriels($donnees['cs_courriel']);
$latitude = $donnees['cs_latitude'];
$longitude = $donnees['cs_longitude'];
$donnees['_latitude_longitude_'] = ($longitude != '' && $latitude != '') ? "$latitude / $longitude" : '';
$donnees['_latitude_dcm_en_'] = ($latitude != '') ? str_replace(',', '.', $latitude) : '';
$donnees['_longitude_dcm_en_'] = ($longitude != '') ? str_replace(',', '.', $longitude) : '';
$donnees['_lien_carte_'] = sprintf(Config::get('lien_vers_carte'), $donnees['_latitude_dcm_en_'], $donnees['_longitude_dcm_en_']);
$donnees['_url_img_carte_'] = sprintf(Config::get('url_img'), Config::get('img_carte'));
}
private function traiterDonneesStructureConservation(&$donnees) {
// liste 15 : Liste des types de local de stockage de collections
Ontologie::chargerListe(1018);
// liste 16 : Liste des types de mobilier de stockage de collections
Ontologie::chargerListe(1019);
// liste 17 : Liste des paramètres de contrôle environnemental d'un local
Ontologie::chargerListe(1020);
// liste 18 : Liste des types de collection non botanique
Ontologie::chargerListe(1021);
// liste 19 : Liste des types d'opération de restauration pour les collections botaniques
Ontologie::chargerListe(1022);
// liste 20 : Liste oui/non/en partie
Ontologie::chargerListe(1023);
// liste 21 : Liste du matériel dit de nom conservation des parts d'herbier
Ontologie::chargerListe(1024);
$donnees['_formation_'] = $this->formaterOuiNon($donnees['csc_mark_formation']);
$donnees['_formation_info_'] = $this->formaterParenthese($donnees['csc_formation']);
$donnees['_formation_info_'] = $this->formaterSautDeLigne($donnees['_formation_info_']);
$donnees['_formation_interet_'] = $this->formaterOuiNon($donnees['csc_mark_formation_interet']);
$donnees['_stockage_local_'] = $this->construireTxtListeOntologie($donnees['csc_truk_stockage_local']);
$donnees['_stockage_meuble_'] = $this->construireTxtListeOntologie($donnees['csc_truk_stockage_meuble']);
$donnees['_stockage_parametre_'] = $this->construireTxtListeOntologie($donnees['csc_truk_stockage_parametre']);
$donnees['_collection_commune_'] = $this->formaterOuiNon($donnees['csc_mark_collection_commune']);
$donnees['_collection_commune_autre_'] = $this->construireTxtListeOntologie($donnees['csc_truk_collection_autre']);
$donnees['_collection_commune_autre_'] = $this->formaterParenthese($donnees['_collection_commune_autre_']);
$donnees['_acces_controle_'] = $this->formaterOuiNon($donnees['csc_mark_acces_controle']);
$donnees['_restauration_'] = $this->formaterOuiNon($donnees['csc_mark_restauration']);
$donnees['_restauration_operation_'] = $this->construireTxtListeOntologie($donnees['csc_truk_restauration_operation']);
$donnees['_restauration_operation_'] = $this->formaterParenthese($donnees['_restauration_operation_']);
$donnees['_materiel_conservation_'] = $this->construireTxtListeOntologie($donnees['csc_ce_materiel_conservation']);
$donnees['_materiel_autre_'] = $this->construireTxtListeOntologie($donnees['csc_truk_materiel_autre']);
$donnees['_materiel_autre_'] = $this->formaterParenthese($donnees['_materiel_autre_']);
$donnees['_traitement_'] = $this->formaterOuiNon($donnees['csc_mark_traitement']);
$donnees['_traitement_liste_'] = $this->construireTxtListeOntologie($donnees['csc_truk_traitement']);
$donnees['_traitement_liste_'] = $this->formaterParenthese($donnees['_traitement_liste_']);
$donnees['_acquisition_collection_'] = $this->formaterOuiNon($donnees['csc_mark_acquisition_collection']);
$donnees['_acquisition_echantillon_'] = $this->formaterOuiNon($donnees['csc_mark_acquisition_echantillon']);
if ($donnees['csc_mark_acquisition_echantillon'] == '1') {
$donnees['_acquisition_traitement_'] = $this->formaterOuiNon($donnees['csc_mark_acquisition_traitement']);
if ($donnees['csc_mark_acquisition_traitement'] == '1') {
$donnees['_acquisition_traitement_poison_'] = $this->construireTxtListeOntologie($donnees['csc_truk_acquisition_traitement_poison']);
$donnees['_acquisition_traitement_insecte_'] = $this->construireTxtListeOntologie($donnees['csc_truk_acquisition_traitement_insecte']);
}
}
}
private function traiterDonneesStructureValorisation(&$donnees) {
// liste 24 : Liste des actions de valorisation des collections
Ontologie::chargerListe(1027);
// liste 25 : Liste des continents habités incluant aussi le pays France
Ontologie::chargerListe(1028);
// liste 26 : Liste des types de recherche nécessitant la consultation de collection botanique
Ontologie::chargerListe(1029);
$donnees['_action_'] = $this->formaterOuiNon($donnees['csv_mark_action']);
$donnees['_action_info_'] = $this->construireTxtListeOntologie($donnees['csv_truk_action']);
$donnees['_action_info_'] = $this->formaterParenthese($donnees['_action_info_']);
$donnees['_collection_autre_'] = $this->construireTxtListeOntologie($donnees['csv_collection_autre']);
$donnees['_action_future_'] = $this->formaterOuiNon($donnees['csv_mark_action_future']);
$donnees['_action_future_info_'] = $this->formaterParenthese($donnees['csv_action_future']);
$donnees['_recherche_'] = $this->formaterOuiNon($donnees['csv_mark_recherche']);
if ($donnees['csv_mark_recherche'] == '1') {
$donnees['_recherche_provenance_'] = $this->construireTxtListeOntologie($donnees['csv_truk_recherche_provenance']);
$donnees['_recherche_type_'] = $this->construireTxtListeOntologie($donnees['csv_truk_recherche_type']);
}
$donnees['_acces_ss_motif_'] = $this->formaterOuiNon($donnees['csv_mark_acces_ss_motif']);
$donnees['_acces_ss_motif_info_'] = $this->formaterParenthese($donnees['csv_acces_ss_motif']);
$donnees['_visite_avec_motif_'] = $this->formaterOuiNon($donnees['csv_mark_visite_avec_motif']);
$donnees['_visite_avec_motif_info_'] = $this->formaterParenthese($donnees['csv_visite_avec_motif']);
}
private function creerPaginationCollections($id_structure) {
// Gestion du nombre de résultats
$donnees_total = $this->collectionDao->getNbreParIdStructure($id_structure);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFicheStructure($id_structure);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['collectionsFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->collectionDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->collectionDao->setDistinction(1);
$this->donnees['collections'] = $this->collectionDao->getParIdStructure($id_structure);
$this->traiterDonneesStructureCollections($this->donnees['collections']);
}
 
private function traiterDonneesStructureCollections(&$collections) {
foreach ($collections as &$collection) {
$collection['_url_'] = $this->obtenirUrlFicheCollection($collection['cc_id_collection']);
}
}
private function creerPaginationPersonnel($id_structure) {
// Gestion du nombre de résultats
$donnees_total = $this->structureDao->getNbrePersonnel($id_structure);
// Gestion du fragmenteur
$urlFiche = $this->obtenirObjetUrlFicheStructure($id_structure);
$options = array(
'url' => $urlFiche,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$this->donnees['personnelFrag'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('page'));
 
// Gestion de l'accès aux données
$this->structureDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$this->structureDao->setDistinction(1);
$this->donnees['personnel'] = $this->structureDao->getPersonnel($id_structure);
$this->traiterPersonnel($this->donnees['personnel']);
}
private function traiterPersonnel(&$donnees) {
// liste 09 : Liste des fonctions d'une personne au sein d'une structure
Ontologie::chargerListe(1012);
// liste 10 : Liste des statuts d'une personne au sein d'une structure
Ontologie::chargerListe(1013);
foreach ($donnees as &$personnel) {
$personnel['_fonction_'] = $this->construireTxtListeOntologie($personnel['csap_ce_truk_fonction']);
$personnel['_statut_'] = $this->construireTxtListeOntologie($personnel['csap_ce_truk_statut']);
$personnel['_tel_fax_'] = $this->construireTxtListeOntologie($personnel['cp_truk_telephone']);
$personnel['_courriel_'] = $this->traiterTxtTruck($personnel['cp_truk_courriel']);
$personnel['_courriel_'] = $this->formaterCourriels($personnel['_courriel_']);
$personnel['_contact_'] = $this->formaterOuiNon($personnel['csap_mark_contact']);
$personnel['_specialite_'] = $this->construireTxtListeOntologie($personnel['cp_ce_truk_specialite']);
$personnel['_url_'] = $this->obtenirUrlFichePersonne($personnel['csap_id_personne']);
}
}
}
/branches/v1.13-la-grande-rue/controleurs/Syndication.php
New file
0,0 → 1,46
<?php
// declare(encoding='UTF-8');
/**
* classe Controleur du module Syndication.
*
* @package Collection
* @category Php5
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
class Syndication extends aControleur {
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
* Fonction d'affichage par défaut
*/
public function executerActionParDefaut() {
return $this->afficher();
}
/**
* Cartographier les collections.
* @return string la vue correspondante
*/
public function afficher() {
// Initialisation de variable
$donnees = array();
// Récupération des infos sur les flux disponibles
$syndicationDao = new SyndicationDao();
$donnees['syndications'] = $syndicationDao->getListeDesFlux();
// Limitation des entrées des flux
$donnees['limite'] = Config::get('flux_limite');
// Traitement du squelette et retour
$resultat = $this->getVue('syndication', $donnees);
$this->setSortie(self::RENDU_CORPS, $resultat);
$this->chargerPiedDePage();
}
}
?>
/branches/v1.13-la-grande-rue/controleurs/RecherchePublications.php
New file
0,0 → 1,118
<?php
/**
* classe Controleur du module RecherchePublications
*
* @package Collection
* @category Php5
* @author Satanas et Diabolo <wtf@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
*/
class RecherchePublications extends Recherche {
 
protected $masque = null;
protected static $url_exemple = null;
 
/**
* Charge le moteur de recherche et l'envoie à la vue.
*/
public function chargerMoteurRecherche() {
$donnees = array();
 
// masque multi-critères
$donnees['masque'] = $this->obtenirMasqueRecherche();
 
// Gestion des urls
$donnees['url_form'] = $this->obtenirUrlRecherche();
$donnees['url_module'] = 'RecherchePublications';
$donnees['url_action'] = 'rechercher';
$donnees['url_contexte'] = $this->registre->get('contexte');
self::$url_exemple = $this->obtenirUrlRecherche('%s');
 
// remplissage de cases de tableaux vides pour éviter des warnings
$donnees['masque'] = $this->initialiserMasquesVides($donnees['masque']);
//echo '<pre>'.print_r($donnees['masque'],true).'</pre>';exit;
 
// Gestion du squelette et de la sortie
$this->setSortie(self::RENDU_TETE, $this->getVue('moteur_publications', $donnees));
}
 
// recherche des publications
public function rechercher() {
$masque = $this->obtenirMasqueRecherche();
$masque['cible'] = "publications";
 
$donnees = array();
$donnees['masque'] = $masque;
$rechercheDao = new RechercheDao();
 
// Récupération des paramètres depuis le masque
$parametres = $masque;
$this->remplacerAbreviationParId($parametres);
//echo "PARAM 2: <pre>" . print_r($parametres, true) . "</pre><br/>";
 
// Gestion du nombre de résultats
$donnees_total = $rechercheDao->chercherPublicationsNbre($parametres);
 
// Gestion du fragmenteur
$options = array(
'url' => $this->url,
'url_var' => Config::get('parametre_url_page'),
'donnees_total' => $donnees_total,
'donnees_par_page' => Config::get('resultat_par_page_defaut'),
'donnees_par_page_choix' => Config::get('resultat_par_page_choix'),
);
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$donnees['fragmenteur'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariablesRequete(array('recherche', 'page'));
 
// Gestion de l'accès aux données
$rechercheDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$rechercheDao->setDistinction(1);
 
// Récupération des résultats
$resultats = $rechercheDao->chercherPublications($parametres);
 
// Affichage de la liste de résultats
foreach ($resultats as $resultat) {
if (!empty($resultat['cpu_id_publication'])) {
$editeur = $resultat['cpu_ce_truk_editeur'];
$pdd = strpos($editeur, "##");
if ($pdd !== false) {
$editeur = substr($editeur, $pdd + 2);
}
$publication = array(
'nomcomplet' => $resultat['cpu_fmt_nom_complet'],
'date' => $resultat['cpu_date_parution'],
'titre' => $resultat['cpu_titre'],
'auteur' => $resultat['cpu_fmt_auteur'],
'editeur' => $editeur,
'nb_pages' => $resultat['cpu_truk_pages'],
//'url' => $this->obtenirUrlFichePersonne($resultat['cp_id_personne'])
);
$donnees['infos']['publications'][] = $publication;
}
}
 
// Post-traitement des résultats pour l'affichage
$this->postraiterDonnees($donnees['infos']);
// Gestion des squelettes
$this->chargerMoteurRecherche();
$resultat = $this->getVue('resultat', $donnees);
$this->setSortie(self::RENDU_CORPS, $resultat);
$this->chargerPiedDePage();
}
 
protected function initialiserMasquesVides($masque) {
$masques_possibles = array('titre', 'auteur', 'date', 'ouvrage', 'libre');
foreach($masques_possibles as $masque_possible) {
if(!isset($masque[$masque_possible])) {
$masque[$masque_possible] = '';
}
}
return $masque;
}
}
/branches/v1.13-la-grande-rue/i18n/en.ini
New file
0,0 → 1,3
carte.titre.avertissement = Disclaimer :
[carte]
titre.principal = Map of the structures hosting collections
/branches/v1.13-la-grande-rue/i18n/fr.ini
New file
0,0 → 1,3
[carte]
titre = Carte des structures hébergeant des collections
titre.avertissement = Avertissement et déni de responsabilité :
/branches/v1.13-la-grande-rue/collection.php
New file
0,0 → 1,58
<?php
// declare(encoding='UTF-8');
/**
* Application de consultation des Collections.
* Fichier principal d'initialisation.
*
* @category PHP5
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version $Id$
*/
// Autoload pour cette application
function __autoload($nom_classe) {
// Tableau des chemins à inclure pour trouver une classe relatif à ce fichier
$chemins = array(
'bibliotheque'.DS.'dao',
'bibliotheque'.DS.'pear',
'bibliotheque'.DS.'utilitaires',
'controleurs',
'composants',
'composants'.DS.'cartographie');
foreach ($chemins as $chemin) {
$fichier_a_inclure = dirname(__FILE__).DS.$chemin.DS.$nom_classe.'.php';
if (file_exists($fichier_a_inclure)) {
include_once $fichier_a_inclure;
return null;
}
}
}
 
// Le fichier autoload.inc.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application.
// Sinon, rien ne sera chargé.
// Chemin du fichier chargeant le framework requis
$framework = dirname(__FILE__).'/framework.php';
if (!file_exists($framework)) {
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
trigger_error($e, E_USER_ERROR);
} else {
// Inclusion du Framework
require_once(realpath($framework));
// Ajout d'information concernant cette application
Application::setChemin(__FILE__);// Obligatoire
Application::setInfo(Config::get('info'));
 
// Lancement du débogage si nécessaire
if (Config::get('chronometrage')) {
Chronometre::chrono('Collection.php - début');
}
}
 
// Découplage entre le chargement du JPFramework et l'initialisation de l'appli,
// pour avoir le temps d'écraser la config dans le fichier d'amorçage appelant
function collections_initialisation() {
// Initialisation du controleur principal de l'application
AppControleur::initialiser();
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/composants/cartographie/Cartographie.php
New file
0,0 → 1,635
<?php
// declare(encoding='UTF-8');
/**
* Composant Cartographie gérant les images représentant le fond de carte à insérer dans un fichier html contenant une
* image map.
* Avantage :
* - pas de base de données liée au composant (simplicité d'utilisation dans les applications)
* - facilite l'utilisation du Javascript et CSS pour intéragir avec la carte (affichage du nom des zones au survol)
* - l'application qui utilise le composant définie elle-même l'intéraction avec le clic sur une zone
* Inconvénient :
* - l'utilisation d'une balise map alourdie la page à renvoyer
*
* Il est possible de créer des fond de carte en vraies couleurs
* (16 millions de zones maxi sur la carte) ou en couleurs indexées (255 zones maxi sur la carte).
* Les couleurs réservées et a ne pas utiliser pour créer l'image png de fond sont :
* - le blanc (rvb : 255-255-255)
* - le noir (rvb : 0-0-0)
* - le gris (rvb : 128-128-128)
* - le rouge (rvb : 255-0-0)
* Pour activer le cache indiquer la date de dernière mise à jour des données servant à créer la carte de cette façon :
* $Carte->setCarteInfo(array('donnees_date_maj' => $date_maj_donnees));
*
* @category PHP5
* @package Collection
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version SVN:$Id$
*/
 
class Cartographie {
/*** Constantes : ***/
const FORMULE_PROPORTIONNEL = 'proportionnel';
const FORMULE_LEGENDE = 'legende';
 
//+----------------------------------------------------------------------------------------------------------------+
/*** Attributs : ***/
/**
* L'image de la carte.
* @var string l'image de la carte.
*/
private $carte;
/**
* Le nom du fichier contenant la carte sans l'extension.
* @var string le nom du fichier de la carte.
*/
private $carte_nom;
/**
* @var string le chemin et le nom du fichier de l'image de la carte générée.
*/
private $carte_fichier;
/**
* Tableaux associatif contenant les informations sur la carte.
* donnees_date_maj = date de dernière mise à jour des données servant à créer la carte, si plus récente que la carte
* déjà créée getCarteCache renvoie false.
*
* @var array le tableau des infos sur la carte.
*/
private $carte_info = array();
 
/**
* Indique si la carte existe déjà et à besoin ou pas d'être créée.
* @var bool true si la carte existe..
*/
private $carte_cache = false;
/**
* Le nom du fichier de la carte de fond.
* @var string nom du fichier de la carte de fond.
*/
private $carte_fond_fichier;
/**
* Le nom du dossier contenant les cartes de fond.
* @var string nom du dossier contenant les cartes de fond.
*/
private $carte_fond_dossier;
/**
* Le nom du dossier où stocker les cartes créer via la classe Cartographie.
* @var string nom du dossier contenant les cartes créées.
*/
private $carte_stockage_dossier;
/**
* L'url correspondant au dossier où sont stockées les cartes crées via la classe Cartographie.
* L'url est passé à la fonction sprintf est doit donc contennir %s afin d'indiquer l'endroite où ajouter le nom du
* fichier de la carte.
* @var string url des cartes créées.
*/
private $carte_stockage_url;
 
/**
* Format du tableau :
* carte_zone est un tableau de tableaux associatifs.
* Chaque zone de la carte doit avoir son entrée dans ce tableau. Le code de la zone sert de clé.
* Chaque zone est représentée par :
* - nom : (string)
* le nom de la zone qui sera affiché dans l'attribut title de la balise map html.
* - rvb_fond : (string) Exemple : 255-255-255.
* les valeurs entre 0 et 255 séparées par des tirets (-) de la couleur de la zone sur la carte de fond
* Ne pas utiliser le blanc (255-255-255) et utiliser le noir pour les contours (0-0-0).
* - poly : (string)
* les coordonnées pour la balise map html. Si une même zone à plusieurs polygones, les séparer par le
* caractère pipe "|".
* - info_nombre : (int) Exemple : nombre de personnes présentent dans un département.
* nombre d'occurence dans cette zone.
* - url : (string) l'url qui doit être appelée sur un clic dans la zone.
* - rvb_carte : (string) Exemple : 255-255-255.
* les valeurs entre 0 et 255 séparées par des tirets (-) de la couleur de remplacement dans le cas de la formule
* de coloriage de type "légende".
* @var array les informations sur les zones de la carte.
*/
private $carte_zones = null;
/**
* Tableau contenant la valeur RVB de la zone du fond de carte en clé et la valeur RVB venant la remplacer en valeur.
* @var array valeur RVB de la zone du fond de carte en clé et valeur RVB venant la remplacer en valeur.
*/
private $carte_correspondance_couleurs = array();
/**
* La valeur RVB, sous forme de chaine de nombres séparées par des tirets (-), de la zone géographique à mettre en
* surbrillance.
* @var string la valeur RVB de la zone à repérer.
*/
private $zone_marker;
/**
* La formule de coloriage de la carte. Les formules disponibles sont : légende, proportionnel.
* @var string la formule de coloriage.
*/
private $formule_coloriage;
/**
* Les valeurs RVB séparés par des virgules pour la couleur la plus foncée utilisée, entre autre, par la formule de
* coloriage "proportionnel".
* @var string les valeurs RVB séparées par des virgules.
*/
private $coloriage_couleur_max;
/**
* Les valeurs RVB séparés par des virgules pour la couleur la plus claire utilisée, entre autre, par la formule de
* coloriage "proportionnel".
* @var string les valeurs RVB séparées par des virgules.
*/
private $coloriage_couleur_min;
 
/**
* Contient le nombre de couleurs différentes utilisées par le coloriage pour créer l'image finale.
* @var int le nombre de couleurs.
*/
private $coloriage_couleurs;
/**
* Contient le tableau des fréquences et des couleurs correspondantes.
* @var array les frequences et leurs couleurs.
*/
private $coloriage_tableau_frequence = array();
 
/**
* Permet de savoir si la cartographie est en mode déboguage ou pas.
* @var bool true si on est en mode débug, sinon false.
*/
private $mode_debug;
//+----------------------------------------------------------------------------------------------------------------+
/*** Constructeur : ***/
public function __construct($options = array()) {
// Initialisation de l'objet Cartographie
$this->setCarteNom(isset($options['carte_nom']) ? $options['carte_nom'] : '');
$this->setFormuleColoriage(isset($options['formule']) ? $options['formule'] : '');
$this->setColoriageCouleurClaire(isset($options['couleur_claire']) ? $options['couleur_claire'] : '');
$this->setColoriageCouleurFoncee(isset($options['couleur_foncee']) ? $options['couleur_foncee'] : '');
$this->setCarteFondFichier(isset($options['fond_fichier']) ? $options['fond_fichier'] : '');
$this->setCarteFondDossier(isset($options['fond_dossier']) ? $options['fond_dossier'] : '');
$this->setCarteStockageDossier(isset($options['stock_dossier']) ? $options['stock_dossier'] : '');
$this->setCarteStockageUrl(isset($options['stock_url']) ? $options['stock_url'] : '');
$this->setCarteZones(isset($options['zones']) ? $options['zones'] : null);
$this->setZoneMarker(isset($options['zone_marker']) ? $options['zone_marker'] : '');
$this->setModeDebug(isset($options['debug']) ? $options['debug'] : false);
}
 
//+----------------------------------------------------------------------------------------------------------------+
/*** Accesseur : ***/
public function getTableauFrequence() {
ksort($this->coloriage_tableau_frequence);
return $this->coloriage_tableau_frequence;
}
public function getCarteCache() {
// Gestion du cache
if ($this->getCarteNom() != '') {
$fichier_carte = $this->carte_stockage_dossier.$this->getCarteNom().'.png';
if (file_exists($fichier_carte)) {
//echo filemtime($fichier_carte).'-'.strtotime($this->carte_info['donnees_date_maj']);
if (filemtime($fichier_carte) < strtotime($this->carte_info['donnees_date_maj'])) {
$this->carte_cache = false;
} else {
$this->carte_cache = true;
}
}
}
return $this->carte_cache;
}
public function getCarteInfo() {
return $this->carte_info;
}
public function setCarteInfo($ci) {
$this->carte_info = $ci;
}
public function getColoriageCouleurClaire() {
return $this->coloriage_couleur_min;
}
public function setColoriageCouleurClaire($ccmi) {
$this->coloriage_couleur_min = $ccmi;
}
public function getColoriageCouleurFoncee() {
return $this->coloriage_couleur_max;
}
public function setColoriageCouleurFoncee($ccma) {
$this->coloriage_couleur_max = $ccma;
}
public function getFormuleColoriage() {
return $this->formule_coloriage;
}
public function setFormuleColoriage($fc) {
$this->formule_coloriage = $fc;
}
public function getCarteNom() {
return $this->carte_nom;
}
public function setCarteNom($cn) {
$this->carte_nom = $cn;
}
public function getCarteFichier() {
return $this->carte_fichier;
}
public function setCarteFichier($cf) {
$this->carte_fichier = $cf;
}
public function getCarteFondFichier() {
return $this->carte_fond_fichier;
}
public function setCarteFondFichier($cff) {
$this->carte_fond_fichier = $cff;
}
public function getCarteFondDossier() {
return $this->carte_fond_dossier;
}
public function setCarteFondDossier($cfd) {
$this->carte_fond_dossier = $cfd;
}
public function getCarteStockageDossier() {
return $this->carte_stockage_dossier;
}
public function setCarteStockageDossier($csd) {
$this->carte_stockage_dossier = $csd;
}
public function getCarteStockageUrl() {
return $this->carte_stockage_url;
}
public function setCarteStockageUrl($csu) {
$this->carte_stockage_url = $csu;
}
public function getCarteZones() {
if (is_null($this->carte_zones)) {
$this->chargerZones();
}
return $this->carte_zones;
}
public function setCarteZones($cz) {
$this->carte_zones = $cz;
}
public function getZoneMarker() {
return $this->zone_marker;
}
public function setZoneMarker($zm) {
$this->zone_marker = $zm;
}
public function getModeDebug() {
return $this->mode_debug;
}
public function setModeDebug($md) {
$this->mode_debug = $md;
}
 
//+----------------------------------------------------------------------------------------------------------------+
/*** Méthodes PUBLIQUES : ***/
public function creerCarte() {
// Création de la carte car aucun cache ou cache à vider
$carte_fond_fichier = $this->carte_fond_dossier.$this->getCarteFondFichier().'.png';
$this->carte = imagecreatefrompng($carte_fond_fichier);
// Vérification que la création à fonctionnée
if (!$this->carte) {
// Une erreur est survenue : création d'une image blanche
$this->carte = imagecreatetruecolor(520, 60);
$bgc = imagecolorallocate($this->carte, 255, 255, 255);
$tc = imagecolorallocate($this->carte, 0, 0, 0);
imagefilledrectangle($this->carte, 0, 0, 520, 60, $bgc);
// Affichage d'un message d'erreur
imagestring($this->carte, 1, 5, 5, "Erreur de chargement de l'image :", $tc);
imagestring($this->carte, 1, 5, 15, $carte_fond_fichier, $tc);
} else {
// Nous construison le tableau de correspondance entre les couleurs présente sur l'image de fond
// et les couleurs qui doivent les remplacer.
$this->construireCorrespondanceCouleur();
// Nous lançons la création de la carte
$this->colorierCarte();
}
 
// Nous chercons à créer une image indéxées en sortie
if (imageistruecolor(&$this->carte) && $this->formule_coloriage != 'legende') {
if ($this->coloriage_couleurs <= 253) {
//imagetruecolortopalette(&$this->carte, false, ($this->coloriage_couleurs + 2));// + 2 car noir et blanc réservés.
} else {
// On force la création d'une palette... si cela pose problème ajouter un attribut permettant de désactiver
// ce fonctionnement.
imagetruecolortopalette(&$this->carte, false, 255);
}
}
// Nous écrivons le fichier de la carte.
if ($this->getCarteNom() == '') {
$this->setCarteNom(md5($this->carte));
}
$this->setCarteFichier($this->carte_stockage_dossier.$this->getCarteNom().'.png');
imagepng(&$this->carte, $this->getCarteFichier());
return true;
}
public function getImageMap() {
// Initialisation de variables
$carte_map = '';
// Gestion de l'image map
$chemin_carte_map_fond = $this->getCarteFondDossier().$this->getCarteFondFichier().'.tpl.html';
$chemin_carte_map = $this->getCarteStockageDossier().$this->getCarteNom().'.html';
if (file_exists($chemin_carte_map)) {
$carte_map = file_get_contents($chemin_carte_map);
} else {
$nom_carte_png = $this->getCarteNom().'.png';
$chemin_carte_png = $this->getCarteStockageDossier().$nom_carte_png;
$donnees['carte_url'] = sprintf($this->getCarteStockageUrl(), $nom_carte_png);
$donnees['carte_alt'] = 'info';
$donnees['zones'] = $this->getCarteZones();
//Debug::printr($donnees);
$carte_map = SquelettePhp::analyser($chemin_carte_map_fond, $donnees);
if (!file_put_contents($chemin_carte_map, $carte_map)) {
$e = "Écriture du fichier contenant le html de la carte impossible : $chemin_carte_map";
trigger_error($e, E_USER_WARNING);
}
}
return $carte_map;
}
//+----------------------------------------------------------------------------------------------------------------+
/*** Méthodes PRIVÉES : ***/
/**
* Charge en mémoire les données du fichier csv des zones géographique de la carte
*/
private function chargerZones() {
$fichier_csv = $this->getCarteFondDossier().$this->getCarteFondFichier().'.csv';
$zones = array();
if (($handle = fopen($fichier_csv, 'r')) !== false) {
$ligne = 1;
$cles = array();
while (($donnees = fgetcsv($handle, 1000, ',')) !== false) {
$cle = array_shift($donnees);
if ($ligne == 1) {
// Ligne 1 : les noms des champs
$cles = $donnees;
} else {
// Ligne > 1 : traitements des données
$zones[$cle] = array_combine($cles, $donnees);
}
$ligne++;
}
fclose($handle);
}
$this->setCarteZones($zones);
}
private function construireCorrespondanceCouleur() {
switch ($this->formule_coloriage) {
case self::FORMULE_LEGENDE :
$this->construireCorrespondanceCouleurLegende();
break;
case self::FORMULE_PROPORTIONNEL :
$this->construireCorrespondanceCouleurProportionnel();
break;
default :
$e = "Aucune formule de coloriage n'a été définie parmis : ".
self::FORMULE_LEGENDE.' et '.self::FORMULE_PROPORTIONNEL.'. '.
"Veuillez la définir avec la méthode setFormuleColoriage().";
trigger_error($e, E_USER_ERROR);
}
}
private function construireCorrespondanceCouleurProportionnel() {
// Création d'un tableau contenant seulement les nombres d'information pour chaque zone.
$tab_valeurs = array();
foreach ($this->getCarteZones() as $cle => $valeur) {
//Nous recherchons le minimum, le maximum et le la valeur médium juste au dessous du maximum.
if (isset($valeur['info_nombre'])) {
$tab_valeurs[] = $valeur['info_nombre'];
if ($valeur['info_nombre'] == 0){
//trigger_error($valeur['nom'], E_USER_NOTICE);
}
}
}
//Nombre d'entrées dans le tableau de valeurs non nulles :
$valeurs_nbre = count($tab_valeurs);
$valeurs_somme = array_sum($tab_valeurs);
// Tabeau des fréquences trié de la plus petite à la plus grande clé.
$tab_frequences = array_count_values($tab_valeurs);
krsort($tab_frequences);
//trigger_error(print_r($tab_frequences, true), E_USER_NOTICE);
$frequences_nbre = count($tab_frequences);
if ($valeurs_nbre > 0){
// Nous trions le tableau dans l'ordre croissant :
sort($tab_valeurs);
// Nous récupérons la valeur la plus petite :
$mini = $tab_valeurs[0];
$maxi = $tab_valeurs[$valeurs_nbre - 1];
$medium = isset($tab_valeurs[$valeurs_nbre - 2]) ? $tab_valeurs[$valeurs_nbre - 2] : 0;
$moyenne = $valeurs_somme / $valeurs_nbre;
$ecart_au_carre_moyen = 0;
for ($i = 0; $i < $valeurs_nbre; $i++) {
$ecart_au_carre_moyen += pow(($tab_valeurs[$i] - $moyenne), 2);
}
$variance = $ecart_au_carre_moyen / $valeurs_nbre;
$ecart_type = round(sqrt($variance), 0);
$moyenne = round($moyenne, 0);
$variance = round($variance, 0);
}
// Calcul de l'écart moyen pour chaque élément R, V et B.
list($r_min, $v_min, $b_min) = explode(',', $this->coloriage_couleur_max);
list($r_max, $v_max, $b_max) = explode(',', $this->coloriage_couleur_min);
$r_diff = $r_min - $r_max;
$r_ecart_moyen = abs($r_diff / $frequences_nbre);
$v_diff = $v_min - $v_max;
$v_ecart_moyen = abs($v_diff / $frequences_nbre);
$b_diff = $b_min - $b_max;
$b_ecart_moyen = abs($b_diff / $frequences_nbre);
// Pour chaque fréquence nous attribuons une couleur.
$i = 1;
foreach ($tab_frequences as $cle => $valeur){
if ($cle == 0) {
$this->coloriage_tableau_frequence[$cle] = '255-255-255';
} else {
$r = $r_min + round(($i * $r_ecart_moyen), 0);
$v = $v_min + round(($i * $v_ecart_moyen), 0);
$b = $b_min + round(($i * $b_ecart_moyen), 0);
$this->coloriage_tableau_frequence[$cle] = $r.'-'.$v.'-'.$b;
}
$i++;
}
// Attribution du nombre de couleurs utilisé pour réaliser la carte
$this->coloriage_couleurs = count(array_count_values($this->coloriage_tableau_frequence));
//trigger_error('<pre>'.print_r($this->coloriage_couleurs, true).'</pre>', E_USER_ERROR);
// Nous attribuons les couleurs à chaque zone géographique
foreach ($this->getCarteZones() as $cle => $zg) {
if (isset($this->coloriage_tableau_frequence[$zg['info_nombre']])) {
$this->carte_correspondance_couleurs[$zg['rvb_fond']] = $this->coloriage_tableau_frequence[$zg['info_nombre']];
} else {
$this->carte_correspondance_couleurs[$zg['rvb_fond']] = '128-128-128';
if ($this->getModeDebug()) {
$e = "La zone ".$zg['nom']." (".$zg['rvb_fond'].") ne possède pas de couleur RVB pour la remplir. ".
"La valeur 128-128-128 lui a été attribué.";
trigger_error($e, E_USER_WARNING);
}
}
}
}
private function construireCorrespondanceCouleurLegende() {
$tab_couleurs = array();
foreach ($this->getCarteZones() as $cle => $zg) {
if ($zg['rvb_carte'] != '') {
$this->carte_correspondance_couleurs[$zg['rvb_fond']] = $zg['rvb_carte'];
} else {
$this->carte_correspondance_couleurs[$zg['rvb_fond']] = '128-128-128';
if ($this->getModeDebug()) {
$e = "La zone ".$zg['nom']." (".$zg['rvb_fond'].") ne possède pas d'information pour la légende dans le champ".
" rvb_carte. La valeur 128-128-128 lui a été attribué.";
trigger_error($e, E_USER_WARNING);
}
}
if (!isset($tab_couleurs[$this->carte_correspondance_couleurs[$zg['rvb_fond']]])) {
$tab_couleurs[$this->carte_correspondance_couleurs[$zg['rvb_fond']]] = 1;
}
}
// Attribution du nombre de couleurs utilisé pour réaliser la carte
$this->coloriage_couleurs = count($tab_couleurs);
}
private function colorierCarte() {
if (imageistruecolor(&$this->carte)) {
//+--------------------------------------------------------------------------------------------------------+
// Remplacement des couleurs sur la carte en mode vraies couleurs (RGB)
$this->colorierCarteModeVraiCouleur();
} else {
//+--------------------------------------------------------------------------------------------------------+
// Remplacement des couleurs sur la carte en mode couleurs indexées (palette de couleurs)
$this->colorierCarteModeIndexe();
}
}
private function colorierCarteModeVraiCouleur() {
// Nous commençons le rempalcement des couleurs sur la carte de fond.
$hauteur = imagesy(&$this->carte);
$largeur = imagesx(&$this->carte);
// Tableau contenant les couleurs traitées, pour éviter de traiter plusieurs fois la même couleur
$tab_rvb_ok = array();
for ($x = 0; $x < $largeur; $x++) {
for ($y = 0; $y < $hauteur; $y++) {
$rvb = ImageColorAt(&$this->carte, $x, $y);
if (!isset($tab_rvb_ok[$rvb])) {
// Récupération de la couleur rvb au format xxx-xxx-xxx
$cle = (($rvb >> 16) & 0xFF).'-'.(($rvb >> 8) & 0xFF).'-'.($rvb & 0xFF);
// Si nous n'avons pas à faire à la couleur noire (utilisé pour délimité les zones), nous continuons
if ($cle != '255-255-255') {
$rvb_final = null;
if (isset($this->carte_correspondance_couleurs[$cle])) {
if ($this->zone_marker != '' && $cle == $this->zone_marker) {
$rvb_final = '255'<<16 | '0'<<8 | '0';
} else {
list($rouge, $vert, $bleu) = explode('-', $this->carte_correspondance_couleurs[$cle]);
$rvb_final = $rouge<<16 | $vert<<8 | $bleu;
}
// Si le nombre de couleurs sur la carte finale est infèrieur à 255 nous créons une image indexée
imagefill(&$this->carte, $x, $y, $rvb_final);
} else {
$rvb_final = '128'<<16 | '128'<<8 | '128';
imagefill(&$this->carte, $x, $y, $rvb_final);
}
// Nous ajoutons la couleur ajoutée à la carte dans le tableau des couleurs traitées
$tab_rvb_ok[$rvb_final] = true;
}
// Nous ajoutons la couleur trouvées sur la carte de fond dans le tableau des couleurs traitées
$tab_rvb_ok[$rvb] = true;
}
}
}
}
private function colorierCarteModeIndexe() {
// Nous attribuons à chaque zone présente dans le tableau $this->getCarteZones() la valeur de l'index
// de la couleur RVB représentant cette zone sur la carte de fond.
$this->construireAssociationIndexZone();
 
foreach ($this->getCarteZones() as $zg) {
if (isset($this->carte_correspondance_couleurs[$zg['rvb_fond']])) {
//Dans le cas où nous voulons repérer une zone sur la carte :
if ($this->getZoneMarker() != '' && $zg['rvb_fond'] == $this->getZoneMarker()) {
$rouge = 255;
$vert = 0;
$bleu = 0;
} else {
list($rouge, $vert, $bleu) = explode('-', $this->carte_correspondance_couleurs[$zg['rvb_fond']]);
}
if (isset($zg['index'])) {
imagecolorset(&$this->carte, $zg['index'], $rouge, $vert, $bleu);
} else if ($this->getModeDebug()) {
$e = "La zone '{$zg['nom']}' n'est pas présente sur la carte.";
trigger_error($e, E_USER_WARNING);
}
}
}
}
private function construireAssociationIndexZone() {
// Nous récupérons le nombre de couleur différentes contenues dans l'image.
$taille_palette = imagecolorstotal($this->carte);
// Pour chaque couleur contenue dans l'image, nous cherchons l'objet correspondant
// dans le tableau $this->getCarteZones(), qui contient des informations sur chaque zone de l'image,
// et nous attribuons la valeur de l'index de sa couleur sur la carte de fond.
for ($i = 0; $i < $taille_palette; $i++) {
$rvb = array();
$rvb = imagecolorsforindex($this->carte, $i);
$rvb_cle = $rvb['red'].'-'.$rvb['green'].'-'.$rvb['blue'];
// La couleur ne doit pas correspondre au noir ou au blanc car ces couleurs ne sont pas traitées
if ($rvb_cle != '255-255-255' && $rvb_cle != '0-0-0') {
$index_ok = false;
foreach($this->getCarteZones() as $cle => $zg) {
if (isset($zg['rvb_fond']) && $zg['rvb_fond'] == $rvb_cle) {
$this->carte_zones[$cle]['index'] = $i;
$index_ok = true;
break;
}
}
if (!$index_ok && $rvb_cle != '0-0-0' && $this->getModeDebug()) {
$e = "Aucune information n'est fournie pour la zone sur la carte d'index $i : $rvb_cle";
trigger_error($e, E_USER_WARNING);
//$this->carte_zones[] = array('rvb_fond' => $rvb_cle, 'rvb_carte' => '128-128-128', 'index' => $i);
}
}
}
}
}
?>
/branches/v1.13-la-grande-rue/composants/cartographie/squelettes/france.csv
New file
0,0 → 1,108
"code","rvb_fond","nom","poly"
"01","0-204-51","Ain","483,314, 486,313, 489,308, 489,305, 491,303, 493,302, 494,298, 495,296, 492,293, 487,299, 484,303, 478,303, 477,301, 474,301, 472,303, 468,304, 467,301, 463,298, 462,296, 460,295, 459,293, 456,291, 451,292, 448,291, 447,296, 445,299, 445,302, 443,309, 443,311, 444,313, 443,322, 446,323, 449,326, 450,329, 457,329, 459,331, 462,331, 465,326, 467,326, 468,329, 475,336, 476,339, 478,339, 482,332, 482,330, 484,321, 484,319"
"02","240-240-255","Aisne","389,160, 394,155, 395,150, 393,147, 393,145, 396,142, 395,135, 400,132, 402,132, 404,130, 406,130, 408,131, 409,127, 408,125, 409,117, 415,112, 415,102, 414,98, 408,98, 406,95, 402,95, 395,94, 393,95, 391,94, 388,96, 384,95, 391,94, 388,96, 384,95, 379,96, 379,99, 377,102, 377,104, 375,105, 375,109, 376,113, 378,115, 378,117, 377,120, 378,124, 377,126, 379,129, 375,136, 373,136, 375,138, 375,140, 377,143, 377,147, 379,149, 379,152, 386,159"
"03","255-125-125","Allier","393,320, 397,320, 400,323, 402,321, 404,321, 405,314, 404,305, 409,299, 409,294, 406,294, 403,292, 401,292, 399,290, 399,287, 398,284, 395,283, 392,285, 390,285, 388,283, 382,283, 380,284, 377,281, 373,278, 370,278, 367,282, 362,282, 359,285, 360,289, 356,293, 349,293, 347,296, 352,302, 355,304, 358,311, 358,314, 361,314, 364,310, 366,310, 368,307, 370,307, 372,312, 375,315, 377,315, 379,317, 387,317, 389,318, 391,317"
"04","51-51-153","Alpes-de-Haute-Provence","491,443, 494,442, 496,444, 499,444, 500,442, 502,442, 505,438, 509,441, 512,441, 512,439, 519,438, 522,437, 523,434, 527,433, 528,431, 530,431, 528,428, 524,425, 524,422, 522,420, 522,415, 525,411, 525,409, 527,407, 530,406, 530,403, 531,401, 528,398, 528,396, 531,394, 531,390, 530,390, 526,394, 521,398, 520,402, 514,403, 512,401, 509,399, 503,404, 501,404, 500,402, 498,402, 492,408, 491,412, 488,413, 488,415, 489,417, 482,418, 482,420, 477,421, 476,425, 478,426, 478,429, 477,431, 479,433, 481,434, 480,438, 482,438, 484,440, 487,442, 489,442"
"05","51-51-204","Hautes-Alpes","478,409, 480,412, 482,413, 482,417, 488,417, 487,413, 490,412, 490,410, 493,405, 498,401, 500,401, 501,403, 503,403, 504,401, 508,398, 515,402, 519,402, 519,400, 520,397, 529,390, 531,388, 535,387, 533,380, 527,379, 525,377, 523,376, 522,370, 520,370, 518,368, 518,365, 517,365, 512,367, 511,369, 506,369, 505,366, 502,367, 501,371, 505,371, 507,376, 507,380, 505,381, 503,380, 498,381, 495,383, 493,383, 492,386, 487,387, 487,390, 485,393, 483,393, 480,394, 479,398, 480,401, 478,403, 475,403, 473,402, 474,405, 472,406, 473,408, 475,408"
"06","51-51-102","Alpes-Maritimes","550,442, 551,440, 553,440, 555,437, 557,436, 556,431, 558,430, 559,427, 562,425, 562,422, 564,420, 562,417, 562,414, 557,417, 554,417, 550,418, 546,417, 539,413, 535,413, 534,410, 532,409, 531,407, 529,407, 526,409, 526,411, 524,413, 523,420, 525,422, 525,425, 531,430, 530,432, 528,432, 527,434, 524,434, 523,440, 525,440, 528,442, 528,445, 529,447, 533,447, 534,450, 539,450, 542,449, 542,445, 547,441"
"07","0-102-51","Ardèche","422,413, 424,413, 427,411, 431,411, 434,410, 438,413, 440,413, 441,407, 443,405, 443,399, 445,396, 445,388, 448,384, 448,381, 449,377, 447,374, 448,371, 446,369, 446,364, 445,362, 446,358, 443,356, 440,357, 439,361, 437,363, 434,363, 432,365, 432,368, 429,370, 429,372, 426,375, 424,378, 422,379, 421,382, 415,383, 413,386, 411,387, 410,395, 411,398, 413,399, 414,404, 417,406, 417,411, 420,411"
"08","0-255-0","Ardennes","446,132, 448,131, 448,126, 447,123, 448,120, 451,118, 454,119, 456,117, 456,114, 451,113, 447,109, 444,107, 440,108, 439,103, 440,101, 439,99, 437,98, 437,95, 439,90, 439,88, 437,88, 433,92, 433,96, 428,98, 426,100, 423,100, 416,99, 416,112, 410,118, 410,124, 409,126, 410,129, 412,129, 416,130, 421,135, 426,137, 431,136, 432,138, 440,138, 445,137"
"09","255-102-102","Ariège","311,508, 313,508, 314,506, 317,506, 322,507, 324,509, 329,510, 334,506, 336,506, 341,505, 340,503, 337,501, 332,501, 329,497, 330,495, 333,494, 333,484, 332,480, 327,478, 325,478, 323,476, 323,474, 319,474, 315,473, 315,475, 313,477, 310,475, 308,478, 306,478, 306,482, 304,484, 302,483, 301,481, 297,481, 295,482, 294,486, 295,488, 293,490, 291,490, 288,493, 289,496, 294,498, 297,498, 299,500, 299,502, 307,502, 310,504"
"10","50-255-50","Aube","405,209, 407,211, 414,211, 418,210, 420,211, 422,209, 429,209, 432,205, 437,206, 437,203, 441,202, 442,197, 441,195, 442,192, 440,190, 434,183, 434,178, 431,178, 428,179, 423,176, 422,170, 419,169, 412,170, 411,172, 409,173, 408,175, 405,177, 405,179, 397,180, 395,178, 394,176, 391,176, 391,178, 388,181, 388,187, 390,187, 395,192, 395,197, 397,199, 399,199, 403,202, 403,204, 405,207"
"11","102-51-0","Aude","371,493, 373,495, 375,495, 375,493, 377,492, 377,487, 378,485, 376,485, 374,483, 374,481, 376,480, 380,481, 383,477, 383,475, 380,475, 378,473, 376,473, 375,471, 369,471, 367,474, 364,474, 362,472, 359,472, 358,470, 356,469, 356,466, 357,464, 348,464, 344,463, 344,465, 337,466, 330,465, 328,464, 327,468, 324,469, 323,473, 324,476, 328,477, 333,480, 333,483, 334,494, 330,497, 333,500, 337,500, 339,502, 342,504, 343,506, 345,506, 346,504, 348,504, 349,497, 351,496, 356,497, 358,496, 365,497, 368,493"
"12","255-153-0","Aveyron","358,442, 362,446, 366,447, 371,446, 372,448, 377,448, 377,442, 384,441, 384,439, 386,437, 388,437, 389,434, 392,431, 392,429, 389,428, 387,426, 387,423, 389,421, 384,420, 382,417, 380,416, 380,412, 379,405, 377,403, 377,399, 374,396, 372,396, 370,393, 370,390, 367,385, 364,383, 364,381, 361,382, 359,385, 359,387, 357,389, 357,392, 355,394, 354,396, 347,396, 345,395, 341,400, 339,400, 335,401, 331,405, 329,405, 329,408, 331,411, 331,413, 330,416, 333,416, 334,418, 332,419, 332,423, 331,425, 336,424, 338,422, 341,422, 342,424, 348,425, 352,429, 354,430, 358,439"
"13","0-0-153","Bouches-du-Rhône","479,472, 480,474, 484,473, 488,469, 485,466, 485,463, 488,462, 485,458, 485,454, 484,450, 488,447, 488,445, 486,445, 483,446, 482,448, 475,448, 470,445, 468,445, 465,444, 462,445, 457,441, 454,437, 452,437, 450,435, 448,435, 446,433, 444,433, 441,437, 441,442, 438,447, 434,447, 433,452, 430,455, 426,458, 424,458, 424,462, 426,462, 427,460, 441,460, 443,462, 446,462, 447,464, 450,465, 450,463, 453,461, 455,461, 457,463, 458,466, 466,466, 468,464, 470,464, 472,467, 472,472"
"14","150-150-255","Calvados","266,155, 271,155, 273,154, 277,155, 278,151, 277,146, 278,144, 276,139, 276,136, 274,135, 274,130, 271,129, 268,130, 264,134, 259,136, 253,136, 251,134, 245,133, 243,132, 241,133, 234,132, 230,129, 225,129, 223,136, 225,137, 229,142, 232,147, 232,151, 230,152, 228,155, 225,155, 225,158, 223,160, 223,162, 229,163, 232,164, 235,163, 237,161, 240,161, 245,159, 248,159, 255,160, 257,162, 262,158, 264,158"
"15","255-175-175","Cantal","367,383, 371,390, 371,393, 372,395, 374,394, 374,392, 376,389, 376,386, 378,385, 378,383, 383,382, 385,379, 388,378, 386,375, 386,370, 384,368, 384,365, 380,361, 378,361, 374,360, 372,358, 371,356, 369,356, 364,355, 361,352, 357,352, 357,354, 355,356, 351,356, 348,359, 344,364, 345,367, 341,374, 342,376, 338,380, 338,383, 340,386, 340,393, 341,396, 343,397, 345,394, 354,395, 356,392, 356,389, 358,387, 358,385, 360,383, 361,381, 364,380, 365,383"
"16","175-255-175","Charente","250,358, 253,361, 262,362, 264,360, 266,357, 266,353, 268,350, 271,348, 273,348, 276,344, 276,341, 280,338, 283,333, 285,331, 287,331, 290,324, 293,323, 293,319, 289,316, 289,314, 285,313, 283,315, 279,315, 278,313, 277,313, 276,316, 274,317, 272,316, 269,317, 268,315, 265,315, 261,314, 259,316, 257,317, 256,321, 254,322, 253,327, 252,330, 249,331, 246,330, 242,331, 241,340, 245,343, 245,345, 247,347, 247,353, 246,358"
"17","150-255-150","Charente-Maritime","210,326, 211,322, 210,318, 208,318, 205,316, 205,320, 207,322, 209,323|204,306, 203,304, 200,304, 207,308, 208,307|254,367, 256,366, 256,363, 252,362, 250,359, 246,359, 245,354, 246,347, 244,345, 244,343, 242,341, 240,340, 240,332, 242,330, 245,330, 248,329, 251,330, 251,328, 253,321, 253,319, 242,313, 240,313, 238,311, 236,311, 233,309, 230,305, 230,302, 221,301, 220,299, 217,299, 214,302, 214,304, 212,307, 215,310, 217,317, 216,323, 213,326, 213,328, 210,329, 210,333, 212,335, 215,336, 219,340, 220,342, 227,348, 229,353, 229,355, 228,357, 233,356, 237,357, 239,359, 239,362, 240,365, 242,365, 246,368, 250,369, 252,368, 254,369"
"18","125-255-255","Cher","343,297, 346,297, 349,292, 356,292, 359,289, 359,287, 358,285, 362,281, 367,281, 374,273, 374,262, 373,257, 371,252, 371,250, 369,248, 367,247, 367,244, 369,241, 368,238, 364,238, 362,239, 358,235, 354,235, 353,233, 351,233, 349,234, 347,232, 344,232, 342,233, 345,236, 346,242, 342,243, 341,249, 338,251, 333,251, 333,253, 329,257, 335,258, 338,260, 338,263, 340,265, 340,267, 339,269, 342,271, 341,273, 339,274, 339,276, 340,280, 342,282, 342,284, 344,286, 344,288, 343,291, 344,295"
"19","255-255-150","Corrèze","330,378, 333,378, 336,377, 337,379, 339,377, 341,376, 340,373, 342,371, 344,366, 343,364, 347,360, 351,355, 355,355, 356,352, 355,348, 356,345, 354,343, 356,340, 356,336, 354,336, 350,337, 348,339, 341,336, 339,336, 336,335, 331,337, 331,339, 328,340, 326,342, 324,342, 321,345, 319,345, 315,346, 314,348, 310,351, 307,351, 305,352, 306,356, 304,357, 304,364, 305,367, 309,368, 311,371, 311,375, 313,375, 320,374, 324,378, 325,380"
"2A","200-150-90","Corse-du-Sud","549,543, 555,548, 558,549, 558,545, 560,542, 560,539, 562,537, 562,534, 564,529, 564,526, 563,523, 558,524, 555,522, 555,516, 554,514, 552,514, 551,511, 547,507, 547,505, 544,504, 542,502, 538,499, 536,499, 531,497, 529,497, 530,499, 532,500, 531,502, 528,503, 528,505, 529,508, 533,509, 535,512, 535,514, 533,515, 533,517, 531,518, 531,520, 535,520, 537,519, 538,526, 536,527, 536,530, 538,530, 543,533, 540,537, 540,540, 542,540, 544,542"
"2B","200-150-60","Haute-Corse","548,507, 552,511, 552,513, 554,513, 556,516, 556,522, 561,523, 563,522, 563,514, 564,510, 567,509, 568,506, 567,504, 568,502, 566,489, 566,487, 565,482, 563,482, 561,477, 561,470, 562,467, 560,460, 559,458, 556,458, 556,460, 557,462, 556,468, 557,473, 555,476, 552,474, 548,474, 546,476, 546,478, 543,480, 540,480, 538,482, 536,482, 536,484, 533,485, 531,487, 531,492, 528,493, 527,496, 532,496, 539,499, 541,501, 548,505"
"21","50-151-255","Côte-d'Or","459,260, 461,258, 464,256, 466,251, 466,248, 467,246, 466,242, 464,240, 464,238, 462,236, 463,234, 466,232, 466,229, 465,227, 462,229, 457,229, 454,226, 450,226, 448,224, 446,223, 446,216, 444,214, 443,212, 439,209, 438,207, 434,207, 432,206, 430,208, 429,210, 422,210, 421,217, 423,218, 423,223, 421,225, 417,234, 415,236, 416,240, 415,245, 417,246, 417,250, 419,250, 421,252, 421,255, 423,258, 432,263, 435,266, 438,268, 443,267, 448,265, 450,265, 452,264, 455,265, 459,262"
"22","75-75-255","Côtes-d'Armor","176,196, 178,195, 178,193, 182,189, 184,189, 188,188, 188,186, 190,177, 188,175, 186,175, 182,172, 180,171, 179,169, 176,167, 172,168, 170,170, 165,174, 162,174, 158,169, 158,166, 156,165, 154,162, 154,160, 152,159, 152,157, 150,157, 149,154, 146,155, 144,154, 137,157, 135,155, 133,155, 144,154, 137,157, 135,155, 133,155, 132,158, 133,160, 131,161, 131,163, 128,165, 128,168, 130,170, 130,173, 129,180, 130,185, 131,187, 130,189, 134,190, 136,192, 138,192, 142,193, 146,190, 148,190, 152,193, 154,193, 156,195, 158,195, 163,196, 164,199, 167,197, 169,194, 172,194, 173,196"
"23","255-255-125","Creuse","338,334, 342,335, 347,338, 350,336, 353,336, 354,333, 352,331, 353,329, 355,328, 359,321, 359,318, 357,316, 357,310, 353,303, 347,298, 341,298, 336,299, 327,298, 325,300, 315,300, 312,307, 312,310, 316,314, 316,316, 317,320, 318,322, 317,324, 320,325, 321,329, 324,330, 326,329, 328,331, 331,333, 331,336"
"24","102-153-102","Dordogne","295,395, 297,397, 299,397, 301,395, 302,393, 307,390, 307,387, 309,386, 312,382, 312,378, 310,375, 310,371, 309,369, 307,369, 304,367, 304,365, 303,357, 305,356, 305,354, 303,351, 300,350, 299,347, 297,346, 296,343, 292,342, 289,344, 285,341, 285,338, 283,338, 281,337, 277,342, 277,344, 274,347, 273,349, 271,349, 267,353, 267,358, 265,359, 262,363, 258,363, 256,368, 259,368, 260,373, 258,378, 258,383, 263,384, 266,382, 268,382, 269,385, 268,388, 270,389, 271,394, 273,394, 278,393, 281,392, 287,393, 289,392, 290,396"
"25","255-255-50","Doubs","493,279, 494,282, 501,276, 505,273, 505,263, 510,260, 512,260, 514,257, 514,255, 517,252, 519,251, 523,246, 523,244, 525,242, 526,239, 524,239, 522,240, 521,237, 523,235, 523,232, 521,232, 517,231, 513,228, 512,228, 510,231, 508,231, 508,233, 504,234, 499,233, 495,238, 490,241, 488,243, 484,243, 480,246, 478,247, 478,250, 481,253, 481,257, 480,259, 482,261, 486,262, 488,264, 488,267, 491,270, 496,273, 497,275"
"26","1-51-51","Drôme","481,420, 481,413, 477,410, 473,409, 471,407, 473,404, 472,402, 474,401, 478,402, 479,399, 478,395, 480,393, 482,393, 485,392, 482,390, 480,390, 476,386, 473,386, 471,383, 471,381, 472,378, 471,376, 472,373, 463,372, 460,371, 459,369, 460,367, 459,362, 453,357, 448,359, 452,357, 449,359, 447,359, 447,361, 446,363, 447,369, 449,371, 448,374, 450,377, 450,380, 449,384, 447,386, 446,396, 444,399, 444,405, 442,407, 442,412, 445,412, 446,416, 449,416, 454,413, 457,413, 461,417, 466,417, 469,420, 471,420, 472,422, 475,422, 477,420"
"27","204-255-0","Eure","318,149, 321,149, 323,146, 323,143, 326,142, 326,140, 328,139, 328,137, 327,133, 323,132, 321,130, 318,130, 312,129, 309,134, 307,134, 305,135, 304,137, 302,137, 301,139, 299,139, 298,137, 296,136, 296,132, 287,131, 282,127, 281,127, 276,129, 274,128, 275,135, 277,136, 277,140, 279,145, 278,150, 279,154, 277,156, 279,158, 284,158, 287,163, 291,166, 291,170, 293,170, 306,166, 311,166, 312,163, 316,159, 315,157, 317,156, 317,154, 316,151"
"28","0-255-255","Eure-et-Loir","308,211, 312,211, 314,210, 315,208, 321,208, 323,206, 327,206, 331,205, 332,201, 334,199, 334,193, 333,187, 332,185, 330,185, 326,181, 326,178, 321,174, 321,172, 319,161, 316,157, 317,160, 313,163, 313,165, 311,167, 304,167, 297,170, 294,170, 292,171, 292,173, 296,178, 296,186, 293,189, 291,189, 290,194, 291,198, 294,199, 299,204, 303,204, 304,207, 307,209"
"29","25-25-255","Finistère","103,210, 105,209, 105,207, 109,206, 112,207, 113,205, 116,207, 116,209, 117,211, 122,211, 127,213, 129,213, 132,208, 134,206, 131,205, 129,203, 126,203, 124,201, 124,199, 122,197, 122,194, 124,192, 126,192, 129,190, 129,188, 130,186, 128,177, 128,174, 129,170, 127,168, 127,165, 128,163, 125,161, 122,161, 120,164, 115,160, 109,161, 107,163, 105,163, 103,161, 100,162, 98,164, 95,163, 94,165, 89,166, 86,169, 86,178, 89,177, 92,178, 97,176, 98,179, 102,179, 103,181, 101,183, 99,183, 93,182, 93,186, 95,184, 99,185, 102,187, 102,189, 103,192, 93,193, 87,194, 90,196, 92,196, 97,200, 99,205, 99,207, 98,209, 101,209"
"30","255-204-0","Gard","423,452, 421,454, 419,454, 422,459, 424,457, 426,457, 429,454, 432,452, 432,449, 434,446, 438,446, 440,441, 440,437, 443,434, 444,432, 446,431, 446,427, 443,426, 442,420, 440,418, 440,415, 436,412, 432,411, 427,412, 424,414, 422,414, 420,412, 417,412, 416,409, 414,408, 411,409, 411,411, 413,420, 410,424, 407,424, 404,422, 401,422, 399,425, 393,425, 392,423, 389,422, 388,426, 393,429, 393,431, 390,434, 390,436, 393,439, 395,439, 398,440, 401,436, 404,434, 406,434, 408,436, 408,439, 411,438, 415,442, 420,446, 422,447, 422,449"
"31","204-102-102","Haute-Garonne","280,495, 283,494, 286,495, 287,492, 291,489, 293,489, 294,487, 293,484, 295,481, 301,480, 304,483, 305,478, 308,477, 310,474, 313,476, 314,473, 318,472, 322,473, 322,470, 324,468, 326,468, 326,466, 328,463, 334,464, 334,462, 329,459, 327,456, 322,454, 321,452, 322,448, 320,446, 317,442, 316,439, 314,439, 309,440, 309,443, 306,445, 303,445, 301,443, 298,443, 294,444, 301,453, 303,454, 303,456, 297,461, 297,463, 295,465, 294,467, 292,467, 289,465, 287,465, 278,473, 278,475, 274,478, 274,480, 277,483, 277,485, 279,486, 279,491, 276,495, 273,495, 273,502, 277,502, 280,503, 280,501, 279,498"
"32","204-153-51","Gers","269,467, 270,469, 275,468, 278,470, 280,470, 282,468, 283,466, 288,464, 293,466, 296,463, 296,461, 298,458, 302,455, 297,450, 292,444, 290,443, 289,437, 285,436, 284,434, 287,431, 282,429, 280,430, 278,428, 273,428, 272,430, 270,430, 264,431, 262,430, 260,432, 257,432, 258,435, 254,436, 252,434, 247,435, 247,440, 246,445, 244,448, 244,451, 246,451, 251,453, 253,453, 256,457, 259,459, 259,463, 262,466, 266,466"
"33","153-204-153","Gironde","256,405, 255,403, 257,400, 259,400, 261,397, 261,391, 263,389, 267,389, 267,386, 268,383, 266,383, 263,385, 259,385, 257,383, 257,377, 259,372, 259,369, 255,369, 253,370, 251,369, 248,370, 244,367, 240,366, 238,361, 238,359, 231,357, 230,362, 231,367, 232,369, 230,370, 227,363, 227,358, 224,353, 214,343, 212,352, 212,357, 209,376, 209,378, 208,384, 207,388, 209,388, 210,386, 215,390, 214,392, 209,392, 206,399, 206,402, 215,400, 217,401, 217,404, 219,404, 223,405, 230,404, 231,407, 236,411, 238,411, 240,414, 240,418, 243,418, 245,419, 245,416, 248,415, 249,417, 253,417, 254,414, 253,412, 256,409"
"34","204-153-0","Hérault","369,470, 375,470, 376,472, 378,472, 380,474, 383,474, 385,475, 389,471, 396,470, 398,468, 398,464, 401,461, 403,461, 407,462, 410,457, 412,455, 414,455, 415,453, 422,452, 422,450, 421,447, 416,443, 414,443, 411,439, 408,440, 407,436, 404,435, 402,437, 399,439, 398,441, 396,441, 392,440, 390,437, 386,438, 385,441, 378,442, 378,448, 372,449, 371,451, 364,453, 361,452, 360,456, 362,458, 362,461, 359,463, 359,465, 357,466, 357,469, 360,471, 362,471, 364,473, 367,473"
"35","100-100-255","Ille-et-Vilaine","197,219, 199,216, 203,215, 204,213, 208,213, 210,215, 213,215, 213,212, 215,210, 215,208, 218,205, 220,205, 220,202, 218,193, 218,190, 220,188, 220,184, 219,178, 215,177, 213,179, 210,181, 204,176, 204,171, 199,171, 195,170, 194,166, 191,166, 188,169, 183,169, 183,171, 184,173, 188,174, 191,177, 191,180, 190,185, 189,188, 182,190, 179,193, 179,195, 177,196, 177,198, 178,200, 176,203, 176,205, 179,205, 183,208, 183,210, 182,214, 183,216, 181,221, 182,222, 185,220, 188,220"
"36","100-255-255","Indre","327,297, 335,297, 340,298, 342,297, 343,292, 342,289, 343,286, 341,284, 341,282, 339,280, 339,277, 338,274, 341,271, 338,269, 339,265, 337,263, 337,260, 329,259, 328,257, 330,255, 330,253, 326,252, 323,250, 321,250, 318,252, 314,252, 311,255, 313,258, 307,265, 302,264, 300,269, 300,272, 297,279, 292,280, 292,283, 291,285, 297,291, 299,291, 300,294, 304,298, 304,300, 308,300, 310,299, 312,301, 315,299, 325,299"
"37","75-255-255","Indre-et-Loire","288,274, 288,276, 291,279, 296,279, 299,272, 299,268, 300,265, 302,263, 305,263, 307,264, 312,259, 309,252, 306,249, 303,249, 302,246, 303,243, 300,233, 297,230, 294,230, 292,227, 290,227, 283,225, 282,227, 279,227, 277,229, 275,230, 274,232, 271,230, 268,230, 266,231, 268,234, 265,244, 262,247, 262,253, 261,257, 263,257, 264,260, 268,261, 269,267, 276,268, 281,267, 283,266, 285,271"
"38","51-102-102","Isère","483,389, 487,386, 491,386, 492,383, 499,380, 502,380, 504,379, 506,380, 506,375, 505,372, 501,372, 500,369, 502,364, 500,364, 497,360, 497,357, 499,355, 499,351, 496,348, 492,348, 491,346, 489,347, 487,350, 485,350, 482,349, 480,344, 475,339, 474,336, 467,329, 467,327, 465,327, 464,330, 462,332, 459,332, 457,331, 457,333, 458,336, 455,339, 454,341, 449,342, 447,344, 447,347, 444,350, 444,354, 445,357, 449,357, 451,355, 453,355, 457,358, 459,359, 461,362, 461,366, 462,369, 471,370, 474,373, 474,375, 473,377, 474,381, 473,383, 476,384, 478,386"
"39","255-255-75","Jura","477,300, 478,302, 484,302, 486,300, 490,295, 492,292, 492,290, 494,287, 493,281, 492,279, 496,275, 495,273, 492,271, 490,271, 487,267, 487,264, 482,262, 479,259, 480,253, 477,250, 476,248, 473,249, 467,248, 467,252, 464,257, 462,259, 460,260, 460,262, 459,265, 466,270, 463,274, 466,281, 466,284, 464,286, 464,288, 466,290, 466,292, 462,293, 462,295, 464,297, 466,300, 468,301, 468,303, 470,303, 474,300"
"40","153-255-153","Landes","246,435, 250,434, 252,433, 254,435, 257,435, 256,432, 260,425, 257,424, 255,422, 251,422, 250,418, 247,416, 246,419, 244,420, 240,419, 239,414, 238,412, 236,412, 233,409, 230,407, 230,405, 224,405, 220,406, 217,405, 216,401, 212,401, 208,402, 206,403, 206,405, 203,421, 200,431, 200,433, 197,443, 197,445, 194,452, 197,455, 203,455, 205,453, 207,453, 209,455, 212,455, 219,453, 221,453, 223,452, 232,454, 239,453, 241,454, 243,452, 243,448, 245,445, 245,441"
"41","50-255-255","Loir-et-Cher","340,244, 342,242, 345,242, 345,238, 343,235, 341,234, 342,232, 344,231, 344,228, 336,228, 334,229, 331,228, 327,229, 326,226, 324,224, 321,224, 319,222, 318,219, 320,218, 320,215, 318,213, 318,209, 315,209, 314,211, 308,212, 306,210, 305,208, 303,207, 303,205, 299,205, 295,201, 293,201, 291,204, 291,206, 292,208, 291,213, 289,215, 289,218, 286,221, 283,223, 286,225, 289,225, 292,226, 295,229, 297,229, 301,233, 301,235, 303,240, 303,242, 304,245, 303,248, 306,248, 311,253, 314,251, 318,251, 321,249, 323,249, 326,251, 329,251, 331,253, 333,250, 338,250, 340,249"
"42","0-153-51","Loire","443,352, 442,350, 440,350, 438,348, 438,346, 435,344, 432,344, 427,339, 427,335, 426,332, 427,328, 425,326, 425,324, 424,320, 422,318, 424,315, 424,313, 427,311, 425,310, 421,311, 414,310, 411,311, 410,309, 408,309, 405,306, 405,313, 406,320, 404,322, 402,322, 403,329, 402,331, 405,335, 405,338, 412,344, 412,346, 413,350, 410,353, 412,353, 416,354, 418,352, 422,352, 426,353, 428,355, 428,358, 430,358, 434,362, 437,362, 439,357, 442,356"
"43","255-200-200","Haute-Loire","399,384, 403,385, 408,390, 410,388, 412,385, 414,384, 415,382, 420,382, 421,379, 423,377, 425,376, 425,374, 428,372, 428,370, 431,367, 431,365, 432,361, 430,359, 428,359, 427,355, 420,353, 418,353, 416,355, 413,355, 408,354, 403,356, 401,355, 398,356, 397,354, 384,354, 381,357, 378,357, 378,360, 380,360, 383,362, 385,365, 385,368, 387,370, 387,375, 389,377, 390,381, 393,385, 397,385"
"44","255-0-0","Loire-Atlantique","173,260, 174,258, 173,258|201,261, 203,260, 204,265, 207,265, 207,263, 209,260, 211,260, 213,259, 215,260, 215,258, 213,258, 212,254, 215,253, 215,250, 213,250, 211,248, 211,246, 210,244, 212,242, 216,242, 224,241, 223,237, 218,236, 216,234, 216,231, 219,230, 216,227, 216,224, 213,221, 213,216, 210,216, 208,214, 204,214, 203,216, 201,216, 198,218, 197,220, 189,220, 185,221, 180,224, 180,228, 178,230, 173,230, 169,234, 167,235, 166,243, 171,243, 173,246, 176,245, 178,242, 182,242, 183,244, 179,245, 178,247, 179,249, 176,252, 180,253, 183,255, 184,259, 190,265, 192,265, 194,268, 198,268, 201,269, 202,265"
"45","25-255-255","Loiret","353,232, 354,234, 358,234, 362,238, 367,237, 367,234, 369,232, 369,228, 368,226, 366,225, 366,222, 370,221, 372,220, 372,214, 376,210, 375,207, 373,205, 373,203, 371,201, 363,201, 361,203, 355,202, 353,200, 353,196, 350,194, 350,192, 345,192, 342,191, 340,193, 337,193, 335,194, 335,199, 333,201, 333,204, 331,206, 328,206, 323,207, 321,209, 319,209, 319,213, 321,215, 321,218, 319,219, 320,222, 324,223, 327,226, 327,228, 330,228, 333,227, 335,228, 344,227, 345,231, 347,231, 349,233"
"46","204-102-0","Lot","328,413, 330,413, 330,411, 328,408, 328,405, 331,404, 335,400, 338,400, 341,399, 341,397, 339,392, 339,386, 337,383, 337,380, 336,378, 334,378, 329,379, 326,381, 323,379, 320,375, 314,375, 312,376, 313,382, 308,388, 308,390, 306,392, 300,397, 298,400, 296,401, 296,405, 298,407, 298,410, 299,413, 302,416, 305,417, 306,419, 311,419, 314,417, 317,419, 324,415, 326,415"
"47","204-255-204","Lot-et-Garonne","280,429, 284,426, 285,424, 290,423, 290,420, 292,415, 290,413, 291,411, 293,411, 297,410, 297,407, 295,405, 295,401, 298,398, 295,396, 292,396, 290,397, 289,393, 282,394, 279,393, 274,394, 271,395, 270,391, 269,389, 263,390, 262,398, 260,399, 259,401, 257,401, 256,404, 257,410, 254,412, 255,416, 253,418, 251,419, 251,421, 255,421, 257,423, 260,423, 261,425, 258,430, 260,431, 262,429, 269,430, 272,429, 273,427, 278,427"
"48","153-102-0","Lozère","407,423, 410,423, 412,420, 412,417, 411,412, 410,409, 415,407, 416,406, 413,404, 413,401, 412,399, 410,398, 410,396, 409,392, 403,386, 400,386, 398,385, 392,386, 389,381, 389,379, 387,379, 384,381, 383,383, 379,383, 379,385, 377,386, 377,389, 375,392, 375,396, 378,399, 378,403, 380,405, 380,411, 381,416, 385,419, 389,419, 391,422, 394,424, 399,424, 401,421, 404,421"
"49","255-100-100","Maine-et-Loire","244,259, 249,257, 252,259, 255,259, 258,258, 258,255, 261,253, 261,247, 264,244, 265,239, 267,234, 263,230, 258,227, 254,228, 253,225, 248,224, 247,221, 244,221, 241,220, 238,222, 234,222, 231,220, 228,220, 225,219, 221,220, 214,219, 214,221, 217,224, 217,227, 220,229, 219,231, 217,231, 217,234, 222,235, 224,237, 224,239, 225,241, 217,242, 212,243, 211,245, 212,248, 215,249, 216,253, 213,254, 213,257, 215,257, 216,261, 231,263, 235,263, 238,261, 239,259"
"50","125-125-255","Manche","224,164, 222,162, 222,160, 224,158, 224,155, 228,154, 231,150, 231,147, 226,140, 222,136, 222,134, 223,131, 221,130, 221,127, 219,125, 217,122, 217,118, 219,117, 219,114, 218,112, 213,111, 209,114, 205,114, 202,112, 200,112, 195,109, 194,109, 198,114, 198,117, 196,119, 198,124, 198,128, 201,130, 205,139, 205,149, 206,156, 205,164, 207,166, 207,168, 204,169, 205,176, 209,180, 216,176, 222,176, 231,178, 235,174, 234,171, 235,169, 233,168, 232,165, 230,165"
"51","25-255-25","Marne","423,175, 428,178, 430,178, 434,177, 438,178, 437,175, 440,173, 443,169, 446,170, 446,166, 442,162, 442,157, 446,154, 446,150, 445,146, 443,143, 443,141, 444,139, 441,138, 432,139, 431,137, 427,137, 425,138, 420,135, 416,131, 413,131, 410,130, 408,132, 404,131, 402,133, 400,133, 396,136, 396,140, 397,143, 394,145, 394,147, 396,150, 396,153, 390,160, 390,162, 388,164, 388,167, 390,169, 389,172, 391,172, 396,177, 397,179, 404,179, 404,177, 412,169, 418,169, 421,168, 423,170"
"52","75-255-75","Haute-Marne","472,223, 472,221, 473,219, 472,217, 476,213, 479,211, 479,208, 476,206, 476,204, 472,201, 472,197, 474,196, 472,193, 470,192, 469,190, 465,187, 463,187, 462,182, 461,180, 458,178, 455,178, 452,175, 449,174, 448,172, 446,172, 443,170, 441,172, 438,176, 439,178, 435,179, 435,183, 441,189, 443,192, 443,194, 442,196, 443,201, 441,203, 438,203, 438,206, 440,208, 442,211, 445,213, 447,216, 447,223, 450,225, 454,225, 457,228, 462,228, 463,225, 468,223"
"53","255-75-75","Mayenne","224,219, 227,218, 231,219, 234,221, 238,221, 241,219, 243,219, 246,220, 246,217, 247,213, 250,211, 250,206, 253,205, 253,199, 256,197, 256,190, 259,187, 259,182, 257,182, 255,180, 255,177, 252,176, 251,178, 249,178, 246,179, 244,178, 241,180, 234,180, 232,181, 230,179, 228,179, 220,178, 220,183, 221,188, 219,190, 219,196, 221,205, 218,206, 216,208, 216,210, 214,212, 214,217, 220,218"
"54","102-0-102","Meurthe-et-Moselle","508,179, 509,181, 512,181, 514,182, 517,181, 523,175, 521,172, 514,169, 512,169, 509,168, 507,166, 504,164, 502,164, 498,163, 494,159, 494,155, 492,155, 488,154, 484,151, 483,149, 480,147, 482,144, 482,140, 483,137, 479,130, 479,125, 480,123, 477,123, 473,120, 468,121, 463,123, 462,127, 469,128, 471,130, 472,139, 473,144, 476,146, 476,153, 474,156, 474,159, 475,163, 473,165, 473,167, 474,173, 473,176, 476,178, 480,178, 481,183, 484,186, 486,186, 489,185, 490,183, 493,183, 496,182, 499,183, 504,181, 506,179"
"55","153-0-153","Meuse","465,185, 465,183, 469,182, 471,180, 474,180, 474,177, 472,176, 472,174, 473,168, 472,165, 474,163, 474,160, 473,156, 475,153, 475,146, 472,144, 472,140, 471,132, 469,129, 464,129, 461,127, 461,120, 460,117, 459,117, 458,119, 454,122, 449,121, 448,125, 449,131, 447,132, 447,136, 445,138, 445,140, 444,143, 446,146, 446,149, 447,155, 443,158, 443,162, 447,166, 447,171, 454,176, 458,177, 460,179, 462,180, 463,186"
"56","50-50-255","Morbihan","144,241, 140,237, 138,237, 138,240, 141,240|173,229, 178,229, 180,220, 182,215, 181,211, 182,208, 179,206, 176,206, 175,203, 177,200, 176,197, 173,197, 172,195, 169,195, 165,200, 163,199, 163,197, 159,197, 156,196, 154,194, 151,194, 150,192, 146,191, 144,193, 139,194, 136,193, 134,191, 132,191, 130,190, 128,192, 124,193, 123,197, 125,199, 125,201, 129,202, 131,204, 134,204, 135,206, 131,211, 130,216, 135,217, 144,225, 148,225, 150,226, 154,223, 156,223, 158,225, 158,227, 154,228, 154,230, 156,231, 160,230, 162,229, 164,230, 166,229, 169,231, 171,231"
"57","204-0-204","Moselle","519,155, 518,151, 520,150, 520,147, 522,146, 523,148, 527,148, 529,150, 533,150, 535,149, 539,150, 541,143, 535,138, 532,138, 531,140, 524,141, 520,140, 518,137, 514,137, 512,140, 509,140, 507,138, 505,133, 502,131, 503,128, 498,124, 494,124, 492,122, 487,122, 485,124, 480,125, 480,131, 482,133, 484,138, 483,145, 481,146, 482,148, 485,150, 486,152, 491,153, 494,154, 495,159, 498,162, 501,162, 504,163, 506,165, 509,167, 511,167, 522,172, 525,175, 529,171, 529,169, 530,166, 529,163, 530,160, 528,157, 522,156"
"58","100-151-255","Nièvre","414,273, 415,271, 413,269, 414,266, 413,264, 414,259, 417,256, 420,255, 420,252, 417,251, 416,246, 411,246, 410,244, 405,244, 401,243, 398,240, 396,240, 395,237, 392,236, 385,238, 382,238, 377,233, 373,234, 369,233, 368,237, 370,240, 368,245, 368,247, 372,250, 372,253, 374,258, 374,261, 375,274, 373,275, 373,277, 376,280, 380,283, 388,282, 390,284, 392,284, 395,282, 396,280, 399,280, 403,279, 404,281, 406,281, 413,277"
"59","153-153-51","Nord","413,89, 413,85, 415,83, 414,81, 411,80, 409,78, 406,78, 404,79, 399,78, 398,80, 396,79, 395,76, 396,73, 393,70, 391,70, 390,68, 387,70, 383,69, 382,65, 380,62, 381,59, 378,57, 378,55, 376,54, 372,55, 370,56, 369,58, 366,58, 363,55, 361,52, 359,52, 358,44, 356,42, 356,39, 353,38, 347,39, 342,41, 341,43, 344,48, 344,51, 347,54, 350,54, 351,60, 354,62, 356,62, 364,63, 366,65, 367,68, 371,69, 374,71, 375,75, 374,78, 375,82, 378,83, 379,88, 376,95, 383,95, 386,94, 388,95, 391,93, 394,94, 401,93, 406,94, 409,97, 413,97, 413,95, 416,93, 415,90"
"60","225-225-255","Oise","372,137, 373,135, 375,135, 376,131, 378,130, 376,125, 377,121, 376,118, 377,115, 371,115, 369,117, 365,117, 365,119, 360,121, 358,121, 356,119, 354,119, 351,117, 349,117, 346,115, 342,115, 339,116, 336,114, 332,114, 330,112, 327,112, 327,115, 326,121, 327,124, 329,125, 327,128, 327,132, 329,139, 327,140, 327,142, 333,143, 338,141, 341,143, 345,143, 348,145, 350,145, 354,146, 356,148, 359,147, 361,149, 363,149, 371,148, 376,146, 376,143, 374,140, 374,138"
"61","175-175-255","Orne","259,181, 260,184, 264,184, 266,181, 268,181, 272,180, 275,182, 276,189, 279,190, 282,193, 286,193, 289,196, 290,195, 289,190, 291,188, 293,188, 295,186, 295,178, 292,175, 290,170, 290,166, 288,164, 285,162, 284,159, 279,159, 275,156, 272,155, 266,156, 264,159, 262,159, 258,163, 255,161, 249,161, 244,160, 239,162, 237,162, 235,164, 233,164, 233,166, 234,168, 236,169, 235,172, 236,174, 234,177, 232,178, 232,180, 241,179, 244,177, 248,178, 251,177, 252,175, 254,175, 256,177, 256,180"
"62","102-102-51","Pas-de-Calais","361,89, 368,94, 371,94, 376,93, 378,86, 378,84, 375,83, 373,76, 374,73, 373,71, 369,70, 366,68, 365,65, 357,64, 352,62, 350,60, 350,55, 346,55, 343,51, 343,48, 340,43, 334,42, 332,44, 330,44, 324,49, 322,49, 323,56, 322,73, 321,77, 326,77, 329,76, 331,78, 334,78, 335,81, 338,82, 339,85, 344,85, 347,83, 350,83, 354,86, 353,89, 356,89, 359,91"
"63","255-150-150","Puy-de-Dôme","397,353, 398,355, 400,355, 402,354, 404,355, 407,354, 410,351, 412,350, 412,347, 411,344, 407,340, 404,338, 404,335, 402,333, 401,330, 402,324, 399,324, 397,321, 393,321, 390,318, 388,319, 379,318, 377,316, 375,316, 371,312, 370,308, 368,308, 366,311, 364,311, 362,313, 361,315, 358,315, 360,318, 360,322, 358,324, 355,329, 353,330, 357,337, 357,340, 355,342, 357,345, 357,347, 356,350, 362,351, 364,354, 368,354, 371,355, 373,357, 374,359, 376,359, 378,356, 381,356, 384,353"
"64","102-255-102","Pyrénées-Atlantiques","198,481, 199,479, 203,480, 206,482, 208,482, 210,484, 212,484, 213,486, 222,486, 223,490, 230,496, 237,495, 239,493, 239,490, 240,486, 243,483, 245,482, 245,479, 247,478, 251,473, 252,470, 251,468, 254,467, 253,461, 251,458, 251,456, 248,453, 244,452, 241,455, 233,454, 229,455, 224,454, 222,453, 209,456, 207,454, 205,454, 203,456, 197,456, 195,454, 192,455, 190,457, 186,462, 182,462, 183,465, 187,465, 188,468, 190,468, 191,466, 194,468, 196,468, 198,470, 198,472, 194,479, 196,481"
"65","153-102-51","Hautes-Pyrénées","265,503, 267,501, 270,503, 272,503, 272,495, 276,494, 278,491, 278,486, 276,485, 276,483, 273,480, 273,478, 277,474, 278,471, 275,469, 272,469, 270,470, 269,468, 267,468, 261,467, 258,463, 258,459, 252,454, 251,454, 252,458, 254,461, 254,465, 255,467, 252,468, 253,471, 250,476, 248,477, 246,480, 246,482, 244,484, 241,486, 241,489, 240,493, 239,495, 243,495, 246,496, 251,502, 255,502, 259,501, 261,500"
"66","51-51-0","Pyrénées-Orientales","338,522, 340,519, 343,519, 347,518, 350,520, 352,520, 355,523, 357,523, 359,522, 362,523, 362,520, 367,519, 370,516, 377,516, 379,518, 382,518, 382,516, 381,514, 378,513, 377,497, 373,496, 371,494, 368,494, 365,498, 359,498, 357,497, 352,498, 350,497, 350,503, 348,505, 346,505, 345,507, 343,507, 337,506, 334,507, 333,509, 328,511, 326,511, 324,512, 324,514, 328,515, 330,517, 332,517, 334,522"
"67","204-204-51","Bas-Rhin","532,186, 536,190, 538,190, 540,192, 540,194, 544,195, 544,193, 547,188, 547,185, 548,178, 550,173, 550,168, 555,162, 555,160, 557,159, 558,157, 560,156, 560,152, 563,148, 560,147, 558,145, 556,145, 542,144, 541,149, 539,151, 536,151, 534,150, 529,151, 527,149, 523,149, 522,147, 521,150, 519,151, 519,154, 521,154, 526,155, 530,158, 531,162, 530,165, 531,168, 530,171, 526,175, 525,184, 527,184, 530,186"
"68","153-153-0","Haut-Rhin","544,229, 544,227, 545,223, 542,220, 543,209, 545,204, 545,202, 543,200, 543,196, 540,195, 539,192, 536,191, 532,187, 528,187, 525,194, 525,198, 523,200, 523,202, 520,205, 520,209, 518,216, 521,217, 528,230, 528,233, 530,233, 539,234"
"69","0-255-51","Rhône","446,344, 449,341, 452,341, 454,340, 457,336, 457,334, 456,330, 450,330, 447,325, 444,324, 442,322, 442,314, 443,312, 442,310, 440,310, 438,308, 438,306, 431,305, 428,304, 428,307, 427,309, 428,311, 425,314, 423,317, 425,320, 425,323, 426,326, 428,328, 428,331, 427,334, 428,339, 432,343, 435,343, 439,346, 439,348, 444,349, 446,347"
"70","255-255-0","Haute-Saône","488,242, 491,239, 496,236, 499,232, 503,232, 507,233, 507,231, 510,230, 512,227, 514,227, 515,222, 514,217, 515,215, 511,212, 508,211, 507,209, 505,211, 501,211, 499,208, 492,210, 489,208, 489,206, 486,206, 486,208, 483,210, 480,210, 477,214, 473,217, 474,220, 473,223, 467,224, 464,225, 466,227, 467,232, 463,236, 465,238, 465,240, 467,242, 467,245, 468,247, 472,247, 474,248, 477,247, 479,245, 484,242"
"71","150-151-255","Saône-et-Loire","437,304, 439,306, 439,308, 442,309, 442,307, 447,291, 450,290, 454,291, 457,290, 458,292, 461,293, 465,292, 465,290, 463,288, 463,286, 465,284, 465,281, 462,274, 463,272, 465,271, 464,269, 462,269, 460,266, 456,265, 453,266, 451,265, 438,269, 436,267, 429,262, 426,261, 424,259, 420,256, 419,256, 415,259, 415,263, 414,265, 415,267, 414,269, 416,271, 415,277, 412,278, 410,280, 405,282, 402,280, 400,280, 397,281, 399,284, 399,286, 400,290, 407,293, 409,293, 410,299, 406,303, 406,305, 408,308, 410,308, 411,310, 413,310, 420,309, 424,310, 426,309, 427,304, 430,303"
"72","255-25-25","Sarthe","271,229, 273,231, 276,228, 279,226, 282,226, 282,223, 285,220, 288,218, 288,215, 290,213, 290,209, 291,207, 290,204, 292,201, 290,198, 287,196, 286,194, 281,194, 279,191, 276,190, 275,184, 274,182, 269,181, 266,182, 264,185, 260,186, 257,190, 257,197, 254,200, 254,205, 251,206, 251,211, 248,214, 248,216, 247,220, 248,223, 252,223, 254,225, 254,227, 256,227, 258,226, 261,227, 262,229, 267,230"
"73","51-153-153","Savoie","500,355, 498,357, 498,360, 501,363, 506,366, 506,368, 511,368, 512,366, 525,362, 527,362, 530,360, 531,358, 534,358, 536,356, 536,351, 538,348, 534,344, 531,343, 529,334, 527,334, 521,329, 518,329, 514,328, 512,326, 512,322, 510,322, 508,324, 508,327, 505,330, 505,332, 502,335, 499,333, 498,331, 496,331, 492,332, 490,330, 489,328, 485,325, 483,332, 483,334, 481,335, 480,338, 478,340, 481,344, 482,348, 484,348, 487,349, 490,345, 493,347, 496,347, 500,351"
"74","0-204-204","Haute-Savoie","504,330, 507,327, 507,324, 510,321, 512,321, 513,326, 520,328, 522,327, 522,325, 525,323, 527,323, 529,321, 530,316, 526,312, 524,311, 524,308, 521,308, 520,306, 522,299, 519,296, 520,293, 508,293, 506,296, 501,296, 500,302, 501,304, 495,309, 489,309, 489,311, 487,312, 486,314, 484,314, 484,318, 485,323, 487,325, 488,327, 491,329, 492,331, 495,331, 498,330, 500,332, 501,334, 504,332"
"75","199-255-175","Paris","350,164, 351,161, 348,160, 346,161, 346,163|503,55, 507,52, 509,52, 512,54, 515,54, 516,50, 512,49, 510,46, 510,43, 507,39, 507,36, 495,36, 493,38, 489,41, 487,41, 484,42, 482,44, 482,47, 485,48, 487,51, 490,51, 497,55"
"76","204-204-0","Seine-Maritime","300,138, 302,136, 304,136, 305,134, 309,133, 310,130, 312,128, 317,128, 321,129, 323,131, 326,131, 326,128, 328,126, 326,124, 326,122, 325,116, 326,112, 327,110, 325,103, 323,101, 318,97, 315,95, 313,95, 307,100, 302,102, 299,102, 292,105, 286,105, 282,108, 279,109, 277,111, 273,112, 270,114, 270,117, 267,122, 267,124, 270,124, 273,126, 275,126, 276,128, 283,126, 285,129, 294,130, 297,132, 297,136"
"77","199-255-75","Seine-et-Marne","371,198, 373,196, 373,190, 376,188, 385,188, 387,187, 387,181, 390,178, 390,176, 392,175, 391,173, 389,173, 388,171, 389,169, 387,167, 387,164, 388,161, 378,152, 378,149, 376,147, 375,147, 370,149, 364,149, 361,150, 359,148, 357,153, 359,158, 359,160, 358,162, 359,169, 357,172, 357,178, 356,188, 353,190, 351,193, 352,195, 354,196, 354,200, 359,201, 361,202, 363,200, 371,200"
"78","199-255-25","Yvelines","337,178, 337,172, 340,170, 341,168, 343,168, 343,166, 341,164, 341,161, 342,155, 337,154, 332,152, 330,150, 326,151, 318,150, 317,153, 318,158, 320,161, 320,165, 321,171, 322,174, 324,175, 325,177, 327,178, 327,181, 330,184, 332,182, 334,182"
"79","100-255-100","Deux-Sèvres","254,319, 254,321, 257,316, 261,313, 264,313, 266,314, 266,311, 263,309, 265,304, 265,301, 263,300, 261,301, 258,297, 258,294, 257,292, 259,290, 259,288, 260,285, 258,283, 258,281, 259,278, 258,273, 259,267, 258,264, 253,260, 250,258, 248,258, 243,260, 239,260, 237,263, 228,264, 229,270, 232,272, 232,275, 234,278, 234,280, 236,287, 236,289, 235,294, 237,296, 237,298, 233,301, 231,301, 231,305, 236,310, 238,310, 240,312, 242,312, 245,314, 247,314, 249,316, 251,316, 252,318"
"80","200-200-255","Somme","375,114, 375,110, 374,105, 376,104, 376,102, 378,99, 378,97, 374,94, 372,94, 367,95, 366,93, 364,93, 362,90, 360,92, 355,90, 353,90, 352,88, 353,86, 350,84, 347,84, 344,86, 339,86, 338,83, 335,82, 334,79, 331,79, 329,77, 327,77, 321,78, 321,80, 320,83, 321,85, 319,86, 318,90, 315,94, 317,96, 326,103, 326,105, 327,109, 332,113, 336,113, 339,115, 341,115, 346,114, 349,116, 351,116, 354,118, 356,118, 358,120, 361,120, 364,119, 364,117, 369,116, 371,114"
"81","153-102-102","Tarn","343,463, 347,462, 358,463, 361,460, 361,458, 359,456, 359,453, 361,451, 363,451, 366,452, 371,450, 371,447, 367,447, 364,448, 361,447, 357,442, 357,439, 353,430, 351,430, 348,426, 344,426, 340,423, 338,423, 336,425, 333,425, 331,426, 329,425, 327,428, 322,427, 324,429, 324,431, 321,433, 320,435, 318,435, 318,437, 317,440, 321,445, 323,448, 323,451, 322,453, 327,455, 332,460, 335,462, 337,465, 343,465"
"82","153-51-0","Tarn-et-Garonne","320,434, 323,430, 321,428, 322,426, 325,426, 327,427, 329,424, 331,423, 331,419, 333,418, 330,417, 329,414, 326,416, 323,416, 321,418, 318,420, 316,420, 315,418, 310,420, 306,420, 305,418, 302,417, 298,413, 298,411, 294,411, 291,412, 293,415, 291,422, 290,424, 287,424, 285,425, 285,427, 284,429, 287,429, 288,431, 285,434, 290,437, 290,441, 291,443, 297,443, 301,442, 303,444, 306,444, 308,443, 308,440, 313,439, 317,436, 318,434"
"83","0-0-204","Var","490,478, 491,480, 495,479, 496,477, 498,477, 504,478, 506,476, 510,476, 512,477, 512,475, 521,471, 524,471, 524,469, 525,467, 522,468, 521,466, 526,461, 526,459, 531,458, 534,456, 534,451, 533,448, 529,448, 527,445, 527,442, 523,441, 521,438, 513,439, 513,441, 509,442, 506,439, 504,440, 502,443, 500,443, 499,445, 496,445, 494,443, 492,443, 490,444, 487,443, 489,445, 489,448, 485,451, 485,453, 486,458, 489,461, 488,463, 486,463, 486,466, 489,469, 488,471, 485,473, 485,475, 488,476"
"84","0-0-102","Vaucluse","482,439, 480,439, 479,436, 480,434, 476,431, 477,426, 475,425, 475,423, 472,423, 471,421, 469,421, 466,418, 461,418, 457,414, 454,414, 449,417, 446,417, 445,413, 441,413, 441,418, 443,420, 443,425, 445,425, 447,427, 447,433, 450,434, 452,436, 454,436, 458,440, 460,443, 464,444, 467,443, 476,447, 482,447, 483,445, 485,445, 485,441|454,408, 452,407, 451,411, 453,411"
"85","255-50-50","Vendée","170,275, 169,275|234,294, 234,290, 235,285, 233,278, 231,275, 231,272, 228,270, 228,266, 227,264, 225,264, 217,263, 213,260, 209,261, 208,265, 204,266, 203,261, 202,264, 203,268, 201,270, 199,270, 194,269, 191,266, 186,263, 184,260, 182,260, 182,262, 178,266, 178,269, 179,271, 183,274, 187,279, 189,284, 189,286, 194,291, 197,293, 200,293, 202,295, 202,297, 206,297, 209,300, 212,301, 215,300, 217,298, 220,298, 221,300, 228,300, 230,301, 233,300, 236,297"
"86","125-255-125","Vienne","283,314, 285,312, 287,312, 289,313, 290,310, 289,308, 293,304, 296,304, 297,301, 301,300, 303,299, 299,294, 299,292, 297,292, 290,285, 291,280, 287,276, 287,274, 284,271, 283,267, 272,269, 270,269, 268,267, 268,262, 265,262, 263,260, 263,258, 261,258, 260,256, 259,256, 259,258, 256,259, 255,261, 259,264, 259,266, 260,272, 259,277, 260,280, 259,283, 261,285, 261,287, 260,290, 258,292, 259,297, 262,300, 264,299, 266,301, 266,305, 264,308, 265,310, 267,311, 267,314, 270,316, 273,315, 275,316, 275,314, 277,312, 280,314"
"87","255-255-100","Haute-Vienne","315,345, 318,345, 321,344, 324,341, 326,341, 328,339, 330,339, 330,333, 326,330, 323,331, 320,329, 320,326, 318,326, 316,324, 317,321, 315,314, 311,310, 311,307, 313,302, 310,300, 304,301, 302,300, 298,301, 297,304, 293,305, 290,308, 291,312, 290,316, 294,319, 294,323, 290,326, 288,331, 285,332, 283,335, 283,337, 285,337, 286,341, 288,343, 293,341, 296,342, 300,347, 300,349, 305,351, 310,350"
"88","255-0-255","Vosges","475,203, 477,204, 477,206, 481,209, 483,209, 485,208, 485,206, 489,205, 490,208, 494,209, 499,207, 502,210, 505,210, 506,208, 510,211, 513,212, 514,214, 517,215, 519,206, 522,202, 522,200, 524,198, 524,194, 527,187, 527,185, 525,185, 524,176, 523,176, 517,182, 515,182, 513,183, 509,182, 508,180, 506,180, 504,182, 497,184, 494,183, 490,184, 489,186, 487,186, 484,187, 480,183, 480,179, 477,179, 474,181, 471,181, 469,183, 466,183, 466,186, 468,189, 475,195, 473,198, 473,201"
"89","0-151-255","Yonne","401,242, 404,242, 410,243, 411,245, 414,245, 414,241, 415,238, 414,236, 417,233, 417,231, 422,222, 422,218, 420,217, 420,212, 415,211, 407,212, 404,209, 404,207, 402,204, 402,202, 399,200, 397,200, 394,197, 394,192, 390,188, 386,188, 376,189, 374,190, 374,196, 372,198, 372,201, 374,203, 374,205, 376,207, 377,210, 373,214, 373,220, 370,222, 367,222, 367,225, 369,226, 370,231, 373,233, 375,233, 378,232, 382,237, 387,237, 394,235, 396,237, 396,239, 398,239"
"90","255-255-25","Territoire de Belfort","527,231, 527,229, 525,227, 521,218, 519,218, 516,216, 515,221, 516,226, 515,229, 524,231"
"91","199-255-50","Essonne","340,192, 342,190, 344,190, 352,191, 355,187, 355,179, 356,171, 350,171, 345,169, 344,168, 341,169, 338,173, 338,179, 335,181, 333,184, 333,186, 334,192, 336,193"
"92","199-255-100","Hauts-de-Seine","345,163, 345,161, 347,160, 347,154, 344,154, 343,160, 342,164, 347,169, 348,165|495,60, 495,55, 490,52, 487,52, 483,48, 481,47, 481,44, 484,41, 486,41, 489,40, 492,37, 495,35, 495,33, 498,30, 498,27, 494,26, 492,25, 485,29, 475,39, 492,25, 485,29, 479,35, 474,39, 473,48, 472,54, 475,54, 477,56, 477,58, 479,58, 483,62, 484,65, 489,66, 491,68, 491,71, 494,71, 495,66, 497,64, 497,62"
"93","199-255-125","Seine-Saint-Denis","350,159, 352,161, 357,161, 358,157, 357,154, 356,154, 354,156, 348,156, 348,159|519,45, 522,46, 525,49, 529,52, 530,55, 534,56, 535,52, 532,50, 532,45, 530,43, 530,39, 533,36, 533,31, 535,30, 535,28, 531,23, 530,19, 531,15, 527,14, 524,19, 520,23, 518,23, 517,25, 507,25, 504,22, 502,22, 498,25, 493,24, 498,26, 499,30, 496,33, 496,35, 507,35, 508,39, 510,41, 511,46, 514,47"
"94","199-255-150","Val-de-Marne","357,170, 358,163, 352,162, 349,166, 349,169|517,74, 524,73, 525,78, 527,80, 531,81, 531,78, 533,73, 533,71, 535,69, 535,66, 533,64, 533,62, 534,57, 532,57, 529,55, 528,52, 526,50, 522,47, 518,46, 515,47, 517,50, 517,53, 515,55, 512,55, 509,53, 507,53, 505,55, 496,56, 496,60, 498,62, 498,64, 496,66, 496,69, 498,69, 503,70, 504,75, 507,75"
"95","199-255-0","Val-d'Oise","347,153, 349,155, 354,155, 356,153, 357,149, 354,147, 351,147, 344,144, 341,144, 338,142, 337,142, 332,144, 329,144, 324,143, 324,146, 323,149, 325,149, 328,150, 330,149, 332,151, 342,154"
"971","161-161-25","Guadeloupe","80,269, 80,172, 1,172, 1,269"
"972","161-161-125","Martinique","79,362, 79,271, 1,271, 1,362"
"973","161-161-200","Guyane","78,449, 78,365, 3,365, 3,449"
"974","161-161-225","Réunion","78,524, 78,453, 2,453, 2,524"
"975","25-161-161","Saint-Pierre-et-Miquelon","158,130, 158,4, 88,4, 88,130"
"976","125-161-161","Mayotte","81,101, 81,4, 3,4, 3,101"
"977","0-0-0","Saint-Barthélémy",""
"978","0-0-0","Saint-Martin",""
"986","200-161-161","Wallis-et-Futuna","161,527, 161,465, 160,405, 93,405, 93,464, 81,465, 81,527"
"987","225-161-161","Polynésie française","162,401, 162,306, 83,306, 83,401"
"988","225-225-161","Nouvelle-Calédonie","281,82, 281,7, 197,7, 197,82"
/branches/v1.13-la-grande-rue/composants/cartographie/squelettes/france.tpl.html
New file
0,0 → 1,12
<div id="cartographie">
<img id="carte-img" src="<?=$carte_url;?>" alt="<?=$carte_alt;?>" usemap="#carte-map" />
<map name="carte-map">
<?php foreach ($zones as $code => $zone) : ?>
<?php if (!empty($zone['poly'])) : ?>
<?php foreach (explode('|', $zone['poly']) as $coords) : ?>
<area shape="poly" title="<?=$zone['nom']?>" class="zone-<?=$code?>" href="<?=$zone['url']?>" coords="<?=$coords?>" />
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</map>
</div>
/branches/v1.13-la-grande-rue/composants/cartographie/squelettes/france.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/composants/cartographie/squelettes/france.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/composants/Composant.php
New file
0,0 → 1,13
<?php
 
class Composant {
 
public static function fabrique($classe, $options = array()) {
$classe_nom = implode('', array_map('ucfirst', explode('_', $classe)));
require_once dirname(__FILE__).DS.$classe.DS.$classe_nom.'.php';
$Composant = new $classe_nom($options);
return $Composant;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/composants/fragmenteur/Fragmenteur.php
New file
0,0 → 1,177
<?php
 
class Fragmenteur {
const PAGER_MODE = 'Sliding';
const PAGE_DELTA = 2;
const PAGE_SEPARATEUR = '<span class="frag_separateur">-</span>';
const SQUELETTE = 'defaut';
const DONNEES_PAR_PAGE_CHOIX = '10,20,50,100';
const DONNEES_PAR_PAGE_DEFAUT = 10;
const ALPHABET_AFFICHAGE_DEFAUT = false;
const ALPHABET_LETTRE_DEFAUT = 'A';
const CSS_CLASS_PAGE_COURRANTE = 'frag_page_courrante frag_boite';
const PAGE_SEPARATEUR_ESPACE = 0;
private $pager_mode;
private $pager;
private $url;
private $parametres_url = null;
private $lettre;
private $page_delta;
private $page_separateur;
private $donnees_total;
private $donnees_par_page;
private $donnees_par_page_choix;
private $url_var;
private $squelette;
private $chemin_squelette;
private $squelette_donnees = array();
public function __construct($options) {
// Gestion de l'url
if (isset($options['url'])) {
if ($options['url'] instanceof Url) {
$this->url = $options['url'];
$this->parametres_url = $this->url->getVariablesRequete();
} else {
$msg = "Fragmenteur nécessite nécessite un objet Url du Framework de Tela Botanica pour fonctionner.";
trigger_error($msg, E_USER_ERROR);
}
} else {
$msg = "Fragmenteur nécessite de renseigner dans le tableau d'options l'url pour la clé 'url'".
trigger_error($msg, E_USER_ERROR);
}
// Gestion de la liste alphabétique
$this->alphabet_affichage = (isset($options['alphabet_affichage']) ? $options['alphabet_affichage'] : self::ALPHABET_AFFICHAGE_DEFAUT);
if ($this->alphabet_affichage == true) {
$lettre = (isset($options['lettre']) ? $options['lettre'] : self::ALPHABET_LETTRE_DEFAUT);
$this->setLettre($lettre);
if (isset($_GET['lettre'])) {
$this->setLettre(urldecode($_GET['lettre']));
}
}
// Gestion des infos pour le pager
$this->squelette = (isset($options['squelette']) ? $options['squelette'] : self::SQUELETTE).'.tpl.html';
$this->chemin_squelette = dirname(__FILE__).DS.'squelettes'.DS.$this->squelette;
$this->pager_mode = (isset($options['pager_mode']) ? $options['pager_mode'] : self::PAGER_MODE);
$this->page_delta = (isset($options['page_delta']) ? $options['page_delta'] : self::PAGE_DELTA);
$this->page_separateur = (isset($options['page_separateur']) ? $options['page_separateur'] : self::PAGE_SEPARATEUR);
$this->url_var = (isset($options['url_var']) ? $options['url_var'] : Config::get('parametre_url_page'));
$this->donnees_par_page = (isset($options['donnees_par_page']) ? $options['donnees_par_page'] : self::DONNEES_PAR_PAGE_DEFAUT);
$this->donnees_par_page_choix = (isset($options['donnees_par_page_choix']) ? $options['donnees_par_page_choix'] : self::DONNEES_PAR_PAGE_CHOIX);
$this->donnees_total = (isset($options['donnees_total']) ? $options['donnees_total'] : 0);
// Gestion du nombre de données à afficher par page.
if (isset($_GET['frag_nbre'])) {
if ($_GET['frag_nbre'] == '*') {
$_GET[$this->url_var] = 1;
}
$_SESSION['fragmenteur']['donnees_par_page'] = $_GET['frag_nbre'];
} else {
$_SESSION['fragmenteur']['donnees_par_page'] = $this->donnees_par_page;
}
$this->donnees_par_page = $_SESSION['fragmenteur']['donnees_par_page'];
if ($this->donnees_par_page == '*') {
$this->donnees_par_page = $this->donnees_total;
}
// Gestion du Fragmenteur (basé sur le Pager de Pear)
$pager_options = array( 'mode' => $this->pager_mode,
'perPage' => $this->donnees_par_page,
'delta' => $this->page_delta,
'totalItems' => $this->donnees_total,
'path' => Config::get('url_base'),
'urlVar' => $this->url_var,
'separator' => $this->page_separateur,
'curPageLinkClassName' => self::CSS_CLASS_PAGE_COURRANTE,
'spacesBeforeSeparator' => self::PAGE_SEPARATEUR_ESPACE,
'spacesAfterSeparator' => self::PAGE_SEPARATEUR_ESPACE,
);
$this->pager = Pager::factory($pager_options);
}
public function getDonneesParPage() {
return $this->donnees_par_page;
}
public function getDeplacementParPageId() {
return $this->pager->getOffsetByPageId();
}
public function getLettre() {
return $this->lettre;
}
public function setLettre($l) {
$this->lettre = $l;
}
public function getDonneesTotal() {
return $this->donnees_total;
}
public function setDonneesTotal($dt) {
$this->donnees_total = $dt;
}
 
private function getSqueletteDonnees() {
return $this->squelette_donnees;
}
private function setSqueletteDonnees($cle, $valeur) {
$this->squelette_donnees[$cle] = $valeur;
}
public function executer() {
// Gestion de la liste alphabétique
if ($this->alphabet_affichage == true) {
$alphabet = array();
$this->url->setVariableRequete('lettre', '*');
$alphabet['*'] = array('url' => $this->url->getURL(),
'lettre' => 'tous');
$this->url->unsetVariableRequete('lettre');
for ($i = 65; $i <= 90; $i++){
$this->url->setVariableRequete('lettre', chr($i));
$alphabet[chr($i)] = array('url' => $this->url->getURL(),
'lettre' => chr($i));
$this->url->unsetVariableRequete('lettre');
}
$this->setSqueletteDonnees('alphabet', $alphabet);
// Gestion de la lettre
$this->setSqueletteDonnees('lettre_selected', $this->getLettre());
// Gestion de l'url
$this->url->setVariableRequete('lettre', $this->getLettre());
}
// Gestion des urls
$this->url->setVariableRequete($this->url_var, $this->pager->getCurrentPageID());
$this->setSqueletteDonnees('url', $this->url->getURL());
// Gestion du fragmenteur
$this->setSqueletteDonnees('frag_donnee_total', $this->donnees_total);
$page_id_x_saut = ($this->pager->getCurrentPageID() * $this->donnees_par_page);
$this->setSqueletteDonnees('frag_donnee_debut', (($page_id_x_saut - $this->donnees_par_page) > 0 ? ($page_id_x_saut - $this->donnees_par_page) : 0));
$this->setSqueletteDonnees('frag_donnee_fin', ($page_id_x_saut >= $this->donnees_total ? $this->donnees_total : $page_id_x_saut));
$this->setSqueletteDonnees('par_page', explode(',', $this->donnees_par_page_choix));
$this->setSqueletteDonnees('par_page_selected', $_SESSION['fragmenteur']['donnees_par_page']);
$this->setSqueletteDonnees('pager_links', $this->pager->getLinks());
// Gestion des paramêtres pour le formulaire du Fragmenteur
$form_get_url_chp_hidden = array();
foreach ($this->parametres_url as $cle => $valeur) {
$form_get_url_chp_hidden[$cle] = $valeur;
}
$this->setSqueletteDonnees('form_get_url_chp_hidden', $form_get_url_chp_hidden);
// Création du rendu à partir du squelette et de ses données
$sortie = SquelettePhp::analyser($this->chemin_squelette, $this->getSqueletteDonnees());
return $sortie;
}
}
?>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/composants/fragmenteur/squelettes/fragmenteur_defaut.css
New file
0,0 → 1,15
.fragmenteur select,.fragmenteur a,.fragmenteur .frag_page_courrante, .fragmenteur .frag_resultats{
color:white;
padding:5px;
margin:0 2px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;}
.fragmenteur select,.fragmenteur a{
background-color:#5D5C5C;
border:1px solid black;}
.fragmenteur a:hover,.fragmenteur .frag_page_courrante, .fragmenteur .frag_resultats{
font-weight:bold;
background-color:#AEDC43;
border:1px solid #86A736;}
.frag_separateur{display:none;}
/branches/v1.13-la-grande-rue/composants/fragmenteur/squelettes/defaut.tpl.html
New file
0,0 → 1,56
<!-- FRAGMENTEUR : début -->
<div class="fragmenteur" style="clear:left;">
<h2>Navigation dans les résultats :</h2>
<?php if (isset($alphabet)) : ?>
<p style="margin:0;" class="aide">Cliquer sur une lettre pour faire apparaitre la liste des taxons correspondante :</p>
<p>
<strong>
<?php foreach ($alphabet as $lettre) : ?>
<?php if ($lettre['lettre'] == $lettre_selected) : ?>
<span class="frag_alpha_lien_selection"><?=$lettre['lettre'];?></span>&nbsp;
<?php else : ?>
<a class="frag_alpha_lien" href="<?=$lettre['url']?>"><?=$lettre['lettre'];?></a>&nbsp;
<?php endif; ?>
<?php endforeach; ?>
</strong>
</p>
<?php endif; ?>
<form id="fragmenteur_quantite" action="<?=$url;?>" method="get">
<p>
<?php if ($pager_links['pages']) : ?>
Pages&nbsp;:
<?php if (!empty($pager_links['first'])) : ?>
<span class="frag_premier frag_boite"><?=trim($pager_links['first']);?></span>
<?php endif; ?>
<?php if (!empty($pager_links['back'])) : ?>
<span class="frag_precedent frag_boite"><?=$pager_links['back'];?></span>
<?php endif; ?>
<?php if (!empty($pager_links['pages'])) : ?>
<span class="frag_pages"><?=$pager_links['pages'];?></span>
<?php endif; ?>
<?php if (!empty($pager_links['next'])) : ?>
<span class="frag_suivant frag_boite"><?=$pager_links['next'];?></span>
<?php endif; ?>
<?php if (!empty($pager_links['last'])) : ?>
<span class="frag_dernier frag_boite"><?=$pager_links['last'];?></span>
<?php endif; ?>
.
<?php endif; ?>
Résultats : <span class="frag_resultats"><?=$frag_donnee_debut;?> à <?=$frag_donnee_fin;?> sur <?=$frag_donnee_total;?></span> avec
<select id="frag_nbre" name="frag_nbre" onchange="javascript:this.form.submit();">
<option value="*" <?= ($par_page_selected == '*') ? 'selected="selected"': '';?>>tous</option>
<?php foreach ($par_page as $nbre) : ?>
<option value="<?=$nbre;?>" <?=$nbre == $par_page_selected? 'selected="selected"': '';?>><?=$nbre;?></option>
<?php endforeach; ?>
</select>
résultats par page.
<?php foreach ($form_get_url_chp_hidden as $cle => $val) : ?>
<input type="hidden" name="<?=$cle;?>" value="<?=$val;?>" />
<?php endforeach; ?>
</p>
</form>
</div>
<!-- FRAGMENTEUR : fin -->
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/CHANGELOG
New file
0,0 → 1,33
Changements 2016-12-29 [création de la branche "v1.13-La-grande-rue"]:
* Intégration à Wordpress pour le nouveau site Web
 
Changements 2016-04-14 [création de la branche "v1.12-Jurançon"]:
* Nettoyage des paramètres de recherche
* Desontologisation de consultation
 
Changements 2015-03-16 [création de la branche "v1.11-Juliénas"]:
* Les publications sources sont séparées par des sauts de ligne dans les meta données
* ajout d'une class permettant d'encapsuler les règles CSS de coel-consultation.
* Intégration du widget de remarques; nouveau paramètre de configuration "url_base_widget_remarques"
* Intégration de Google Analytics
* Réintégration lr et lr-mpu (index + config) - changement de version dans la config
* Ajout de <meta> OpenGraph pour l'intégration à Facebook & co.
* Meta OpenGraph pour Papyrus
* changement de favicons : liens vers resources.tela-botanica.org
* correction URL logo
* suppression du lien vers MoucheVaporisateur
* ajout appel publications
* Nouveau module "RecherchePublications"
* Recherche publis : ajout recherche libre + nom ouvrage
 
Changements 2014-06-19 [création de la branche "v1.10-Jasnieres"]:
* Ajout de meta données des collections : publications sources ainsi que les personnes ayant saisi la fiche
 
Changements 2014-05-12 [création de la branche "v1.9-Irouléguy"]:
* Adaptation à la version 1.4 de coel qui reflète les suppressions de champs intervenues dans coel
 
Changements 2014-02-10 [création de la branche "v1.8-Irany"]:
* Adaptation à la version 1.4 de coel qui a supprimé la notion de projet
 
Changements 2014-01-06 [création de la branche "v1.7-Hermitage"]:
* Nouveau moteur de recherche collections + personnes
/branches/v1.13-la-grande-rue/collection_wordpress.php
New file
0,0 → 1,68
<?php
/**
* Application de consultation des Collections.
* Fichier contenant les fonctions nécessaire pour l'insertion de l'application dans Wordpress.
*
* @category PHP5
* @package Collection
* @author Tela Botanica <equipe-dev@tela-botanica.org>
* @copyright 2010-2016 Tela-Botanica
* @license GPL-v3 et CECILL-v2
*/
 
// Annuler les fausses bonnes idées du JPFramework
restore_exception_handler();
restore_error_handler();
error_reporting(E_ALL);
 
/** Inclusion du fichier principal de l'application */
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'collection.php';
 
// Configuration des URL d'après l'URL actuelle de Wordpress
global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request));
Config::set('url_base', $current_url);
Config::set('url_base_index', $current_url);
 
// Hook d'ajout des scripts
add_action('wp_enqueue_scripts', 'collections_scripts_et_styles');
 
// ajout des scripts - utiliser dans le hook ci-dessus uniquement
function collections_scripts_et_styles() {
// Cette variable est définie dans le thème WP par template-collections.php,
// d'après l'option "applis_externes_chemin_collections"
global $chemin_collections_http;
 
// Scripts
wp_enqueue_script('jquery-cookie', 'https://resources.tela-botanica.org/jquery/cookie/1.0/jquery.cookie.min.js');
wp_enqueue_script('jquery-ui-1.8.custom', 'https://resources.tela-botanica.org/jquery/jquery-ui/1.8.18/js/jquery-ui-1.8.18.custom.min.js');
wp_enqueue_script('jquery-collection', $chemin_collections_http . '/squelettes/js/jquery-collection.js');
 
// Styles
wp_enqueue_style('collection', $chemin_collections_http . '/squelettes/css/collection/collection.css');
wp_enqueue_style('jquery-ui-1.8', 'https://resources.tela-botanica.org/jquery/jquery-ui/1.8.18/css/smoothness/jquery-ui-1.8.18.custom.css');
}
 
// Initialisation de l'appli
collections_initialisation(); // défini dans collection.php
 
// Affichage du contenu de l'application
function collections_get_contenu() {
return AppControleur::getContenuCorps();
}
 
function collections_get_contenu_tete() {
return AppControleur::getContenuTete();
}
 
function collections_get_contenu_pied() {
return AppControleur::getContenuPied();
}
 
function collections_get_contenu_navigation() {
return AppControleur::getContenuNavigation();
}
 
function collections_get_module() {
return AppControleur::getModule();
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/framework.defaut.php
New file
0,0 → 1,6
<?php
// Inclusion du Framework
// Renomer ce fichier en "framework.php"
// Indiquyer ci-dessous le chemin vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/framework/0.2/autoload.inc.php';
?>
/branches/v1.13-la-grande-rue/configurations/config.default.ini
New file
0,0 → 1,103
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Info sur l'application
info.nom = Consultation des Collections
; Abréviation de l'application
info.abr = COLL
; Code numérique de la version de l'application
info.version.code.num = "1.10"
; Code alphabétique de la version de l'application
info.version.code.alpha = "jasnieres"
; Nom de la version de l'application
info.version.nom = "Jasnières"
; Version du Framework nécessaire au fonctionnement de cette application
info.framework.version = "0.4"
;Encodage de l'application
appli_encodage = "UTF-8"
; Nom de domaine pour l'URL de base de l'application : 162.38.234.6
domaine = "www.tela-botanica.org"
; URL de base de l'application, si elle est laissée vide, l'application fonctionnera en Stand-alone
url_base = "http://{ref:domaine}/client/collection/v{ref:info.version.code.num}-{ref:info.version.code.alpha}/"
; URL de base de l'application avec l'indication du fichier de départ
url_base_index = "{ref:url_base}index.php"
; URL de base où se situe le .htacces réalisant la réecriture d'URL pour les permaliens de l'application
url_base_permalien = "{ref:url_base}"
; Mettre à true si l'application nécessite de s'identifier.
identification = false
; URL de base du widget de remarques
url_base_widget_remarques = "http://{ref:domaine}/widget:reseau:remarques"
 
; +------------------------------------------------------------------------------------------------------+
; Paramètrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "collection"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = true
fw_debogage_mode = echo
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Url du Jrest utilisé pour les services web fournissant les données à l'application
url_jrest = "http://www.tela-botanica.org/eflore/coel/jrest/"
; Template d'URL pour les images de l'application
url_img = "{ref:url_base}squelettes/img/%s"
; Nom du fichier de l'image à utiliser pour des liens vers des cartes
img_carte = "carte.png"
; Template d'URL pour le lien vers une carte (Google Map ou OSM)
; OSM : http://www.openstreetmap.org/?lat=%s&lon=%s&zoom=17
; GGM : http://maps.google.fr/?ll=%s,%s
lien_vers_carte = "http://www.openstreetmap.org/?lat=%s&lon=%s&zoom=17"
 
; +------------------------------------------------------------------------------------------------------+
; Pagination
; paramètre d'URL utilisé pour désigner une page ("page" pose problème avec Wordpress, par exemple)
parametre_url_page = "idx_page"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Rechercher
; Nombre de résultats par page par défaut
resultat_par_page_defaut = "50"
; Nombre de résultats par page, choix proposés
resultat_par_page_choix = "20,50,100,200"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Fiche
guid = "urn:lsid:tela-botanica.org:coel:%s"
guid_id_structure = "str"
guid_id_collection = "col"
guid_id_personne = "per"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Carte
; Active (=true) ou désactive (=false) le mode de débogage de la cartographie
carte_mode_debug = false
; Nom du fichier sans l'extension de la carte de base de fond à utiliser
carte_base_nom = "france"
; Chemin vers le dossier des fonds de cartes relatif à l'application
carte_fonds_chemin = "composants{ref:ds}cartographie{ref:ds}squelettes{ref:ds}"
; Chemin vers le dossier où seront stockée les cartes créées
carte_sotckage_chemin = "/home/jpm/web/collection/cartes/"
; Url du dossier où seront stockée les cartes créées avec %s pour indiquer le fichier
carte_sotckage_url = "http://{ref:domaine}/collection/cartes/%s"
; Nom du fichier de carte généré
carte_genere_nom = "col_str_dep"
; Constante stockant la couleur la plus foncé utilisée pour les cartes "proportionnelles".0,127,0
carte_couleur_foncee = "140,168,68"
; Constante stockant la couleur la plus claire utilisée pour les cartes "proportionnelles".210,230,210
carte_couleur_claire = "243,247,224"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Syndication
; Limite du nombre d'entrées pour les flux de la syndication
flux_limite = "50"
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svnkit:entry:sha1-checksum
+f5d9969918c9ef695234c3bf5845b935e085f3de
\ No newline at end of property
/branches/v1.13-la-grande-rue/configurations/config_paca.ini
New file
0,0 → 1,41
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Infos sur l'application
info.nom = Consultation des Collections PACA
info.abr = COLL
; Code numérique de la version de l'application
info.version.code.num = "1.4"
; Code alphabétique de la version de l'application
info.version.code.alpha = "gigondas"
; Nom de la version de l'application
info.version.nom = "Gigondas"
; URL de base de l'application avec l'indicaiton du fichier de départ
url_base_index = "{ref:url_base}paca.php"
 
; +------------------------------------------------------------------------------------------------------+
; Paramètrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "collection-paca"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Nom du fichier de l'image à utiliser pour des liens vers des cartes
img_carte = "carte_paca.png"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Carte
; Active (=true) ou désactive (=false) le mode de débogage de la cartographie
carte_mode_debug = false
; Nom du fichier de carte généré
carte_genere_nom = "col_str_dep_paca"
/branches/v1.13-la-grande-rue/configurations/config_papyrus.default.ini
New file
0,0 → 1,12
; +------------------------------------------------------------------------------------------------------+
; Paramètrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:false"
; Encodage de sortie de l'application dans le contexte de Papyrus
sortie_encodage = "ISO-8859-1"
; URL de base de l'application, si elle est laissée vide, l'application fonctionnera en Stand-alone
url_base = "php:$GLOBALS['_GEN_commun']['url']->getUrl()"
; URL de base de l'application avec l'indicaiton du fichier de départ
url_base_index = "{ref:url_base}"
; URL de base où se situe le .htacces réalisant la réécriture d'URL pour les permaliens de l'application
url_base_permalien = "http://www.tela-botanica.org/"
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/configurations/.htaccess
New file
0,0 → 1,2
# Ce fichier est là pour éviter l'accès au fichier .ini depuis un navigateur.
deny from all
/branches/v1.13-la-grande-rue/configurations/config_lr-mpu.ini
New file
0,0 → 1,43
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Infos sur l'application
info.nom = Consultation des Collections LR - MPU
info.abr = COLL
; Code numérique de la version de l'application
info.version.code.num = "1.10"
; Code alphabétique de la version de l'application
info.version.code.alpha = "jasnieres"
; Nom de la version de l'application
info.version.nom = "Jasnieres"
; URL de base de l'application avec l'indicaiton du fichier de départ
url_base_index = "{ref:url_base}lr-mpu.php"
 
; +------------------------------------------------------------------------------------------------------+
; Paramètrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "collection-lr-mpu"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Nom du fichier de l'image à utiliser pour des liens vers des cartes
img_carte = "carte_lr-mpu.png"
;Liste des identifiants de projets (séparés par des virgules) sur lesquels on veut limiter l'application (laisser vide pour ne pas limiter).
projets = "4"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Carte
; Active (=true) ou désactive (=false) le mode de débogage de la cartographie
carte_mode_debug = false
; Nom du fichier de carte généré
carte_genere_nom = "col_str_dep_lr-mpu"
/branches/v1.13-la-grande-rue/configurations/config_lr.ini
New file
0,0 → 1,43
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Infos sur l'application
info.nom = Consultation des Collections LR
info.abr = COLL
; Code numérique de la version de l'application
info.version.code.num = "1.10"
; Code alphabétique de la version de l'application
info.version.code.alpha = "jasnieres"
; Nom de la version de l'application
info.version.nom = "Jasnieres"
; URL de base de l'application avec l'indicaiton du fichier de départ
url_base_index = "{ref:url_base}lr.php"
 
; +------------------------------------------------------------------------------------------------------+
; Paramètrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "collection-lr"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Nom du fichier de l'image à utiliser pour des liens vers des cartes
img_carte = "carte_lr.png"
;Liste des identifiants de projets (séparés par des virgules) sur lesquels on veut limiter l'application (laisser vide pour ne pas limiter).
projets = "4"
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique au module Carte
; Active (=true) ou désactive (=false) le mode de débogage de la cartographie
carte_mode_debug = false
; Nom du fichier de carte généré
carte_genere_nom = "col_str_dep_lr"
/branches/v1.13-la-grande-rue/configurations
New file
Property changes:
Added: svn:ignore
+config.ini
+config_papyrus.ini
/branches/v1.13-la-grande-rue/paca.php
New file
0,0 → 1,63
<?php
// declare(encoding='UTF-8');
// Nous forçons le parametre "contexte" avec la valeur "paca"
$_GET['contexte'] = 'paca';
/** Inclusion du fichier principal de l'application*/
require_once 'collection.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<title><?php echo AppControleur::getMetaTitre(); ?></title>
<meta name="description" content="<?php echo AppControleur::getMetaDescription();?>" />
<meta name="keywords" content="<?php echo AppControleur::getMetaTags();?>" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
 
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/generale.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/collection.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/humanity/jquery-ui-1.8.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/debogage.css" />
<link rel="stylesheet" type="text/css" media="print" href="https://www.tela-botanica.org/sites/commun/fr/styles/impression.css" />
<script type="text/javascript" src="squelettes/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery.cookie.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-ui-1.8.custom.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-collection.js"></script>
</head>
<body>
<div id="zone-centrale">
<div id="zone-corps">
<div id="zone-navigation">
<?php echo AppControleur::getContenuNavigation(); ?>
</div>
<div id="zone-corps-contenu">
<div id="entete">
<?php echo AppControleur::getContenuTete(); ?>
</div>
<div id="texte">
<?php echo AppControleur::getContenuCorps(); ?>
</div>
<div id="pied_texte">
<?php echo AppControleur::getContenuPied(); ?>
</div>
</div>
<div>
<?php echo AppControleur::getChrono(); ?>
<?php echo AppControleur::getExceptions(); ?>
</div>
<div id="zone-pied">
<p> &copy;<a href="http://www.tela-botanica.org/" accesskey="1">Tela Botanica</a> / 2000-<?=date('Y')?> - Le réseau des Botanistes Francophones</p>
</div>
</div>
</div>
</body>
</html>
/branches/v1.13-la-grande-rue/index.php
New file
0,0 → 1,110
<?php
// declare(encoding='UTF-8');
/** Inclusion du fichier principal de l'application*/
require_once 'collection.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<title><?php echo AppControleur::getMetaTitre(); ?></title>
<meta name="description" content="<?php echo AppControleur::getMetaDescription();?>" />
<meta name="keywords" content="<?php echo AppControleur::getMetaTags();?>" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
 
<!-- OpenGraph pour Facebook, Pinterest, Google+ -->
<meta property="og:type" content="website" />
<meta property="og:title" content="CoEL - consultation des collections" />
<meta property="og:site_name" content="Tela Botanica" />
<meta property="og:description" content="Moteur de recherche sur les collections recensées dans Collections en Ligne" />
<meta property="og:image" content="https://resources.tela-botanica.org/tb/img/256x256/carre_englobant.png" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="256" />
<meta property="og:image:height" content="256" />
<meta property="og:locale" content="fr_FR" />
 
<link rel="shortcut icon" type="image/x-icon" href="https://resources.tela-botanica.org/tb/img/16x16/favicon.ico" />
<link rel="icon" type="image/png" href="https://resources.tela-botanica.org/tb/img/16x16/favicon.png" />
 
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/generale.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/collection.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/humanity/jquery-ui-1.8.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="squelettes/css/collection/debogage.css" />
<link rel="stylesheet" type="text/css" media="print" href="https://www.tela-botanica.org/sites/commun/fr/styles/impression.css" />
<script type="text/javascript" src="squelettes/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery.cookie.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-ui-1.8.custom.min.js"></script>
<script type="text/javascript" src="squelettes/js/jquery-collection.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 
ga('create', 'UA-57885-3', 'auto');
ga('require', 'displayfeatures');
ga('send', 'pageview');
 
</script>
</head>
<body>
<div id="reducteur">
 
<div id="logo_tela">
<a href="/" title="Retour à l'accueil du site">
<img src="https://resources.tela-botanica.org/tb/img/135x102/logo_carre_officiel.png" alt="le logo de Tela Botanica"/>
</a>
</div>
<div id="bandeau">
<div id="bandeau_contenu">
<div id="titre_monde">
<h1>Collections</h1>
</div>
</div>
</div>
<div id="droite">
<div id="onglets">
<?php echo AppControleur::getContenuNavigation(); ?>
</div>
<div id="contenu">
<div id="entete">
<?php echo AppControleur::getContenuTete(); ?>
</div>
<div id="texte">
<?php echo AppControleur::getContenuCorps(); ?>
</div>
<div id="pied_texte">
<?php echo AppControleur::getContenuPied(); ?>
</div>
</div>
<div>
<?php echo AppControleur::getChrono(); ?>
<?php echo AppControleur::getExceptions(); ?>
</div>
<div id="pied">
<p> &copy;<a href="http://www.tela-botanica.org/" accesskey="1">Tela Botanica</a> / 2000-<?=date('Y')?> - Le réseau des Botanistes Francophones</p>
</div>
</div>
<div id="nav_gauche">
<ul>
<li><a href="<?=basename(__FILE__)?>?module=Recherche">Recherche</a></li>
<li><a href="<?=basename(__FILE__)?>?module=Carte">Carte</a></li>
<li><a href="<?=basename(__FILE__)?>?module=Syndication">Syndication</a></li>
</ul>
</div>
</div>
</body>
</html>
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/carte.tpl.html
New file
0,0 → 1,6
<!-- COL - DEBUT CARTE -->
<div id="col-cartographie" class="coel-consultation">
<h1>Carte des structures hébergeant des collections</h1>
<p><iframe frameborder="0" style="width: 850px; height: 450px;" src="http://www.tela-botanica.org/widget:coel:carto"></iframe></p>
</div>
<!-- COL - FIN CARTE -->
Property changes:
Added: svnkit:entry:sha1-checksum
+850926279f7e7a2289a725964fb7dd5917408fa8
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/fiche_structure.tpl.html
New file
0,0 → 1,195
<!-- COL - DEBUT FICHE STRUCTURE -->
<script type="text/javascript">
var jq = jQuery.noConflict();
jq(document).ready(function() {
jq('#col-str').tabs({
cookie: {expires: 1}// Stocke un cookie pour 1 jour
});
});
</script>
<div class="coel-consultation">
<h1><?=$info['cs_nom']?> <span class="discretion">(id:<?=$id?>)</span></h1>
 
<div id="col-str" class="col-onglets">
<ul class="col-sommaire">
<li><a href="#col-str-general">Général</a></li>
<li><a href="#col-str-personnel">Personnel</a></li>
<li><a href="#col-str-conservation">Conservation</a></li>
<li><a href="#col-str-valorisation">Valorisation</a></li>
<li><a href="#col-str-collection">Collection</a></li>
<li><a href="#col-str-meta">Méta-données</a></li>
</ul>
 
<div id="col-str-general">
<h2 id="col-str-titre-general">Général</h2>
<h3>Renseignements administratifs</h3>
<dl>
<dt>Acronyme</dt> <dd><?=$info['_acronyme_']?></dd>
<dt>Statut</dt> <dd><?=$info['_type_prive_']?><?=$info['_type_public_']?></dd>
<dt>Date de fondation</dt> <dd><?=$info['_date_fondation_']?></dd>
<dt>Personnel de l'institution</dt> <dd><?=$info['_nbre_personne_']?></dd>
</dl>
 
<h3>Adresse</h3>
<dl>
<dt>Adresse</dt> <dd><?=$info['cs_adresse_01']?></dd>
<dt>Code postal</dt> <dd><?=$info['cs_code_postal']?></dd>
<dt>Ville</dt> <dd><?=$info['cs_ville']?></dd>
<dt>Pays</dt> <dd><?=$info['_pays_']?></dd>
<dt>Latitude/Longitude</dt>
<dd>
<?php if ($info['_latitude_longitude_'] == '&nbsp;') : ?>
<?=$info['_latitude_longitude_']?>
<?php else : ?>
<a class="lien_ext" href="<?=$info['_lien_carte_']?>"><?=$info['_latitude_longitude_']?> <img style="display:inline;" src="<?=$info['_url_img_carte_']?>" alt="Voir sur une carte" /></a>
<?php endif; ?>
</dd>
</dl>
 
<h3>Description</h3>
<dl class="label-court">
<dt>Description</dt> <dd><?=$info['cs_description']?></dd>
<dt>Condition d'accès</dt> <dd><?=$info['cs_condition_acces']?></dd>
<dt>Condition d'usage</dt> <dd><?=$info['cs_condition_usage']?></dd>
</dl>
 
<h3>Communication</h3>
<dl class="label-court">
<dt>Téléphone/Fax</dt> <dd><?=$info['_telephone_fax_']?></dd>
<dt>Courriel</dt> <dd><?=$info['_courriel_']?></dd>
<dt>Site web</dt> <dd><?=$info['_web_']?></dd>
</dl>
<hr class="nettoyeur"/>
</div>
 
<div id="col-str-personnel">
<h2 id="col-str-titre-personnel">Personnel</h2>
<?php if (count($personnel) > 0) : ?>
<dl class="label-moyen">
<dt>Personnel des collections</dt> <dd><?=count($personnel)?></dd>
</dl>
<hr class="nettoyeur"/>
<h3>Membres du personnel</h3>
<?=$personnelFrag;?>
<table>
<thead>
<tr>
<th>Fonction</th>
<th>Nom Complet</th>
<th>Prénom</th>
<th>Nom</th>
<th>Tél. Fixe / Fax</th>
<th>Courriel principal</th>
<th>Statut</th>
<th>Temps de travail</th>
<th>Spécialité principale</th>
<th>Contact ?</th>
</tr>
</thead>
<tbody>
<?php foreach ($personnel as $personne) : ?>
<tr>
<td><?=$personne['_fonction_']?></td>
<td><a href="<?=$personne['_url_']?>" title="Accèder à la fiche de la personne"><?=$personne['cp_fmt_nom_complet']?></a></td>
<td><?=$personne['cp_prenom']?></td>
<td><?=$personne['cp_nom']?></td>
<td><?=$personne['_tel_fax_']?></td>
<td><?=$personne['_courriel_']?></td>
<td><?=$personne['_statut_']?></td>
<td><?=$personne['csap_bota_travail_hebdo_tps']?></td>
<td><?=$personne['_specialite_']?></td>
<td><?=$personne['_contact_']?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
 
<div id="col-str-conservation">
<h2 id="col-str-titre-conservation">Conservation</h2>
<h3>Formation du personnel à la conservation</h3>
<dl>
<dt>Formation en conservation</dt> <dd><?=$info['_formation_']?> <?=$info['_formation_info_']?></dd>
<dt>Intérêt pour une formation</dt> <dd><?=$info['_formation_interet_']?></dd>
</dl>
 
<h3>Opérations &amp; matériels</h3>
<dl class="label-grand">
<dt>Opérations actuelles de restauration</dt> <dd><?=$info['_restauration_']?> <?=$info['_restauration_operation_']?></dd>
<dt>Utilisation de matériel de conservation</dt> <dd><?=$info['_materiel_conservation_']?> <?=$info['_materiel_autre_']?></dd>
<dt>Traitements globaux</dt> <dd><?=$info['_traitement_']?> <?=$info['_traitement_liste_']?></dd>
</dl>
 
<h3>Local</h3>
<dl class="label-grand">
<dt>Locaux spécifiques aux collections</dt> <dd><?=$info['_stockage_local_']?></dd>
<dt>Meubles spécifiques aux collections</dt> <dd><?=$info['_stockage_meuble_']?></dd>
<dt>Paramêtres maîtrisés</dt> <dd><?=$info['_stockage_parametre_']?></dd>
<dt>Conservation des collections en commun</dt> <dd><?=$info['_collection_commune_']?> <?=$info['_collection_commune_autre_']?></dd>
<dt>Accès contrôlé</dt> <dd><?=$info['_acces_controle_']?></dd>
</dl>
 
<h3>Acquisitions</h3>
<dl class="label-grand">
<dt>Acquisition de nouvelles collections</dt> <dd><?=$info['_acquisition_collection_']?></dd>
<dt>Mise en herbier de nouveaux échantillons</dt> <dd><?=$info['_acquisition_echantillon_']?></dd>
<?php if ($info['csc_mark_acquisition_echantillon'] == '1') : ?>
<dt>Traitement avant intégration</dt> <dd><?=$info['_acquisition_traitement_']?></dd>
<?php if ($info['csc_mark_acquisition_traitement'] == '1') : ?>
<dt>Désinsectisation</dt> <dd><?=$info['_acquisition_traitement_insecte_']?></dd>
<dt>Empoisonnement</dt> <dd><?=$info['_acquisition_traitement_poison_']?></dd>
<?php endif; ?>
<?php endif; ?>
</dl>
<hr class="nettoyeur"/>
</div>
 
<div id="col-str-valorisation">
<h2 id="col-str-titre-valorisation">Valorisation</h2>
<h3>Actions de valorisation</h3>
<dl class="label-grand">
<dt>Réalisation d'actions de valorisation</dt> <dd><?=$info['_action_']?> <?=$info['_action_info_']?></dd>
<dt>Publications</dt> <dd><?=$info['csv_publication']?></dd>
<dt>Autres collections</dt> <dd><?=$info['_collection_autre_']?></dd>
<dt>Futures actions de valorisation</dt> <dd><?=$info['_action_future_']?> <?=$info['_action_future_info_']?></dd>
</dl>
 
<h3>Accès &amp; Usages</h3>
<dl class="label-grand">
<dt>Condition de visite pour les chercheurs</dt> <dd><?=$info['_visite_avec_motif_']?> <?=$info['_visite_avec_motif_info_']?></dd>
<dt>Condition d'accès du grand public</dt> <dd><?=$info['_acces_ss_motif_']?> <?=$info['_acces_ss_motif_info_']?></dd>
</dl>
 
<h3>Recherches scientifiques</h3>
<dl>
<dt>Utilisation pour la recherche</dt> <dd><?=$info['_recherche_']?></dd>
<?php if ($info['csv_mark_recherche'] == '1') : ?>
<dt>Provenance des chercheurs</dt> <dd><?=$info['_recherche_provenance_']?></dd>
<dt>Type de recherche</dt> <dd><?=$info['_recherche_type_']?></dd>
<?php endif; ?>
</dl>
<hr class="nettoyeur"/>
</div>
 
<div id="col-str-collection">
<h2 id="col-str-titre-collection">Collections</h2>
<h3>Collections liées à cette institution</h3>
<?php if (count($collections) > 0) : ?>
<?=$collectionsFrag;?>
<ul>
<?php foreach ($collections as $collection) : ?>
<li><a href="<?=$collection['_url_']?>" title="Accèder à la fiche de la collection"><?=$collection['cc_nom']?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
 
<div id="col-str-meta">
<?=$metadonnees?>
</div>
</div>
 
<hr />
</div>
<!-- COL - FIN FICHE STRUCTURE -->
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svnkit:entry:sha1-checksum
+f9d7a5cc676c0e593fe71cc7c19236cfb511e67e
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/pied.tpl.html
New file
0,0 → 1,21
<!-- COL - DEBUT PIED DE PAGE -->
<div class="coel-consultation">
<p>
Pour plus d'informations ou nous faire part d'une erreur, merci de
<a href="<?=$url_base_widget_remarques; ?>?service=coel&pageSource=<?php echo urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']); ?>"
target="_blank"
onclick="javascript:window.open(this.getAttribute('href'), 'Tela Botanica - Remarques', config='height=700, width=640, scrollbars=yes, resizable=yes'); return false;">
cliquer ici
</a>
</p>
</div>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-57885-3', 'auto');
ga('send', 'pageview');
</script>
<!-- COL - FIN PIED DE PAGE -->
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svnkit:entry:sha1-checksum
+0ea2692a68aa67db509738a988a8cc2e8a47bfd7
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/metadonnees.tpl.html
New file
0,0 → 1,16
<h2>Méta-données</h2>
<dl class="label-moyen">
<dt>GUID (Permalien)</dt> <dd><a href="<?=$_guid_url_?>"><?=$_guid_?></a></dd>
<dt>Notes</dt> <dd><?=$_notes_?></dd>
<dt>Sources</dt> <dd><?=$_source_?>&nbsp;</dd>
<?php if($_expert_ != null) { ?>
<dt>Collection expertisée par </dt> <dd><?=$_expert_; ?>&nbsp;</dd>
<?php } ?>
<?php if($_contributeur_ != null) { ?>
<dt>Fiche saisie par </dt> <dd><?=$_contributeur_; ?>&nbsp;</dd>
<?php } ?>
<dt>Modifié par</dt> <dd><?=$_modifier_par_?> (<?=$_modifier_par_courriel_?>)</dd>
<dt>Date de dernière modification</dt> <dd><?=$_date_modification_?> </dd>
<dt>État de l'enregistrement</dt> <dd><?=$_etat_?> </dd>
</dl>
<hr class="nettoyeur"/>
/branches/v1.13-la-grande-rue/squelettes/resultat.tpl.html
New file
0,0 → 1,52
<!-- COL - DEBUT RESULTAT -->
<div id="col_resultat" class="coel-consultation">
<?=$fragmenteur;?>
<?php if (isset($infos)) : ?>
<ul>
<!-- recherche de collections -->
<?php if ($masque['cible'] == 'collections'): ?>
<?php foreach ($infos as $info) : ?>
<li><?=$info['structure']['ville']?> - <a href="<?=$info['structure']['url']?>"><?=$info['structure']['nom']?></a>
<?php if (isset($info['collections'])) : ?>
<ul>
<?php foreach ($info['collections'] as $collection) : ?>
<li><a href="<?=$collection['url']?>"><?=$collection['nom']?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
<!-- recherche de personnes -->
<?php elseif ($masque['cible'] == 'personnes'): ?>
<?php foreach ($infos['personnes'] as $personne) : ?>
<li>
<a href="<?=$personne['url']?>">
<?php if($personne['nomcomplet']): ?>
<?=$personne['nomcomplet']?>
<?php else: ?>
<?=$personne['prenom']?> <?=$personne['nom']?>
<?php endif; ?>
</a>
<?php if($personne['surnom']): ?>
(<?=$personne['surnom']?>)
<?php endif; ?>
</li>
<?php endforeach; ?>
<!-- recherche de publications -->
<?php elseif ($masque['cible'] == 'publications'): ?>
<?php foreach ($infos['publications'] as $publication) : ?>
<li>
<!-- <a href="<?=$publication['url']?>"> -->
<?php if($publication['nomcomplet']): ?>
<?=$publication['nomcomplet']?>
<?php else: ?>
<?=$publication['auteur']?> - <?=$publication['date']?> - <?=$publication['titre']?> - <?=$publication['editeur']?> - <?=$publication['nb_pages']?>
<?php endif; ?>
<!-- </a> -->
</li>
<?php endforeach; ?>
<?php endif; ?>
</ul>
<?php endif; ?>
</div>
<!-- COL - FIN RESULTAT -->
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svnkit:entry:sha1-checksum
+96a08bb7ad231013aae91359cfeb8675bb236456
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/courriel.tpl.html
New file
0,0 → 1,0
<span class="courriel" title="Envoyer un courriel"><?=$courriel?></span>
/branches/v1.13-la-grande-rue/squelettes/syndication.tpl.html
New file
0,0 → 1,20
<!-- COL - DEBUT SYNDICATION -->
<div id="col-syndication" class="coel-consultation">
<h1>Liste des flux RSS de l'application Collection En Ligne (COEL)</h1>
<p>Veuillez sélectionner un des flux RSS ci-dessous pour obtenir la liste des dernières modifications correspondantes.</p>
<ul>
<?php foreach ($syndications as $flux) : ?>
<li><h2><?=$flux['titre']?></h2>
<p><?=$flux['description']?></p>
<ul>
<?php foreach ($flux['urls'] as $format => $url) : ?>
<li class="icone icone-<?=$format?>"><a href="<?=$url?>?limit=<?=$limite?>" class="lien_ext"><?=$format?></a></li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
<p>Vous pouvez limiter le nombre de résultat des flux en ajoutant le paramêtre "limit" suivit du nombre de résultats
attendus. Exemple : </p>
</div>
<!-- COL - FIN SYNDICATION -->
Property changes:
Added: svnkit:entry:sha1-checksum
+475e3d961df9d2338e5e58c26e78d082f11b9c79
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/generale.css
New file
0,0 → 1,703
/*+------------------------------------------------------------------------------------------------------------------+
COMMUN SIMPLE
+------------------------------------------------------------------------------------------------------------------+*/
/*Feuille de style support? par Nescape 4.78
Auteur: Magali Giaume*/
body {
font-family:Arial, Helvetica, Verdana, sans-serif;
font-size:12px;
background-color:#fff;
margin:2px;}
h1 {
font-size:17px;
font-weight:bold;
padding:0 0 2px 5px;
line-height:1.3em;
margin:10px 0 4px 0;}
h2 {
font-size:13px;
font-weight:bold;
color:black;
text-transform:uppercase;
line-height:1.3em;
margin:10px 0 4px 0;}
h3, #more_resultat li h2, .titre2_cartographie, .titre2_inscription, .inscription_titre2, .titre2_cartographie {
font-size:15px;
color:black;
font-weight:bold;
line-height:1.3em;
margin:8px 0 4px 0;
text-transform:none;}
h4 {
font-size:13px;
color:black;
font-weight:bold;
letter-spacing:0.1em;
line-height:1.3em;
margin:8px 0 2px 0;}
h5 {
font-size:13px;
color:black;
font-style:italic;
line-height:1.2em;
margin:4px 0 1px 0;}
h6 {
font-size:12px;
color:black;
font-style:italic;
line-height:1.2em;
margin:4px 0 1px 0;}
caption {
font-size:12px;
font-weight:bold;
margin:2px;}
table {
border-collapse:collapse;}
/*bandeau*/
#titre_monde h1 {
font-size:20px}
#pos_recherche p {
margin:0;
padding:0;}
/*tableau*/
/* Tableau */
.table_bordure th {
background-color:#E4B842;
padding:0 5px;
text-align:center;
border-bottom: 1px dotted grey;
border-left: 1px dotted grey;}
 
.table_bordure {
border-spacing:0;
text-align:center;
border: 1px solid black;}
 
.table_bordure td {
padding:2px;
text-align:left;
border-bottom: 1px dotted grey;
border-left: 1px dotted grey;}
/*Nom latin*/
.nom_latin{font-style:italic;}
.nom_latin_rang, .nom_latin_auteur{font-style:normal;}
 
/*+------------------------------------------------------------------------------------------------------------------+
COMMUN COMPLEXE
+------------------------------------------------------------------------------------------------------------------+*/
 
/*icones*/
a.lien_ext:after {
content: " "url(images/fleche_externe.png);}
a.pdf:before {
content: url(images/fichier_pdf.png)" ";}
/*CSS3 : ajout d'un espace entre href et ^ pour konqueror*/
a.mail:after, a[href ^="mailto:"]:after {
content: " "url(images/mail.png);}
.table_bordure th[title]:after {
content: " "url(images/aide.png);}
/*abbr {
background :url(/client/eflore_chorologie/presentations/images/info.png) no-repeat 100% 5%;
padding-right:16px;
cursor:help;
border:none;}*/
 
/* presentation des liens */
a {
color:black;
text-decoration:none;
border-bottom:1px dotted #95ae5d;}
a:hover {
color:#FD8C13;
border-bottom:1px dotted #FD8C13;
 
/* Texte trouvé par le moteur de recherche */
.surlignage {
background-color:yellow;}
 
/* presentation des listes de definitions */
dl {width:100%;}
dt {
float:left;
font-weight: bold;
text-align:top left;
margin-right:0.3em;}
dd {
width:auto;
margin-left:0;
margin:0.5em 0;}
.ajout_2point dt:after {content:" : ";}
 
/* presentation des listes */
#texte li {
margin:4px;}
.liste_decale li, .liste_decale dt {
margin-left:2em;}
ul ul {
margin-left:2em;}
#zone_menu ul, #menus ul{
line-height:1.5em;}
 
/* presentation des images */
img{
border:0;}
img a{
display:block;}
#logo_tela img {
border:0;}
#logo_tela a {
position:absolute;
top:0;
left:0;}
#logo_tela a:hover {
border:1px dotted;}
#logo_tela a:hover:after {
content: " Retour à l'accueil ";}
.img_gch_txt_drte img, .flottant_gauche {
float:left;
margin:5px 10px 5px 5px;}
.img_gch_txt_drte li {
margin-left:40px;}
.img_drte_txt_gch img, .flottant_droit {
float:right;
margin-left:10px;}
.img_drte_txt_gch > img {
float:right;
margin-left:10px;}
.img_milieu {
display:inline;
margin:0 10px;}
.image_legendee {
width: 300px;
font-style:italic;
margin: 5px}
.image_legendee img {
margin: 0 auto}
.legende {
display:block;
font-weight:bold;
text-align:center;}
.clear {
clear:both;}
/* presentation fichiers audio */
.fichier_audio {
border: 1px solid #99a;}
.legende_audio {
margin-top:-0.8em;
margin-left:10px;
float:left;}
.fichier_audio img {
float:left;
padding-right:25px}
.fichier_audio p {
padding-right:25px;}
.legende_audio span {
padding:0 10px;
background-color:#fff;}
 
/* autres classes de presentation*/
.texte_inactif {
font-size:10px;
color:gray;}
.erreur {
color:#F00;}
.en_evidence {
font-size:16px;
font-weight:bold;}
.attention {
display:block;
background: #ffffcc url(https://www.tela-botanica.org/sites/commun/generique/images/graphisme/attention.png) no-repeat 2% 50%;
text-align:center;
border: 1px solid red;
min-height: 30px;
max-width: 800px;
padding:10px 5px 5px 50px;}
.information {
background: #e7ebfd url(https://www.tela-botanica.org/sites/commun/generique/images/graphisme/information.png) no-repeat 2% 50%;
text-align:center;
border:1px solid #5D81BA;
max-width: 800px;
min-height:30px;
padding:10px 5px 5px 50px;}
#bb_liste_fascicule li{
clear:both;
height:100%;}
.bb_img_fascicule {
display:block;}
blockquote {
font-style:italic;
text-align:center;}
legend {
text-align:center;}
.fin_texte{
width:0;
height:0;
text-align: center;
clear: both;}
 
/*DIFFERENTS BLOCS DE LA PAGE*/
#reducteur {
text-align:center;}
/*bandeau*/
#bandeau, #zone_bandeau {
height:77px;
margin:0 0 0 190px;}
#titre_monde, #site_nom {
margin:0;
text-align:right;
height:38px;}
#titre_monde h1, #site_nom h1 {
background-color:transparent;
font-weight: bold;
font-size: 28px;
margin:0 20px 0 0;
padding:0;}
#plan_contact {
margin:0 5px 0 0;
text-align:right;
height:25px;
padding:7px 15px 0 0;}
#plan_contact a {
font-weight:bold;
margin-left:10px;
background-repeat: repeat-x;
background-position:center bottom;}
#plan_contact a:hover {
font-weight:bold;
margin-left:10px;
background-repeat: repeat-x;
background-position:center bottom;}
 
/*droite*/
#droite {
margin:0 5px 0 207px;
position:relative;
/* text-align est nécessaire pour IE */
text-align:left;
}
 
/* droite -> pos_recherche */
#pos_recherche, #moteur_recherche {
font-size:13px;
font-weight:bold;
min-height:30px;
padding:5px 0 5px 20px;
text-align:left;}
#form_more_recherche, #form_recherche {
text-align:right;
padding:0;
margin:0;}
#form_more_recherche legend {
display:none;}
#form_more_recherche fieldset {
float:right;
border:0;
margin:0;
padding:0;}
#form_more_recherche label {
display:none;}
#more_resultat, #more_resultat li {
clear:left;
display: inline;
margin: 0;
padding: 0;
list-style-type:none;}
.more_iid, .more_dui {
display:none;}
.more_ivd {
width:600px;}
.more_duv a {
color:#008000;}
.more_dsv, .more_dsi {
color:#C1C1C1;}
.more_detail, .more_detail li {
display: inline;
margin: 0;
padding: 0;
list-style-type:none;}
 
/*droite -> onglets */
#onglets {
position:relative;
float:left;
text-align:left;
z-index:2;
font-weight:bold;}
#onglets ul {
margin:0;
padding:0;
list-style:none;}
#onglets li {
background:url(https://www.tela-botanica.org/sites/commun/generique/images/graphisme/norm_right_both.gif) no-repeat right top;
float:left;
margin:0;
padding:0;}
#onglets a {
float:left; /* ligne ajoutee pour compatibilite IE5-Mac */
display:block;
background:url("https://www.tela-botanica.org/sites/commun/generique/images/graphisme/norm_left_both.gif") no-repeat left top;
width:.1em;
white-space:nowrap;/*2 lignes ajoutees pour compatibilite IE : extension de la zone cliquable a l'ensemble de l'onglet*/
padding:5px 15px 4px;
text-decoration:none;}
/* On retablit le float a sa valeur correct mais le hack de l'antislash commente cache cette regle a IE5-Mac \*/
#header a {float:none;}
/* End IE5-Mac hack */
#onglets > ul a {
width:auto;} /*propriete ajoutee pour contredire la ligne speciale IE (ci dessus) pour les autres navigateurs*/
#onglets li:hover {
background-position:100% -150px;}
#onglets li:hover a {
background-position:0% -150px;}
#onglets .menu_inactif {
border-bottom:1px solid;}
#onglets .menu_actif, #onglets .onglet_actif {
position:relative;
background-position:100% -150px;
padding-bottom:2px;
z-index:3;
font-weight:bold;}
#onglets .menu_actif a, #onglets .onglet_actif a {
position:relative;
background-position:0% -150px;
padding-bottom:3px;
z-index:4;}
 
/* droite -> contenu */
#contenu, #zone_contenu, #contenu_accueil {
position:relative;
top:-1px;
/* Modif David Delon 26/08/2005 car conflit avec Fckeditor (menu deroulant)
/* z-index:1;*/
clear:both;
padding:0 2px 0 2px;
text-align:justify;
min-height:300px;}
#texte{
line-height:1.2em;
text-align:justify;
clear:both;
padding:0 5px 7px 5px;}
#texte .image_lien {
background-image:none;}
/* Hides from IE-mac \*/
* html #texte {height: 1%;}
/* Bug qui inactive les liens sous IE */
 
 
/* Droite -> pied_page */
#pied_text, #pied_page, #zone_pied {
clear:both;
text-align:center;
font-size:11px;}
#pied_page p, #zone_pied p{
position:center;}
#pied_page a {
margin:0 10px;}
.menu_commun_n1 {
padding:0;}
.menu_commun_n1 li {
display:inline;}
.menu_commun_n1 li+li {
display:inline;
padding-left:10px;}
 
/* Tableau */
.table_cadre {
border-spacing:0;
text-align:center;}
.table_cadre th {
text-align:center;}
.table_cadre td {
padding:2px;
text-align:left;}
 
/*nav_gauche*/
#navigation, #nav_gauche {
position:absolute;
top:2px;
left:2px;
width:188px;
padding-top:150px;
min-height:292px;}
 
/* nav_gauche -> logo_tela */
#logo_tela, #logo {
margin:7px 10px;
position:absolute;
top:2px;
left:18px;
z-index:1;}
#logo_tela a, #logo a {
background:none;}
#acces_direct, #accessibilite {
display:none;}
 
/* nav_gauche -> selecteur_sites */
#sesi_site {
text-align:center;
font-size:12px;
font-weight:bold;
width:180px;
height:20px;}
#sesi_selecteur fieldset, #selecteur_monde fieldset{
border:0;
margin:0;
padding:0;}
#sesi_selecteur legend, #selecteur_monde legend{
display: none;}
#sesi_selecteur option {
font-size:11px;}
#lien_inscription{
margin:2em 0 0 0;
font-size:11px;}
 
/* nav_gauche -> menus */
#zone_menu, #menus {
font-size:13px;
margin:10px 0;
text-align:left;}
#zone_menu a, #menus a {
background:none;
color:#000;
display:block;
height:1.2em;}
#zone_menu .menu_actif>a, #menus .menu_actif>a {
border:1px solid;}
#zone_menu > ul a, #menus > ul a {
height:auto;}
#navigation hr, #nav_gauche hr {
width:40%;
text-align:center;}
 
/* nav_gauche -> form connexion et deconnexion */
#form_connexion legend, #identification legend {
font-size:14px;
font-weight:bold;
padding-left:32px;}
#form_connexion label, #identification label {
display:none;}
label#persistant_label {
display:block;
margin:0.5em 0 1em 1em;
color:black;}
#form_connexion fieldset, #identification fieldset{
border:none;}
#username, #password {
width:10em;
text-align:left;
margin:0.5em 1em;}
#persistant {
text-align:left;
float:left;
margin:0.5em 0.5em 1em 1em;}
#identification_info, #identification, #formconnexion, #iden_action {
display:block;
width:auto;
text-align:center;
font-size:11px;
margin: 0;
padding-bottom:2px;}
#menu_contextuel {
border:1px solid;}
#deconnexion, #lien_inscription_modif, #lien_inscription {
font-size:12px;}
#inscription_info {
text-align:center;}
#inscription_aide {
margin-left:1em;}
#identification_message, #menu_contextuel h2, #hba_info h1, #hba_info p {
display:block;
font-size:14px;
text-align:center;
font-weight:bold;
text-transform:none;
margin:0 0 5px 0;}
#identification_prenom, #identification_nom{
font-size:13px;
font-weight:bold;
color:black;}
#identification_nom {
text-transform:uppercase;}
#iden_action a {
line-height:15px;}
 
/* presentation des menus */
.menu_classique_n1, .menu_n1 {
padding:0;
margin:0;
font-weight:bold;
list-style-type:none;}
.menu_classique_n1 a {
padding:3px 0;}
.menu_classique_n2, .menu_n2 {
padding:0;
margin:0;
font-weight:normal;
list-style-type:none;}
.menu_classique_n2 a {
padding:3px 0 3px 15px;}
.menu_n3 {
margin:0 0 0 10px;
padding:0;
text-align:left;}
.menu_inactif a, .menu_actif a {
color:#000;
text-decoration:none;
background-color:transparent;}
 
/*presentation des syntheses*/
.page_separateur_date_heure, .page_creation_jour, .page_creation_heure, .page_creation_minute, .page_creation_seconde, .page_separateur_heure, .page_separateur_minute, .page_modification_heure, .page_modification_minute{
display:none;}
.page_titre {
font-weight:bold;}
 
/* Texte champ d'une fiche */
.champ_cle {
font-weight:bold;}
.champ_valeur {
font-weight:normal;}p_cle {
font-weight:bold;}
.champ_valeur {
font-weight:normal;}
.bp_titre {
font-weight:bold;}
.bp_titre_revue, .nom_latin {
font-weight:normal;}
.bp_annee, .bp_num_revue {
font-weight:normal;}
/*menu_commun*/
.question {
font-weight:bold;}
 
/*Gestion de l'affichage du chronomètre des applications.*/
#chrono{display:none;}
 
/* Gestion de l'affichage du bandeau */
#bandeau_annonce {
height:28px;
margin:0 0 0 0px;
padding-right:20px;
text-align:right;
}
 
#bandeau_annonce a {
 
font-size: 15px;
padding: 3px;
font-weight:bold;
vertical-align:middle;
}
 
#bandeau_annonce a:hover {
background-image:url(https://www.tela-botanica.org/sites/commun/generique/images/graphisme/img_underline_hover_plan_site_black.png);
background-position:center bottom;
background-repeat:repeat-x;
}
 
/*+------------------------------------------------------------------------------------------------------------------+
SITE - PARLONS BOTA
+------------------------------------------------------------------------------------------------------------------+*/
/*Feuille de style du monde debuter en botanique
Auteur : Magali Giaume, Tamara Le Bourg*/
h1 {
color:#36560B;
background-color:#CFDB86;}
h2, #identification_message, #form_connexion legend, #identification legend, #identification_info, #iden_action {
color:#36560B;}
hr {
color: #d1dc8d;}
table {
border:1px solid #36560B;
border-collapse: collapse;}
td, th {
border:1px solid #36560B;
padding:5px;}
img {
display:block;}
a img {
border:1px dotted #36560B;}
 
/*DIFFERENTS BLOCS DE LA PAGE*/
 
/*bandeau*/
#bandeau {
background: url(https://www.tela-botanica.org/sites/parlons_bota/generique/images/graphisme/bandeau_parlons_bota_fond.png) repeat-x;}
#bandeau_contenu {
background:transparent url(https://www.tela-botanica.org/sites/parlons_bota/generique/images/graphisme/bandeau_parlons_bota.jpg) no-repeat;
height:77px;}
#titre_monde h1 {
color:#F3F6E2;}
#plan_contact a {
color:#000;
background-image: url(https://www.tela-botanica.org/sites/commun/generique/images/graphisme/img_underline_plan_site_black.png);}
#plan_contact a:hover {
background-image: url(https://www.tela-botanica.org/sites/commun/generique/images/graphisme/img_underline_hover_plan_site_black.png);}
 
/*droite -> onglets */
#onglets li {
background:url("https://www.tela-botanica.org/sites/parlons_bota/generique/images/graphisme/onglet_D_bota.gif") no-repeat right top;}
#onglets a {
background:url("https://www.tela-botanica.org/sites/parlons_bota/generique/images/graphisme/onglet_G_bota.gif") no-repeat left top;}
#onglets li:hover {
color:#becf5c;}
#onglets li:hover a {
color:#36560B;}
#onglets .menu_inactif {
border-bottom:#BECF5C;}
#onglets .menu_actif a {
color:#36560B;}
 
/* droite -> contenu */
#contenu {
border:1px solid #becf5c;}
#wikini_page ul{
line-height:1em;}
.commentsheader {
display:none;}
 
/* droite -> pied_page */
.eflore_pied_page {
color:grey;
text-align:center;
font-size:10px;}
 
/*nav_gauche*/
#nav_gauche {
background: #fff url(https://www.tela-botanica.org/sites/parlons_bota/generique/images/graphisme/degrade_vertpomme.png) repeat-x;}
 
/* nav_gauche -> menus */
#menus .menu_actif>a {
background-color:#CFDB86;
border-color: rgb(221, 230, 170);}
#menus a:hover {
background-color:#CFDB86;}
.form_identification input, .form_identification textarea, .form_identification select {
background-color:#f4f6e4;}
#menu_contextuel {
color:#BECF5C;}
/* presentation des menus */
.menu_classique_n2 .menu_actif {
background-color:red;}
.menu_actif a {
color:#36560B;}
 
/*Styles pour presentation des syntheses et articles en ligne*/
.nom_latin {
font-style:italic;}
.auteur_msg {
color:#990000;
font-weight:bold;}
.txt_souligne {
text-decoration:underline;}
/*styles pour ne pas afficher les noms d'auteur et date */
#sans_auteur .page_auteur, #sans_auteur .page_separateur_auteur, #sans_auteur .page_separateur_titre, #sans_auteur .page_creation_mois, #sans_auteur .page_creation_annee {
display:none;}
/*************************
Apercu de bota - Glossaire
*************************/
 
#glossaire dd {
padding-right:10px;}
/branches/v1.13-la-grande-rue/squelettes/css/collection/collection.css
New file
0,0 → 1,188
@charset "UTF-8";
/*--------------------------------------------------------------------------------------------------------------*/
/* Général */
/*Correction CSS Tela */
#texte, h1{
position:relative;/*Pour IE*/}
#contenu{
clear:none;/*Pour IE*/}
/*Titres*/
h2, h3{
margin:0;
padding:1em 0 0 0;}
/* Liste de définitions */
dl{
margin:0;
padding:0;
width:auto;}
dt{
background-color:#EEE;
width:18em;
float:left;
text-align:right;
margin:0;
padding:.3em;
border-top:1px solid #999;
font-weight:normal;}
.coel-consultation li {
list-style-image:none !important;}
.label-grand dt{
width:28em;}
.label-court dt{
width:12em;}
dt:after{
content:" : ";}
/* hack de commentaire avec un antislash pour ie5 mac \*/
.coel-consultation h2,.coel-consultation h3,.coel-consultation dt,.coel-consultation .nettoyeur{
clear:both;}
/* end hack */
dd{
background-color:#FFF;
margin:0;
padding:.3em;
border-top:1px solid #999;}
.nettoyeur{
visibility:hidden;}
/* Table */
table{
border:1px solid #1C3C78;
border-collapse:collapse;
width:100% !important;width:95%;/*Pour IE*/
margin:auto;}
thead, tfoot{
background-color:#EEE;
border:1px solid #1C3C78;}
tbody{
background-color:#FFF;
border:1px solid #1C3C78;}
th{
font-family:monospace;
border:1px dotted #1C3C78;
padding:5px;
background-color:#EEE;}
td{
font-family:sans-serif;
font-size:80%;
border:1px solid #1C3C78;
padding:5px;
text-align:left;}
caption{
font-family:sans-serif;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Présentation Moteur */
label#col-rech{
display:none;}
/* Navigation dans les résultats */
.fragmenteur select,.fragmenteur a,.fragmenteur .frag_page_courrante, .fragmenteur .frag_resultats{
color:white;
padding:5px;
margin:0 2px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;}
.fragmenteur select,.fragmenteur a{
background-color:#5D5C5C;
border:1px solid black;}
.fragmenteur a:hover,.fragmenteur .frag_page_courrante, .fragmenteur .frag_resultats{
font-weight:bold;
background-color:#AEDC43;
border:1px solid #86A736;}
.frag_separateur{display:none;}
 
/*--------- Masque de recherche avancée ---------*/
#col-rech-masque, #pers-rech-masque {
width: 725px;
/*padding: 10px;*/
/*border: solid #ddd 1px;*/
}
 
h2.titre-moteur-recherche {
margin-bottom: 10px;
}
 
.champ-masque {
display: inline-block;
width: 360px;
margin-top: 2px;
}
.champ-masque.long {
width: 720px;
}
.champ-masque input {
width: 200px;
}
.champ-masque select {
max-width: 190px;
}
.champ-masque label {
display: inline-block;
text-align: right;
}
.champ-masque label.label-gauche {
width: 130px;
vertical-align: middle;
}
.champ-masque label.label-droite {
width: 120px;
}
.champ-masque input.input-droite {
width: 210px;
}
 
/*--------------------------------------------------------------------------------------------------------------*/
/* Présentation Fiche */
.discretion{
color:#A9A9A9;
font-size:10px;
font-weight:normal;}
.txt-long{
white-space:pre-wrap;}
p.txt-long{
width:53.6em;
padding:.3em;
background-color:#FFF;}
#texte li{
margin:3px 0;}
.col-sommaire a{
background:none;}
/* Liste d'images */
ul.gallerie{
list-style-type:none;}
ul.gallerie li{
float:left;}
ul.gallerie li img {
margin:0.3em;
border: 1px solid;
border-color:#444 #AAA #AAA #444;
padding:10px;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Présentation Carte */
#carte-img{
border:none;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Présentation Syndication */
#col-syndication{
width:800px;
background:url("images/flux.png") no-repeat scroll 560px 60px white;}
.icone{
line-height:20px;
padding-left:20px;}
.icone-atom{
background:url(images/atom.png) no-repeat center left;}
.icone-rss1{
background:url(images/rss1.png) no-repeat center left;}
.icone-rss2{
background:url(images/rss2.png) no-repeat center left;}
/*--------------------------------------------------------------------------------------------------------------*/
/* Jquery UI : tabs */
.ui-tabs .ui-tabs-hide{
display: none;}
/* Nécessaire à IE 6 et 7 pour éviter un décalage vers le bas!*/
.col-onglets{
margin:0;/*Pour IE*/
padding:0;/*Pour IE*/
height:auto !important;height:100%;/*Pour IE*/}
 
#col-per > .col-sommaire > li {
margin-bottom: 2px;
}
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svnkit:entry:sha1-checksum
+7731f86aabedb86dadfc0ea4266a7bf3594f931e
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/debogage.css
New file
0,0 → 1,40
/*--------------------------------------------------------------------------------------------------------------*/
/* Débogage */
.debogage{
color:black;
border:3px solid #6495ed;}
.debogage_fichier, .debogage_ligne{
font-size:10px;
color:#A9A9A9;}
 
/*--------------------------------------------------------------------------------------------------------------*/
/* Tableau du chronométrage du programme */
table#chrono{
display:block;
border:3px solid #6495ed;
border-collapse:collapse;
text-align: center;
margin:0 auto;}
#chrono thead, tfoot{
background-color:#D0E3FA;
border:1px solid #6495ed;}
#chrono tbody{
background-color:#FFFFFF;
border:1px solid #6495ed;}
#chrono th{
font-family:monospace;
border:1px dotted #6495ed;
padding:5px;
background-color:#EFF6FF;
width:25%;}
#chrono td{
font-family:sans-serif;
font-size:80%;
border:1px solid #6495ed;
padding:5px;
text-align:center;}
#chrono caption{
font-family:sans-serif;
text-align: center;
width:90%;
margin:auto;}
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/flux.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/flux.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/atom.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/atom.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/fleche_externe.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/fleche_externe.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/licences.txt
New file
0,0 → 1,6
+----------------------------------------------------------------------------------------------------------------------+
Icon set : Supra RSS
Designer : Webdesigner Depot
License : Free for commercial use.
Fichiers : flux.png, rss1.png, rss2.png, atom.png
+----------------------------------------------------------------------------------------------------------------------+
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/aide.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/aide.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/fichier_pdf.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/fichier_pdf.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/mail.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/mail.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/rss1.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/rss1.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/rss2.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/collection/images/rss2.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_f35f07_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_f35f07_256x240.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_f08000_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_f08000_256x240.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_inset-soft_100_f4f0ec_1x100.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_ff7519_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_ff7519_256x240.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_glass_100_f5f0e5_1x400.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_c47a23_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_c47a23_256x240.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_ffffff_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_ffffff_256x240.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_flat_75_aaaaaa_40x100.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_glass_25_cb842e_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_glass_25_cb842e_1x400.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_cb672b_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-icons_cb672b_256x240.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_highlight-hard_100_f4f0ec_1x100.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_highlight-hard_75_f5f5b5_1x100.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_glass_70_ede4d4_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.13-la-grande-rue/squelettes/css/humanity/images/ui-bg_glass_70_ede4d4_1x400.png
New file
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/jquery-ui-1.8.custom.css
New file
0,0 → 1,296
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/
 
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
 
 
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
 
 
/* Icons
----------------------------------*/
 
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
 
 
/* Misc visuals
----------------------------------*/
 
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
 
 
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?tr=ffDefault=Helvetica,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=cb842e&bgTextureHeader=02_glass.png&bgImgOpacityHeader=25&borderColorHeader=d49768&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=f4f0ec&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=100&borderColorContent=e0cfc2&fcContent=1e1b1d&iconColorContent=c47a23&bgColorDefault=ede4d4&bgTextureDefault=02_glass.png&bgImgOpacityDefault=70&borderColorDefault=cdc3b7&fcDefault=3f3731&iconColorDefault=f08000&bgColorHover=f5f0e5&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=f5ad66&fcHover=a46313&iconColorHover=f08000&bgColorActive=f4f0ec&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=100&borderColorActive=e0cfc2&fcActive=b85700&iconColorActive=f35f07&bgColorHighlight=f5f5b5&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=75&borderColorHighlight=d9bb73&fcHighlight=060200&iconColorHighlight=cb672b&bgColorError=fee4bd&bgTextureError=04_highlight_hard.png&bgImgOpacityError=65&borderColorError=f8893f&fcError=592003&iconColorError=ff7519&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=75&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=75&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
*/
 
 
/* Component containers
----------------------------------*/
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #e0cfc2; background: #f4f0ec url(images/ui-bg_inset-soft_100_f4f0ec_1x100.png) 50% bottom repeat-x; color: #1e1b1d; }
.ui-widget-content a { color: #1e1b1d; }
.ui-widget-header { border: 1px solid #d49768; background: #cb842e url(images/ui-bg_glass_25_cb842e_1x400.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
 
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cdc3b7; background: #ede4d4 url(images/ui-bg_glass_70_ede4d4_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #3f3731; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #3f3731; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #f5ad66; background: #f5f0e5 url(images/ui-bg_glass_100_f5f0e5_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #a46313; }
.ui-state-hover a, .ui-state-hover a:hover { color: #a46313; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #e0cfc2; background: #f4f0ec url(images/ui-bg_highlight-hard_100_f4f0ec_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #b85700; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #b85700; text-decoration: none; }
.ui-widget :active { outline: none; }
 
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #d9bb73; background: #f5f5b5 url(images/ui-bg_highlight-hard_75_f5f5b5_1x100.png) 50% top repeat-x; color: #060200; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #060200; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #f8893f; background: #fee4bd url(images/ui-bg_highlight-hard_65_fee4bd_1x100.png) 50% top repeat-x; color: #592003; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #592003; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #592003; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
 
/* Icons
----------------------------------*/
 
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_c47a23_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_c47a23_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_f08000_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_f08000_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_f35f07_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_cb672b_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ff7519_256x240.png); }
 
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 
 
/* Misc visuals
----------------------------------*/
 
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; }
.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
.ui-corner-right { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
 
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_75_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_75_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Tabs
----------------------------------*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 0px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
Property changes:
Added: svn:keywords
+Id Author Date Revision HeadURL
\ No newline at end of property
/branches/v1.13-la-grande-rue/squelettes/css/humanity/jquery-ui-1.8.custom.min.css
New file
0,0 → 1,237
.ui-helper-hidden{display:none;}
.ui-helper-hidden-accessible{position:absolute;left:-99999999px;}
.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}
.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
.ui-helper-clearfix{display:inline-block;}
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix{height:1%;}
.ui-helper-clearfix{display:block;}
/* end clearfix */
.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}
.ui-state-disabled{cursor:default !important;}
.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}
.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}
.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em;}
.ui-widget .ui-widget{font-size:1em;}
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em;}
.ui-widget-content{border:1px solid #e0cfc2;background:#f4f0ec url(images/ui-bg_inset-soft_100_f4f0ec_1x100.png) 50% bottom repeat-x;color:#1e1b1d;}
.ui-widget-content a{color:#1e1b1d;}
.ui-widget-header{border:1px solid #d49768;background:#cb842e url(images/ui-bg_glass_25_cb842e_1x400.png) 50% 50% repeat-x;color:#ffffff;font-weight:bold;}
.ui-widget-header a{color:#ffffff;}
.ui-state-default, .ui-widget-content .ui-state-default{border:1px solid #cdc3b7;background:#ede4d4 url(images/ui-bg_glass_70_ede4d4_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#3f3731;}
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{color:#3f3731;text-decoration:none;}
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus{border:1px solid #f5ad66;background:#f5f0e5 url(images/ui-bg_glass_100_f5f0e5_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#a46313;}
.ui-state-hover a, .ui-state-hover a:hover{color:#a46313;text-decoration:none;}
.ui-state-active, .ui-widget-content .ui-state-active{border:1px solid #e0cfc2;background:#f4f0ec url(images/ui-bg_highlight-hard_100_f4f0ec_1x100.png) 50% 50% repeat-x;font-weight:normal;color:#b85700;}
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited{color:#b85700;text-decoration:none;}
.ui-widget:active{outline:none;}
.ui-state-highlight, .ui-widget-content .ui-state-highlight{border:1px solid #d9bb73;background:#f5f5b5 url(images/ui-bg_highlight-hard_75_f5f5b5_1x100.png) 50% top repeat-x;color:#060200;}
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a{color:#060200;}
.ui-state-error, .ui-widget-content .ui-state-error{border:1px solid #f8893f;background:#fee4bd url(images/ui-bg_highlight-hard_65_fee4bd_1x100.png) 50% top repeat-x;color:#592003;}
.ui-state-error a, .ui-widget-content .ui-state-error a{color:#592003;}
.ui-state-error-text, .ui-widget-content .ui-state-error-text{color:#592003;}
.ui-priority-primary, .ui-widget-content .ui-priority-primary{font-weight:bold;}
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}
.ui-state-disabled, .ui-widget-content .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}
.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_c47a23_256x240.png);}
.ui-widget-content .ui-icon{background-image:url(images/ui-icons_c47a23_256x240.png);}
.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png);}
.ui-state-default .ui-icon{background-image:url(images/ui-icons_f08000_256x240.png);}
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon{background-image:url(images/ui-icons_f08000_256x240.png);}
.ui-state-active .ui-icon{background-image:url(images/ui-icons_f35f07_256x240.png);}
.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_cb672b_256x240.png);}
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ff7519_256x240.png);}
.ui-icon-carat-1-n{background-position:0 0;}
.ui-icon-carat-1-ne{background-position:-16px 0;}
.ui-icon-carat-1-e{background-position:-32px 0;}
.ui-icon-carat-1-se{background-position:-48px 0;}
.ui-icon-carat-1-s{background-position:-64px 0;}
.ui-icon-carat-1-sw{background-position:-80px 0;}
.ui-icon-carat-1-w{background-position:-96px 0;}
.ui-icon-carat-1-nw{background-position:-112px 0;}
.ui-icon-carat-2-n-s{background-position:-128px 0;}
.ui-icon-carat-2-e-w{background-position:-144px 0;}
.ui-icon-triangle-1-n{background-position:0 -16px;}
.ui-icon-triangle-1-ne{background-position:-16px -16px;}
.ui-icon-triangle-1-e{background-position:-32px -16px;}
.ui-icon-triangle-1-se{background-position:-48px -16px;}
.ui-icon-triangle-1-s{background-position:-64px -16px;}
.ui-icon-triangle-1-sw{background-position:-80px -16px;}
.ui-icon-triangle-1-w{background-position:-96px -16px;}
.ui-icon-triangle-1-nw{background-position:-112px -16px;}
.ui-icon-triangle-2-n-s{background-position:-128px -16px;}
.ui-icon-triangle-2-e-w{background-position:-144px -16px;}
.ui-icon-arrow-1-n{background-position:0 -32px;}
.ui-icon-arrow-1-ne{background-position:-16px -32px;}
.ui-icon-arrow-1-e{background-position:-32px -32px;}
.ui-icon-arrow-1-se{background-position:-48px -32px;}
.ui-icon-arrow-1-s{background-position:-64px -32px;}
.ui-icon-arrow-1-sw{background-position:-80px -32px;}
.ui-icon-arrow-1-w{background-position:-96px -32px;}
.ui-icon-arrow-1-nw{background-position:-112px -32px;}
.ui-icon-arrow-2-n-s{background-position:-128px -32px;}
.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}
.ui-icon-arrow-2-e-w{background-position:-160px -32px;}
.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}
.ui-icon-arrowstop-1-n{background-position:-192px -32px;}
.ui-icon-arrowstop-1-e{background-position:-208px -32px;}
.ui-icon-arrowstop-1-s{background-position:-224px -32px;}
.ui-icon-arrowstop-1-w{background-position:-240px -32px;}
.ui-icon-arrowthick-1-n{background-position:0 -48px;}
.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}
.ui-icon-arrowthick-1-e{background-position:-32px -48px;}
.ui-icon-arrowthick-1-se{background-position:-48px -48px;}
.ui-icon-arrowthick-1-s{background-position:-64px -48px;}
.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}
.ui-icon-arrowthick-1-w{background-position:-96px -48px;}
.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}
.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}
.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}
.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}
.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}
.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}
.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}
.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}
.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}
.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}
.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}
.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}
.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}
.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}
.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}
.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}
.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}
.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}
.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}
.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}
.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}
.ui-icon-arrow-4{background-position:0 -80px;}
.ui-icon-arrow-4-diag{background-position:-16px -80px;}
.ui-icon-extlink{background-position:-32px -80px;}
.ui-icon-newwin{background-position:-48px -80px;}
.ui-icon-refresh{background-position:-64px -80px;}
.ui-icon-shuffle{background-position:-80px -80px;}
.ui-icon-transfer-e-w{background-position:-96px -80px;}
.ui-icon-transferthick-e-w{background-position:-112px -80px;}
.ui-icon-folder-collapsed{background-position:0 -96px;}
.ui-icon-folder-open{background-position:-16px -96px;}
.ui-icon-document{background-position:-32px -96px;}
.ui-icon-document-b{background-position:-48px -96px;}
.ui-icon-note{background-position:-64px -96px;}
.ui-icon-mail-closed{background-position:-80px -96px;}
.ui-icon-mail-open{background-position:-96px -96px;}
.ui-icon-suitcase{background-position:-112px -96px;}
.ui-icon-comment{background-position:-128px -96px;}
.ui-icon-person{background-position:-144px -96px;}
.ui-icon-print{background-position:-160px -96px;}
.ui-icon-trash{background-position:-176px -96px;}
.ui-icon-locked{background-position:-192px -96px;}
.ui-icon-unlocked{background-position:-208px -96px;}
.ui-icon-bookmark{background-position:-224px -96px;}
.ui-icon-tag{background-position:-240px -96px;}
.ui-icon-home{background-position:0 -112px;}
.ui-icon-flag{background-position:-16px -112px;}
.ui-icon-calendar{background-position:-32px -112px;}
.ui-icon-cart{background-position:-48px -112px;}
.ui-icon-pencil{background-position:-64px -112px;}
.ui-icon-clock{background-position:-80px -112px;}
.ui-icon-disk{background-position:-96px -112px;}
.ui-icon-calculator{background-position:-112px -112px;}
.ui-icon-zoomin{background-position:-128px -112px;}
.ui-icon-zoomout{background-position:-144px -112px;}
.ui-icon-search{background-position:-160px -112px;}
.ui-icon-wrench{background-position:-176px -112px;}
.ui-icon-gear{background-position:-192px -112px;}
.ui-icon-heart{background-position:-208px -112px;}
.ui-icon-star{background-position:-224px -112px;}
.ui-icon-link{background-position:-240px -112px;}
.ui-icon-cancel{background-position:0 -128px;}
.ui-icon-plus{background-position:-16px -128px;}
.ui-icon-plusthick{background-position:-32px -128px;}
.ui-icon-minus{background-position:-48px -128px;}
.ui-icon-minusthick{background-position:-64px -128px;}
.ui-icon-close{background-position:-80px -128px;}
.ui-icon-closethick{background-position:-96px -128px;}
.ui-icon-key{background-position:-112px -128px;}
.ui-icon-lightbulb{background-position:-128px -128px;}
.ui-icon-scissors{background-position:-144px -128px;}
.ui-icon-clipboard{background-position:-160px -128px;}
.ui-icon-copy{background-position:-176px -128px;}
.ui-icon-contact{background-position:-192px -128px;}
.ui-icon-image{background-position:-208px -128px;}
.ui-icon-video{background-position:-224px -128px;}
.ui-icon-script{background-position:-240px -128px;}
.ui-icon-alert{background-position:0 -144px;}
.ui-icon-info{background-position:-16px -144px;}
.ui-icon-notice{background-position:-32px -144px;}
.ui-icon-help{background-position:-48px -144px;}
.ui-icon-check{background-position:-64px -144px;}
.ui-icon-bullet{background-position:-80px -144px;}
.ui-icon-radio-off{background-position:-96px -144px;}
.ui-icon-radio-on{background-position:-112px -144px;}
.ui-icon-pin-w{background-position:-128px -144px;}
.ui-icon-pin-s{background-position:-144px -144px;}
.ui-icon-play{background-position:0 -160px;}
.ui-icon-pause{background-position:-16px -160px;}
.ui-icon-seek-next{background-position:-32px -160px;}
.ui-icon-seek-prev{background-position:-48px -160px;}
.ui-icon-seek-end{background-position:-64px -160px;}
.ui-icon-seek-start{background-position:-80px -160px;}
.ui-icon-seek-first{background-position:-80px -160px;}
.ui-icon-stop{background-position:-96px -160px;}
.ui-icon-eject{background-position:-112px -160px;}
.ui-icon-volume-off{background-position:-128px -160px;}
.ui-icon-volume-on{background-position:-144px -160px;}
.ui-icon-power{background-position:0 -176px;}
.ui-icon-signal-diag{background-position:-16px -176px;}
.ui-icon-signal{background-position:-32px -176px;}
.ui-icon-battery-0{background-position:-48px -176px;}
.ui-icon-battery-1{background-position:-64px -176px;}
.ui-icon-battery-2{background-position:-80px -176px;}
.ui-icon-battery-3{background-position:-96px -176px;}
.ui-icon-circle-plus{background-position:0 -192px;}
.ui-icon-circle-minus{background-position:-16px -192px;}
.ui-icon-circle-close{background-position:-32px -192px;}
.ui-icon-circle-triangle-e{background-position:-48px -192px;}
.ui-icon-circle-triangle-s{background-position:-64px -192px;}
.ui-icon-circle-triangle-w{background-position:-80px -192px;}
.ui-icon-circle-triangle-n{background-position:-96px -192px;}