Création d'une nouvelle instance d'une sous-classe de Page en fonction de l'uid.
+ Page->enfants() marche presque.
This commit is contained in:
parent
20aafcf6dc
commit
0a9a9aa99f
|
@ -1,19 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Le widget w_img doit gérer le stockage de l'image dans un dossier, la création de la miniature et le stockage dans la BDD du chemin vers l'image.
|
|
||||||
|
|
||||||
/*
|
|
||||||
Base de données :
|
|
||||||
table page (uid autoincrement primary key, nomSysteme, composantUrl, parent)
|
|
||||||
Racine : (?,'racine','',NULL)
|
|
||||||
table propriétés(uid auto pk, fk uid_page, bool systeme, nom, valeur)
|
|
||||||
(?,true,dateCréation,?)
|
|
||||||
(?,true,dateModification,?)
|
|
||||||
(?,false,publier,?)
|
|
||||||
(?,true,nomSysteme,?)
|
|
||||||
(?,true,composantUrl,?)
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Lors d'une requête, ne renvoyer que les éléments que l'utilisateur a
|
// Lors d'une requête, ne renvoyer que les éléments que l'utilisateur a
|
||||||
// le droit de voir. Filtrage après la requête (attention au LIMIT et OFFSET !) ?
|
// le droit de voir. Filtrage après la requête (attention au LIMIT et OFFSET !) ?
|
||||||
// ou y a-t-il moyen d'exprimer ça directement dans la requête ?
|
// ou y a-t-il moyen d'exprimer ça directement dans la requête ?
|
||||||
|
@ -41,6 +27,9 @@ class BDD {
|
||||||
public static function reset() {
|
public static function reset() {
|
||||||
self::unbuf_query('drop table if exists ' . self::table("pages"));
|
self::unbuf_query('drop table if exists ' . self::table("pages"));
|
||||||
self::unbuf_query('drop table if exists ' . self::table("liens"));
|
self::unbuf_query('drop table if exists ' . self::table("liens"));
|
||||||
|
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")).
|
// 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();
|
self::init();
|
||||||
|
@ -62,7 +51,7 @@ class BDD {
|
||||||
. ')');
|
. ')');
|
||||||
|
|
||||||
self::unbuf_query('create table if not exists ' . self::table("modules") . ' ('
|
self::unbuf_query('create table if not exists ' . self::table("modules") . ' ('
|
||||||
. 'modules varchar(50) primary key'
|
. 'nom_module varchar(50) primary key'
|
||||||
. ')');
|
. ')');
|
||||||
|
|
||||||
$table = "create table if not exists " . self::table("pages") . " (uid_page integer auto_increment primary key";
|
$table = "create table if not exists " . self::table("pages") . " (uid_page integer auto_increment primary key";
|
||||||
|
@ -80,20 +69,24 @@ class BDD {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$table .= ")";
|
$table .= ")";
|
||||||
self::unbuf_query($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);
|
||||||
}
|
}
|
||||||
|
|
||||||
self::test();
|
self::test();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function test() {
|
public static function test() {
|
||||||
// Insertion de la racine :
|
// TODO : dans les modules qui proposent un nom_systeme, faire une fonction init_<nom_systeme>
|
||||||
self::modify("replace into " . self::table("pages") . " values(1, '0', '0', 'true', 'racine', '', 'mGalerieIndex')");
|
// Cette fonction sera appellée lors de l'initialisation de la BDD.
|
||||||
self::modify("replace into " . self::table("pages") . " values(2, '0', '0', 'true', '', '', 'mGaleriePeriode')");
|
self::modify("replace into " . self::table("pages") . " values(1, '0', '0', 'true', 'racine', '', 'mGalerieIndex', 'true')");
|
||||||
self::modify("replace into " . self::table("pages") . " values(3, '0', '0', 'true', '', '', 'mGaleriePeriode')");
|
self::modify("replace into " . self::table("pages") . " values(2, '0', '0', 'true', '', 'periode-1', 'mGaleriePeriode', 'true')");
|
||||||
self::modify("replace into " . self::table("liens") . " values(1, 2, 'enfant')");
|
self::modify("replace into " . self::table("pages") . " set uid_page = 3, date_creation = '0', date_modification = '0', publier = 'true', nom_systeme = '', composant_url = 'periode-2', type = 'mGaleriePeriode', dans_nouveautes = 'false'");
|
||||||
self::modify("replace into " . self::table("liens") . " values(1, 3, 'enfant')");
|
self::modify("replace into " . self::table("liens") . " values(1, 2, 'enfants')");
|
||||||
|
self::modify("replace into " . self::table("liens") . " values(1, 3, 'enfants')");
|
||||||
|
self::modify("replace into " . self::table("mGalerieIndex") . " values(1, 'Galerie', 'une galerie')");
|
||||||
|
self::modify("replace into " . self::table("mGaleriePeriode") . " values(2, 'Periode 1', 'été')");
|
||||||
|
self::modify("replace into " . self::table("mGaleriePeriode") . " values(3, 'Periode 2', 'hiver')");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function begin_transaction() {
|
public static function begin_transaction() {
|
||||||
|
@ -113,7 +106,7 @@ class BDD {
|
||||||
debug::info("sql : " . $q);
|
debug::info("sql : " . $q);
|
||||||
$qres = mysql_query($q, BDD::get()) or Debug::sqlerror();
|
$qres = mysql_query($q, BDD::get()) or Debug::sqlerror();
|
||||||
$ret = array();
|
$ret = array();
|
||||||
while ($row = mysql_fetch_array($qres)) {
|
while ($row = mysql_fetch_assoc($qres)) {
|
||||||
$ret[] = $row;
|
$ret[] = $row;
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
|
@ -137,53 +130,4 @@ class BDD {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
class DB extends Selectable {
|
|
||||||
private static $handle = null;
|
|
||||||
public function __construct() {
|
|
||||||
if (self::$handle === null) {
|
|
||||||
niy("Connexion à la BDD");
|
|
||||||
} else {
|
|
||||||
return self::$handle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Selectable {
|
|
||||||
// TODO : comment faire un select sur la table page ?
|
|
||||||
// TODO : comment créer une nouvelle page ?
|
|
||||||
function select($qw_champs, $qw_ordre = "", $limit = 0, $offset = 0) {
|
|
||||||
// Retourne un selectable, qui a une méthode run() (la méthode run renvoie la liste d'éléments. Chaque élément a une méthode set()).
|
|
||||||
// Une limit de 0 signifie qu'on prend tous les éléments à partir de $offset.
|
|
||||||
}
|
|
||||||
|
|
||||||
function set($valeur, $qw_champs) {
|
|
||||||
// Appelle set(valeur) sur chaque élément de $this->select(champs, ordre, 0, 0)->run()
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_with_uid($valeur, int $uid) {
|
|
||||||
// Appelle set(valeur) sur la ligne de la base de données avec cet uid.
|
|
||||||
// Les <form> des pages ont des champ <input type="hidden" name"_uid_"> et un bouton submit.
|
|
||||||
// Lorsqu'on active ce submit, les lignes correspondant aux _uid_ dans la base de données reçoivent la bonne valeur.
|
|
||||||
}
|
|
||||||
|
|
||||||
function sql() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_setter($condition, $fonction_setter) {
|
|
||||||
// Si on fait un set qui remplit la condition, la fonction_setter est appellée au lieu de modifier directement la bdd.
|
|
||||||
// Condition peut être :
|
|
||||||
// true // toujours appellé (pour les permissions, les dates de modification etc.).
|
|
||||||
// type de page parente // lorsqu'on récupère la liste des enfants d'une page de ce type.
|
|
||||||
// type de page, nom attribut // lorsqu'on récupère cet attribut d'une page de ce type.
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_getter($condition, $fonction_getter) {
|
|
||||||
// Comme add_setter().
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -225,6 +225,7 @@ ElementDocument::add_widget("bool", function($d, $select){
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Le widget w_img_file doit gérer le stockage de l'image dans un dossier, la création de la miniature et le stockage dans la BDD du chemin vers l'image.
|
||||||
ElementDocument::add_widget("img_file", function($d, $select){
|
ElementDocument::add_widget("img_file", function($d, $select){
|
||||||
// input[file] et <img>
|
// input[file] et <img>
|
||||||
return $d->text("Not Implemented Yet : w_img_file($select)");
|
return $d->text("Not Implemented Yet : w_img_file($select)");
|
||||||
|
|
|
@ -7,17 +7,18 @@ function main() {
|
||||||
|
|
||||||
$bdd = BDD::get();
|
$bdd = BDD::get();
|
||||||
BDD::reset();
|
BDD::reset();
|
||||||
echo "</pre>";
|
|
||||||
|
$r = Page::page_uid(1);
|
||||||
|
var_dump($r);
|
||||||
|
|
||||||
$g = new mAdminListeUtilisateurs();
|
$p = $r->rendu();
|
||||||
|
|
||||||
$p = $g->rendu();
|
|
||||||
echo "<pre>";
|
echo "<pre>";
|
||||||
echo htmlspecialchars($p->to_XHTML_5());
|
echo htmlspecialchars($p->to_XHTML_5());
|
||||||
echo "</pre>";
|
echo "</pre>";
|
||||||
|
|
||||||
BDD::close();
|
BDD::close();
|
||||||
Debug::afficher();
|
Debug::afficher();
|
||||||
|
echo "</pre>";
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -152,13 +152,12 @@ class Page {
|
||||||
attribut("type", "text_no_space", "mSiteIndex");
|
attribut("type", "text_no_space", "mSiteIndex");
|
||||||
}
|
}
|
||||||
|
|
||||||
private $parent = null;
|
public function nom_module() {
|
||||||
public function parent() {
|
return get_class($this);
|
||||||
return $this->parent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function module() {
|
public function module() {
|
||||||
return self::$modules[get_class($this)];
|
return self::$modules[$this->nom_module()];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function rendu($res = null, $d = null) {
|
public function rendu($res = null, $d = null) {
|
||||||
|
@ -177,6 +176,7 @@ class Page {
|
||||||
public function url($ressource = null) {
|
public function url($ressource = null) {
|
||||||
// Renvoie toute l'url (de la ressource principale ou de $ressource).
|
// Renvoie toute l'url (de la ressource principale ou de $ressource).
|
||||||
niy("url");
|
niy("url");
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function composant_url() {
|
public function composant_url() {
|
||||||
|
@ -203,40 +203,21 @@ class Page {
|
||||||
// limit = null || limit = 0 => pas de limite
|
// limit = null || limit = 0 => pas de limite
|
||||||
// offset = null => offset = 0
|
// offset = null => offset = 0
|
||||||
|
|
||||||
// Deux possibilités :
|
niy("enfants");
|
||||||
// 1) On select tous les rangs qui correspondent à une des $condition,
|
// TODO : "natural join"
|
||||||
// puis on group by having count(uid_page) = <nombre de condition>.
|
echo "uid : ";
|
||||||
// 2) On met chaque "type" (galerie-index, ...) dans une table séparée,
|
var_dump($this->uid());
|
||||||
// et on a une table des types. On select dans cette table des types
|
$select = "select uid_page_vers from "
|
||||||
// les tables qui ont les champs sur lesquels portent les conditions,
|
. BDD::table("liens")
|
||||||
// puis on construit une requête comme suit :
|
. " join " . BDD::table("pages") . " on uid_page = uid_page_vers "
|
||||||
// select * from (select uid_page, prop_cond_1, prop_cond_2 from table_1)
|
. " natural join " . BDD::table($this->nom_module())
|
||||||
// union (select uid_page, prop_cond_1, prop_cond_2 from table_2)
|
. " where groupe = 'enfants' and uid_page_de = " . $this->uid() . ";";
|
||||||
// union (... table_3)
|
$res = array();
|
||||||
// ... where prop_cond_1 = val_cond_1 and prop_cond_2 = val_cond_2;
|
foreach (BDD::select($select) as $row) {
|
||||||
|
array_push($res, self::page_uid($row["uid_page_vers"]));
|
||||||
// Tous les enfants
|
|
||||||
niy("enfants__");
|
|
||||||
$select = "select uid_page from " . BDD::table("enfants") . " where uid_page_parent = " . $this->uid();
|
|
||||||
|
|
||||||
if ($condition !== true) {
|
|
||||||
// Toutes les propriétés des enfants
|
|
||||||
$select = "select$distinct uid_page from " . BDD::table("proprietes") . " where uid_page in (" . $select . ")";
|
|
||||||
// Liste des conditions :
|
|
||||||
$select .= "and (";
|
|
||||||
$firstcond = true;
|
|
||||||
foreach ($conditions as $c) {
|
|
||||||
if (!$firstcond) {
|
|
||||||
$select .= " or ";
|
|
||||||
}
|
|
||||||
$select .= "(nom = '" . mysql_real_escape_string($c["cle"]) . "' and valeur = '" . mysql_real_escape_string($c["valeur"]) . "')";
|
|
||||||
$firstcond = false;
|
|
||||||
}
|
|
||||||
$select .= ") group by uid_page having count(uid_page) = " . count($conditions);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Page::enfants : result of select : ";
|
return $res;
|
||||||
var_dump(BDD::select($select . ";"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ajouter_enfant($type, $groupe = "main") {
|
public function ajouter_enfant($type, $groupe = "main") {
|
||||||
|
@ -255,7 +236,26 @@ class Page {
|
||||||
// select from pages where nomSysteme = $nom limit 1
|
// select from pages where nomSysteme = $nom limit 1
|
||||||
niy("page_systeme");
|
niy("page_systeme");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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"];
|
||||||
|
$ret = new $type();
|
||||||
|
$ret->uid = $uid;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get_permissions_prop($prop) {
|
||||||
|
niy("get_permissions_prop");
|
||||||
|
}
|
||||||
|
public function get_permissions_enfants($groupe) {
|
||||||
|
niy("get_permissions_enfants");
|
||||||
|
}
|
||||||
public function if_perm($action, $nom_propriété) {
|
public function if_perm($action, $nom_propriété) {
|
||||||
// @param $action = suite de lettre parmi les suivantes :
|
// @param $action = suite de lettre parmi les suivantes :
|
||||||
// R = Read prop
|
// R = Read prop
|
||||||
|
|
|
@ -18,7 +18,7 @@ class mAdminListeUtilisateurs extends Page {
|
||||||
public function res_h_page($d) {
|
public function res_h_page($d) {
|
||||||
$d->w_titre("Utilisateurs");
|
$d->w_titre("Utilisateurs");
|
||||||
|
|
||||||
$l = $d->article()->w_tableau($this->enfants(true, "nom asc prenom asc"), function($e, $tr) {
|
$l = $d->article()->w_tableau($this->enfants(true, "+nom +prenom"), function($e, $tr) {
|
||||||
$e->rendu("h_admin", $tr);
|
$e->rendu("h_admin", $tr);
|
||||||
});
|
});
|
||||||
$nouveau = $l->tbody(0)->tr()->td(6);
|
$nouveau = $l->tbody(0)->tr()->td(6);
|
||||||
|
@ -29,7 +29,7 @@ class mAdminListeUtilisateurs extends Page {
|
||||||
public function res_h_liste_mots_de_passe($d) {
|
public function res_h_liste_mots_de_passe($d) {
|
||||||
$d->w_titre("Liste de mots de passe.");
|
$d->w_titre("Liste de mots de passe.");
|
||||||
|
|
||||||
$l = $d->article()->w_liste($this->enfants("@groupe = utilisateurs", "nom asc prenom asc"), function($e, $li) {
|
$l = $d->article()->w_liste($this->enfants("u_groupe = 'utilisateurs'", "+nom +prenom"), function($e, $li) {
|
||||||
$e->rendu("h_admin_mdp", $li);
|
$e->rendu("h_admin_mdp", $li);
|
||||||
});
|
});
|
||||||
return $d;
|
return $d;
|
||||||
|
|
|
@ -25,8 +25,8 @@ abstract class mGalerieBase extends Page {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function res_h_page($d) {
|
public function res_h_page($d) {
|
||||||
$d->w_en_tete(); // 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 desc"), function($e, $li) {
|
$l = $d->article()->w_liste($this->enfants(true, "-date_creation"), function($e, $li) {
|
||||||
$a = $li->a($e->uid());
|
$a = $li->a($e->uid());
|
||||||
$e->rendu("h_miniature", $a);
|
$e->rendu("h_miniature", $a);
|
||||||
});
|
});
|
||||||
|
@ -51,10 +51,12 @@ abstract class mGalerieBase extends Page {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function res_h_mini_miniature($d) {
|
public function res_h_mini_miniature($d) {
|
||||||
$a = $this->enfants("@apercu = true", "date_creation desc", 1);
|
$a = $this->enfants("apercu = 'true'", "-date_creation", 1); // TODO : l'aperçu devrait être défini par le parent => ajouter un attribut "virtuel".
|
||||||
if ($a->size() != 1)
|
if (count($a) != 1)
|
||||||
$a = $this->enfants(true, "date_creation desc", 1);
|
$a = $this->enfants(true, "-date_creation", 1);
|
||||||
return $a->get(0)->rendu("h_mini_miniature", $d);;
|
if (count($a) != 1)
|
||||||
|
return; // TODO : aucune photo
|
||||||
|
return $a[0]->rendu("h_mini_miniature", $d);;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set_dans_nouveautes($val) {
|
public function set_dans_nouveautes($val) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ class mNouveautes extends Page {
|
||||||
groupes_enfants("sources");
|
groupes_enfants("sources");
|
||||||
attribut("titre", "text_line", "Nouveautés");
|
attribut("titre", "text_line", "Nouveautés");
|
||||||
attribut("description", "text_rich", "");
|
attribut("description", "text_rich", "");
|
||||||
|
attributs_globaux("dans_nouveautes");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function res_i_icône_nouvelle_page() {
|
public function res_i_icône_nouvelle_page() {
|
||||||
|
@ -20,7 +21,7 @@ class mNouveautes extends Page {
|
||||||
public function res_h_page($d) {
|
public function res_h_page($d) {
|
||||||
$d->w_en_tete(); // En-tête standard.
|
$d->w_en_tete(); // En-tête standard.
|
||||||
|
|
||||||
$l = $d->article()->w_liste($this->enfants(true, "date_creation desc", 10), function($e, $li) {
|
$l = $d->article()->w_liste($this->enfants(true, "-date_creation", 10), function($e, $li) {
|
||||||
$a = $li->a($e->uid());
|
$a = $li->a($e->uid());
|
||||||
// TODO : h_miniature_nouveautes s'il existe sinon h_miniature sinon juste un lien.
|
// TODO : h_miniature_nouveautes s'il existe sinon h_miniature sinon juste un lien.
|
||||||
// Comme ça le h_miniature_nouveautes d'une période de la galerie, c'est 3 ou 4 images alors que normalement c'en est juste une seule.
|
// Comme ça le h_miniature_nouveautes d'une période de la galerie, c'est 3 ou 4 images alors que normalement c'en est juste une seule.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user