Compare commits

..

10 Commits

Author SHA1 Message Date
Georges Dupéron
49cd7a657c __prop__description oubliés. Il en reste d'autres. 2010-09-14 11:49:29 +02:00
Georges Dupéron
ae3295ae26 Bug: suppression iognorée par git. 2010-09-14 10:48:34 +02:00
Georges Dupéron
698d21159c TODO pour MCHB. 2010-09-14 02:45:22 +02:00
Georges Dupéron
622e2c0ab8 Sections "liens utiles" et "contact" 2010-09-14 02:43:14 +02:00
Georges Dupéron
0a34996378 Modifications pour MCHB 2010-09-14 02:17:05 +02:00
Georges Dupéron
863d0d8158 Un peu de tout doux (todo). 2010-08-31 03:30:24 +02:00
Georges Dupéron
0851e56540 Nouveautés (marche _très_ mal). 2010-08-28 00:30:58 +02:00
Georges Dupéron
38edbb5851 Suppression des fichiers de sauvegarde *~ . 2010-08-27 22:26:00 +02:00
Georges Dupéron
140a44ee91 Articles. 2010-08-27 05:42:26 +02:00
Georges Dupéron
921beb8e27 Forum. C'était beaucoup plus simple à faire que je ne le craignais.
Mais l'API reste très lourde (voir le TODO).
2010-08-21 22:13:39 +02:00
145 changed files with 4095 additions and 77 deletions

View File

