From fca8e1f7f1f0521ace80871e297fb89ec75b9653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Wed, 13 Oct 2010 19:42:11 +0200 Subject: [PATCH] =?UTF-8?q?Page->get(),=20set(),=20parent(),=20url().=20On?= =?UTF-8?q?=20peut=20maintenant=20naviguer=20=C3=A0=20100%=20(via=20le=20c?= =?UTF-8?q?ode)=20dans=20les=20diff=C3=A9rentes=20pages.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Il manque juste la création des enfants... --- cms2/code/bdd.php | 40 +++++++++++++++++++++++-- cms2/code/configuration.php | 5 +++- cms2/code/main.php | 6 ++++ cms2/code/page.php | 50 +++++++++++++++++++++++--------- cms2/config.php | 1 - cms2/modules/galerie/galerie.php | 19 ++++++------ 6 files changed, 95 insertions(+), 26 deletions(-) diff --git a/cms2/code/bdd.php b/cms2/code/bdd.php index 8b0a62d..0ce7100 100644 --- a/cms2/code/bdd.php +++ b/cms2/code/bdd.php @@ -44,7 +44,7 @@ class BDD { self::unbuf_query("create database if not exists " . Config::get('db_base')); mysql_select_db(Config::get('db_base'), self::$handle) or Debug::sqlerror(); - if (count(self::select("show tables like '" . self::table("pages") . "'"))) { + if (count(self::select("show tables like '" . self::table("pages") . "'")) == 1) { Debug::info("La base de données est déjà initialisée, on continue..."); return; } @@ -111,12 +111,25 @@ class BDD { debug::info("sql : " . $q); $qres = mysql_query($q, BDD::get()) or Debug::sqlerror(); $ret = array(); - while ($row = mysql_fetch_assoc($qres)) { + while ($row = mysql_fetch_array($qres)) { $ret[] = $row; } return $ret; } + // Select avec une seule colonne et un seul rang. + public static function select_one($q, $strict = true) { + $res = self::select($q); + if ($strict && count($res) != 1) { + Debug::error("Un rang de la base de données a été demmandé, mais, soit aucun rang correspondant aux critères n'a été trouvé, soit plusieurs ont été trouvés."); + return null; + } + if (count($res) == 0) { + Debug::error("Un rang de la base de données a été demmandé, mais, aucun rang correspondant aux critères n'a été trouvé."); + } + return $res[0][0]; + } + public static function modify($q) { debug::info("sql : $q;"); mysql_unbuffered_query($q . ";", self::get()) or Debug::sqlerror(); @@ -135,4 +148,27 @@ class BDD { } } +class BDDCell { + private $uid_page; + private $propriete; + private $valeur; + public function __construct($uid_page, $propriete, $valeur) { + $this->uid_page = $uid_page; + $this->propriete = $propriete; + $this->valeur = $valeur; + } + public function uid_page() { + return $this->uid_page; + } + public function propriete() { + return $this->propriete; + } + public function valeur() { + return $this->valeur; + } + public function __toString() { + return "".$this->valeur; + } +} + ?> \ No newline at end of file diff --git a/cms2/code/configuration.php b/cms2/code/configuration.php index dda92f0..313cd0e 100644 --- a/cms2/code/configuration.php +++ b/cms2/code/configuration.php @@ -9,7 +9,10 @@ class Config { private static $config = array(); public static function get($nom) { - if (!isset(self::$config[$nom])) return null; + if (!isset(self::$config[$nom])) { + echo "Variable de configuration manquante : $nom"; // TODO : Debug::erreur ? + die(); + } return self::$config[$nom]; } diff --git a/cms2/code/main.php b/cms2/code/main.php index c6f79b3..20a8d96 100644 --- a/cms2/code/main.php +++ b/cms2/code/main.php @@ -1,5 +1,11 @@ "; initModules(); diff --git a/cms2/code/page.php b/cms2/code/page.php index 314f263..1ddcf67 100644 --- a/cms2/code/page.php +++ b/cms2/code/page.php @@ -136,6 +136,10 @@ class Page { attribut("type", "text_no_space", "mSiteIndex"); } + public static function est_propriete_globale($prop) { + return in_array($prop, self::$attributs_globaux); + } + public function nom_module() { return get_class($this); } @@ -161,10 +165,20 @@ class Page { return call_user_func(array($this, "res_" . $res), $d); } - public function url($ressource = null) { + public function url($ressource = null, $uid_racine = null) { // Renvoie toute l'url (de la ressource principale ou de $ressource). - niy("url"); - return ""; + if ($uid_racine === null) { + $uid_racine = self::page_systeme("racine")->uid(); + } + if ($ressource === null) { + if ($uid_racine == $this->uid()) { + return Config::get("url_base"); + } else { + return $this->parent()->url(null, $uid_racine) . $this->composant_url . '/'; + } + } else { + return $this->url(null, $uid_racine) . "?res=" . urlencode($ressource); // TODO : urlencode ? + } } public function composant_url() { @@ -177,6 +191,14 @@ class Page { // Renvoie l'uid de la page dans la base de données. return $this->uid; } + + public function parent() { + return self::page_uid( + BDD::select_one( + "select uid_page_de from " . BDD::table("liens") . " where uid_page_vers = " . $this->uid() + ) + ); + } public function enfants($condition = true, $ordre = "-date_creation", $limit = 0, $offset = 0) { // Renvoie un objet de la classe CollectionPages. @@ -224,7 +246,6 @@ class Page { array_push($res, self::page_uid($row["uid_page_vers"])); } - var_dump($res); return $res; } @@ -242,17 +263,16 @@ class Page { public static function page_systeme($nom) { // select from pages where nomSysteme = $nom limit 1 - niy("page_systeme"); + return self::page_uid( + BDD::select_one( + "select uid_page from " . BDD::table("pages") . " where nom_systeme = '" . mysql_real_escape_string($nom) . "';" + ) + ); } public static function page_uid($uid) { $select = "select type from " . BDD::table("pages") . " where uid_page = " . $uid . ";"; - $type = BDD::select($select); - if (count($type) != 1) { - Debug::error("La page avec l'uid $uid n'a pas pu être trouvée."); - return null; - } - $type = $type[0]["type"]; + $type = BDD::select_one($select); $ret = new $type(); $ret->uid = $uid; return $ret; @@ -299,7 +319,9 @@ class Page { private function get_prop_direct($nom) { // Récupère l'attribut "$nom" depuis la BDD. - niy("get direct $nom"); + $select_table = (self::est_propriete_globale($nom)) ? "pages" : $this->nom_module(); + $select = "select $nom from " . BDD::table($select_table) . " where uid_page = " . $this->uid() . ";"; + return new BDDCell($this->uid(), $nom, BDD::select_one($select)); } public function __set($nom, $val) { @@ -314,7 +336,9 @@ class Page { public function set_prop_direct($nom, $val) { // Modifie l'attribut "$nom" dans la BDD. - niy("set direct $nom = $val"); + $update_table = (self::est_propriete_globale($nom)) ? "pages" : $this->nom_module(); + $update = "update " . BDD::table($update_table) . " set $nom = '" . mysql_real_escape_string($val) . "' where uid_page = " . $this->uid() . ";"; + BDD::unbuf_query($update); } public function set_composant_url() { diff --git a/cms2/config.php b/cms2/config.php index e7ddb04..40c2afd 100644 --- a/cms2/config.php +++ b/cms2/config.php @@ -6,7 +6,6 @@ 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::set('url_base', "http://127.0.0.1/2010-moteur-site-simple/"); // Chemin absolu vers le dossier '__cms__'. diff --git a/cms2/modules/galerie/galerie.php b/cms2/modules/galerie/galerie.php index 51b1f2d..e1a2dac 100644 --- a/cms2/modules/galerie/galerie.php +++ b/cms2/modules/galerie/galerie.php @@ -3,11 +3,11 @@ abstract class mGalerieBase extends Page { protected static $texte_titre = "Galerie"; protected static $texte_nouvelle_page = "Nouvel élément"; - protected static $icône_nouvelle_page = "nouvelle_periode.png"; + protected static $icone_nouvelle_page = "nouvelle_periode.png"; protected static $type_enfants = "mGaleriePeriode"; public static function info() { - ressources_statiques("i_icône_nouvelle_page c_style"); + ressources_statiques("i_icone_nouvelle_page c_style"); ressources_dynamiques("h_page h_miniature h_mini_miniature"); type_liens("enfants", self::$type_enfants); type_liens("liens", "*"); @@ -16,8 +16,8 @@ abstract class mGalerieBase extends Page { attribut("dans_nouveautes", "bool", "true"); } - public function res_i_icône_nouvelle_page() { - return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$icône_nouvelle_page)); + public function res_i_icone_nouvelle_page() { + return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$icone_nouvelle_page)); } public function res_c_style() { @@ -25,14 +25,15 @@ abstract class mGalerieBase extends Page { } public function res_h_page($d) { - $d->w_en_tete($this->titre, "".$this->description); // En-tête standard. + $d->w_en_tete($this->titre, $this->description); // En-tête standard. $l = $d->article()->w_liste($this->enfants(true, "-date_creation"), function($e, $li) { $a = $li->a($e->uid()); $e->rendu("h_miniature", $a); }); $nouveau = $l->li(); // TODO : nouveau devrait être un lien, bouton, ... - $nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page")); + var_dump($this->url("i_icone_nouvelle_page")); + $nouveau->span("miniature")->img("", $this->url("i_icone_nouvelle_page")); $nouveau->span("titre")->text(self::$texte_nouvelle_page); if ($this->if_perm("W", "dans_nouveautes")) { @@ -68,21 +69,21 @@ abstract class mGalerieBase extends Page { class mGalerieIndex extends mGalerieBase { protected static $texte_titre = "Galerie"; protected static $texte_nouvelle_page = "Nouvelle période"; - protected static $icône_nouvelle_page = "nouvelle_periode.png"; + protected static $icone_nouvelle_page = "nouvelle_periode.png"; protected static $type_enfants = "mGaleriePeriode"; } class mGaleriePeriode extends mGalerieBase { protected static $texte_titre = "Période"; protected static $texte_nouvelle_page = "Nouvel événement"; - protected static $icône_nouvelle_page = "nouvel_evenement.png"; + protected static $icone_nouvelle_page = "nouvel_evenement.png"; protected static $type_enfants = "mGalerieEvenement"; } class mGalerieEvenement extends mGalerieBase { protected static $texte_titre = "Événement"; protected static $texte_nouvelle_page = "Nouvelle photo"; - protected static $icône_nouvelle_page = "nouvelle_photo.png"; + protected static $icone_nouvelle_page = "nouvelle_photo.png"; protected static $type_enfants = "mGaleriePhoto"; }