www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit e0e55ce46a2ad0da7d4d70944621378ffb2ae82d
parent aa2817b397f40d2cff0af8e5b5882d125d2f8b98
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Mon,  2 Aug 2010 04:20:54 +0200

Beaucoup de choses. Voir le reste du message pour le détail.

- Ajout d'une classe Erreur, pour des plantages en beauté \o/ ;
- Ajout d'une classe Config (dans cms/configuration.php), qui gère la configuration. Plus propre que des constantes ou des variables globales ;
- Utilisation de error_reporting(E_ALL) pour détecter les variables non initialisées (entre autres) ;
- Obligation d'indiquer une adresse de courriel (valide de préférence ;-) ) pour contacter l'administrateur ;
- Bug : enregister_module() => Modules::enregister_module() ;
- Bug : is_set() => isset() ;
- Ajout de la classe Modules (déjà utilisée, mais pas définie) ;
- Utilisation du paramètre forcer_permissions pour éviter une récursion sans fin -_-' ;
- Déclenchement d'une erreur si on ne peut pas lire les règles de sécurité. Il y a encore plein d'autres vérifications d'erreurs à ajouter ;
- Un peu de détection d'erreur dans SystèmeFichiers ;
- Suppression du require sur css.php (doit être include() uniquement quand on veut l'afficher) ;
- Suppression de pas mal de bogues.

Diffstat:
M__cms__/chemin/chemin.php | 4++--
M__cms__/cms.php | 9++++++++-
A__cms__/cms/configuration.php | 22++++++++++++++++++++++
M__cms__/config.php | 13++++++++-----
M__cms__/modules/admin/connexion.php | 4++--
M__cms__/modules/admin/couleurs.php | 10+++++-----
M__cms__/modules/admin/permissions.php | 6+++---
M__cms__/modules/admin/utilisateurs.php | 16++++++++--------
M__cms__/modules/forum/forum-index.php | 4++--
M__cms__/modules/forum/forum-message.php | 6+++---
M__cms__/modules/forum/forum-sujet.php | 6+++---
M__cms__/modules/galerie/galerie-evenement.php | 10+++++-----
M__cms__/modules/galerie/galerie-index.php | 10+++++-----
M__cms__/modules/galerie/galerie-periode.php | 10+++++-----
M__cms__/modules/galerie/galerie-photo.php | 10+++++-----
M__cms__/modules/include.php | 2++
A__cms__/modules/modules.php | 23+++++++++++++++++++++++
M__cms__/securite/authentification.php | 18++++++++++--------
A__cms__/securite/erreur.php | 28++++++++++++++++++++++++++++
M__cms__/securite/include.php | 1+
M__cms__/securite/permissions.php | 10++++++----
M__cms__/site/include.php | 1-
M__cms__/stockage/session.php | 7+++----
M__cms__/stockage/stockage.php | 6+++---
M__cms__/stockage/systeme-fichiers.php | 6+++---
25 files changed, 165 insertions(+), 77 deletions(-)

diff --git a/__cms__/chemin/chemin.php b/__cms__/chemin/chemin.php @@ -53,11 +53,11 @@ class Chemin { } public function get_fs_stockage() { - return Path::combine($config_chemin_base_stockage, $this->get()); + return Path::combine(Config::get('chemin_base_stockage'), $this->get()); } public function get_fs_public() { - return Path::combine($config_chemin_base_public, $this->get()); + return Path::combine(Config::get('chemin_base_public'), $this->get()); } public function enfant($nom) { diff --git a/__cms__/cms.php b/__cms__/cms.php @@ -1,6 +1,13 @@ <?php +error_reporting(E_ALL); // || E_STRICT + require_once(dirname(__FILE__) . "/config.php"); +if (Config::get('courriel_admin') === null) { + echo "Vous devez indiquer le courriel de l'administrateur dans le fichier config.php."; + exit; +} + require_once(dirname(__FILE__) . "/include.php"); class CMS { @@ -8,7 +15,7 @@ class CMS { // TODO : appeller Modules::action($chemin, $action, $paramètres); $chemin = new Chemin($chemin_str); - $noms_params = Modules::liste_paramètres(); + $noms_params = Modules::liste_paramètres($chemin); $noms_params[] = "action"; // récupérer $noms_params dans $_GET, $_POST et $_FILE $action = $paramètres["action"]; diff --git a/__cms__/cms/configuration.php b/__cms__/cms/configuration.php @@ -0,0 +1,21 @@ +<?php + + /*************************************** + * La configuration n'est pas ici, * + * elle est dans le fichier config.php * + ***************************************/ + +class Config { + static $config = array(); + + public static function get($nom) { + if (!isset(self::$config[$nom])) return null; + return self::$config[$nom]; + } + + public static function set($nom, $valeur) { + self::$config[$nom] = $valeur; + } +} + +?> +\ No newline at end of file diff --git a/__cms__/config.php b/__cms__/config.php @@ -1,26 +1,29 @@ <?php -// Fonction Path::normalize(); require_once(dirname(__FILE__) . "/chemin/path.php"); +require_once(dirname(__FILE__) . "/cms/configuration.php"); // ========== CONFIGURATION ========= +// Addresse de courriel de l'administrateur. +Config::set('courriel_admin', "jahvascriptmaniac+github@free.fr"); + // URL de la racine du site. Ex: http://www.monsite.com/cms/ // Doit se terminer par '/'. -$config_url_base = "http://127.0.0.1/2010-moteur-site-simple/"; +Config::set('url_base', "http://127.0.0.1/2010-moteur-site-simple/"); // Chemin absolu vers le dossier '__cms__'. // dirname(__FILE__) peut retourner un chemin relatif (PHP < 4.0.2), // donc utiliser realpath si on s'en sert. -$config_chemin_base = realpath(dirname(__FILE__)); +Config::set('chemin_base', realpath(dirname(__FILE__))); // Chemin vers le stockage interne des données. // En général, c'est le chemin ..../__cms__/modele -$config_chemin_base_stockage = Path::combine($config_chemin_base, "modele"); +Config::set('chemin_base_stockage', Path::combine(Config::get("chemin_base"), "modele")); // Chemin vers la partie visible du site. // En général, c'est le chemin vers le dossier contenant __cms__ -$config_chemin_base_public = Path::combine($config_chemin_base, "/.."); +Config::set('chemin_base_public', Path::combine(Config::get("chemin_base"), "/..")); // ======== FIN CONFIGURATION ======= diff --git a/__cms__/modules/admin/connexion.php b/__cms__/modules/admin/connexion.php @@ -12,7 +12,7 @@ class AdminConnexion { déconnexion(); return self::vue("déconnexion"); } else { - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -42,6 +42,6 @@ class AdminConnexion { } } -enregister_module("AdminConnexion", "admin-connexion"); +Modules::enregister_module("AdminConnexion", "admin-connexion"); ?> \ No newline at end of file diff --git a/__cms__/modules/admin/couleurs.php b/__cms__/modules/admin/couleurs.php @@ -5,18 +5,18 @@ class AdminCouleurs { if ($action == "anuler") { return redirect($chemin); } else { - if (is_set($paramètres["Couleur_A"])) { + if (isset($paramètres["Couleur_A"])) { // Stocker couleur A } - if (is_set($paramètres["Couleur_B"])) { + if (isset($paramètres["Couleur_B"])) { // Stocker couleur B } - if (is_set($paramètres["Couleur_C"])) { + if (isset($paramètres["Couleur_C"])) { // Stocker couleur C } // ... - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -45,6 +45,6 @@ class AdminCouleurs { } } -enregister_module("AdminCouleurs", "admin-couleurs"); +Modules::enregister_module("AdminCouleurs", "admin-couleurs"); ?> \ No newline at end of file diff --git a/__cms__/modules/admin/permissions.php b/__cms__/modules/admin/permissions.php @@ -6,11 +6,11 @@ class AdminPermissions { if ($action == "anuler") { return redirect($chemin); } else { - if (is_set($paramètres["regles"])) { + if (isset($paramètres["regles"])) { Stockage::set_prop($singleton, "regles", $paramètres["regles"]); } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -34,6 +34,6 @@ class AdminPermissions { } } -enregister_module("AdminPermissions", "admin-permissions"); +Modules::enregister_module("AdminPermissions", "admin-permissions"); ?> \ No newline at end of file diff --git a/__cms__/modules/admin/utilisateurs.php b/__cms__/modules/admin/utilisateurs.php @@ -18,36 +18,36 @@ class AdminUtilisateurs { // Solution B : } else { - if (is_set($paramètres["nouveau_nom"]) && ($action == "nouvelle_page")) { + if (isset($paramètres["nouveau_nom"]) && ($action == "nouvelle_page")) { // TODO : SECURITE : Si l'utilisateur existe déjà, laisser tomber et ne pas faire les set_* qui suivent ! Authentification::nouvel_utilisateur($paramètres["nouveau_nom"]); $paramètres["nom"] = $paramètres["nouveau_nom"]; // TODO : message de confirmation quelque part ? } - if (is_set($paramètres["nom"]) && is_set($paramètres["nouveau_nom"]) && ($action != "nouvelle_page")) { + if (isset($paramètres["nom"]) && isset($paramètres["nouveau_nom"]) && ($action != "nouvelle_page")) { Authentification::renomer_utilisateur($paramètres["nom"], $paramètres["nouveau_nom"]); $paramètres["nom"] = $paramètres["nouveau_nom"]; } - if (is_set($paramètres["nom"]) && is_set($paramètres["mot_de_passe"])) { + if (isset($paramètres["nom"]) && isset($paramètres["mot_de_passe"])) { Authentification::set_mot_de_passe($paramètres["nom"], $paramètres["mot_de_passe"]); } - if (is_set($paramètres["nom"]) && is_set($paramètres["groupe"])) { + if (isset($paramètres["nom"]) && isset($paramètres["groupe"])) { Authentification::set_groupe($paramètres["nom"], $paramètres["groupe"]); } - if (is_set($paramètres["nom"]) && is_set($paramètres["peut_se_connecter"])) { + if (isset($paramètres["nom"]) && isset($paramètres["peut_se_connecter"])) { Authentification::set_peut_se_connecter($paramètres["nom"], ($paramètres["peut_se_connecter"] == "true")); } - if (is_set($paramètres["nom"]) && ($action == "supprimer")) { + if (isset($paramètres["nom"]) && ($action == "supprimer")) { Authentification::supprimer_utilisateur($paramètres["nom"]); // TODO : message de confirmation quelque part ? } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -87,6 +87,6 @@ class AdminUtilisateurs { } } -enregister_module("AdminUtilisateurs", "admin-utilisateurs"); +Modules::enregister_module("AdminUtilisateurs", "admin-utilisateurs"); ?> \ No newline at end of file diff --git a/__cms__/modules/forum/forum-index.php b/__cms__/modules/forum/forum-index.php @@ -11,7 +11,7 @@ class ForumIndex { Stockage::set_prop($np, "proprietaire", get_utilisateur()); return redirect($np); } else { - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -36,6 +36,6 @@ class ForumIndex { } } -enregister_module("ForumIndex", "forum-index"); +Modules::enregister_module("ForumIndex", "forum-index"); ?> \ No newline at end of file diff --git a/__cms__/modules/forum/forum-message.php b/__cms__/modules/forum/forum-message.php @@ -7,12 +7,12 @@ function action($chemin, $action, $paramètres) { Stockage::supprimer($chemin); return redirect($chemin->parent()); } else { - if (is_set($paramètres["message"])) { + if (isset($paramètres["message"])) { Stockage::set_prop($chemin, "message", $paramètres["message"]); } // TODO ... Quelles sont les interactions entre l'utilisateur et le message, dans quel ordre, ... - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { Modules::vue($chemin->parent(), $paramètres["vue"]); } else { Modules::vue($chemin->parent()); @@ -36,6 +36,6 @@ function vue($chemin, $vue = "normal") { } } -enregister_module("ForumMessage", "forum-message"); +Modules::enregister_module("ForumMessage", "forum-message"); ?> \ No newline at end of file diff --git a/__cms__/modules/forum/forum-sujet.php b/__cms__/modules/forum/forum-sujet.php @@ -16,13 +16,13 @@ class ForumSujet { Stockage::supprimer($chemin); return redirect($chemin->parent()); } else { - if (is_set($paramètres["titre"])) { + if (isset($paramètres["titre"])) { Stockage::renomer($chemin, $paramètres["titre"]); $chemin = $chemin->renomer($paramètres["titre"]); // TODO : peut-être redirect($chemin) ? } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -65,6 +65,6 @@ class ForumSujet { } } -enregister_module("ForumSujet", "forum-sujet"); +Modules::enregister_module("ForumSujet", "forum-sujet"); ?> \ No newline at end of file diff --git a/__cms__/modules/galerie/galerie-evenement.php b/__cms__/modules/galerie/galerie-evenement.php @@ -12,16 +12,16 @@ class GalerieÉvènement { Stockage::supprimer($chemin); return redirect($chemin->parent()); } else { - if (is_set($paramètres["titre"])) { + if (isset($paramètres["titre"])) { Stockage::renomer($chemin, $paramètres["titre"]); $chemin = $chemin->renomer($paramètres["titre"]); // TODO : peut-être redirect($chemin) ? } - if (is_set($paramètres["description"])) { + if (isset($paramètres["description"])) { Stockage::set_prop($chemin, "description", $paramètres["description"]); } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -59,12 +59,12 @@ class GalerieÉvènement { return $ret; } else if ($vue == "miniature") { $enfants = Stockage::liste_enfants($chemin); - if (is_set($enfants[0])) return Modules::vue($enfants[0], 'miniature'); + if (isset($enfants[0])) return Modules::vue($enfants[0], 'miniature'); else return "Aucune<br/>photo"; } } } -enregister_module("GalerieÉvènement", "galerie-evenement"); +Modules::enregister_module("GalerieÉvènement", "galerie-evenement"); ?> \ No newline at end of file diff --git a/__cms__/modules/galerie/galerie-index.php b/__cms__/modules/galerie/galerie-index.php @@ -12,16 +12,16 @@ class GalerieIndex { Stockage::supprimer($chemin); return redirect($chemin->parent()); } else { - if (is_set($paramètres["titre"])) { + if (isset($paramètres["titre"])) { Stockage::renomer($chemin, $paramètres["titre"]); $chemin = $chemin->renomer($paramètres["titre"]); // TODO : peut-être redirect($chemin) ? } - if (is_set($paramètres["description"])) { + if (isset($paramètres["description"])) { Stockage::set_prop($chemin, "description", $paramètres["description"]); } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -59,12 +59,12 @@ class GalerieIndex { return $ret; } else if ($vue == "miniature") { $enfants = Stockage::liste_enfants($chemin); - if (is_set($enfants[0])) return Modules::vue($enfants[0], 'miniature'); + if (isset($enfants[0])) return Modules::vue($enfants[0], 'miniature'); else return "Aucune<br/>photo"; } } } -enregister_module("GalerieIndex", "galerie-index"); +Modules::enregister_module("GalerieIndex", "galerie-index"); ?> \ No newline at end of file diff --git a/__cms__/modules/galerie/galerie-periode.php b/__cms__/modules/galerie/galerie-periode.php @@ -12,16 +12,16 @@ class GaleriePériode { Stockage::supprimer($chemin); return redirect($chemin->parent()); } else { - if (is_set($paramètres["titre"])) { + if (isset($paramètres["titre"])) { Stockage::renomer($chemin, $paramètres["titre"]); $chemin = $chemin->renomer($paramètres["titre"]); // TODO : peut-être redirect($chemin) ? } - if (is_set($paramètres["description"])) { + if (isset($paramètres["description"])) { Stockage::set_prop($chemin, "description", $paramètres["description"]); } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -59,12 +59,12 @@ class GaleriePériode { return $ret; } else if ($vue == "miniature") { $enfants = Stockage::liste_enfants($chemin); - if (is_set($enfants[0])) return Modules::vue($enfants[0], 'miniature'); + if (isset($enfants[0])) return Modules::vue($enfants[0], 'miniature'); else return "Aucune<br/>photo"; } } } -enregister_module("GaleriePériode", "galerie-periode"); +Modules::enregister_module("GaleriePériode", "galerie-periode"); ?> \ No newline at end of file diff --git a/__cms__/modules/galerie/galerie-photo.php b/__cms__/modules/galerie/galerie-photo.php @@ -8,23 +8,23 @@ class GaleriePhoto { Stockage::supprimer($chemin); return redirect($chemin->parent()); } else { - if (is_set($paramètres["fichier_image"])) { + if (isset($paramètres["fichier_image"])) { // redimensionner l'image avec gd, stocker la miniature dans // prop_image_mini (set_prop_fichier()). // Pb : Où est-ce qu'on met temporairement la miniature // avant de la déplacer ??? // stocker le fichier reçu dans prop_image (set_prop_fichier_reçu()). } - /* if (is_set($paramètres["titre"])) { + /* if (isset($paramètres["titre"])) { Stockage::renomer($chemin, $paramètres["titre"]); $chemin = $chemin->renomer($paramètres["titre"]); // TODO : peut-être redirect($chemin) ? }*/ - if (is_set($paramètres["description"])) { + if (isset($paramètres["description"])) { Stockage::set_prop($chemin, "description", $paramètres["description"]); } - if (is_set($paramètres["vue"])) { + if (isset($paramètres["vue"])) { self::vue($chemin, $paramètres["vue"]); } else { self::vue($chemin); @@ -56,6 +56,6 @@ class GaleriePhoto { } } -enregister_module("GaleriePhoto", "galerie-photo"); +Modules::enregister_module("GaleriePhoto", "galerie-photo"); ?> \ No newline at end of file diff --git a/__cms__/modules/include.php b/__cms__/modules/include.php @@ -1,5 +1,7 @@ <?php +require_once(dirname(__FILE__) . "/modules.php"); + require_once(dirname(__FILE__) . "/admin/include.php"); require_once(dirname(__FILE__) . "/forum/include.php"); require_once(dirname(__FILE__) . "/galerie/include.php"); diff --git a/__cms__/modules/modules.php b/__cms__/modules/modules.php @@ -0,0 +1,22 @@ +<?php + +class Modules { + static $liste_modules = array(); + + public static function enregister_module($classe, $type) { + self::$liste_modules[$type] = $classe; + } + + public static function get_module($chemin) { + $type = Stockage::get_prop($chemin, "type"); + if ($type === false) return false; + return self::$liste_modules[$type]; + } + + public static function liste_paramètres($chemin) { + // TODO + return self::get_module($chemin); + } +} + +?> +\ No newline at end of file diff --git a/__cms__/securite/authentification.php b/__cms__/securite/authentification.php @@ -6,8 +6,9 @@ class Authentification { } public function connexion($nom_utilisateur, $mdp) { - $mdp_réel = Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "mot_de_passe"); - $peut_se_connecter = Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter"); + $ch_utilisateur = self::singleton()->enfant($nom_utilisateur); + $mdp_réel = self::get_mot_de_passe($nom_utilisateur, true); // true => forcer permissions. + $peut_se_connecter = self::get_peut_se_connecter($nom_utilisateur, true); // true => forcer permissions. if ($mdp == $mdp_réel && $peut_se_connecter === "true") { // Triple égale. Pas d'entourloupe avec des casts miteux ! // TODO : Vérifier si c'est sécurisé => stocké _uniquement_ sur le serveur. Session::put("utilisateur", $nom_utilisateur); @@ -57,8 +58,8 @@ class Authentification { Stockage::set_pop(self::singleton()->enfant($nom_utilisateur), "groupe", $groupe); } - public function get_groupe($nom_utilisateur) { - return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "groupe"); + public function get_groupe($nom_utilisateur, $forcer_permissions = false) { + return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "groupe", $forcer_permissions); } public function set_mot_de_passe($nom_utilisateur, $mot_de_passe) { @@ -69,16 +70,17 @@ class Authentification { self::set_mot_de_passe($utilisateur, substr(md5($utilisateur . rand() . microtime()) , 0, 8)); } - public function get_mot_de_passe($nom_utilisateur) { - return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "mot_de_passe"); + public function get_mot_de_passe($nom_utilisateur, $forcer_permissions = false) { + return Stockage::get_prop(self::singleton()->enfant($nom_utilisateur), "mot_de_passe", $forcer_permissions); } public function set_peut_se_connecter($nom_utilisateur, $valeur) { Stockage::set_pop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter", $valeur ? "true" : "false"); } - public function get_peut_se_connecter($nom_utilisateur) { - return (Stockage::get_pop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter") == "true") ? true : false; + public function get_peut_se_connecter($nom_utilisateur, $forcer_permissions = false) { + $peut_se_connecter = Stockage::get_pop(self::singleton()->enfant($nom_utilisateur), "peut_se_connecter", $forcer_permissions); + return ($peut_se_connecter == "true") ? true : false; } } diff --git a/__cms__/securite/erreur.php b/__cms__/securite/erreur.php @@ -0,0 +1,27 @@ +<?php + +class Erreur { + public static function fatale($message) { + echo '<?xml version="1.0" encoding="UTF-8"?> +<!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" xml:lang="fr" lang="fr"> + <head> + <title>Erreur</title> + </head> + <body> + <h1>Erreur</h1> + <p>Désolé, une erreur est survenue. Contactez le créateur du site SVP : + <a href="mailto:' . htmlspecialchars(Config::get('courriel_admin')) + . '?subject=Erreur%20dans%20le%20programme%202010-moteur-site-simple&body=' + . htmlspecialchars(rawurlencode("Code de l'erreur : " . $message)) . '">' + . htmlspecialchars(Config::get('courriel_admin')) + . '</a>. Indiquez l\'erreur ci-dessous dans votre courriel.</p> + <p><strong>' . htmlspecialchars($message) . '</strong></p> + </body> +</html>'; + + exit; + } +} + +?> +\ No newline at end of file diff --git a/__cms__/securite/include.php b/__cms__/securite/include.php @@ -1,5 +1,6 @@ <?php +require_once(dirname(__FILE__) . "/erreur.php"); require_once(dirname(__FILE__) . "/authentification.php"); require_once(dirname(__FILE__) . "/nettoyage.php"); require_once(dirname(__FILE__) . "/permissions.php"); diff --git a/__cms__/securite/permissions.php b/__cms__/securite/permissions.php @@ -16,7 +16,7 @@ class Permissions { if ($utilisateur === null) { $utilisateur = Authentification::get_utilisateur(); } - $groupe = Authentification::get_groupe($utilisateur); + $groupe = Authentification::get_groupe($utilisateur, true); // true => forcer permissions. // Parcourt la liste les règles de sécurité (get_regles()), et // sélectionne la première pour laquelle $chemin correspond au motif @@ -50,15 +50,17 @@ class Permissions { $str_regles .= "\n"; // TODO vérifier que la séquence d'échappement est bien comprise. } - return Stockage::get_prop(self::singleton(), "regles", $str_regles); + return Stockage::set_prop(self::singleton(), "regles", $str_regles); } public function get_regles() { // Renvoie un tableau de quadruplets // (chemin, action, groupe, autorisation). // ou false si erreur. - $str_regles = Stockage::get_prop(self::singleton(), "regles"); - // TODO erreur si la propriété n'existe pas. + + $str_regles = Stockage::get_prop(self::singleton(), "regles", true); // true => forcer permissions. + if (!$str_regles) Erreur::fatale("Impossible de lire les règles de sécurité."); + $str_regles = preg_replace('/\r\n|\r/', "\n", $str_regles); $regles = array(); // TODO : ignorer les lignes vides ! diff --git a/__cms__/site/include.php b/__cms__/site/include.php @@ -1,6 +1,5 @@ <?php -require_once(dirname(__FILE__) . "/css.php"); require_once(dirname(__FILE__) . "/squelette.php"); ?> \ No newline at end of file diff --git a/__cms__/stockage/session.php b/__cms__/stockage/session.php @@ -2,7 +2,7 @@ class Session { public function démarrer() { - return session_id !== "" || session_start(); + return (session_id() !== "") || session_start(); } public function put($k, $v) { @@ -12,7 +12,7 @@ class Session { public function get($k) { self::démarrer(); - return is_set($_SESSION[$k]) ? $_SESSION[$k] : false; + return isset($_SESSION[$k]) ? $_SESSION[$k] : false; } public function effacer($k) { @@ -21,4 +21,4 @@ class Session { } } -?> -\ No newline at end of file +?> diff --git a/__cms__/stockage/stockage.php b/__cms__/stockage/stockage.php @@ -63,10 +63,10 @@ class Stockage { // $forcer_permissions permet à vérifier_permission() et ses // dépendances get_regles() et get_groupe() de faire des get_prop // même si l'utilisateur courant n'en a pas le droit. - if ($forcer_permissions || vérifier_permission($chemin, "get_prop")) { - return SystemeFichiers::lire(Path::combine($chemin->get_fs_stockage(), $prop)); + if ($forcer_permissions || Permissions::vérifier_permission($chemin, "get_prop")) { + return SystèmeFichiers::lire(Path::combine($chemin->get_fs_stockage(), $prop)); } else { - return "[Accès interdit]"; + return false; } } diff --git a/__cms__/stockage/systeme-fichiers.php b/__cms__/stockage/systeme-fichiers.php @@ -25,15 +25,15 @@ class SystèmeFichiers { } public function lire($chemin_fs) { - file_get_contents($chermin_fs); + return file_exists($chemin_fs) && file_get_contents($chemin_fs); } public function écrire($chemin_fs, $données) { - file_put_contents($chemin_fs, $données); + return is_dir(dirname($chemin_fs)) && file_put_contents($chemin_fs, $données); } public function liste_fichiers($chemin_fs) { - return scandir($chemin_fs); + return is_dir($chemin_fs) && scandir($chemin_fs); } public function déplacer($chemin_fs_de, $chemin_fs_vers) {