@ -7,3 +7,36 @@ Mettre le css dans une page (dossier) qui s'appelle "style.css", comme ça ça d
c'est le index.php de cette page qui le génère).
Si on ne peut lire la propriété __prop_type, afficher un "Access Denied" au lieu de dire qu'on n'a pas pu lire la propriété.
Ajouter une petite horloge sur nouvel_evenement.jpg et un petit calendrier sur nouvelle_periode.jpg
Pour les "Nouveau xx", mettre un numéro pour éviter que deux personnes créent la même page mais l'éditent différemment.
Pour la gestion d'erreurs :
public static function foo() {
enter("Création d'un fou :-p .");
if (!Permission::vérifier_truc()) { return fail("Accès interdit"); }
$x = nofail(Stockage::créer_foo()); // Si Stockage::créer_foo() fait un fail, nous aussi.
$y = fatal_fail(truc_machin($x)); // Si truc_machin fait un fail, on affiche une erreur et on quite.
leave();
}
Unicode Normalization Form C (De quoi s'amuser \o/)
html5 : <header> <footer> <nav> <aside> <article> <section> <p> <mark?>
http://dev.w3.org/html5/spec/Overview.html#kinds-of-content
= API =
L'API fournie aux modules est trop verbeuse et n'a pas tout à fait les bonnes abstractions. Il faudrait refactoriser tout ça un de ces
jours. Nottemment, il faut pouvoir indiquer les éléments de la page de manière plus déclarative. Leur partie éditable et leur partie
affichage et la modification des propriétés associées et les valeurs par défaut doivent être gérées plus ou moins automatiquement. Ex :
// Crée un <textarea> ou un <p>, dont la source / destination est le champ "description", et dont la valeur par défaut lors de la création
// de la page est "Description de la page." .
champ("description", "Description de la page.", "texte-long");
// Crée un bouton Appliquer, qui soumet le formulaire en cours.
// À étudier...
action("Appliquer", "submit");
// Crée un champ titre avec les trucs spéciaux du titre (renomage de la page + redirect).
// champ-special-titre est une fonction de rappel ?
// À étudier.
champ("titre", "Nouvelle page", "texte-court", "champ-special-titre");

22
__cms__/TODO_MCHB Normal file
View File

@ -0,0 +1,22 @@
Ok (00:54:06) js: Ha oui, avant que je commit n'importe quoi, pour le site de MCHB, je laisse la structure de base sur github ? Ou je fais un fork privé que je garde que sur mon PC (pour que ça soit pas public).
Ok (00:55:01) bbrun: je pense qu'il vaux mieux un truc privee
~~ (23:12:54) js: Design noir et jaune (OMG je vais avoir du mal!)
Ok (23:13:38) js: Toutes les pages : Titre du site en haut, barre de navigation latérale, contenu à droite
Ok (23:14:40) js: Page d'accueil : Gros encadré rouge fluo qui clignote avec un son de sirène de porte-container avec marqué dedans Prochain évènement : <le prochain évènement>
Ok (23:15:06) js: Page d'accueil : mini-article avec du blabla sur le club en-dessous du gros encadré rouge.
Ok (23:16:14) js: Un forum simple (Forum > Sujet > Message), _pas_ de bouton "citer" sur les messages, bouton supprimer uniquement pour les admins.
Ok (23:17:17) js: Galerie : Seuls les admins peuvent poster des images, 3 niveaux (Galerie > Période > Évènement > Photo)
Ok (23:19:34) js: Section Nouveautés : tri par date d'ajout, seuls les admins peuvent poster. Pas de fioritures spéciales, juste des articles avec une date.
Ok (23:20:45) js: Section "Nos équipes de super-handballeurs" : 3 niveaux (Équipes > équipe n°1 > joueur)
Ok (23:24:07) js: Section Liens utiles : Une série de liens avec description de qqes lignes.
Ok (23:25:16) js: Section Contact : Une série de personnes avec Nom, Prénom, mail (caché pour les spambots), fonction (grand chef, petit chef, etc.), éventuellement notes/description
Ok (23:26:03) js: Les logins se font avec nom et prénom. (+ mot de passe)
(23:27:31) js: Et il y a la section Résultats que j'y ai rien compris XD donc va falloir qu'ils me ré-expliquent (il me semble qu'eux aussi ils étaient paumés donc... je compte sur toi pour la traduction sport - geek).
(23:21:28) js: Après mon refactor (!), je pourrai ajouter la possibilité de faire des liens entre un joueurs, un utilisateur et une ou +ieurs photos.
(23:22:07) js: Ainsi que des liens entre actualité et saison ou matche ou photo.
(23:23:40) js: Pour l'instant je crois que je vais laisser les champs textes (articles) en texte simple sans liens images etc. et d'ici 1 semaine ou 2, j'aurais fini mon éditeur, donc on pourra avoir des articles "riches".
(23:25:34) js: Contact : et après le refactor, photo et lien avec l'utilisateur.
(23:34:14) js: ah oui, et après le refactor, vous aurez peut-être droit à un historique complet (archives quoi), ou sinon si j'y arrive pas juste la possibilité de faire des "snapshot" quand ils veulent (archives 2010, archives 2011, ...).
(23:34:49) js: j'ai bien dit peut-être parce que je sais pas du tout comment implémenter ça de manière efficace... mais c'est pas ma priorité pour l'instant.

View File

@ -33,7 +33,7 @@ class CMS {
$ret = Modules::action($chemin, $action, $paramètres);
if (!Page::is_page($ret)) {
Erreur::fatale("Le module de " . $chemin->get() . " n'a pas renvoyé une page mais à la place : " . var_export($ret, true));
Erreur::fatale("Le module de " . htmlspecialchars($chemin->get()) . " n'a pas renvoyé une page mais à la place : <pre><code>" . htmlspecialchars(var_export($ret, true)) . "</code></pre>", true);
} else {
$ret->envoyer();
}

View File

@ -73,7 +73,7 @@ class Page {
}
public static function is_page($obj) {
return get_class($obj) === __CLASS__;
return is_object($obj) && get_class($obj) === __CLASS__;
}
}

View File

@ -3,7 +3,7 @@
class AdminConnexion {
public static function action($chemin, $action, $paramètres) {
if ($action == "connexion") {
if (Authentification::connexion($paramètres["utilisateur"], $paramètres["mdp"])) {
if (Authentification::connexion(strtolower($paramètres["utilisateurnom"] . "___" . $paramètres["utilisateurprenom"]), $paramètres["mdp"])) {
return self::vue($chemin, "connexion réussie");
} else {
return self::vue($chemin, "connexion échouée");
@ -54,7 +54,8 @@ class AdminConnexion {
$ret = "<h2>" . $titre . "</h2>";
$ret .= $message;
$ret .= '<form method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p><label for="utilisateur">Nom : </label><input type="text" id="utilisateur" name="utilisateur" value="" /></p>';
$ret .= '<p><label for="utilisateurnom">Nom : </label><input type="text" id="utilisateurnom" name="utilisateurnom" value="" /></p>';
$ret .= '<p><label for="utilisateurprenom">Prénom : </label><input type="text" id="utilisateurprenom" name="utilisateurprenom" value="" /></p>';
$ret .= '<p><label for="mdp">Mot de passe : </label><input type="password" id="mdp" name="mdp" value="" /></p>';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="connexion" />';
@ -65,6 +66,6 @@ class AdminConnexion {
}
}
Modules::enregister_module("AdminConnexion", "admin-connexion", "vue", "utilisateur mdp");
Modules::enregister_module("AdminConnexion", "admin-connexion", "vue", "utilisateurnom utilisateurprenom mdp");
?>

View File

@ -0,0 +1,60 @@
<?php
class ArticlesArticle {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["contenu"])) {
Stockage::set_prop($chemin, "contenu", $paramètres["contenu"]);
}
// titre après les autres paramètres car il peut générer un redirect.
if (isset($paramètres["titre"]) && Stockage::prop_diff($chemin, "titre", $paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
// TODO : transmettre le paramètre "vue"
return new Page($chemin, '', "redirect");
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="articles article edition" enctype="multipart/form-data" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "contenu"), "contenu");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "contenu"));
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
// TODO : afficher le bouton "Supprimer".
}
return new Page($ret, Stockage::get_prop($chemin, "titre"));
} elseif ($vue == "miniature") {
$ret = miniature_texte_enrichi(Stockage::get_prop($chemin, "contenu"));
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ArticlesArticle", "articles-article", "vue", "titre contenu");
?>

View File

@ -0,0 +1,88 @@
<?php
class ArticlesIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvel article", "articles-article");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "titre", "Nouvel article");
Stockage::set_prop($np, "contenu", "Bla bla bla.");
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else {
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="articles infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<p class="articles index description affichage">' . Stockage::get_prop($chemin, "description") . '</p>';
}
$ret .= '<div class="articles liste-articles index">';
$ret .= '<ul>';
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<li>';
$ret .= '<div class="titre">';
$ret .= '<form class="articles nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouvel article"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</div>';
$ret .= '</li>';
}
foreach (Stockage::liste_enfants($chemin) as $k) { // TODO : trier par numéro !
$mini = Modules::vue($k, 'miniature');
$ret .= '<li>';
// TODO : mettre une ancre "#message<numéro>"
$ret .= '<a href="' . $k->get_url() . '">'; // TODO : escape l'url !
$ret .= '<span class="titre">';
$ret .= $mini->titre;
$ret .= '</span>';
$ret .= '<p class="contenu">';
$ret .= $mini->contenu;
$ret .= '</p>';
$ret .= '</a>';
$ret .= '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ArticlesIndex", "articles-index", "vue", "titre description");
?>

View File

@ -0,0 +1,4 @@
<?php
require_once(dirname(__FILE__) . "/articles-index.php");
require_once(dirname(__FILE__) . "/articles-article.php");
?>

View File

@ -0,0 +1,56 @@
<?php
class ContactContact {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["nom"])) {
Stockage::set_prop($chemin, "nom", $paramètres["nom"]);
}
if (isset($paramètres["prenom"])) {
Stockage::set_prop($chemin, "prenom", $paramètres["prenom"]);
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
return new Page($chemin->parent(), '', "redirect");
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="contacts contact edition" enctype="multipart/form-data" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<input type="text" name="prenom" value="' . Stockage::get_prop($chemin, "prenom") . '" />';
$ret .= '<input type="text" name="nom" value="' . Stockage::get_prop($chemin, "nom") . '" />';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= Stockage::get_prop($chemin, "prenom");
$ret .= " ";
$ret .= Stockage::get_prop($chemin, "nom");
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "description"));
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<input type="hidden" name="action" value="supprimer"/>';
$ret .= '<input type="submit" value="Supprimer le contact ' . htmlspecialchars(Stockage::get_prop($chemin, "prenom") . " " . Stockage::get_prop($chemin, "nom")) . '"/>';
$ret .= '</form>';
}
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ContactContact", "contact-contact", "vue", "nom prenom description");
?>

