diff --git a/cms2/code/debug.php b/cms2/code/debug.php index 6083451..70cb09c 100644 --- a/cms2/code/debug.php +++ b/cms2/code/debug.php @@ -10,17 +10,26 @@ class Debug { } public static function error($msg) { array_push(self::$errors, "Error : $msg"); - self::afficher(); + self::afficher(true, true, false); + echo "\n"; + debug_print_backtrace(); + self::afficher(false, false, true); die(); } - public static function afficher() { - echo "
";
-		echo 'Erreurs:' . "\n";
-		foreach (self::$errors as $e) {
-			echo $e . "\n";
+	public static function afficher($start = true, $print = true, $end = true) {
+		if ($start) {
+			echo "
";
+			echo 'Erreurs:' . "\n";
+		}
+		if ($print) {
+			foreach (self::$errors as $e) {
+				echo $e . "\n";
+			}
+		}
+		if ($end) {
+			echo 'Fin erreurs.' . "\n";
+			echo "
"; } - echo 'Fin erreurs.' . "\n"; - echo "
"; } } diff --git a/cms2/code/document.php b/cms2/code/document.php index 01746f6..cafa66e 100644 --- a/cms2/code/document.php +++ b/cms2/code/document.php @@ -74,6 +74,9 @@ class ElementDocument { $elem = new self($fn); foreach (self::$attributsÉléments[$fn] as $i => $nom) { + if (!isset($args[$i])) { + Debug::error("Argument manquant : $nom pour " . $elem->type); + } $elem->attr($nom, $args[$i]); } @@ -85,7 +88,7 @@ class ElementDocument { array_unshift($a, $this); return call_user_func_array($f, $a); } else { - Debug::error("Impossible d'ajouter un élément $fn"); + Debug::error("Impossible d'ajouter un élément $fn à " . $this->type); return null; } } @@ -104,7 +107,7 @@ ElementDocument::ajouter_type_élément("header", "title"); ElementDocument::ajouter_type_élément("title", "text"); ElementDocument::ajouter_type_élément("footer", ""); ElementDocument::ajouter_type_élément("nav", "ul"); -ElementDocument::ajouter_type_élément("article", "ul p form"); +ElementDocument::ajouter_type_élément("article", "ul p form span"); // span ? ElementDocument::ajouter_type_élément("script", "", "src"); ElementDocument::ajouter_type_élément("style", "", "src"); ElementDocument::ajouter_type_élément("ul", "li"); @@ -138,7 +141,7 @@ ElementDocument::ajouter_widget("description", function($d, $select){ ElementDocument::ajouter_widget("field", function($d, $select){ - $f = $d->span(); + $f = $d->span("field"); $f->text("NIY : " . $select); return $f; }); diff --git a/cms2/code/page.php b/cms2/code/page.php index ded0b00..ec83c25 100644 --- a/cms2/code/page.php +++ b/cms2/code/page.php @@ -39,14 +39,18 @@ class Page { return $this->parent; } - public function rendu() { + 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 ? - if (count($this->ressources_dynamiques()) == 0) - return new Document(); - $res = $this->ressources_dynamiques(); - return call_user_func(array($this, "res_" . $res[0])); + if ($res === null) { + $ressources = $this->ressources_dynamiques(); + $res = $ressources[0]; + } + if ($d === null) { + $d = new Document(); + } + return call_user_func(array($this, "res_" . $res), $d); } public function url($ressource = null) { @@ -83,6 +87,11 @@ class Page { public function __get($nom) { // s'il y a un getter (trigger), on l'appelle, sinon on appelle get_prop_direct(); // le getter fait ce qu'il veut, puis appelle set_prop_direct(); + // if (is_callable(array($this,"get_".$nom)) { + // return call_user_func(array($this,"get_".$nom)); + // } else { + // return $this->get_prop_direct($nom); + // } niy("get $nom"); } @@ -94,6 +103,11 @@ class Page { public function __set($nom, $val) { // s'il y a un setter (trigger), on l'appelle, sinon on appelle set_prop_direct(); // le setter fait ce qu'il veut, puis appelle set_prop_direct(); + // if (is_callable(array($this,"get_".$nom)) { + // return call_user_func(array($this,"get_".$nom), $val); + // } else { + // return $this->set_prop_direct($nom, $val); + // } niy("set $name = $val"); } diff --git a/cms2/modules/admin/admin-utilisateurs.php b/cms2/modules/admin/admin-utilisateurs.php index b7e4886..25850ae 100644 --- a/cms2/modules/admin/admin-utilisateurs.php +++ b/cms2/modules/admin/admin-utilisateurs.php @@ -5,7 +5,7 @@ class AdminListeUtilisateurs extends Page { return qw("i_icône_nouvelle_page c_style"); } public static function ressources_dynamiques() { - return qw("h_page"); + return qw("h_page h_liste_mots_de_passe"); } public static function types_enfants() { return qw("AdminUtilisateur"); @@ -22,19 +22,25 @@ class AdminListeUtilisateurs extends Page { niy("res_c_style"); } - public function res_h_page() { - $d = new Document(); + public function res_h_page($d) { $d->w_titre("Utilisateurs"); $l = $d->article()->w_liste($this->enfants(true, "nom asc prenom asc"), function($e, $li) { - $li->append( - $e->rendu("h_admin") - ); + $e->rendu("h_admin", $li); }); $nouveau = $l->li(); $nouveau->text("Nouvel utilisateur"); return $d; } + + public function res_h_liste_mots_de_passe($d) { + $d->w_titre("Liste de mots de passe."); + + $l = $d->article()->w_liste($this->enfants("@groupe = utilisateurs", "nom asc prenom asc"), function($e, $li) { + $e->rendu("h_admin_mdp", $li); + }); + return $d; + } } class AdminUtilisateur extends Page { @@ -49,24 +55,44 @@ class AdminUtilisateur extends Page { return qw("AdminUtilisateur"); } public static function attributs() { - return qw("nom prenom equipe mot_de_passe"); + return array( + "nom" => "Dupondt", + "prenom" => "Jean", + "equipe" => null, // TODO + "mot_de_passe" => "", + "groupe" => "utilisateurs", + "peut_se_connecter" => false // TODO : permissions différentes (l'utilisateur ne peut pas modifier ça). + ); } public function res_c_style() { niy("res_c_style"); } - public function res_h_admin() { + public function res_h_admin($d) { // Vue de l'utilisateur pour inclusion dans admin/utilisateurs. - $d = new Document(); - $d->w_titre("" . $this->nom . $this->prenom); + $a = $d->article(); + //$d->w_titre("" . $this->nom . $this->prenom); - $d->w_field($this->nom); - $d->w_field($this->prenom); - $d->w_field($this->equipe); - $d->w_field($this->mot_de_passe); + $a->w_field($this->nom); + $a->w_field($this->prenom); + $a->w_field($this->equipe); + $a->w_field($this->mot_de_passe); + $a->w_field($this->groupe); // TODO : menu de séléction + $a->w_field($this->peut_se_connecter); // TODO : checkbox - return $d; + return $a; + } + + public function res_h_admin_mdp($d) { + // Vue de l'utilisateur pour inclusion dans admin/utilisateurs/liste des mots de passe. + + $a = $d->article(); + $a->w_field($this->nom); + $a->w_field($this->prenom); + $a->w_field($this->mot_de_passe); + + return $a; } } diff --git a/cms2/modules/galerie/galerie.php b/cms2/modules/galerie/galerie.php index a6ecdbd..97a387f 100644 --- a/cms2/modules/galerie/galerie.php +++ b/cms2/modules/galerie/galerie.php @@ -30,13 +30,11 @@ abstract class GalerieBase extends Page { niy("res_c_style"); } - public function res_h_page() { - $d = new Document(); + public function res_h_page($d) { $d->w_en_tete(); // En-tête standard. $l = $d->article()->w_liste($this->enfants(true, "date desc"), function($e, $li) { - $li->a($e->uid())->append( - $e->rendu("h_miniature") - ); + $a = $li->a($e->uid()); + $e->rendu("h_miniature", $a); }); $nouveau = $l->li(); $nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page")); @@ -44,18 +42,17 @@ abstract class GalerieBase extends Page { return $d; } - public function res_h_miniature() { - $e = new ElementDocument(); - $e->span("miniature")->append($this->res_h_mini_miniature()); - $e->span("titre")->_field($this->titre); - return $e; + public function res_h_miniature($d) { + $d->span("miniature")->append($this->res_h_mini_miniature()); + $d->span("titre")->_field($this->titre); + return $d; } - public function res_h_mini_miniature() { + public function res_h_mini_miniature($d) { $a = $this->enfants("@apercu = true", "date desc", 1); if ($a->size() != 1) $a = $this->enfants(true, "date desc", 1); - return $a->get(0)->rendu("h_mini_miniature"); + return $a->get(0)->rendu("h_mini_miniature", $d);; } } @@ -110,15 +107,13 @@ class GaleriePhoto { niy("GaleriePhoto::res_c_style"); } - public function res_h_page() { - $d = new Document(); + public function res_h_page($d) { $d->w_en_tete($this->titre, "".$this->description); // En-tête standard. $d->w_img($this->description, $this->i_image); return $d; } - public function res_h_mini_miniature() { - $d = new Document(); + public function res_h_mini_miniature($d) { $d->img($this->description, $this->i_image); return $d; }