From 20aafcf6dcb5527290468fc67be136b939bbc7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 12 Oct 2010 15:35:59 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20des=20tables=20avec=20la=20nouv?= =?UTF-8?q?elle=20structure=20+=20autres=20modifs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cms2/code/bdd.php | 65 +++++++++++++++-------- cms2/code/document.php | 11 ++++ cms2/code/main.php | 5 +- cms2/code/page.php | 63 ++++++++++++++++------ cms2/modules/admin/admin-utilisateurs.php | 3 +- cms2/modules/galerie/galerie.php | 17 +++--- cms2/modules/include.php | 1 + cms2/modules/nouveautes/nouveautes.php | 2 +- 8 files changed, 117 insertions(+), 50 deletions(-) diff --git a/cms2/code/bdd.php b/cms2/code/bdd.php index bf27be1..da9af33 100644 --- a/cms2/code/bdd.php +++ b/cms2/code/bdd.php @@ -40,39 +40,60 @@ class BDD { // ATTENTION : Ré-initialise toute la base de données !!! public static function reset() { self::unbuf_query('drop table if exists ' . self::table("pages")); - self::unbuf_query('drop table if exists ' . self::table("enfants")); - self::unbuf_query('drop table if exists ' . self::table("proprietes")); + self::unbuf_query('drop table if exists ' . self::table("liens")); + // TODO : drop les tables des classes (les noms sont dans self::table("modules")). + self::unbuf_query('drop table if exists ' . self::table("modules")); self::init(); } + public static function init() { self::unbuf_query("create database if not exists " . Config::get('db_base')); mysql_select_db(Config::get('db_base'), self::$handle) or Debug::sqlerror(); - self::unbuf_query('create table if not exists ' . self::table("pages") . ' (' - . 'uid_page integer auto_increment primary key' + + if (count(self::select("show tables like '" . self::table("pages") . "'"))) { + Debug::info("La base de données est déjà initialisée, on continue..."); + return; + } + + self::unbuf_query('create table if not exists ' . self::table("liens") . ' (' + . 'uid_page_de integer,' + . 'uid_page_vers integer,' + . 'groupe varchar(50)' . ')'); - self::unbuf_query('create table if not exists ' . self::table("enfants") . ' (' - . 'uid_page integer,' - . 'uid_page_parent integer,' - . 'groupe char(10)' + + self::unbuf_query('create table if not exists ' . self::table("modules") . ' (' + . 'modules varchar(50) primary key' . ')'); - self::unbuf_query('create table if not exists ' . self::table("proprietes") . ' (' - . 'uid_prop integer auto_increment primary key,' - . 'uid_page integer,' - . 'systeme bool,' - . 'nom char(30),' - . 'valeur char' - .')'); + + $table = "create table if not exists " . self::table("pages") . " (uid_page integer auto_increment primary key"; + foreach (Page::$attributs_globaux as $nom) { + $table .= ", $nom varchar(50)"; + } + $table .= ")"; + self::unbuf_query($table); + + foreach (Page::$modules as $nom_module => $m) { + $table = "create table if not exists " . self::table($nom_module) . " (uid_page integer"; + foreach ($m['attributs'] as $nom => &$attr) { + if (!$attr['global']) { + $table .= ", $nom varchar(50)"; + } + } + $table .= ")"; + self::unbuf_query($table); + self::modify("replace into " . self::table("modules") . " values('" . $nom_module . "')"); + } + self::test(); } public static function test() { // Insertion de la racine : - self::modify("insert into " . self::table("pages") . " values(0)"); - self::modify("insert into " . self::table("proprietes") . " values(0, 0, true, 'date_creation', 0)"); - self::modify("insert into " . self::table("proprietes") . " values(0, 0, true, 'date_modification', 0)"); - self::modify("insert into " . self::table("proprietes") . " values(0, 0, true, 'publier', 'true')"); - self::modify("insert into " . self::table("proprietes") . " values(0, 0, true, 'nom_systeme', 'racine')"); - self::modify("insert into " . self::table("proprietes") . " values(0, 0, true, 'composant_url', '')"); + self::modify("replace into " . self::table("pages") . " values(1, '0', '0', 'true', 'racine', '', 'mGalerieIndex')"); + self::modify("replace into " . self::table("pages") . " values(2, '0', '0', 'true', '', '', 'mGaleriePeriode')"); + self::modify("replace into " . self::table("pages") . " values(3, '0', '0', 'true', '', '', 'mGaleriePeriode')"); + self::modify("replace into " . self::table("liens") . " values(1, 2, 'enfant')"); + self::modify("replace into " . self::table("liens") . " values(1, 3, 'enfant')"); } public static function begin_transaction() { @@ -100,7 +121,7 @@ class BDD { public static function modify($q) { debug::info("sql : $q;"); - mysql_query($q . ";", self::get()) or Debug::sqlerror(); + mysql_unbuffered_query($q . ";", self::get()) or Debug::sqlerror(); } public static function table($nom) { diff --git a/cms2/code/document.php b/cms2/code/document.php index 7cc1a65..e5308bb 100644 --- a/cms2/code/document.php +++ b/cms2/code/document.php @@ -209,6 +209,11 @@ ElementDocument::add_widget("text_line", function($d, $select){ }); +ElementDocument::add_widget("text_no_space", function($d, $select){ + return $d->text("Not Implemented Yet : w_text_line($select)"); + }); + + ElementDocument::add_widget("text_rich", function($d, $select){ return $d->text("Not Implemented Yet : w_text_rich($select)"); }); @@ -226,6 +231,12 @@ ElementDocument::add_widget("img_file", function($d, $select){ }); +ElementDocument::add_widget("date", function($d, $select){ + // affichage localisé. + return $d->text("Not Implemented Yet : date($select)"); + }); + + ElementDocument::add_widget("liste", function($d, $select, $function_formattage_elements) { $l = $d->ul(); $l->li()->text("Not Implemented Yet"); diff --git a/cms2/code/main.php b/cms2/code/main.php index 6683c18..4b0152e 100644 --- a/cms2/code/main.php +++ b/cms2/code/main.php @@ -3,10 +3,11 @@ function main() { echo "
";
 	initModules();
-	var_dump(Page::$modules);
-	echo "
"; + //var_dump(Page::$modules); + $bdd = BDD::get(); BDD::reset(); + echo ""; $g = new mAdminListeUtilisateurs(); diff --git a/cms2/code/page.php b/cms2/code/page.php index 161090a..087bb6e 100644 --- a/cms2/code/page.php +++ b/cms2/code/page.php @@ -24,7 +24,7 @@ function ressources_statiques($res) { call_user_func(array($i, "info")); Page::$limitation_infos_module = $lim; } else { - // TODO : ... jusqu'ici (Page::$modules[$m]['ressources_statiques'] peut être factorisé aussi. + // TODO : ... jusqu'ici (Page::$modules[$m]['ressources_statiques'] peut être factorisé aussi. (pas pour attribut)) Page::$modules[$m]['ressources_statiques'] = qw(Page::$modules[$m]['ressources_statiques'], $res); } } @@ -42,7 +42,7 @@ function ressources_dynamiques($res) { call_user_func(array($i, "info")); Page::$limitation_infos_module = $lim; } else { - // TODO : ... jusqu'ici (Page::$modules[$m]['ressources_dynamiques'] peut être factorisé aussi. + // TODO : ... jusqu'ici (Page::$modules[$m]['ressources_dynamiques'] peut être factorisé aussi. (pas pour attribut)) Page::$modules[$m]['ressources_dynamiques'] = qw(Page::$modules[$m]['ressources_dynamiques'], $res); } } @@ -60,11 +60,29 @@ function types_enfants($types) { call_user_func(array($i, "info")); Page::$limitation_infos_module = $lim; } else { - // TODO : ... jusqu'ici (Page::$modules[$m]['types_enfants'] peut être factorisé aussi. + // TODO : ... jusqu'ici (Page::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)). Page::$modules[$m]['types_enfants'] = qw(Page::$modules[$m]['types_enfants'], $types); } } +function groupes_enfants($groupes) { + // TODO : factoriser d'ici... + $lim = Page::$limitation_infos_module; + $m = Page::$module_en_cours; + if ($lim !== true && $lim != "attribut") + return; + + if (is_inherit($groupes)) { + $i = $groupes["inherit"]; + Page::$limitation_infos_module = "groupes_enfants"; + call_user_func(array($i, "info")); + Page::$limitation_infos_module = $lim; + } else { + // TODO : ... jusqu'ici (Page::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)). + Page::$modules[$m]['groupes_enfants'] = qw(Page::$modules[$m]['groupes_enfants'], $groupes); + } +} + function attribut($nom, $type = null, $defaut = null) { $lim = Page::$limitation_infos_module; $m = Page::$module_en_cours; @@ -78,16 +96,17 @@ function attribut($nom, $type = null, $defaut = null) { Page::$limitation_infos_module = $lim; } else { if ($type === null || $defaut === null) { - Debug::error("fonction attribut() : les paramètres $type et $defaut doivent être définis"); + Debug::error('fonction attribut() : les paramètres $type et $defaut doivent être définis'); } if (!Document::has_widget("w_" . $type)) { Debug::error("L'attribut $nom a le type $type, mais aucun widget w_$type n'existe."); } - Page::$modules[$m]['attributs'][$nom] = array("type" => $type, "defaut" => $defaut); + Page::$modules[$m]['attributs'][$nom] = array("global" => false, "type" => $type, "defaut" => $defaut); } } -function attributs_globaux() { +function attributs_globaux($attributs) { + Page::$attributs_globaux = qw(Page::$attributs_globaux, $attributs); } function module($m) { @@ -95,17 +114,24 @@ function module($m) { 'ressources_statiques' => qw(), 'ressources_dynamiques' => qw(), 'types_enfants' => qw(), - 'attributs' => qw() + 'groupes_enfants' => qw(), + 'attributs' => array() ); } function initModules() { - foreach (Page::$modules as $m => $v) { - echo $m . "
"; - Page::$module_en_cours = $m; - call_user_func(array($m, "info")); + foreach (Page::$modules as $nom_module => $m) { + Page::$module_en_cours = $nom_module; + call_user_func(array($nom_module, "info")); } Page::$module_en_cours = null; + foreach (Page::$attributs_globaux as $ag) { + foreach (Page::$modules as &$m) { + if (array_key_exists($ag, $m['attributs'])) { + $m['attributs'][$ag]['global'] = true; + } + } + } } class Page { @@ -117,12 +143,13 @@ class Page { public static function info() { // Convention de nommage pour les ressources statiques : // res_h_xxx = html, res_i_xxx = image, res_c_xxx = css, res_j_xxx = javascript - attributs_globaux("date_creation date_modification publier nom_systeme composant_url"); + attributs_globaux("date_creation date_modification publier nom_systeme composant_url type"); attribut("date_creation", "date", "0"); attribut("date_modification", "date", "0"); attribut("publier", "bool", "false"); attribut("nom_systeme", "text_no_space", ""); attribut("composant_url", "text_no_space", "page"); + attribut("type", "text_no_space", "mSiteIndex"); } private $parent = null; @@ -189,6 +216,7 @@ class Page { // ... where prop_cond_1 = val_cond_1 and prop_cond_2 = val_cond_2; // Tous les enfants + niy("enfants__"); $select = "select uid_page from " . BDD::table("enfants") . " where uid_page_parent = " . $this->uid(); if ($condition !== true) { @@ -206,10 +234,9 @@ class Page { } $select .= ") group by uid_page having count(uid_page) = " . count($conditions); } - + echo "Page::enfants : result of select : "; var_dump(BDD::select($select . ";")); - niy("enfants__"); } public function ajouter_enfant($type, $groupe = "main") { @@ -217,18 +244,18 @@ class Page { // renvoyer une instance de la sous-classe de Page correspondant à $type. niy("ajouter_enfant"); } - + public function lier_page($page_source, $groupe = "main") { $l = ajouter_enfant("Lien", "$groupe"); $l->lien = $page_source; niy("lier_page"); } - + public static function page_systeme($nom) { // select from pages where nomSysteme = $nom limit 1 niy("page_systeme"); } - + public function if_perm($action, $nom_propriété) { // @param $action = suite de lettre parmi les suivantes : // R = Read prop @@ -320,4 +347,6 @@ class CollectionPages { } } +module("Page"); // TODO ! attention : risque de conflit avec la table pages dans la bdd. Page ne devrait pas y apparaître de toute façon. + ?> \ No newline at end of file diff --git a/cms2/modules/admin/admin-utilisateurs.php b/cms2/modules/admin/admin-utilisateurs.php index 5672273..9ca4e92 100644 --- a/cms2/modules/admin/admin-utilisateurs.php +++ b/cms2/modules/admin/admin-utilisateurs.php @@ -4,7 +4,7 @@ class mAdminListeUtilisateurs extends Page { public static function info() { ressources_statiques("i_icône_nouvelle_page c_style"); ressources_dynamiques("h_page h_liste_mots_de_passe"); - types_enfants("AdminUtilisateur"); + types_enfants("mAdminUtilisateur"); } public function res_i_icône_nouvelle_page() { @@ -41,7 +41,6 @@ class mAdminUtilisateur extends Page { ressources_statiques("c_style"); // TODO : h_page = affichage "en grand" de l'utilisateur (~= page perso, par ex. destination d'un lien de la page contacts). ressources_dynamiques("h_admin"); - types_enfants("AdminUtilisateur"); // TODO : le couple (nom,prenom) doit être unique. attribut("nom", "text_line", "Dupondt"); attribut("prenom", "text_line", "Jean"); diff --git a/cms2/modules/galerie/galerie.php b/cms2/modules/galerie/galerie.php index 068e25f..1ec244a 100644 --- a/cms2/modules/galerie/galerie.php +++ b/cms2/modules/galerie/galerie.php @@ -4,11 +4,13 @@ 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 $types_enfants = "mGaleriePeriode"; public static function info() { - ressources_statiques("i_icône_nouvelle_page".get_class()." c_style".get_class()); + ressources_statiques("i_icône_nouvelle_page c_style"); ressources_dynamiques("h_page h_miniature h_mini_miniature"); - types_enfants("GalerieÉvènement"); + types_enfants(self::$types_enfants); + groupes_enfants("liens"); attribut("titre", "text_line", self::$texte_titre); attribut("description", "text_rich", ""); attribut("dans_nouveautes", "bool", "true"); @@ -65,18 +67,21 @@ 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 $types_enfants = "mGaleriePeriode"; } -class mGaleriePériode extends mGalerieBase { +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 $types_enfants = "mGalerieEvenement"; } -class mGalerieÉvénement extends mGalerieBase { +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 $types_enfants = "mGaleriePhoto"; } class mGaleriePhoto extends mGalerieBase { @@ -157,8 +162,8 @@ class mGaleriePhoto extends mGalerieBase { } module("mGalerieIndex"); -module("mGaleriePériode"); -module("mGalerieÉvénement"); +module("mGaleriePeriode"); +module("mGalerieEvenement"); module("mGaleriePhoto"); ?> \ No newline at end of file diff --git a/cms2/modules/include.php b/cms2/modules/include.php index 1a7a66e..83400e7 100644 --- a/cms2/modules/include.php +++ b/cms2/modules/include.php @@ -6,5 +6,6 @@ require_once(dirname(__FILE__) . "/../code/page.php"); require_once(dirname(__FILE__) . "/galerie/include.php"); require_once(dirname(__FILE__) . "/admin/include.php"); require_once(dirname(__FILE__) . "/squelette/include.php"); +require_once(dirname(__FILE__) . "/nouveautes/include.php"); ?> \ No newline at end of file diff --git a/cms2/modules/nouveautes/nouveautes.php b/cms2/modules/nouveautes/nouveautes.php index fcc8ab3..d948bf9 100644 --- a/cms2/modules/nouveautes/nouveautes.php +++ b/cms2/modules/nouveautes/nouveautes.php @@ -4,7 +4,7 @@ class mNouveautes extends Page { public static function info() { ressources_statiques("i_icône_nouvelle_page c_style"); ressources_dynamiques("h_page"); - groupe_enfants("sources"); + groupes_enfants("sources"); attribut("titre", "text_line", "Nouveautés"); attribut("description", "text_rich", ""); }