View File

@ -0,0 +1,82 @@
<?php
class ContactIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
// CONCURENCE : Faire un lock quelque part...
$numéro_contact = 1 + Stockage::get_prop($chemin, "dernier_numero");
Stockage::set_prop($chemin, "dernier_numero", $numéro_contact);
$np = Stockage::nouvelle_page($chemin, "Contact" . $numéro_contact, "contact-contact");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "nom", "Dupondt");
Stockage::set_prop($np, "prenom", "Jean");
Stockage::set_prop($np, "description", "");
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else {
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="contact infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<p class="contact index description affichage">' . Stockage::get_prop($chemin, "description") . '</p>';
}
$ret .= '<div class="contact liste-contacts index">';
$ret .= '<ul>';
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<li>';
$ret .= '<div class="titre">';
$ret .= '<form class="contact nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouveau contact"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</div>';
$ret .= '</li>';
}
foreach (stockage::liste_enfants($chemin) as $k) {
$ret .= '<li>' . Modules::vue($k)->contenu . '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ContactIndex", "contact-index", "vue", "titre description");
?>

View File

@ -0,0 +1,4 @@
<?php
require_once(dirname(__FILE__) . "/contact-index.php");
require_once(dirname(__FILE__) . "/contact-contact.php");
?>

View File

@ -0,0 +1,86 @@
<?php
class ÉquipesÉquipe {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
// CONCURENCE : Faire un lock quelque part...
$numéro_joueur = 1 + Stockage::get_prop($chemin, "dernier_numero");
Stockage::set_prop($chemin, "dernier_numero", $numéro_joueur);
$np = Stockage::nouvelle_page($chemin, "Joueur" . $numéro_joueur, "equipes-joueur");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "nom", "Dupondt");
Stockage::set_prop($np, "prenom", "Jean");
Stockage::set_prop($np, "description", "");
enregistrer_nouveaute($np);
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["titre"]) && Stockage::prop_diff($chemin, "titre", $paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
// TODO : transmettre le paramètre "vue"
return new Page($chemin, '', "redirect");
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="équipes équipe infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2 class="équipes équipe titre affichage">' . Stockage::get_prop($chemin, "titre") . '</h2>';
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<input type="hidden" name="action" value="supprimer"/>';
$ret .= '<input type="submit" value="Supprimer l\'équipe"/>';
$ret .= '</form>';
}
$ret .= '<ul class="équipes équipe">';
foreach (stockage::liste_enfants($chemin) as $k) {
$ret .= '<li>' . Modules::vue($k)->contenu . '</li>';
}
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<li>';
$ret .= '<form class="équipes équipe nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouveau joueur"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
} else if ($vue == "miniature") {
return new Page("Équipe.", Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ÉquipesÉquipe", "equipes-equipe", "vue", "titre");
?>

View File

@ -0,0 +1,84 @@
<?php
class ÉquipesIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
$np = Stockage::nouvelle_page($chemin, "Nouvelle équipe", "equipes-equipe");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "titre", "Nouvelle équipe");
Stockage::set_prop($np, "dernier_numero", 0);
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else {
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="equipes infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<p class="equipes index description affichage">' . Stockage::get_prop($chemin, "description") . '</p>';
}
$ret .= '<div class="equipes index liste-equipes">';
$ret .= '<ul>';
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<li>';
$ret .= '<div class="titre">';
$ret .= '<form class="equipes nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouvelle équipe"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</div>';
$ret .= '</li>';
}
foreach (Stockage::liste_enfants($chemin) as $k) { // TODO : trier par numéro !
$mini = Modules::vue($k, 'miniature');
$ret .= '<li>';
$ret .= '<a href="' . $k->get_url() . '">'; // TODO : escape l'url !
$ret .= '<span class="titre">';
$ret .= $mini->titre;
$ret .= '</span>';
$ret .= '</a>';
$ret .= '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ÉquipesIndex", "equipes-index", "vue", "titre description");
?>

View File

@ -0,0 +1,58 @@
<?php
class ÉquipesJoueur {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["nom"])) {
Stockage::set_prop($chemin, "nom", $paramètres["nom"]);
}
if (isset($paramètres["prenom"])) {
Stockage::set_prop($chemin, "prenom", $paramètres["prenom"]);
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
return new Page($chemin->parent(), '', "redirect");
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="équipes joueur edition" enctype="multipart/form-data" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<input type="text" name="prenom" value="' . Stockage::get_prop($chemin, "prenom") . '" />';
$ret .= '<input type="text" name="nom" value="' . Stockage::get_prop($chemin, "nom") . '" />';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= Stockage::get_prop($chemin, "prenom");
$ret .= " ";
$ret .= Stockage::get_prop($chemin, "nom");
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "description"));
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<input type="hidden" name="action" value="supprimer"/>';
$ret .= '<input type="submit" value="Supprimer le joueur ' . htmlspecialchars(Stockage::get_prop($chemin, "prenom") . " " . Stockage::get_prop($chemin, "nom")) . '"/>';
$ret .= '</form>';
}
// Peut-être afficher le bouton "citer" ? ou est-ce trop d'options ?
return new Page($ret, Stockage::get_prop($chemin, "prenom") . " " . Stockage::get_prop($chemin, "nom"));
}
}
}
Modules::enregister_module("ÉquipesJoueur", "equipes-joueur", "vue", "nom prenom description");
?>

