Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1875 → Rev 1876

/trunk/widget/Widget.php
8,7 → 8,7
* Les widget sont dans des dossiers en minuscule correspondant au nom de la classe du widget.
* Exemple : /widget/carto avec la classe Carto.php dans le dossier carto.
*
*
*
* @author jpm
*
*/
19,10 → 19,10
 
/** Le nom du widget demandé. */
private $widget = null;
 
/** Les chemins où l'autoload doit chercher des classes. */
private static $autoload_chemins = array();
 
/** Les paramètres de l'url $_GET nettoyés. */
private $parametres = null;
 
34,17 → 34,17
public function __construct($fichier_ini = 'widget.ini.php') {
// Chargement de la configuration
self::$config = parse_ini_file($fichier_ini, TRUE);
 
// Paramêtres de config dynamiques
self::$config['chemins']['baseURLAbsoluDyn'] = 'http://'.$_SERVER['SERVER_NAME'].self::$config['chemins']['baseURL'].'%s';
 
// Gestion de la mémoire maximum allouée aux services
ini_set('memory_limit', self::$config['parametres']['limiteMemoire']);
 
// Réglages de PHP
setlocale(LC_ALL, self::$config['parametres']['locale']);
date_default_timezone_set(self::$config['parametres']['fuseauHoraire']);
 
// Gestion des erreurs
error_reporting(self::$config['parametres']['erreurNiveau']);
 
52,19 → 52,15
$url_morceaux = $this->parserUrl();
if (isset($url_morceaux[0])) {
$this->widget = $url_morceaux[0];
// hack car chez moi (mathias) je me retrouve avec $url_morceaux[0] = "delnomduwidget", pourtant j'ai le même .htaccess...
if (strpos($this->widget, ":") !== false) {
$this->widget = substr($this->widget, strpos($this->widget, ":") + 1);
}
self::$config['chemins']['widgetCourantDossier'] = self::$config['chemins']['widgetsDossier'].strtolower($this->widget).DIRECTORY_SEPARATOR;
$this->chargerWidgetConfig();
}
// Chargement des chemins pour l'autoload
$this->chargerCheminAutoload();
 
// Enregistrement de la méthode gérant l'autoload des classes
spl_autoload_register(array('Widget', 'chargerClasse'));
 
// Nettoyage du $_GET (sécurité)
$this->collecterParametres();
} else {
72,7 → 68,7
trigger_error($e, E_USER_ERROR);
}
}
 
private function parserUrl() {
if (strlen($_SERVER['QUERY_STRING']) == 0) {
$len = strlen($_SERVER['REQUEST_URI']);
83,7 → 79,7
$url_morceaux = explode('/', $url);
return $url_morceaux;
}
 
private function collecterParametres() {
if (isset($_GET) && $_GET != '') {
$this->nettoyerGet();
90,19 → 86,19
$this->parametres = $_GET;
}
}
 
private function nettoyerGet() {
foreach ($_GET as $cle => $valeur) {
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
$verifier = array('NULL', "\n", "\r", "\\", '"', "\x00", "\x1a", ';');
$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
}
}
 
private function chargerCheminAutoload() {
$chemins_communs = explode(';', self::$config['chemins']['autoload']);
$chemins_communs = array_map('trim', $chemins_communs);
array_unshift($chemins_communs, '');
 
$chemins_widget = array();
if (isset(self::$config[$this->widget]['autoload'])) {
$chemins_widget = explode(';', self::$config[$this->widget]['autoload']);
110,10 → 106,10
$chemins_widget[$cle] = self::$config['chemins']['widgetCourantDossier'].trim($chemin);
}
}
 
self::$autoload_chemins = array_merge($chemins_communs, $chemins_widget);
}
 
/**
* La méthode chargerClasse() charge dynamiquement les classes trouvées dans le code.
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
132,7 → 128,8
}
}
}
 
 
/**
* Execute le widget.
*/
147,11 → 144,9
$widget->executer();
}
}
} else {
echo "pas de module précisé";
}
}
 
/**
* Charge le fichier de config spécifique du wiget et fusionne la config avec celle partagés par l'ensemble des widgets.
*/
162,5 → 157,4
self::$config = array_merge(self::$config, $widget_config);
}
}
}
?>
}