Suppression de l'ancienne structure du code.
This commit is contained in:
parent
925d551e0c
commit
6ad76de612
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
formulaire_edition_article() {
|
||||
}
|
||||
|
||||
formulaire_edition_lien() {
|
||||
}
|
||||
|
||||
formulaire_edition_lien_interne() {
|
||||
}
|
||||
|
||||
formulaire_edition_lien_externe() {
|
||||
return '<input type="text" value="http://www.site.com/page.html"/>'
|
||||
}
|
||||
|
||||
formulaire_edition_texte() {
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,169 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once("util.php");
|
||||
require_once("config.php");
|
||||
require_once("cms.php");
|
||||
require_once("squelette.php");
|
||||
require_once("controleur/chemin_page.php");
|
||||
|
||||
require_once("types/galerie.php");
|
||||
require_once("types/galerie-periode.php");
|
||||
require_once("types/galerie-evenement.php");
|
||||
require_once("types/galerie-photo.php");
|
||||
|
||||
// Protocole : http://site/actualités/?nouveau=Le%20titre
|
||||
|
||||
// Structure des répertoires
|
||||
// article/__prop__article
|
||||
// /__prop__type
|
||||
// /__prop__photo
|
||||
// /__prop__date
|
||||
// /__prop__lieu
|
||||
// /article_1 // Sous article
|
||||
// /article_2 // Sous article
|
||||
|
||||
class Page {
|
||||
public $type_enfants = "Galerie";
|
||||
|
||||
private static $types = Array();
|
||||
|
||||
public static function ajouterType($nom, $classe) {
|
||||
self::$types[$nom] = $classe;
|
||||
}
|
||||
|
||||
|
||||
/* ****** Début du hack ****** */
|
||||
// Lorsqu'on instancie un objet Page, il faudrait en fait instancier un objet Galerie ou Forum ou ...
|
||||
// selon le type de la page. Il faut donc lors de l'instanciation modifier la classe de $this.
|
||||
//
|
||||
// C'est malheureusement impossible. Avec classkit_method_copy, il serait possible de recopier les
|
||||
// méthodes de Galerie ou Forum ou ... par-dessus les méthodes de $this. Mais classkit_method_copy est
|
||||
// expérimentale.
|
||||
//
|
||||
// Une autre approche consisterait à modifier toutes les méthodes de Page pour qu'elles appellent
|
||||
// d'elles-même leur alter ego dans Galerie ou Forum. Mais ces méthodes (dans Galerie) ne pourraient
|
||||
// pas se servir de la méthode parente (dans Page), donc pas d'héritage complet.
|
||||
//
|
||||
// La solution qui a été retenue consiste à appeller la fonction statique "Page::_new()" au lieu de
|
||||
// "new Page()". Page::_new() détecte le type de la page et instancie la bonne classe.
|
||||
// Cependant, pour accéder à __prop__type, il faudrait pouvoir utiliser Page->get_prop(), qui est non
|
||||
// statique alors que Page::_new() est statique. On instancie donc un objet Page, on utilise
|
||||
// Page->get_prop(), puis on instancie la bonne sous-classe de Page (Galerie, Forum, ...).
|
||||
|
||||
public static function _new($chemin) {
|
||||
$page = new Page($chemin);
|
||||
$type = $page->get_prop("type");
|
||||
if (array_key_exists($type, self::$types)) {
|
||||
return new self::$types[$type]($chemin);
|
||||
} else {
|
||||
return new self($chemin);
|
||||
}
|
||||
}
|
||||
/* ****** Fin du hack ****** */
|
||||
|
||||
|
||||
public function __construct($chemin) {
|
||||
$this->chemin = new CheminPage($chemin);
|
||||
}
|
||||
|
||||
// Renvoie le chemin de la page dans le système de fichiers
|
||||
private function chemin_fs() {
|
||||
global $config_chemin_modele;
|
||||
return concaténer_chemin_fs($config_chemin_modele, $this->chemin->get());
|
||||
}
|
||||
|
||||
public function liste_enfants() {
|
||||
$scandir = scandir($this->chemin_fs());
|
||||
if ($scandir === false) { error_log("Impossible d'accéder à la liste des pages enfant de " . $this->chemin->get()); }
|
||||
|
||||
$enfants = Array();
|
||||
foreach ($scandir as $k => $v) {
|
||||
if (strpos($v, "__prop__") !== 0 && is_dir(concaténer_chemin_fs($this->chemin_fs(), $v)) && $v != "." && $v != "..") {
|
||||
$enfants[] = $this->enfant($v);
|
||||
}
|
||||
}
|
||||
return $enfants;
|
||||
}
|
||||
|
||||
public function enfant($nom) {
|
||||
return self::_new($this->chemin->enfant($nom));
|
||||
}
|
||||
|
||||
public function parent() {
|
||||
return self::_new($this->chemin->parent());
|
||||
}
|
||||
|
||||
public function nouvel_enfant($nom = "") {
|
||||
// TODO : Si nom est null, utiliser "Article" + numéro
|
||||
|
||||
if ($nom == "") $nom = "Nouvel article";
|
||||
|
||||
$futur_enfant = $this->enfant($nom);
|
||||
$chemin_fs_futur_enfant = $futur_enfant->chemin_fs();
|
||||
|
||||
if (! file_exists($chemin_fs_futur_enfant)) {
|
||||
mkdir($chemin_fs_futur_enfant);
|
||||
$futur_enfant->set_prop("type", $this->type_enfants);
|
||||
}
|
||||
|
||||
return Page::_new($futur_enfant->chemin->get());
|
||||
}
|
||||
|
||||
public function supprimer($récursif) {
|
||||
// Si récursif || il n'y a pas de sous-dossiers
|
||||
// alors supprimer récursivement le dossier courant
|
||||
// sinon renvoyer FAUX
|
||||
if ($récursif || true) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private function chemin_fs_prop($nom_propriété) {
|
||||
return concaténer_chemin_fs($this->chemin_fs(), "__prop__" . $nom_propriété);
|
||||
}
|
||||
|
||||
public function get_prop($nom_propriété) {
|
||||
// lire le contenu du fichier prop_nom_propriété
|
||||
// renvoie toujours une chaîne (vide si pas de propriété ou erreur).
|
||||
$fichier = $this->chemin_fs_prop($nom_propriété);
|
||||
if (file_exists($fichier)) {
|
||||
$a = file_get_contents($fichier);
|
||||
return ($a ? $a : '');
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public function set_prop($nom_propriété, $valeur) {
|
||||
// Écrire $valeur dans la propriété $nom_propriété.
|
||||
$fichier = $this->chemin_fs_prop($nom_propriété);
|
||||
file_put_contents($fichier, $valeur);
|
||||
}
|
||||
|
||||
// calculer l'url de cette page en fonction de son chemin et de l'url de base
|
||||
public function url($fichier = "", $params = array()) {
|
||||
global $config_url_base;
|
||||
|
||||
$u = $config_url_base . $this->chemin->get() . '/' . $fichier;
|
||||
|
||||
$sep = '?';
|
||||
foreach ($params as $k => $v) {
|
||||
$u .= $sep . urlencode($k) . '=' . urlencode($v);
|
||||
$sep = '&';
|
||||
}
|
||||
|
||||
return $u;
|
||||
}
|
||||
|
||||
public function vue() {
|
||||
return "Aucune vue pour «" . $this->chemin->get() . "» .";
|
||||
}
|
||||
|
||||
public function affiche() {
|
||||
echo Squelette::enrober($this, $this->vue());
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -1,44 +0,0 @@
|
|||
= MVC =
|
||||
|
||||
Modèle :
|
||||
structure : fichiers & dossiers
|
||||
dans le dossier /contenu
|
||||
articles: xml
|
||||
vues des articles (édition, affichage, …) : php + html
|
||||
dans le dossier /types
|
||||
|
||||
Vue :
|
||||
Vue affichage :
|
||||
templates css
|
||||
affichage d'un article (xslt : xml article -> xhtml fragment)
|
||||
affichage des pages dans le "modèle" du site : (/modeles ?) /site.php (header + footer + barre latérale)
|
||||
Vue édition ?? :
|
||||
affichage de l'article avec sa vue "édition".
|
||||
|
||||
Nécessite : affichage d'un autre article (<?php include(…); ?>)
|
||||
|
||||
Contrôleur :
|
||||
articles : editeur.php
|
||||
structure : structure.php
|
||||
|
||||
|
||||
= Sécurité =
|
||||
|
||||
Les contrôleurs s'assurent pour chaque opération (lecture / écriture // listing / création)
|
||||
que l'utilisateur a bien les droits requis. Il fait pour cela appel à la fonction suivante :
|
||||
|
||||
auth.php: verif_auth(article, prop, action)
|
||||
où action est "read, write, create, delete"
|
||||
si prop est null, l'action est create ou delete, et ce sur tout l'article.
|
||||
|
||||
la fonction auth.php: do_verif_auth(article, prop, action) effectue l'action ssi on a l'autorisation.
|
||||
|
||||
La connexion se fait avec :
|
||||
|
||||
auth.php: formulaire_connexion_mini() // mini-version en haut à droite ???
|
||||
auth.php: formulaire_connexion()
|
||||
auth.php: connexion() // récupère les infos dans $POST
|
||||
auth.php: formulaire_déconnexion() // lien "déconnexion"
|
||||
auth.php: déconnexion()
|
||||
|
||||
etc.
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once("controleur/page.php");
|
||||
|
||||
class GalerieEvenement extends Page {
|
||||
public function vue($nom_vue = "normal") {
|
||||
$ret = '';
|
||||
|
||||
if ($nom_vue == "miniature") {
|
||||
$enfants = $this->liste_enfants();
|
||||
if ($enfants[0]) return $enfants[0]->vue('miniature');
|
||||
else return "Aucune<br/>photo";
|
||||
}
|
||||
|
||||
$ret .= '<ul class="galerie evenement">';
|
||||
foreach ($this->liste_enfants() as $k) {
|
||||
$ret .= '<li><a href="' . $k->url() . '">' . $k->vue('miniature') . '</a></li>';
|
||||
}
|
||||
$ret .= '</ul>';
|
||||
|
||||
if ($nom_vue == "edition") {
|
||||
$ret .= '<a href="' . $this->url('nouveau') . '">Nouvelle photo.</a>';
|
||||
$ret .= '<a href="' . $this->url('supprimer') . '">Supprmier cet évènement.</a>';
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
Page::ajouterType("GalerieEvenement", "GalerieEvenement");
|
||||
|
||||
?>
|
|
@ -1,31 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once("controleur/page.php");
|
||||
|
||||
class GaleriePeriode extends Page {
|
||||
public function vue($nom_vue = "normal") {
|
||||
$ret = '';
|
||||
|
||||
if ($nom_vue == "miniature") {
|
||||
$enfants = $this->liste_enfants();
|
||||
return $enfants[0]->vue('miniature');
|
||||
}
|
||||
|
||||
$ret .= '<ul class="galerie periode">';
|
||||
foreach ($this->liste_enfants() as $k) {
|
||||
$ret .= '<li><a href="' . $k->url() . '">' . $k->vue('miniature') . '</a></li>';
|
||||
}
|
||||
$ret .= '</ul>';
|
||||
|
||||
if ($nom_vue == "edition") {
|
||||
$ret .= '<a href="' . $this->url('nouveau') . '">Nouvel évènement.</a>';
|
||||
$ret .= '<a href="' . $this->url('supprimer') . '">Supprmier cette période.</a>';
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
Page::ajouterType("GaleriePeriode", "GaleriePeriode");
|
||||
|
||||
?>
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once("controleur/page.php");
|
||||
|
||||
class GaleriePhoto extends Page {
|
||||
public function vue($nom_vue = "normal") {
|
||||
if ($nom_vue == "miniature") {
|
||||
return '<img src="' . $this->url($this->get_prop("image_mini")) . '"/>';
|
||||
}
|
||||
|
||||
$ret = '<img src="' . $this->get_prop("image") . '"/>';
|
||||
|
||||
if ($nom_vue == "edition") {
|
||||
$ret .= '<input type="file" value="' . . '" /><input type="button" value="Changer la photo">';
|
||||
$ret .= '<a href="' . $this->url('supprimer') . '">Supprmier cet évènement.</a>';
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
Page::ajouterType("GaleriePhoto", "GaleriePhoto");
|
||||
|
||||
?>
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once("controleur/page.php");
|
||||
|
||||
class Galerie extends Page {
|
||||
public $type_enfants = "GalerieEvenement";
|
||||
|
||||
public function vue($nom_vue = "normal") {
|
||||
$ret = '';
|
||||
|
||||
$ret .= '<ul class="galerie principale">';
|
||||
foreach ($this->liste_enfants() as $k) {
|
||||
$ret .= '<li><a href="' . $k->url() . '">' . $k->vue('miniature') . '</a></li>';
|
||||
}
|
||||
$ret .= '</ul>';
|
||||
|
||||
if ($nom_vue == "edition") {
|
||||
$ret .= '<a href="' . $this->url("", array("action" => "nouvel_enfant", "titre" => "Nouvelle période")) . '">Nouvelle période.</a>';
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
Page::ajouterType("Galerie", "Galerie");
|
||||
|
||||
?>
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
// Fonctions utilitaires.
|
||||
|
||||
// Concatène deux chemins.
|
||||
function concaténer_chemin_fs($p1, $p2) {
|
||||
return $p1 . '/' . $p2; // FIXME : . '/' . n'est pas portable !
|
||||
}
|
||||
|
||||
function split_uri($uri) {
|
||||
$uri = urldecode($uri);
|
||||
if (strpos($uri, 'https://') === 0) {
|
||||
$split["protocole"] = 'https://';
|
||||
$uri = substr($uri, 8);
|
||||
$split["hote"] = substr($uri, 0, strpos($uri,'/'));
|
||||
$uri = substr($uri, strpos($uri,'/'));
|
||||
} else if (strpos($uri, 'http://') === 0) {
|
||||
$split["protocole"] = 'http://';
|
||||
$uri = substr($uri, 7);
|
||||
$split["hote"] = substr($uri, 0, strpos($uri,'/'));
|
||||
$uri = substr($uri, strpos($uri,'/'));
|
||||
} else {
|
||||
$split["protocole"] = '';
|
||||
$split["hote"] = '';
|
||||
}
|
||||
|
||||
$question_pos = strpos($uri, '?');
|
||||
if ($question_pos === FALSE) {
|
||||
$chemin = $uri;
|
||||
$parametres = '';
|
||||
} else {
|
||||
$chemin = substr($uri, 0, $question_pos);
|
||||
$parametres = substr($uri, $question_pos);
|
||||
}
|
||||
|
||||
$split["chemin"] = explode('/', $chemin);
|
||||
$split["parametres"] = explode('&', $parametres);
|
||||
|
||||
return $split;
|
||||
}
|
Loading…
Reference in New Issue
Block a user