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() {
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) {
self::unbuf_query('drop table if exists ' . self::table($module["nom_module"]));
}
@ -79,8 +84,8 @@ class BDD {
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.
self::modify("replace into " . self::table("pages") . " values(1, '0', '0', '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(1, '0', '4', 'true', 'racine', '', 'mGalerieIndex', '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("liens") . " values(1, 2, 'enfants')");
self::modify("replace into " . self::table("liens") . " values(1, 3, 'enfants')");

View File

@ -9,7 +9,6 @@ function main() {
BDD::reset();
$r = Page::page_uid(1);
var_dump($r);
$p = $r->rendu();
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...
$lim = Page::$limitation_infos_module;
$m = Page::$module_en_cours;
if ($lim !== true && $lim != "types_enfants")
if ($lim !== true && $lim != "type_liens")
return;
if (is_inherit($types)) {
if (is_inherit($groupe)) {
$i = $res["inherit"];
Page::$limitation_infos_module = "types_enfants";
Page::$limitation_infos_module = "type_liens";
call_user_func(array($i, "info"));
Page::$limitation_infos_module = $lim;
} else {
if ($type === null) {
Debug::error('fonction attribut() : les paramètres $type et $defaut doivent être définis');
}
// 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);
Page::$modules[$m]['type_liens'][$groupe] = $type;
}
}
@ -113,8 +98,7 @@ function module($m) {
Page::$modules[$m] = array(
'ressources_statiques' => qw(),
'ressources_dynamiques' => qw(),
'types_enfants' => qw(),
'groupes_enfants' => qw(),
'type_liens' => array('enfants' => false),
'attributs' => array()
);
}
@ -160,6 +144,10 @@ class Page {
return self::$modules[$this->nom_module()];
}
public function type_liens($groupe) {
return $this->module['type_liens'][$groupe];
}
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
@ -190,12 +178,7 @@ class Page {
return $this->uid;
}
/* public function select($requête) {
// Renvoie un objet de la classe CollectionPages.
niy("select");
}*/
public function enfants($condition = true, $ordre = "date_creation desc", $limit = 0, $offset = 0) {
public function enfants($condition = true, $ordre = "-date_creation", $limit = 0, $offset = 0) {
// Renvoie un objet de la classe CollectionPages.
// Si $condition === true, il n'y a pas de condition
// sinon, par ex: $condition = "@apercu = true"
@ -204,19 +187,40 @@ class Page {
// offset = null => offset = 0
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"
echo "uid : ";
var_dump($this->uid());
$select = "select uid_page_vers from "
. BDD::table("liens")
. " join " . BDD::table("pages") . " on uid_page = uid_page_vers "
. " natural join " . BDD::table($this->nom_module())
. " where groupe = 'enfants' and uid_page_de = " . $this->uid() . ";";
. " natural join " . BDD::table($this->type_liens("enfants"))
. " where groupe = 'enfants' and uid_page_de = " . $this->uid()
. $select_order
. $select_limit
. $select_offset
. ";";
$res = array();
foreach (BDD::select($select) as $row) {
array_push($res, self::page_uid($row["uid_page_vers"]));
}
var_dump($res);
return $res;
}
@ -262,7 +266,7 @@ class Page {
// W = Write prop
// 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)
// 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.
// Squelette du code :

View File

@ -19,6 +19,10 @@ function qw($arg = null, $arg2 = null, $sep = " ") {
return $ret;
}
function str_contains($str, $small) {
return strpos($str, $small) !== false;
}
/**** Début PATH ****/
// 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() {
ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page h_liste_mots_de_passe");
types_enfants("mAdminUtilisateur");
type_liens("enfants", "mAdminUtilisateur");
}
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_nouvelle_page = "Nouvel élément";
protected static $icône_nouvelle_page = "nouvelle_periode.png";
protected static $types_enfants = "mGaleriePeriode";
protected static $type_enfants = "mGaleriePeriode";
public static function info() {
ressources_statiques("i_icône_nouvelle_page c_style");
ressources_dynamiques("h_page h_miniature h_mini_miniature");
types_enfants(self::$types_enfants);
groupes_enfants("liens");
type_liens("enfants", self::$type_enfants);
type_liens("liens", "*");
attribut("titre", "text_line", self::$texte_titre);
attribut("description", "text_rich", "");
attribut("dans_nouveautes", "bool", "true");
@ -69,21 +69,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";
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 $types_enfants = "mGalerieEvenement";
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 $types_enfants = "mGaleriePhoto";
protected static $type_enfants = "mGaleriePhoto";
}
class mGaleriePhoto extends mGalerieBase {

View File

@ -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");
groupes_enfants("sources");
type_liens("sources", "*");
attribut("titre", "text_line", "Nouveautés");
attribut("description", "text_rich", "");
attributs_globaux("dans_nouveautes");