Implémentation quasi-complète du module Galerie.
This commit is contained in:
parent
bae7ebbf9e
commit
a75254c8ca
|
@ -48,6 +48,7 @@ class ElementDocument {
|
|||
}
|
||||
|
||||
public function __call($fn, $args) {
|
||||
// TODO (peut-être ?): si on ne peut pas ajouter directement un élément, chercher un chemin qui permette de l'ajouter (p.ex. un strong directement à la racine d'un document, on ajoutera un p).
|
||||
if (array_key_exists($this->type, self::$enfantsÉléments)
|
||||
&& in_array($fn, self::$enfantsÉléments[$this->type])) {
|
||||
$elem = new self($fn);
|
||||
|
|
|
@ -1,20 +1,30 @@
|
|||
<?php
|
||||
|
||||
// TODO : gestion du renomage (pseudo-réécriture d'URL).
|
||||
// TODO : gestion du renomage (pseudo-réécriture d'URL).
|
||||
|
||||
class Page {
|
||||
// Convention de nommage :
|
||||
// res_h_xxx = html, res_i_xxx = image, res_c_xxx = css, res_j_xxx = javascript
|
||||
protected static $ressources_statiques = array();
|
||||
protected static $ressources_dynamiques = array();
|
||||
protected static $attributs = array(
|
||||
"date_creation" => 0,
|
||||
"date_modification" => 0,
|
||||
"publier" => false,
|
||||
"nom_systeme" => "",
|
||||
"composant_url" => "page",
|
||||
);
|
||||
protected static $enfants = true; // Type des enfants. True pour tout autoriser.
|
||||
public static function ressources_statiques() {
|
||||
return array();
|
||||
}
|
||||
public static function ressources_dynamiques() {
|
||||
return array();
|
||||
}
|
||||
public static function types_enfants() {
|
||||
// true => n'importe quel type est accepté
|
||||
// null ou false => aucun type.
|
||||
return true;
|
||||
}
|
||||
public static function attributs() {
|
||||
return array(
|
||||
"date_creation" => 0,
|
||||
"date_modification" => 0,
|
||||
"publier" => false,
|
||||
"nom_systeme" => "",
|
||||
"composant_url" => "page",
|
||||
);
|
||||
}
|
||||
|
||||
public static function ajouter_type($type) {
|
||||
niy("Page::ajouter_type($type);");
|
||||
|
@ -47,9 +57,19 @@ class Page {
|
|||
niy("uid");
|
||||
}
|
||||
|
||||
public function select($requête) {
|
||||
/* public function select($requête) {
|
||||
// Renvoie un objet de la classe CollectionPages.
|
||||
niy("select");
|
||||
}*/
|
||||
|
||||
public function enfants($condition = true, $ordre = "date desc", $limit = 0, $offset = 0) {
|
||||
// Renvoie un objet de la classe CollectionPages.
|
||||
niy("select");
|
||||
// Si $condition === true, il n'y a pas de condition
|
||||
// ex: $condition = "@apercu = true"
|
||||
// ordre = null => ordre = "date desc"
|
||||
// limit = null || limit = 0 => pas de limite
|
||||
// offset = null => offset = 0
|
||||
niy("enfants");
|
||||
}
|
||||
|
||||
public function __get($nom) {
|
||||
|
@ -73,7 +93,7 @@ class Page {
|
|||
// Modifie l'attribut "$nom" dans la BDD.
|
||||
niy("set direct $name = $val");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CollectionPages {
|
||||
function __construct() {
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
<?php
|
||||
|
||||
function qw($arg, $sep = " ") {
|
||||
if (is_array($arg)) return $arg;
|
||||
function qw($arg, $arg2 = null, $sep = " ") {
|
||||
$ret = array();
|
||||
if (is_array($arg)) {
|
||||
if ($arg2 === null) {
|
||||
return $arg;
|
||||
} else {
|
||||
$ret = $arg;
|
||||
$arg = $arg2;
|
||||
}
|
||||
}
|
||||
foreach(explode($sep, $arg) as $v) {
|
||||
if ($v !== "") array_push($ret, $v);
|
||||
}
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
<?php
|
||||
|
||||
abstract class GalerieBase extends Page {
|
||||
protected static $ressources_statiques = array("i_icône_nouvelle_page image/jpeg", "c_style text/css");
|
||||
protected static $ressources_dynamiques = array("h_page Document", "h_miniature Document", "h_mini_miniature Document");
|
||||
protected static $attributs = array(
|
||||
"titre" => "Galerie",
|
||||
"description" => ""
|
||||
);
|
||||
protected static $enfants = "GalerieÉvènement";
|
||||
|
||||
protected static $texte_nouvelle_page = "Nouvel élément";
|
||||
protected static $fichier_nouvelle_page = "nouvelle_periode.png";
|
||||
|
||||
public function res_i_icône_nouvelle_page() {
|
||||
return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$fichier_nouvelle_page));
|
||||
}
|
||||
|
||||
public function res_c_style() {
|
||||
niy("res_c_style");
|
||||
}
|
||||
|
||||
public function res_h_page() {
|
||||
$d = new Document();
|
||||
$d->w_en_tete(); // En-tête standard.
|
||||
$l = $d->article()->w_liste($this->select("./*", "date desc"), function($e, $li) {
|
||||
$li->a($e->uid())->append(
|
||||
$e->rendu("h_miniature")
|
||||
);
|
||||
});
|
||||
$nouveau = $l->li();
|
||||
$nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page"));
|
||||
$nouveau->span("titre")->texte(self::$texte_nouvelle_page);
|
||||
return $d;
|
||||
}
|
||||
|
||||
public function res_h_miniature() {
|
||||
$e = new ElementDocument();
|
||||
$e->span("miniature")->append($this->res_h_miniature_image());
|
||||
$e->span("titre")->_field($this->titre);
|
||||
return $e;
|
||||
}
|
||||
|
||||
public function res_h_miniature_image() {
|
||||
// Prendre le 1er par ordre décroissant sur la date, ou bien :
|
||||
// TODO : prendre l'élément ayant la propriété "aperçu" à true (s'il y en a un, sinon date).
|
||||
return $this->select("./*", "date desc", 1)->rendu("h_miniature_image");
|
||||
}
|
||||
}
|
||||
|
||||
class GalerieIndex extends GalerieBase {
|
||||
protected static $texte_nouvelle_page = "Nouvelle période";
|
||||
protected static $fichier_nouvelle_page = "nouvelle_periode.png";
|
||||
}
|
||||
|
||||
class GaleriePériode extends GalerieBase {
|
||||
protected static $texte_nouvelle_page = "Nouvel événement";
|
||||
protected static $fichier_nouvelle_page = "nouvel_evenement.png";
|
||||
}
|
||||
|
||||
class GalerieÉvénement extends GalerieBase {
|
||||
protected static $texte_nouvelle_page = "Nouvelle photo";
|
||||
protected static $fichier_nouvelle_page = "nouvelle_photo.png";
|
||||
}
|
||||
|
||||
Page::ajouter_type("GalerieIndex");
|
||||
|
||||
?>
|
174
cms2/modules/galerie/galerie.php
Normal file
174
cms2/modules/galerie/galerie.php
Normal file
|
@ -0,0 +1,174 @@
|
|||
<?php
|
||||
|
||||
abstract class GalerieBase extends Page {
|
||||
protected static $texte_titre = "Galerie";
|
||||
protected static $texte_nouvelle_page = "Nouvel élément";
|
||||
protected static $icône_nouvelle_page = "nouvelle_periode.png";
|
||||
|
||||
|
||||
public static function ressources_statiques() {
|
||||
return qw("i_icône_nouvelle_page c_style"); }
|
||||
public static function ressources_dynamiques() {
|
||||
return qw("h_page h_miniature h_mini_miniature");
|
||||
}
|
||||
public static function types_enfants() {
|
||||
return qw("GalerieÉvènement");
|
||||
}
|
||||
public static function attributs() {
|
||||
return array(
|
||||
"titre" => self::$texte_titre,
|
||||
"description" => ""
|
||||
);
|
||||
}
|
||||
|
||||
public function res_i_icône_nouvelle_page() {
|
||||
return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$icône_nouvelle_page));
|
||||
}
|
||||
|
||||
public function res_c_style() {
|
||||
niy("res_c_style");
|
||||
}
|
||||
|
||||
public function res_h_page() {
|
||||
$d = new Document();
|
||||
$d->w_en_tete(); // En-tête standard.
|
||||
$l = $d->article()->w_liste($this->enfants(true, "date desc"), function($e, $li) {
|
||||
$li->a($e->uid())->append(
|
||||
$e->rendu("h_miniature")
|
||||
);
|
||||
});
|
||||
$nouveau = $l->li();
|
||||
$nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page"));
|
||||
$nouveau->span("titre")->texte(self::$texte_nouvelle_page);
|
||||
return $d;
|
||||
}
|
||||
|
||||
public function res_h_miniature() {
|
||||
$e = new ElementDocument();
|
||||
$e->span("miniature")->append($this->res_h_mini_miniature());
|
||||
$e->span("titre")->_field($this->titre);
|
||||
return $e;
|
||||
}
|
||||
|
||||
public function res_h_mini_miniature() {
|
||||
// Prendre le 1er par ordre décroissant sur la date, ou bien :
|
||||
// TODO : prendre l'élément ayant la propriété "aperçu" à true (s'il y en a un, sinon date).
|
||||
$a = $this->enfants("@apercu = true", "date desc", 1);
|
||||
if ($a->size() != 1)
|
||||
$a = $this->enfants(true, "date desc", 1);
|
||||
return $a->get(0)->rendu("h_mini_miniature");
|
||||
}
|
||||
}
|
||||
|
||||
class GalerieIndex extends GalerieBase {
|
||||
protected static $texte_titre = "Galerie";
|
||||
protected static $texte_nouvelle_page = "Nouvelle période";
|
||||
protected static $icône_nouvelle_page = "nouvelle_periode.png";
|
||||
}
|
||||
|
||||
class GaleriePériode extends GalerieBase {
|
||||
protected static $texte_titre = "Période";
|
||||
protected static $texte_nouvelle_page = "Nouvel événement";
|
||||
protected static $icône_nouvelle_page = "nouvel_evenement.png";
|
||||
}
|
||||
|
||||
class GalerieÉvénement extends GalerieBase {
|
||||
protected static $texte_titre = "Événement";
|
||||
protected static $texte_nouvelle_page = "Nouvelle photo";
|
||||
protected static $icône_nouvelle_page = "nouvelle_photo.png";
|
||||
}
|
||||
|
||||
class GaleriePhoto {
|
||||
protected static $texte_titre = "Photo";
|
||||
|
||||
public static function ressources_statiques() {
|
||||
return qw("c_style");
|
||||
}
|
||||
public static function ressources_dynamiques() {
|
||||
return qw(parent::ressources_dynamiques(), "i_grande i_image i_miniature");
|
||||
}
|
||||
public static function types_enfants() {
|
||||
return null;
|
||||
}
|
||||
public static function attributs() {
|
||||
$a = parent::attributs();
|
||||
$a["image"] = null; // TODO !! TODO !! TODO
|
||||
return $a;
|
||||
}
|
||||
|
||||
public function set_titre($titre) {
|
||||
// TODO : set url quand on set titre !
|
||||
// TODO : valeur initiale pour l'url !
|
||||
niy("GaleriePhoto::set_titre($titre)");
|
||||
}
|
||||
|
||||
public function set_image($fichier_image) {
|
||||
// Faire la miniature et l'image de taille "normale".
|
||||
niy("GaleriePhoto::set_image");
|
||||
}
|
||||
|
||||
public function res_c_style() {
|
||||
niy("GaleriePhoto::res_c_style");
|
||||
}
|
||||
|
||||
public function res_h_page() {
|
||||
$d = new Document();
|
||||
$d->w_en_tete(); // En-tête standard.
|
||||
// TODO : la description devrait être soit dans w_en_tete, soit dans w_img !
|
||||
$d->w_img($this->description, $this->i_image);
|
||||
return $d;
|
||||
}
|
||||
|
||||
public function res_h_mini_miniature() {
|
||||
$d = new Document();
|
||||
$d->img($this->description, $this->i_image);
|
||||
return $d;
|
||||
}
|
||||
|
||||
// ===============================
|
||||
|
||||
public static function creer_miniature($chemin_fs, $largeur_max, $hauteur_max) {
|
||||
$chemin_fs_dest = tempnam(dirname($chemin_fs), "img");
|
||||
if ($chemin_fs_dest === false) return false; // TODO : return Erreur::...(...);
|
||||
|
||||
/* TODO : utiliser imagealphablending si nécessaire... http://www.php.net/manual/fr/function.imagecreatefrompng.php#85754 */
|
||||
$image = imagecreatefromjpeg($chemin_fs); // ... formpng()
|
||||
$largeur = imageSX($image);
|
||||
$hauteur = imageSY($image);
|
||||
if ($largeur < $largeur_max && $hauteur < $hauteur_max) {
|
||||
$largeur_miniature = $largeur;
|
||||
$hauteur_miniature = $hauteur;
|
||||
} else if ($largeur / $hauteur < $largeur_max / $hauteur_max) { // limité par la hauteur.
|
||||
$largeur_miniature = $largeur_max;
|
||||
$hauteur_miniature = $hauteur * $largeur_miniature/$largeur;
|
||||
} else { // limité par la largeur
|
||||
$hauteur_miniature = $hauteur_max;
|
||||
$largeur_miniature = $largeur * $hauteur_miniature/$hauteur;
|
||||
}
|
||||
$miniature = ImageCreateTrueColor($largeur_miniature, $hauteur_miniature); // miniatures de tailles différentes
|
||||
var_dump($largeur_miniature, $hauteur_miniature, $largeur, $hauteur);
|
||||
imagecopyresampled(
|
||||
$miniature, // image destination
|
||||
$image, // image source
|
||||
0, // x destination
|
||||
0, // y destination
|
||||
0, // x source
|
||||
0, // y source
|
||||
$largeur_miniature, // largeur destination
|
||||
$hauteur_miniature, // hauteur destination
|
||||
$largeur, // largeur source
|
||||
$hauteur // hauteur source
|
||||
);
|
||||
imagedestroy($image); // On libère la mémoire le plus tôt possible.
|
||||
imagejpeg($miniature, $chemin_fs_dest);
|
||||
imagedestroy($miniature);
|
||||
return $chemin_fs_dest;
|
||||
}
|
||||
}
|
||||
|
||||
Page::ajouter_type("GalerieIndex");
|
||||
Page::ajouter_type("GaleriePériode");
|
||||
Page::ajouter_type("GalerieÉvénement");
|
||||
Page::ajouter_type("GaleriePhoto");
|
||||
|
||||
?>
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
|
||||
require_once(dirname(__FILE__) . "/galerie-index.php");
|
||||
require_once(dirname(__FILE__) . "/galerie.php");
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user