order, limit et offset dans Page->enfants().

This commit is contained in:
Georges Dupéron 2010-10-13 13:21:35 +02:00
parent 0a9a9aa99f
commit 52a5eea2ff
7 changed files with 59 additions and 47 deletions

View File

@ -27,6 +27,11 @@ 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"));
// 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"])); self::unbuf_query('drop table if exists ' . self::table($module["nom_module"]));
} }
@ -79,8 +84,8 @@ class BDD {
public static function test() { public static function test() {
// TODO : dans les modules qui proposent un nom_systeme, faire une fonction init_<nom_systeme> // 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. // Cette fonction sera appellée lors de l'initialisation de la BDD.
self::modify("replace into " . self::table("pages") . " values(1, '0', '0', 'true', 'racine', '', 'mGalerieIndex', 'true')"); self::modify("replace into " . self::table("pages") . " values(1, '0', '4', 'true', 'racine', '', 'mGalerieIndex', 'true')");
self::modify("replace into " . self::table("pages") . " values(2, '0', '0', 'true', '', 'periode-1', 'mGaleriePeriode', 'true')"); self::modify("replace into " . self::table("pages") . " values(2, '1', '3', 'true', '', 'periode-1', 'mGaleriePeriode', 'true')");
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("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, 2, 'enfants')"); 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("liens") . " values(1, 3, 'enfants')");

View File

@ -9,7 +9,6 @@ function main() {
BDD::reset(); BDD::reset();
$r = Page::page_uid(1); $r = Page::page_uid(1);
var_dump($r);
$p = $r->rendu(); $p = $r->rendu();
echo "<pre>"; echo "<pre>";

View File

@ -47,39 +47,24 @@ function ressources_dynamiques($res) {
} }
} }
function types_enfants($types) { function type_liens($groupe, $type = null) {
// TODO : factoriser d'ici... // TODO : factoriser d'ici...
$lim = Page::$limitation_infos_module; $lim = Page::$limitation_infos_module;
$m = Page::$module_en_cours; $m = Page::$module_en_cours;
if ($lim !== true && $lim != "types_enfants") if ($lim !== true && $lim != "type_liens")
return; return;
if (is_inherit($types)) { if (is_inherit($groupe)) {
$i = $res["inherit"]; $i = $res["inherit"];
Page::$limitation_infos_module = "types_enfants"; Page::$limitation_infos_module = "type_liens";
call_user_func(array($i, "info")); call_user_func(array($i, "info"));
Page::$limitation_infos_module = $lim; Page::$limitation_infos_module = $lim;
} else { } else {
// TODO : ... jusqu'ici (Page::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)). if ($type === null) {
Page::$modules[$m]['types_enfants'] = qw(Page::$modules[$m]['types_enfants'], $types); Debug::error('fonction attribut() : les paramètres $type et $defaut doivent être définis');
} }
}
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)). // 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); Page::$modules[$m]['type_liens'][$groupe] = $type;
} }
} }
@ -113,8 +98,7 @@ function module($m) {
Page::$modules[$m] = array( Page::$modules[$m] = array(
'ressources_statiques' => qw(), 'ressources_statiques' => qw(),
'ressources_dynamiques' => qw(), 'ressources_dynamiques' => qw(),
'types_enfants' => qw(), 'type_liens' => array('enfants' => false),
'groupes_enfants' => qw(),
'attributs' => array() 'attributs' => array()
); );
} }
@ -160,6 +144,10 @@ class Page {
return self::$modules[$this->nom_module()]; return self::$modules[$this->nom_module()];
} }
public function type_liens($groupe) {
return $this->module['type_liens'][$groupe];
}
public function rendu($res = null, $d = null) { public function rendu($res = null, $d = null) {
// Renvoie un document (classe ElementDocument). // Renvoie un document (classe ElementDocument).
// L'appel à une fonction statique via $this-> n'est pas propre, mais comment appeller la // L'appel à une fonction statique via $this-> n'est pas propre, mais comment appeller la
@ -190,12 +178,7 @@ class Page {
return $this->uid; return $this->uid;
} }
/* public function select($requête) { public function enfants($condition = true, $ordre = "-date_creation", $limit = 0, $offset = 0) {
// Renvoie un objet de la classe CollectionPages.
niy("select");
}*/
public function enfants($condition = true, $ordre = "date_creation desc", $limit = 0, $offset = 0) {
// Renvoie un objet de la classe CollectionPages. // Renvoie un objet de la classe CollectionPages.
// Si $condition === true, il n'y a pas de condition // Si $condition === true, il n'y a pas de condition
// sinon, par ex: $condition = "@apercu = true" // sinon, par ex: $condition = "@apercu = true"
@ -204,19 +187,40 @@ class Page {
// offset = null => offset = 0 // offset = null => offset = 0
niy("enfants"); niy("enfants");
// TODO : condition
$select_order = "";
$first = true;
foreach (qw($ordre) as $o) {
if ($first) {
$first = false;
$select_order .= " order by ";
} else {
$select_order .= ", ";
}
$select_order .= substr($o,1) . " ";
$select_order .= (substr($o,0,1) == "+") ? "asc" : "desc";
}
$select_limit = ($limit == 0) ? "" : " limit $limit";
$select_offset = ($offset == 0) ? "" : " offset $offset";
// TODO : "natural join" // TODO : "natural join"
echo "uid : ";
var_dump($this->uid());
$select = "select uid_page_vers from " $select = "select uid_page_vers from "
. BDD::table("liens") . BDD::table("liens")
. " join " . BDD::table("pages") . " on uid_page = uid_page_vers " . " join " . BDD::table("pages") . " on uid_page = uid_page_vers "
. " natural join " . BDD::table($this->nom_module()) . " natural join " . BDD::table($this->type_liens("enfants"))
. " where groupe = 'enfants' and uid_page_de = " . $this->uid() . ";"; . " where groupe = 'enfants' and uid_page_de = " . $this->uid()
. $select_order
. $select_limit
. $select_offset
. ";";
$res = array(); $res = array();
foreach (BDD::select($select) as $row) { foreach (BDD::select($select) as $row) {
array_push($res, self::page_uid($row["uid_page_vers"])); array_push($res, self::page_uid($row["uid_page_vers"]));
} }
var_dump($res);
return $res; return $res;
} }
@ -262,7 +266,7 @@ class Page {
// W = Write prop // W = Write prop
// L = Lister les enfants ($nom_propriété désigne alors le groupe) // L = Lister les enfants ($nom_propriété désigne alors le groupe)
// C = Créer des enfants ($nom_propriété désigne alors le groupe) // C = Créer des enfants ($nom_propriété désigne alors le groupe)
// D = Delete des enfants ($nom_propriété désigne alors le groupe) // D = Delete la page ($nom_propriété est ignoré)
// @return true si on a l'autorisation pour TOUTES les actions demandées, false sinon. // @return true si on a l'autorisation pour TOUTES les actions demandées, false sinon.
// Squelette du code : // Squelette du code :

View File

@ -19,6 +19,10 @@ function qw($arg = null, $arg2 = null, $sep = " ") {
return $ret; return $ret;
} }
function str_contains($str, $small) {
return strpos($str, $small) !== false;
}
/**** Début PATH ****/ /**** Début PATH ****/
// http://www.liranuna.com/php-path-resolution-class-relative-paths-made-easy/ // http://www.liranuna.com/php-path-resolution-class-relative-paths-made-easy/

View File

@ -4,7 +4,7 @@ class mAdminListeUtilisateurs extends Page {
public static function info() { public static function info() {
ressources_statiques("i_icône_nouvelle_page c_style"); ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page h_liste_mots_de_passe"); ressources_dynamiques("h_page h_liste_mots_de_passe");
types_enfants("mAdminUtilisateur"); type_liens("enfants", "mAdminUtilisateur");
} }
public function res_i_icône_nouvelle_page() { public function res_i_icône_nouvelle_page() {

View File

@ -4,13 +4,13 @@ abstract class mGalerieBase extends Page {
protected static $texte_titre = "Galerie"; protected static $texte_titre = "Galerie";
protected static $texte_nouvelle_page = "Nouvel élément"; protected static $texte_nouvelle_page = "Nouvel élément";
protected static $icône_nouvelle_page = "nouvelle_periode.png"; protected static $icône_nouvelle_page = "nouvelle_periode.png";
protected static $types_enfants = "mGaleriePeriode"; protected static $type_enfants = "mGaleriePeriode";
public static function info() { public static function info() {
ressources_statiques("i_icône_nouvelle_page c_style"); ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page h_miniature h_mini_miniature"); ressources_dynamiques("h_page h_miniature h_mini_miniature");
types_enfants(self::$types_enfants); type_liens("enfants", self::$type_enfants);
groupes_enfants("liens"); type_liens("liens", "*");
attribut("titre", "text_line", self::$texte_titre); attribut("titre", "text_line", self::$texte_titre);
attribut("description", "text_rich", ""); attribut("description", "text_rich", "");
attribut("dans_nouveautes", "bool", "true"); attribut("dans_nouveautes", "bool", "true");
@ -69,21 +69,21 @@ class mGalerieIndex extends mGalerieBase {
protected static $texte_titre = "Galerie"; protected static $texte_titre = "Galerie";
protected static $texte_nouvelle_page = "Nouvelle période"; protected static $texte_nouvelle_page = "Nouvelle période";
protected static $icône_nouvelle_page = "nouvelle_periode.png"; protected static $icône_nouvelle_page = "nouvelle_periode.png";
protected static $types_enfants = "mGaleriePeriode"; protected static $type_enfants = "mGaleriePeriode";
} }
class mGaleriePeriode extends mGalerieBase { class mGaleriePeriode extends mGalerieBase {
protected static $texte_titre = "Période"; protected static $texte_titre = "Période";
protected static $texte_nouvelle_page = "Nouvel événement"; protected static $texte_nouvelle_page = "Nouvel événement";
protected static $icône_nouvelle_page = "nouvel_evenement.png"; protected static $icône_nouvelle_page = "nouvel_evenement.png";
protected static $types_enfants = "mGalerieEvenement"; protected static $type_enfants = "mGalerieEvenement";
} }
class mGalerieEvenement extends mGalerieBase { class mGalerieEvenement extends mGalerieBase {
protected static $texte_titre = "Événement"; protected static $texte_titre = "Événement";
protected static $texte_nouvelle_page = "Nouvelle photo"; protected static $texte_nouvelle_page = "Nouvelle photo";
protected static $icône_nouvelle_page = "nouvelle_photo.png"; protected static $icône_nouvelle_page = "nouvelle_photo.png";
protected static $types_enfants = "mGaleriePhoto"; protected static $type_enfants = "mGaleriePhoto";
} }
class mGaleriePhoto extends mGalerieBase { class mGaleriePhoto extends mGalerieBase {

View File

@ -4,7 +4,7 @@ class mNouveautes extends Page {
public static function info() { public static function info() {
ressources_statiques("i_icône_nouvelle_page c_style"); ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page"); ressources_dynamiques("h_page");
groupes_enfants("sources"); type_liens("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"); attributs_globaux("dans_nouveautes");