Articles.
This commit is contained in:
parent
921beb8e27
commit
140a44ee91
60
__cms__/code/modules/articles/articles-article.php
Normal file
60
__cms__/code/modules/articles/articles-article.php
Normal 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");
|
||||||
|
|
||||||
|
?>
|
53
__cms__/code/modules/articles/articles-article.php~
Normal file
53
__cms__/code/modules/articles/articles-article.php~
Normal 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");
|
||||||
|
|
||||||
|
?>
|
87
__cms__/code/modules/articles/articles-index.php
Normal file
87
__cms__/code/modules/articles/articles-index.php
Normal 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");
|
||||||
|
|
||||||
|
?>
|
83
__cms__/code/modules/articles/articles-index.php~
Normal file
83
__cms__/code/modules/articles/articles-index.php~
Normal 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");
|
||||||
|
|
||||||
|
?>
|
4
__cms__/code/modules/articles/include.php
Normal file
4
__cms__/code/modules/articles/include.php
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?php
|
||||||
|
require_once(dirname(__FILE__) . "/articles-index.php");
|
||||||
|
require_once(dirname(__FILE__) . "/articles-article.php");
|
||||||
|
?>
|
5
__cms__/code/modules/articles/include.php~
Normal file
5
__cms__/code/modules/articles/include.php~
Normal 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");
|
||||||
|
?>
|
|
@ -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"/>';
|
||||||
|
|
|
@ -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");
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
1
__cms__/donnees/articles/Nouvel article/__prop__contenu
Normal file
1
__cms__/donnees/articles/Nouvel article/__prop__contenu
Normal 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.
|
|
@ -0,0 +1 @@
|
||||||
|
admin
|
1
__cms__/donnees/articles/Nouvel article/__prop__titre
Normal file
1
__cms__/donnees/articles/Nouvel article/__prop__titre
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Nouvel article
|
1
__cms__/donnees/articles/Nouvel article/__prop__type
Normal file
1
__cms__/donnees/articles/Nouvel article/__prop__type
Normal file
|
@ -0,0 +1 @@
|
||||||
|
articles-article
|
2
__cms__/donnees/articles/__prop__description
Normal file
2
__cms__/donnees/articles/__prop__description
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Description des articles.
|
||||||
|
FooBar
|
1
__cms__/donnees/articles/__prop__description~
Normal file
1
__cms__/donnees/articles/__prop__description~
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Description des articles.
|
1
__cms__/donnees/articles/__prop__titre
Normal file
1
__cms__/donnees/articles/__prop__titre
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Articles test
|
1
__cms__/donnees/articles/__prop__titre~
Normal file
1
__cms__/donnees/articles/__prop__titre~
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Articles
|
1
__cms__/donnees/articles/__prop__type
Normal file
1
__cms__/donnees/articles/__prop__type
Normal file
|
@ -0,0 +1 @@
|
||||||
|
articles-index
|
1
__cms__/donnees/articles/__prop__type~
Normal file
1
__cms__/donnees/articles/__prop__type~
Normal file
|
@ -0,0 +1 @@
|
||||||
|
articles-index
|
7
articles/Nouvel article/index.php
Normal file
7
articles/Nouvel article/index.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once(dirname(__FILE__) . "/./../../__cms__/cms.php");
|
||||||
|
|
||||||
|
CMS::page("/articles/Nouvel article");
|
||||||
|
|
||||||
|
?>
|
7
articles/index.php
Normal file
7
articles/index.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once(dirname(__FILE) . "/./../__cms__/cms.php");
|
||||||
|
|
||||||
|
CMS::page("/articles");
|
||||||
|
|
||||||
|
?>
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user