View File

@ -0,0 +1,5 @@
<?php
require_once(dirname(__FILE__) . "/equipes-index.php");
require_once(dirname(__FILE__) . "/equipes-equipe.php");
require_once(dirname(__FILE__) . "/equipes-joueur.php");
?>

View File

@ -5,37 +5,81 @@ class ForumIndex {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// TODO : faut-il demander à avoir directement le nom du nouveau sujet ?
// TODO : quel est le propriétaire du nouveau sujet ?
$np = Stockage::nouvelle_page($chemin, "Nouveau sujet", "forum-sujet");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "titre", "Nouveau sujet");
Stockage::set_prop($np, "dernier_numero", 0);
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else {
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
}
if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]);
return self::vue($chemin, $paramètres["vue"]);
} else {
self::vue($chemin);
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
$ret .= "<h2>Forum</h2>";
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
// afficher le lien "Nouveau sujet"
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="forum infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<p class="forum index description affichage">' . Stockage::get_prop($chemin, "description") . '</p>';
}
$ret .= '<ul class="forum index">';
foreach (stockage::liste_enfants($chemin) as $k) {
$ret .= '<li><a href="' . chemin::vers_url($k) . '">' . modules::vue($k, 'miniature') . '</a></li>'; // TODO : escape l'url !
}
$ret .= '</ul>';
return $ret;
$ret .= '<div class="forum sujets index">';
$ret .= '<ul>';
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<li>';
$ret .= '<div class="titre">';
$ret .= '<form class="forum nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouveau sujet de discussion"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</div>';
$ret .= '</li>';
}
foreach (Stockage::liste_enfants($chemin) as $k) { // TODO : trier par numéro !
$mini = Modules::vue($k, 'miniature');
$ret .= '<li>';
// TODO : mettre une ancre "#message<numéro>"
$ret .= '<a href="' . $k->get_url() . '">'; // TODO : escape l'url !
$ret .= '<span class="titre">';
$ret .= $mini->titre;
$ret .= '</span>';
$ret .= '</a>';
$ret .= '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("ForumIndex", "forum-index", "vue");
Modules::enregister_module("ForumIndex", "forum-index", "vue", "titre description");
?>

View File

@ -1,38 +1,41 @@
<?php
function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["message"])) {
Stockage::set_prop($chemin, "message", $paramètres["message"]);
}
// TODO ... Quelles sont les interactions entre l'utilisateur et le message, dans quel ordre, ...
if (isset($paramètres["vue"])) {
Modules::vue($chemin->parent(), $paramètres["vue"]);
class ForumMessage {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
Modules::vue($chemin->parent());
if (isset($paramètres["message"])) {
Stockage::set_prop($chemin, "message", $paramètres["message"]);
}
return new Page($chemin->parent(), '', "redirect");
}
}
}
function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "message"), "message");
} else {
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "message"));
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="forum message edition" enctype="multipart/form-data" method="post" action="' . $chemin->get_url() . '">';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "message"), "message");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "message"));
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
// peut-être afficher le bouton "Supprimer" ??? ou est-ce trop d'options ?
}
// Peut-être afficher le bouton "citer" ? ou est-ce trop d'options ?
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
// peut-être afficher le bouton "Supprimer" ??? ou est-ce trop d'options ?
}
// Peut-être afficher le bouton "citer" ? ou est-ce trop d'options ?
return $ret;
}
}

