Suppression de l'ancienne structure du code.

This commit is contained in:
Georges Dupéron 2010-08-01 19:59:33 +02:00
parent 925d551e0c
commit 6ad76de612
15 changed files with 0 additions and 386 deletions

View File

@ -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() {
}
?>

View File

@ -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());
}
}
?>

View File

@ -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.

View File

@ -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");
?>

View File

@ -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");
?>

View File

@ -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");
?>

View File

@ -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");
?>

View File

@ -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;
}