Articles.

This commit is contained in:
Georges Dupéron 2010-08-27 05:42:26 +02:00
parent 921beb8e27
commit 140a44ee91
23 changed files with 325 additions and 2 deletions

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,53 @@
<?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");
}
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="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"));
}
}
}
Modules::enregister_module("ArticlesArticle", "articles-article", "vue", "titre contenu");
?>

View File

@ -0,0 +1,87 @@
<?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.");
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,83 @@
<?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");
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 .= '</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,5 @@
<?php
require_once(dirname(__FILE__) . "/forum-index.php");
require_once(dirname(__FILE__) . "/forum-sujet.php");
require_once(dirname(__FILE__) . "/forum-message.php");
?>

View File

@ -49,7 +49,7 @@ class ForumIndex {
$ret .= '<li>'; $ret .= '<li>';
$ret .= '<div class="titre">'; $ret .= '<div class="titre">';
$ret .= '<form class="galerie nouvelle_page" method="post" action="' . $chemin->get_url() . '">'; $ret .= '<form class="forum nouvelle_page" method="post" action="' . $chemin->get_url() . '">';
$ret .= '<p>'; $ret .= '<p>';
$ret .= '<input type="hidden" name="action" value="nouvelle_page"/>'; $ret .= '<input type="hidden" name="action" value="nouvelle_page"/>';
$ret .= '<input type="submit" value="Nouveau sujet de discussion"/>'; $ret .= '<input type="submit" value="Nouveau sujet de discussion"/>';

View File

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

View File

@ -40,6 +40,7 @@ class Squelette {
$ret .= ' <li><a href="' . $racine->get_url() . '">Accueil</a></li>' . $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("galerie")->get_url() . '">Galerie</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("forum")->get_url() . '">Forum</a></li>' . $nl; $ret .= ' <li><a href="' . $racine->enfant("forum")->get_url() . '">Forum</a></li>' . $nl;
$ret .= ' <li><a href="' . $racine->enfant("articles")->get_url() . '">Articles</a></li>' . $nl;
if (Permissions::vérifier_permission($racine->enfant("admin"), "set_prop", Authentification::get_utilisateur())) { 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; $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. 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 @@
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

@ -0,0 +1 @@
admin

View File

@ -0,0 +1 @@
Nouvel article

View File

@ -0,0 +1 @@
articles-article

View File

@ -0,0 +1,2 @@
Description des articles.
FooBar

View File

@ -0,0 +1 @@
Description des articles.

View File

@ -0,0 +1 @@
Articles test

View File

@ -0,0 +1 @@
Articles

View File

@ -0,0 +1 @@
articles-index

View File

@ -0,0 +1 @@
articles-index

View File

@ -0,0 +1,7 @@
<?php
require_once(dirname(__FILE__) . "/./../../__cms__/cms.php");
CMS::page("/articles/Nouvel article");
?>

7
articles/index.php Normal file
View File

@ -0,0 +1,7 @@
<?php
require_once(dirname(__FILE) . "/./../__cms__/cms.php");
CMS::page("/articles");
?>

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
fichiers="index.php galerie forum admin __cms__/donnees" fichiers="index.php galerie forum articles admin __cms__/donnees"
chgrp -R www-data $fichiers chgrp -R www-data $fichiers
chmod -R 664 $fichiers chmod -R 664 $fichiers