Conventions de nommage pour les attributs et les modules.

This commit is contained in:
Georges Dupéron 2010-10-14 17:09:42 +02:00
parent b5842c2a85
commit 2989d15aca
7 changed files with 88 additions and 83 deletions

View File

@ -26,18 +26,17 @@ 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("liens"));
// Création de la table modules pour qu'on puisse select dedans même si elle n'existe pas.
// TODO : fusionner avec la création de la table modules dans init();
self::unbuf_query('create table if not exists ' . self::table("modules") . ' ('
self::unbuf_query('drop table if exists ' . self::table("_pages"));
self::unbuf_query('drop table if exists ' . self::table("_liens"));
// Création de la table _modules pour qu'on puisse select dedans même si elle n'existe pas.
// TODO : fusionner avec la création de la table _modules dans init();
self::unbuf_query('create table if not exists ' . self::table("_modules") . ' ('
. 'nom_module varchar(50) primary key'
. ')');
foreach (self::select('select * from ' . self::table("modules")) as $module) {
foreach (self::select('select * from ' . self::table("_modules")) as $module) {
self::unbuf_query('drop table if exists ' . self::table($module["nom_module"]));
}
// TODO : drop les tables des classes (les noms sont dans self::table("modules")).
self::unbuf_query('drop table if exists ' . self::table("modules"));
self::unbuf_query('drop table if exists ' . self::table("_modules"));
self::init();
}
@ -45,49 +44,49 @@ 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") . "'")) == 1) {
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;
}
self::unbuf_query('create table if not exists ' . self::table("liens") . ' ('
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("modules") . ' ('
self::unbuf_query('create table if not exists ' . self::table("_modules") . ' ('
. 'nom_module varchar(50) primary key'
. ')');
$table = "create table if not exists " . self::table("pages") . " ("
. "uid_page integer auto_increment primary key"
. ", type varchar(50)";
foreach (Page::$attributs_globaux as $nom => $attr) {
$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 (mPage::$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::modify("replace into " . self::table("modules") . " values('" . $nom_module . "')");
self::modify("replace into " . self::table("_modules") . " values('" . $nom_module . "')");
self::unbuf_query($table);
}
$table = "create table if not exists " . self::table("_pages") . " ("
. "_uid_page integer auto_increment primary key"
. ", _type varchar(50)";
foreach (mPage::$attributs_globaux as $nom => $attr) {
$table .= ", $nom varchar(50)";
}
$table .= ")";
self::unbuf_query($table);
self::test();
}
public static function test() {
// TODO : dans les modules qui proposent un nom_systeme, faire une fonction init_<nom_systeme>
// Cette fonction sera appellée lors de l'initialisation de la BDD.
$r = Page::créer_page("mGalerieIndex");
// Cette fonction sera appellée lors de l'initialisation de la BDD et leur permettra de la remplir.
$r = mPage::créer_page("mGalerieIndex");
$r->nom_systeme = 'racine';
$r->composant_url = '';
$r->titre = 'Galerie';

View File

@ -15,9 +15,9 @@ function main() {
$res = array_key_exists('res', $_GET) ? $_GET['res'] : null;
if (array_key_exists('uid_page', $_GET)) {
$page = Page::page_uid($_GET['uid_page']);
$page = mPage::page_uid($_GET['uid_page']);
} else {
$page = Page::page_systeme('racine');
$page = mPage::page_systeme('racine');
}
$rendu = $page->rendu($res);

View File

@ -1,5 +1,14 @@
<?php
// Convention de nommage pour les ressources statiques :
// res_h_xxx = html, res_i_xxx = image, res_c_xxx = css, res_j_xxx = javascript
// Convention de nommage pour les modules :
// Doivent commencer par 'm' suivi de CamelCase (et donc ne peuvent pas commencer par "_").
// Convention de nommage pour les attributs :
// Pas de "_" au début (par ex. _publier est interdit).
require_once(dirname(__FILE__) . "/util.php"); // qw
require_once(dirname(__FILE__) . "/document.php"); // widgets pour la vérification des types.
@ -13,72 +22,72 @@ function is_inherit($i) {
function ressources_statiques($res) {
// TODO : factoriser d'ici...
$lim = Page::$limitation_infos_module;
$m = Page::$module_en_cours;
$lim = mPage::$limitation_infos_module;
$m = mPage::$module_en_cours;
if ($lim !== true && $lim != "ressources_statiques")
return;
if (is_inherit($res)) {
$i = $res["inherit"];
Page::$limitation_infos_module = "ressources_statiques";
mPage::$limitation_infos_module = "ressources_statiques";
call_user_func(array($i, "info"), $i);
Page::$limitation_infos_module = $lim;
mPage::$limitation_infos_module = $lim;
} else {
// 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);
// TODO : ... jusqu'ici (mPage::$modules[$m]['ressources_statiques'] peut être factorisé aussi. (pas pour attribut))
mPage::$modules[$m]['ressources_statiques'] = qw(mPage::$modules[$m]['ressources_statiques'], $res);
}
}
function ressources_dynamiques($res) {
// TODO : factoriser d'ici...
$lim = Page::$limitation_infos_module;
$m = Page::$module_en_cours;
$lim = mPage::$limitation_infos_module;
$m = mPage::$module_en_cours;
if ($lim !== true && $lim != "ressources_dynamiques")
return;
if (is_inherit($res)) {
$i = $res["inherit"];
Page::$limitation_infos_module = "ressources_dynamiques";
mPage::$limitation_infos_module = "ressources_dynamiques";
call_user_func(array($i, "info"), $i);
Page::$limitation_infos_module = $lim;
mPage::$limitation_infos_module = $lim;
} else {
// 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);
// TODO : ... jusqu'ici (mPage::$modules[$m]['ressources_dynamiques'] peut être factorisé aussi. (pas pour attribut))
mPage::$modules[$m]['ressources_dynamiques'] = qw(mPage::$modules[$m]['ressources_dynamiques'], $res);
}
}
function type_liens($groupe, $type = null) {
// TODO : factoriser d'ici...
$lim = Page::$limitation_infos_module;
$m = Page::$module_en_cours;
$lim = mPage::$limitation_infos_module;
$m = mPage::$module_en_cours;
if ($lim !== true && $lim != "type_liens")
return;
if (is_inherit($groupe)) {
$i = $res["inherit"];
Page::$limitation_infos_module = "type_liens";
mPage::$limitation_infos_module = "type_liens";
call_user_func(array($i, "info"), $i);
Page::$limitation_infos_module = $lim;
mPage::$limitation_infos_module = $lim;
} else {
if ($type === null) {
Debug::error('fonction type_liens() : le paramètres $type est obligatoire.');
}
// TODO : ... jusqu'ici (Page::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)).
Page::$modules[$m]['type_liens'][$groupe] = $type;
// TODO : ... jusqu'ici (mPage::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)).
mPage::$modules[$m]['type_liens'][$groupe] = $type;
}
}
function attribut($nom, $type = null, $defaut = null) {
$lim = Page::$limitation_infos_module;
$m = Page::$module_en_cours;
$lim = mPage::$limitation_infos_module;
$m = mPage::$module_en_cours;
if ($lim !== true && $lim != "attribut")
return;
if (is_inherit($nom)) {
$i = $nom["inherit"];
Page::$limitation_infos_module = "attribut";
mPage::$limitation_infos_module = "attribut";
call_user_func(array($i, "info"), $i);
Page::$limitation_infos_module = $lim;
mPage::$limitation_infos_module = $lim;
} else {
if ($type === null || $defaut === null) {
Debug::error('fonction attribut() : les paramètres $type et $defaut est obligatoire.');
@ -86,16 +95,16 @@ function attribut($nom, $type = null, $defaut = null) {
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("global" => false, "type" => $type, "defaut" => $defaut);
mPage::$modules[$m]['attributs'][$nom] = array("global" => false, "type" => $type, "defaut" => $defaut);
}
}
function attribut_global($nom, $type, $defaut) {
Page::$attributs_globaux[$nom] = array('type' => $type, 'defaut' => $defaut);
mPage::$attributs_globaux[$nom] = array('type' => $type, 'defaut' => $defaut);
}
function module($m) {
Page::$modules[$m] = array(
mPage::$modules[$m] = array(
'ressources_statiques' => qw(),
'ressources_dynamiques' => qw(),
'type_liens' => array('enfants' => false),
@ -104,13 +113,13 @@ function module($m) {
}
function initModules() {
foreach (Page::$modules as $nom_module => $m) {
Page::$module_en_cours = $nom_module;
foreach (mPage::$modules as $nom_module => $m) {
mPage::$module_en_cours = $nom_module;
call_user_func(array($nom_module, "info"), $nom_module);
}
Page::$module_en_cours = null;
foreach (Page::$attributs_globaux as $nom_ag => $ag) {
foreach (Page::$modules as &$m) {
mPage::$module_en_cours = null;
foreach (mPage::$attributs_globaux as $nom_ag => $ag) {
foreach (mPage::$modules as &$m) {
if (array_key_exists($nom_ag, $m['attributs'])) {
$m['attributs'][$nom_ag]['global'] = true;
}
@ -118,15 +127,13 @@ function initModules() {
}
}
class Page {
class mPage {
public static $modules = array();
public static $attributs_globaux = array();
public static $module_en_cours = null;
public static $limitation_infos_module = true;
public static function info($module) {
// Convention de nommage pour les ressources statiques :
// res_h_xxx = html, res_i_xxx = image, res_c_xxx = css, res_j_xxx = javascript
attribut_global("date_creation", "date", "0");
attribut_global("date_modification", "date", "0");
attribut_global("publier", "bool", "false");
@ -153,7 +160,7 @@ class Page {
public function rendu($res = null, $d = null) {
// Renvoie un document (classe ElementDocument).
// L'appel à une fonction statique via $this-> n'est pas propre, mais comment appeller la
// fonction du sous-type et pas celle de Page sinon ?
// fonction du sous-type et pas celle de mPage sinon ?
if ($res === null) {
$res = $this->module['ressources_dynamiques'][0];
}
@ -202,7 +209,7 @@ class Page {
public function parent() {
return self::page_uid(
BDD::select_one(
"select uid_page_de from " . BDD::table("liens") . " where uid_page_vers = " . $this->uid()
"select uid_page_de from " . BDD::table("_liens") . " where uid_page_vers = " . $this->uid()
)
);
}
@ -238,8 +245,8 @@ class Page {
// TODO : "natural join"
$select = "select uid_page_vers from "
. BDD::table("liens")
. " join " . BDD::table("pages") . " on uid_page = uid_page_vers"
. BDD::table("_liens")
. " join " . BDD::table("_pages") . " on _uid_page = uid_page_vers"
. " natural join " . BDD::table($this->type_liens("enfants"))
. " where groupe = 'enfants' and uid_page_de = " . $this->uid()
. $condition
@ -259,10 +266,10 @@ class Page {
public static function créer_page($nom_module) {
$module = self::$modules[$nom_module];
// Insert dans la table pages.
$insert = "insert into " . BDD::table("pages") . " set ";
$insert .= "uid_page = null";
$insert .= ", type = '" . $nom_module . "'";
// Insert dans la table _pages.
$insert = "insert into " . BDD::table("_pages") . " set ";
$insert .= "_uid_page = null";
$insert .= ", _type = '" . $nom_module . "'";
foreach (self::$attributs_globaux as $nom => $attr) {
if (array_key_exists($nom, $module['attributs'])) {
$insert .= ", $nom = '" . mysql_real_escape_string($module['attributs'][$nom]['defaut']) . "'";
@ -276,7 +283,7 @@ class Page {
// Insert dans la table du module
$insert = "insert into " . BDD::table($nom_module) . " set ";
$insert .= "uid_page = " . $uid_nouvelle_page;
$insert .= "_uid_page = " . $uid_nouvelle_page;
foreach ($module['attributs'] as $nom => $attr) {
if (!$attr['global']) {
$insert .= ", $nom = '" . mysql_real_escape_string($attr['defaut']) . "'";
@ -302,7 +309,7 @@ class Page {
$page_vers = $page_vers->uid();
}
$insert = "insert into " . BDD::table("liens") . " set";
$insert = "insert into " . BDD::table("_liens") . " set";
$insert .= " uid_page_de = " . $this->uid();
$insert .= ", uid_page_vers = " . $page_vers;
$insert .= ", groupe = '" . $groupe . "'";
@ -310,16 +317,15 @@ class Page {
}
public static function page_systeme($nom) {
// select from pages where nomSysteme = $nom limit 1
return self::page_uid(
BDD::select_one(
"select uid_page from " . BDD::table("pages") . " where nom_systeme = '" . mysql_real_escape_string($nom) . "';"
"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 . ";";
$select = "select _type from " . BDD::table("_pages") . " where _uid_page = " . $uid . ";";
$type = BDD::select_one($select);
$ret = new $type();
$ret->uid = $uid;
@ -368,8 +374,8 @@ class Page {
private function get_prop_direct($nom) {
// Récupère l'attribut "$nom" depuis la BDD.
$select_table = (self::est_propriete_globale($nom)) ? "pages" : $this->nom_module();
$select = "select $nom from " . BDD::table($select_table) . " where uid_page = " . $this->uid() . ";";
$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));
}
@ -385,8 +391,8 @@ class Page {
public function set_prop_direct($nom, $val) {
// Modifie l'attribut "$nom" dans la BDD.
$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();
$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);
if ($nom != "date_modification") {
$this->date_modification = time();
@ -431,6 +437,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.
module("mPage");
?>

View File

@ -1,6 +1,6 @@
<?php
class mAdminListeUtilisateurs extends Page {
class mAdminListeUtilisateurs extends mPage {
public static function info($module) {
ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page h_liste_mots_de_passe");
@ -36,7 +36,7 @@ class mAdminListeUtilisateurs extends Page {
}
}
class mAdminUtilisateur extends Page {
class mAdminUtilisateur extends mPage {
public static function info($module) {
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).

View File

@ -1,6 +1,6 @@
<?php
abstract class mGalerieBase extends Page {
abstract class mGalerieBase extends mPage {
protected static $texte_titre = "Galerie";
protected static $texte_nouvelle_page = "Nouvel élément";
protected static $icone_nouvelle_page = "nouvelle_periode.png";

View File

@ -1,6 +1,6 @@
<?php
class mNouveautes extends Page {
class mNouveautes extends mPage {
public static function info($module) {
ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page");

View File

@ -1,6 +1,6 @@
<?php
class mSquelette extends Page {
class mSquelette extends mPage {
// Trouver un moyen pour que mSquelette soit appellé après avoir généré la page, pour qu'il puisse l'emballer.
public static function info($module) {