public static function page($chemin_str) { // TODO : appeller Modules::action($chemin, $action, $paramètres); $chemin = new Chemin($chemin_str); $module = Modules::get_module($chemin); $paramètres = array("action" => "vue"); foreach ($module["get_post"] as $param) { if (isset($_GET[$param])) { $paramètres[$param] = self::param_get($param); } if (isset($_POST[$param])) { $paramètres[$param] = self::param_post($param); } } foreach ($module["post"] as $param) { if (isset($_POST[$param])) { $paramètres[$param] = self::param_post($param); } } foreach ($module["file"] as $param) { if (isset($_FILES[$param])) { $paramètres[$param] = $_FILES[$param]; } } $action = $paramètres["action"]; $ret = Modules::action($chemin, $action, $paramètres); if (!Page::is_page($ret)) { Erreur::fatale("Le module de " . htmlspecialchars($chemin->get()) . " n'a pas renvoyé une page mais à la place : <pre><code>" . htmlspecialchars(var_export($ret, true)) . "</code></pre>", true); } else { $ret->envoyer(); } }
public static function get_module($chemin) { $type = Stockage::get_prop($chemin, "type"); if (Erreur::is_erreur($type)) { // TODO : permettre l'empilement des erreurs. Quelle syntaxe utiliser ? Erreur::fatale("Erreur lors de la lecture du type de la page " . $chemin->get() . ".", $type); } else { if (!isset(self::$liste_modules[$type])) { Erreur::fatale("Type inconnu (" . var_export($type, true) . ") pour la page " . $chemin->get() . "."); } } return self::$liste_modules[$type]; }
public static function nouvelle_page($chemin, $nom, $type) { if (Permissions::vérifier_permission($chemin, "nouvelle_page")) { $enfant = $chemin->enfant($nom); Système_fichiers::créer_dossier($enfant->get_fs_stockage()); self::set_prop($enfant, "type", $type); $e = self::activer_réécriture($enfant); if (Erreur::is_erreur($e)) { return Erreur::fatale("Erreur lors de la mise en place de la redirection pour " . $enfant->get() . ".", $e); } return $enfant; } else { return false; } }
public static function get_regles() { // Renvoie un tableau de quintuplets // (chemin, action, groupe, autorisation, commentaire). // ou false si erreur. $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 ! foreach (explode("\n", $str_regles) as $k => $v) { $r = explode('|', $v); if (count($r) != 5) { return false; } $regles[] = array("chemin" => new Chemin(self::unescape_element_regle($r[0]), true), "action" => self::unescape_element_regle($r[1]), "groupe" => self::unescape_element_regle($r[2]), "autorisation" => $r[3] == "oui", "commentaire" => self::unescape_element_regle($r[4])); } return $regles; }