From 52a5eea2ff2e0af7175c84ba1a8c15e27e98b0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Wed, 13 Oct 2010 13:21:35 +0200 Subject: [PATCH] order, limit et offset dans Page->enfants(). --- cms2/code/bdd.php | 9 ++- cms2/code/main.php | 1 - cms2/code/page.php | 76 ++++++++++++----------- cms2/code/util.php | 4 ++ cms2/modules/admin/admin-utilisateurs.php | 2 +- cms2/modules/galerie/galerie.php | 12 ++-- cms2/modules/nouveautes/nouveautes.php | 2 +- 7 files changed, 59 insertions(+), 47 deletions(-) diff --git a/cms2/code/bdd.php b/cms2/code/bdd.php index 6a4c48d..8b0a62d 100644 --- a/cms2/code/bdd.php +++ b/cms2/code/bdd.php @@ -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_ // 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')"); diff --git a/cms2/code/main.php b/cms2/code/main.php index 3a0c40f..c6f79b3 100644 --- a/cms2/code/main.php +++ b/cms2/code/main.php @@ -9,7 +9,6 @@ function main() { BDD::reset(); $r = Page::page_uid(1); - var_dump($r); $p = $r->rendu(); echo "
";
diff --git a/cms2/code/page.php b/cms2/code/page.php
index e658286..51b5235 100644
--- a/cms2/code/page.php
+++ b/cms2/code/page.php
@@ -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 :
diff --git a/cms2/code/util.php b/cms2/code/util.php
index 9d2b40a..33d9d43 100644
--- a/cms2/code/util.php
+++ b/cms2/code/util.php
@@ -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/
diff --git a/cms2/modules/admin/admin-utilisateurs.php b/cms2/modules/admin/admin-utilisateurs.php
index fe04a71..2bfb1de 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("mAdminUtilisateur");
+		type_liens("enfants", "mAdminUtilisateur");
 	}
 	
 	public function res_i_icône_nouvelle_page() {
diff --git a/cms2/modules/galerie/galerie.php b/cms2/modules/galerie/galerie.php
index 0423249..51b1f2d 100644
--- a/cms2/modules/galerie/galerie.php
+++ b/cms2/modules/galerie/galerie.php
@@ -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 {
diff --git a/cms2/modules/nouveautes/nouveautes.php b/cms2/modules/nouveautes/nouveautes.php
index 31255f1..c2f09c0 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");
-		groupes_enfants("sources");
+		type_liens("sources", "*");
 		attribut("titre", "text_line", "Nouveautés");
 		attribut("description", "text_rich", "");
 		attributs_globaux("dans_nouveautes");