View File

@ -6,37 +6,43 @@ class ForumSujet {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
// CONCURENCE : Faire un lock quelque part...
$numéro_message = 1 + Stockage::get_prop($chemin, "dernier_numero");
Stockage::set_prop($chemin, "dernier_numero", $numéro_message);
$np = Stockage::nouvelle_page($chemin, "" . $numéro_message, "forum-message");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "message", "");
enregistrer_nouveaute($np);
return new Page($chemin, "#message" . $numéro_message, "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin);
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["titre"])) {
if (isset($paramètres["titre"]) && Stockage::prop_diff($chemin, "titre", $paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
Stockage::renomer($chemin, $paramètres["titre"]);
$chemin = $chemin->renomer($paramètres["titre"]);
// TODO : peut-être new Page($chemin, '', "redirect") ?
// TODO : transmettre le paramètre "vue"
return new Page($chemin, '', "redirect");
}
if (isset($paramètres["vue"])) {
self::vue($chemin, $paramètres["vue"]);
return self::vue($chemin, $paramètres["vue"]);
} else {
self::vue($chemin);
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<input type="text" name="titre" class="forum sujet titre edition" value="' . Stockage::get_prop($chemin, "titre") . '"/>';
$ret .= '<input type="submit" value="renomer" />';
$ret .= '<form class="forum sujet infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2 class="forum sujet titre affichage">' . Stockage::get_prop($chemin, "titre") . '</h2>';
@ -44,23 +50,31 @@ class ForumSujet {
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<input type="hidden" name="action" value="supprimer"/>';
$ret .= '<input type="submit" value="Supprimer"/>';
$ret .= '<input type="submit" value="Supprimer le sujet"/>';
$ret .= '</form>';
}
$ret .= '<ul class="forum sujet">';
foreach (stockage::liste_enfants($chemin) as $k) {
$ret .= '<li>' . Modules::vue($k) . '</li>';
$ret .= '<li>' . Modules::vue($k)->contenu . '</li>';
}
$ret .= '</ul>';
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<li>';
$ret .= '<form class="forum sujet nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouvelle page"/>';
$ret .= '<input type="submit" value="Nouveau message"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</li>';
}
return $ret;
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
} else if ($vue == "miniature") {
return Stockage::get_prop($chemin, "titre");
return new Page("Sujet.", Stockage::get_prop($chemin, "titre"));
}
}
}

View File

@ -9,6 +9,7 @@ class GalerieÉvènement {
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "titre", "Nouvelle photo");
Stockage::set_prop($np, "description", "");
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
@ -46,7 +47,7 @@ class GalerieÉvènement {
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<h2 class="galerie evenement titre affichage">' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<p class="galerie evenement description affichage">' . Stockage::get_prop($chemin, "description") . '</p>';
}

View File

