galerie-photo.php (4973B)
1 <?php 2 3 class GaleriePhoto { 4 public static function action($chemin, $action, $paramètres) { 5 if ($action == "anuler") { 6 return new Page($chemin, '', "redirect"); 7 } else if ($action == "supprimer") { 8 Stockage::supprimer($chemin, true); // TODO ! gérer correctement le récursif 9 return new Page($chemin->parent(), '', "redirect"); 10 } else { 11 if (isset($paramètres["fichier_image"])) { 12 $fichier_image = $paramètres["fichier_image"]["tmp_name"]; 13 $fichier_image_mini = self::creer_miniature($fichier_image, 64, 64); 14 Stockage::set_prop_fichier($chemin, "image_mini", $fichier_image_mini); 15 Stockage::set_prop_fichier_reçu($chemin, "image", $fichier_image); 16 } 17 18 if (isset($paramètres["description"])) { 19 Stockage::set_prop($chemin, "description", $paramètres["description"]); 20 } 21 22 // titre après les autres paramètres car il peut générer un redirect. 23 if (isset($paramètres["titre"]) && Stockage::prop_diff($chemin, "titre", $paramètres["titre"])) { 24 Stockage::set_prop($chemin, "titre", $paramètres["titre"]); 25 Stockage::renomer($chemin, $paramètres["titre"]); 26 $chemin = $chemin->renomer($paramètres["titre"]); 27 // TODO : transmettre le paramètre "vue" 28 return new Page($chemin, '', "redirect"); 29 } 30 31 if (isset($paramètres["vue"])) { 32 return self::vue($chemin, $paramètres["vue"]); 33 } else { 34 return self::vue($chemin); 35 } 36 } 37 } 38 39 public static function vue($chemin, $vue = "normal") { 40 if ($vue == "normal") { 41 $ret = ''; 42 43 if (Permissions::vérifier_permission($chemin, "set_prop", Authentification::get_utilisateur())) { 44 $ret .= '<form class="galerie infos" enctype="multipart/form-data" method="post" action="' . $chemin->get_url() . '">'; 45 $ret .= '<h2><input type="text" name="titre" value="' . Stockage::get_prop($chemin, "titre") . '" /></h2>'; 46 $ret .= '<img alt="' . Stockage::get_prop($chemin, "titre") . '" src="' . $chemin->get_url("?vue=image") . '"/>'; 47 $ret .= '<p>'; 48 $ret .= '<input type="file" name="fichier_image" id="fichier_image">'; 49 $ret .= '</p>'; 50 $ret .= formulaire_édition_texte_enrichi(Stockage::get_prop($chemin, "description"), "description"); 51 $ret .= '<p><input type="submit" value="appliquer" /></p>'; 52 $ret .= '</form>'; 53 } else { 54 $ret .= '<h2>' . Stockage::get_prop($chemin, "titre") . '</h2>'; 55 $ret .= '<img alt="' . Stockage::get_prop($chemin, "titre") . '" src="' . $chemin->get_url("?vue=image") . '"/>'; 56 $ret .= affichage_texte_enrichi(Stockage::get_prop($chemin, "message")); 57 } 58 return new Page($ret, Stockage::get_prop($chemin, "titre")); 59 } else if ($vue == "miniature" || $vue == "mini") { 60 $ret = '<img alt="' . Stockage::get_prop($chemin, "titre") . '" src="' . $chemin->get_url("?vue=image_mini") . '"/>'; 61 62 return new Page($ret, Stockage::get_prop($chemin, "titre")); 63 } else if ($vue == "image") { 64 return new Page($chemin, "image", "sendprop"); 65 } else if ($vue == "image_mini") { 66 return new Page($chemin, "image_mini", "sendprop"); 67 } 68 return new Page('',''); // TODO : devrait renvoyer une page d'erreur ! 69 } 70 71 public static function creer_miniature($chemin_fs, $largeur_max, $hauteur_max) { 72 $chemin_fs_dest = tempnam(dirname($chemin_fs), "img"); 73 if ($chemin_fs_dest === false) return false; // TODO : return Erreur::...(...); 74 75 /* TODO : utiliser imagealphablending si nécessaire... http://www.php.net/manual/fr/function.imagecreatefrompng.php#85754 */ 76 $image = imagecreatefromjpeg($chemin_fs); // ... formpng() 77 $largeur = imageSX($image); 78 $hauteur = imageSY($image); 79 if ($largeur < $largeur_max && $hauteur < $hauteur_max) { 80 $largeur_miniature = $largeur; 81 $hauteur_miniature = $hauteur; 82 } else if ($largeur / $hauteur < $largeur_max / $hauteur_max) { // limité par la hauteur. 83 $largeur_miniature = $largeur_max; 84 $hauteur_miniature = $hauteur * $largeur_miniature/$largeur; 85 } else { // limité par la largeur 86 $hauteur_miniature = $hauteur_max; 87 $largeur_miniature = $largeur * $hauteur_miniature/$hauteur; 88 } 89 $miniature = ImageCreateTrueColor($largeur_miniature, $hauteur_miniature); // miniatures de tailles différentes 90 var_dump($largeur_miniature, $hauteur_miniature, $largeur, $hauteur); 91 imagecopyresampled( 92 $miniature, // image destination 93 $image, // image source 94 0, // x destination 95 0, // y destination 96 0, // x source 97 0, // y source 98 $largeur_miniature, // largeur destination 99 $hauteur_miniature, // hauteur destination 100 $largeur, // largeur source 101 $hauteur // hauteur source 102 ); 103 imagedestroy($image); // On libère la mémoire le plus tôt possible. 104 imagejpeg($miniature, $chemin_fs_dest); 105 imagedestroy($miniature); 106 return $chemin_fs_dest; 107 } 108 } 109 110 Modules::enregister_module("GaleriePhoto", "galerie-photo", "vue", "description", "fichier_image"); 111 112 ?>