w_en_tete($this->titre, $this->description); // En-tête standard. $l = $d->article()->w_liste($this->enfants(true, "-date_creation"), create_function('$e, $li', ' $a = $li->a($e->url()); $e->rendu("h_miniature", $a); ')); $nouveau = $l->li(); // TODO : nouveau devrait être un lien, bouton, ... $nouveau->span("miniature")->img("", $this->url("i_icone_nouvelle_page")); $nouveau->span("titre")->text(self::$texte_nouvelle_page); if ($this->if_perm("W", "dans_nouveautes")) { $d->article()->p()->w_field($this->dans_nouveautes); } // TODO : lister les liens et pouvoir en ajouter (personne, lieu etc.). return $d; } public function res_h_miniature($d) { $this->res_h_mini_miniature($d->span("miniature")); $d->span("titre")->w_r_field($this->titre); return $d; } public function res_h_mini_miniature($d) { $a = $this->enfants("apercu = 'true'", "-date_creation", 1); // TODO : l'aperçu devrait être défini par le parent => ajouter un attribut "virtuel". if (count($a) != 1) { $a = $this->enfants(true, "-date_creation", 1); } if (count($a) != 1) { return $d->text("Aucune photo."); } return $a[0]->rendu("h_mini_miniature", $d);; } public function set_dans_nouveautes($val) { $this->page_systeme("nouveautes")->lier_page("$this"); return $this->set_prop_direct("dans_nouveautes", $val); } } class mGalerieIndex extends mGalerieBase { public static $texte_titre = "Galerie"; public static $texte_nouvelle_page = "Nouvelle période"; public static $icone_nouvelle_page = "nouvelle_periode.png"; public static $type_enfants = "mGaleriePeriode"; } class mGaleriePeriode extends mGalerieBase { public static $texte_titre = "Période"; public static $texte_nouvelle_page = "Nouvel événement"; public static $icone_nouvelle_page = "nouvel_evenement.png"; public static $type_enfants = "mGalerieEvenement"; } class mGalerieEvenement extends mGalerieBase { public static $texte_titre = "Événement"; public static $texte_nouvelle_page = "Nouvelle photo"; public static $icone_nouvelle_page = "nouvelle_photo.png"; public static $type_enfants = "mGaleriePhoto"; } class mGaleriePhoto extends mGalerieBase { public static $texte_titre = "Photo"; public static function info($module) { Module::ressources_statiques("c_style"); Module::ressources_dynamiques(new Inherit(get_parent_class())); Module::ressources_dynamiques("i_grande i_image i_miniature"); Module::attribut(new Inherit(get_parent_class())); Module::attribut("image", "img_file", ""); } public function res_c_style() { niy("GaleriePhoto::res_c_style"); } public function res_h_page($d) { $d->w_en_tete($this->titre, toString($this->description)); // En-tête standard. $d->w_img_file_desc($this->image, $this->description); return $d; } public function res_h_mini_miniature($d) { $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; } } Module::add_module("mGalerieIndex"); Module::add_module("mGaleriePeriode"); Module::add_module("mGalerieEvenement"); Module::add_module("mGaleriePhoto"); ?>