@ -9,6 +9,7 @@ class GalerieIndex {
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "titre", "Nouvelle période");
Stockage::set_prop($np, "description", "");
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else {
if (isset($paramètres["description"])) {

View File

@ -9,6 +9,7 @@ class GaleriePériode {
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "titre", "Nouvel évènement");
Stockage::set_prop($np, "description", "");
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif

View File

@ -6,5 +6,10 @@ require_once(dirname(__FILE__) . "/site/include.php");
require_once(dirname(__FILE__) . "/admin/include.php");
require_once(dirname(__FILE__) . "/forum/include.php");
require_once(dirname(__FILE__) . "/galerie/include.php");
require_once(dirname(__FILE__) . "/nouveautes/include.php");
require_once(dirname(__FILE__) . "/articles/include.php");
require_once(dirname(__FILE__) . "/equipes/include.php");
require_once(dirname(__FILE__) . "/liens/include.php");
require_once(dirname(__FILE__) . "/contact/include.php");
?>

View File

@ -0,0 +1,4 @@
<?php
require_once(dirname(__FILE__) . "/liens-index.php");
require_once(dirname(__FILE__) . "/liens-lien.php");
?>

View File

@ -0,0 +1,83 @@
<?php
class LiensIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "nouvelle_page") {
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
// CONCURENCE : Faire un lock quelque part...
$numéro_lien = 1 + Stockage::get_prop($chemin, "dernier_numero");
Stockage::set_prop($chemin, "dernier_numero", $numéro_lien);
$np = Stockage::nouvelle_page($chemin, "Lien" . $numéro_lien, "liens-lien");
Stockage::set_prop($np, "proprietaire", Authentification::get_utilisateur());
Stockage::set_prop($np, "texte", "Un lien");
Stockage::set_prop($np, "cible", "http://www.example.com/page/");
Stockage::set_prop($np, "description", "Un lien d'exemple très utile.");
enregistrer_nouveaute($np);
return new Page($np, '', "redirect");
} else {
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="liens infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
$ret .= '<p class="liens index description affichage">' . Stockage::get_prop($chemin, "description") . '</p>';
}
$ret .= '<div class="liens liste-liens index">';
$ret .= '<ul>';
if (Permissions::vérifier_permission($chemin, "nouvelle_page", Authentification::get_utilisateur())) {
$ret .= '<li>';
$ret .= '<div class="titre">';
$ret .= '<form class="liens nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouveau lien"/>';
$ret .= '</p>';
$ret .= '</form>';
$ret .= '</div>';
$ret .= '</li>';
}
foreach (stockage::liste_enfants($chemin) as $k) {
$ret .= '<li>' . Modules::vue($k)->contenu . '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("LiensIndex", "liens-index", "vue", "titre description");
?>

View File

@ -0,0 +1,54 @@
<?php
class LiensLien {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else if ($action == "supprimer") {
Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif
return new Page($chemin->parent(), '', "redirect");
} else {
if (isset($paramètres["texte"])) {
Stockage::set_prop($chemin, "texte", $paramètres["texte"]);
}
if (isset($paramètres["cible"])) {
Stockage::set_prop($chemin, "cible", $paramètres["cible"]);
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "cible", $paramètres["cible"]);
}
return new Page($chemin->parent(), '', "redirect");
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="liens lien edition" enctype="multipart/form-data" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<input type="text" name="texte" value="' . Stockage::get_prop($chemin, "texte") . '" />';
$ret .= '<input type="text" name="cible" value="' . Stockage::get_prop($chemin, "cible") . '" />';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<a href="' . htmlspecialchars(Stockage::get_prop($chemin, "cible")) . '">' . Stockage::get_prop($chemin, "texte") . '</a>';
$ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "description"));
}
if (Permissions::vérifier_permission($chemin, "supprimer", Authentification::get_utilisateur())) {
$ret .= '<form action="' . $chemin->get_url() . '">';
$ret .= '<input type="hidden" name="action" value="supprimer"/>';
$ret .= '<input type="submit" value="Supprimer le lien ' . htmlspecialchars(Stockage::get_prop($chemin, "cible")) . '"/>';
$ret .= '</form>';
}
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
Modules::enregister_module("LiensLien", "liens-lien", "vue", "texte cible description");
?>

View File

@ -0,0 +1,3 @@
<?php
require_once(dirname(__FILE__) . "/nouveautes-index.php");
?>

View File

@ -0,0 +1,84 @@
<?php
// TODO : accents pour nouveauté.
class NouveautesIndex {
public static function action($chemin, $action, $paramètres) {
if ($action == "anuler") {
return new Page($chemin, '', "redirect");
} else {
if (isset($paramètres["titre"])) {
Stockage::set_prop($chemin, "titre", $paramètres["titre"]);
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
return self::vue($chemin);
}
}
}
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="articles infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>';
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>';
}
$ret .= '<div class="nouveautes list index">';
$ret .= '<ul>';
/*foreach (Stockage::liste_enfants(new Chemin("/forum")) as $k) {
$date = Stockage::get_prop($k, "date_modif");
if (Erreur::is_erreur($date)) $date = "0";
$date = (int)$date;
var_dump($date);
}*/
// TODO : faire dans l'ordre décroissant les 5 dernières nouveautés.
foreach (Stockage::liste_enfants($chemin) as $n) {
$k = new Chemin(Stockage::get_prop($n, "chemin"));
$mini = Modules::vue($k, 'miniature');
$ret .= '<li>';
// TODO : mettre une ancre "#message<numéro>"
$ret .= '<a href="' . $k->get_url() . '">'; // TODO : escape l'url !
$ret .= '<span class="titre">';
$ret .= $mini->titre;
$ret .= '</span>';
$ret .= '</a>';
$ret .= '<p class="contenu">';
$ret .= $mini->contenu;
$ret .= '</p>';
$ret .= '</li>';
}
$ret .= '</ul>';
return new Page($ret, Stockage::get_prop($chemin, "titre"));
}
}
}
// TODO : maintenir la liste à jour lors des renomages, suppressions, ...
function enregistrer_nouveaute($chemin) {
$singleton = new Chemin("/nouveautes");
Stockage::set_prop($chemin, "date_modif", "".time());
// SECURITE : On ne doit PAS pouvoir modifier dernier_numero arbitrairement
// CONCURENCE : Faire un lock quelque part...
$numéro_nouveauté = 1 + Stockage::get_prop($singleton, "dernier_numero");
Stockage::set_prop($singleton, "dernier_numero", $numéro_nouveauté);
$nouv = Stockage::nouvelle_page($singleton, "" . $numéro_nouveauté, "nouveaute-element-liste");
Stockage::set_prop($nouv, "chemin", $chemin->get());
}
Modules::enregister_module("NouveautesIndex", "nouveautes-index", "vue", "titre");
?>

View File

@ -6,6 +6,14 @@ class SiteIndex {
Stockage::set_prop($chemin, "nom_site", $paramètres["nom_site"]);
}
if (isset($paramètres["prochain_evenement"])) {
Stockage::set_prop($chemin, "prochain_evenement", $paramètres["prochain_evenement"]);
}
if (isset($paramètres["description"])) {
Stockage::set_prop($chemin, "description", $paramètres["description"]);
}
if (isset($paramètres["vue"])) {
return self::vue($chemin, $paramètres["vue"]);
} else {
@ -16,8 +24,37 @@ class SiteIndex {
public static function vue($chemin, $vue = "normal") {
if ($vue == "normal") {
$ret = '';
$ret .= "<h2>" . Stockage::get_prop($chemin, "nom_site") . "</h2>";
$ret .= "<p>Bienvenue sur le site d'exemple.</p>";
$ret .= '<div class="prochain-evenement">';
$ret .= '<h2>Prochain évènement</h2>';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form method="post" action="' . $chemin->get_url() . '">';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "prochain_evenement"), "prochain_evenement");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= Stockage::get_prop($chemin, "prochain_evenement");
}
$ret .= '</div>';
$ret .= '<div class="description-site">';
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form class="nom_site infos" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<h2><input type="text" name="nom_site" value="' . Stockage::get_prop($chemin, "nom_site") . '" /></h2>';
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= "<h2>" . Stockage::get_prop($chemin, "nom_site") . "</h2>";
}
if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) {
$ret .= '<form method="post" action="' . $chemin->get_url() . '">';
$ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description");
$ret .= '<p><input type="submit" value="appliquer" /></p>';
$ret .= '</form>';
} else {
$ret .= Stockage::get_prop($chemin, "description");
}
$ret .= '</div>';
return new Page($ret, Stockage::get_prop($chemin, "nom_site"));
} else if ($vue == "css") {
return new Page(get_css(), "text/css", "raw");
@ -26,6 +63,6 @@ class SiteIndex {
}
}
Modules::enregister_module("SiteIndex", "site-index", "vue", "titre");
Modules::enregister_module("SiteIndex", "site-index", "vue", "nom_site prochain_evenement description");
?>

View File

@ -5,7 +5,7 @@ class Erreur {
public $message = "erreur";
public $string = "";
public static function fatale($message) {
public static function fatale($message, $html = false) {
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
@ -20,7 +20,7 @@ class Erreur {
. htmlspecialchars(rawurlencode("Code de l'erreur : " . $message)) . '">'
. htmlspecialchars(Config::get('courriel_admin'))
. '</a>. Indiquez l\'erreur ci-dessous dans votre courriel.</p>
<p><strong>' . htmlspecialchars($message) . '</strong></p>
<p><strong>' . ($html ? $message : htmlspecialchars($message)) . '</strong></p>
</body>
</html>';
//echo "\n"; debug_print_backtrace();

View File

@ -1,5 +1,8 @@
<?php
// #ba7500
// #c0a700
function get_css() {
return "h1 a {
color: #7f7f33;

View File

@ -22,7 +22,9 @@ class Squelette {
$ret .= ' <meta http-equiv="Content-Language" content="fr" />' . $nl;
$ret .= ' <meta name="keywords" lang="fr" content="motcle1,mocle2" />' . $nl;
$ret .= ' <meta name="description" content="Description de ma page web." />' . $nl;
$ret .= ' <link href="' . $chemin_css . '" rel="stylesheet" type="text/css" />' . $nl;
/*$ret .= ' <link href="' . $chemin_css . '" rel="stylesheet" type="text/css" />' . $nl;*/
$ret .= ' <link href="' . $racine->get_url("test.less") . '" rel="stylesheet/less" type="text/css" />' . $nl;
$ret .= ' <script src="' . $racine->get_url("less/less.js") . '" type="text/javascript"></script>' . $nl;
$ret .= ' </head>' . $nl;
$ret .= ' <body>' . $nl;
$ret .= ' <h1><a href="' . $racine->get_url() . '">' . Stockage::get_prop($racine, "nom_site") . '</a></h1>' . $nl;
@ -39,6 +41,11 @@ class Squelette {
$ret .= ' <ul>' . $nl;
$ret .= ' <li><a href="' . $racine->get_url() . '">Accueil</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("galerie")->get_url() . '">Galerie</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("nouveautes")->get_url() . '">Nouveautés</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("equipes")->get_url() . '">Équipes</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("forum")->get_url() . '">Forum</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("liens")->get_url() . '">Liens utiles</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("contact")->get_url() . '">Contact</a></li>' . $nl;
if (Permissions::vérifier_permission($racine->enfant("admin"), "set_prop", Authentification::get_utilisateur())) {
$ret .= '<li><a href="' . $racine->enfant("admin")->get_url() . '">Administration</a></li>' . $nl;
}

View File

@ -24,4 +24,8 @@ function affichage_texte_enrichi($données) {
return "<p>" . $données . "</p>"; // escape html chars & co.
}
function miniature_texte_enrichi($données) {
return substr($données, 0, 50) . "..."; // escape html chars & co.
}
?>

View File

@ -0,0 +1 @@
Du bla bla sur le handball, l\'association, etc. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.

View File

@ -1 +1 @@
Site d'exemple
Montpellier Chamberte Handball

View File

@ -0,0 +1 @@
Match au stade de france !

View File

@ -0,0 +1 @@
1284424642

View File

@ -0,0 +1,3 @@
Responsable du vestiaire masculin.
06 66 00 06 66

View File

@ -0,0 +1 @@
Lamorue

View File

@ -0,0 +1 @@
Cunégonde

View File

@ -0,0 +1 @@
grand___chef

View File

@ -0,0 +1 @@
contact-contact

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1 @@
Personnes à contacter :

View File

@ -0,0 +1 @@
Contact

View File

@ -0,0 +1 @@
contact-index

View File

@ -0,0 +1 @@
Et nous présentons fièrement devant vos yeux ébahis nos équipes de super-handballeurs !!!

View File

@ -0,0 +1 @@
Équipes

View File

@ -0,0 +1 @@
equipes-index

View File

@ -0,0 +1 @@
1284419751

View File

@ -0,0 +1 @@
Un vaillant gardien de but. Que la force soit avec lui !

View File

@ -0,0 +1 @@
Skywalker

View File

@ -0,0 +1 @@
Luc

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
equipes-joueur

View File

@ -0,0 +1 @@
1284418704

View File

@ -0,0 +1 @@
3

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
Équipe n°1

View File

@ -0,0 +1 @@
equipes-equipe

View File

@ -0,0 +1 @@
1282948057

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
Nouveau sujet

View File

@ -0,0 +1 @@
forum-sujet

View File

@ -0,0 +1 @@
Un ptit message !

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
forum-message

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
Un sujet de discussion

View File

@ -0,0 +1 @@
forum-sujet

View File

@ -0,0 +1 @@
Bla bla bla...

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
forum-message

View File

@ -0,0 +1 @@
Plop

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
forum-message

View File

@ -0,0 +1 @@
Truc

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
forum-message

View File

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
Une autre discussion

View File

@ -0,0 +1 @@
forum-sujet

View File

@ -0,0 +1 @@
Description du forum.

View File

@ -0,0 +1 @@
Forum

View File

@ -0,0 +1 @@
forum-index

View File

@ -0,0 +1 @@
Un peu de le texte.

View File

@ -0,0 +1 @@
Un super évènement !

View File

@ -0,0 +1 @@
http://www.example.com/joli/lien/

View File

@ -0,0 +1 @@
1284424600

View File

@ -0,0 +1 @@
Un lien d'exemple très utile.

View File

@ -0,0 +1 @@
grand___chef

View File

@ -0,0 +1 @@
Un très joli lien

View File

@ -0,0 +1 @@
liens-lien

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1 @@
Quelques liens utiles vers des terrains de handball virtuels !

Some files were not shown because too many files have changed in this diff Show More