From 9a1fb624fd1089087bd363551ba64f5862d9919f Mon Sep 17 00:00:00 2001
From: polo
Date: Fri, 18 Feb 2022 05:38:40 +0100
Subject: miniatures GD
---
config.php | 8 ++++
controller/admin.php | 8 ++--
controller/ckeditor.php | 22 +++++++---
controller/installation.php | 9 ++++-
controller/visitor.php | 10 +----
index.php | 24 +++--------
model/Album.php | 21 ++++++----
model/Image.php | 62 +++++++++++++++++++++++++----
view/discographie.php | 6 +--
"\303\240 faire apr\303\250s livraison" | 36 -----------------
"\303\240 faire apr\303\250s livraison.txt" | 47 ++++++++++++++++++++++
"\303\240 faire avant livraison.txt" | 4 +-
12 files changed, 164 insertions(+), 93 deletions(-)
create mode 100644 config.php
delete mode 100644 "\303\240 faire apr\303\250s livraison"
create mode 100644 "\303\240 faire apr\303\250s livraison.txt"
diff --git a/config.php b/config.php
new file mode 100644
index 0000000..80607e1
--- /dev/null
+++ b/config.php
@@ -0,0 +1,8 @@
+makeFileList();
- //var_dump($Albums);
+
// contenu: JSON, HTML, noms et chemins des fichiers
$Albums->readAll();
- $Albums->fileList = array_reverse($Albums->fileList);
- //var_dump($Albums);
+ if(!empty($Albums->fileList))
+ {
+ $Albums->fileList = array_reverse($Albums->fileList);
+ }
//var_dump($Albums->fileList);
// nouvel album
diff --git a/controller/ckeditor.php b/controller/ckeditor.php
index 7102f33..5313c3b 100644
--- a/controller/ckeditor.php
+++ b/controller/ckeditor.php
@@ -89,13 +89,24 @@ function submitCKeditor()
$nouveauTitre = Security::secureString($_POST['titre']);
$nouvelleAnnee = Security::secureString($_POST['annee']);
- $nouvellePochette = $_FILES['upload']['name'];
+ if(!empty($_FILES['upload']['name']))
+ {
+ $nouvellePochette = $_FILES['upload']['name'];
+ $nouvellePochetteMini = pathinfo($_FILES['upload']['name'], PATHINFO_FILENAME) . '-mini.' . pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION);
+ }
+ else
+ {
+ $nouvellePochette = '';
+ $nouvellePochetteMini = '';
+ }
+
+ //var_dump($nouvellePochetteMini); die();
// enregistrement nouvel album
if(!isset($_SESSION['target']) || $_SESSION['target'] == '')
{
// page disco
- $Album->createVignette($nouveauTitre, $nouvelleAnnee, $nouvellePochette);
+ $Album->createVignette($nouveauTitre, $nouvelleAnnee, $nouvellePochette, $nouvellePochetteMini);
// page de l'album
if(!empty($_POST['contenu']))
@@ -114,12 +125,13 @@ function submitCKeditor()
// garder l'image si aucune n'est sélectionnée
// (on ne peut pas préremplir un )
- if($nouvellePochette == '' && $Album->oneAlbum['pochette'] != '')
+ /*if($nouvellePochette == '' && $Album->oneAlbum['pochette'] != '')
{
$nouvellePochette = $Album->oneAlbum['pochette'];
- }
+ $nouvellePochetteMini = $Album->oneAlbum['pochetteMini'];
+ }*/
- $Album->updateVignetteJSON($nouveauTitre, $nouvelleAnnee, $nouvellePochette);
+ $Album->updateVignetteJSON($nouveauTitre, $nouvelleAnnee, $nouvellePochette, $nouvellePochetteMini);
// page de l'album
if(isset($_POST['contenu']))
diff --git a/controller/installation.php b/controller/installation.php
index 91521e2..9d612dd 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -24,7 +24,7 @@ function installation()
// créer le .htaccess
if(!file_exists(".htaccess"))
{
- echo('Le .htaccess semble absent ce qui rend le site vulnérable aux attaques, veuillez contacter l\'administrateur.
');
+ echo('Le .htaccess semble absent ce qui rend le site vulnérable, veuillez contacter l\'administrateur.
');
//$contenu = "# redirection en cas d'erreur 404\nErrorDocument 404 http://" . $_SERVER['SERVER_NAME'] . "/" . $nomDuSite . "/erreur404.php\n# Interdire exploration du répertoire\nOptions All -Indexes";
// $fichier = fopen('.htaccess', 'w');
// fputs($fichier, $contenu);
@@ -75,12 +75,17 @@ function installation()
// chmod('data/' . $page . '/multimedia', 0777);
// }
}
- // dossier supplémentaire dans discographie
+ // dossiers supplémentaires dans discographie
if(!file_exists('data/discographie/json'))
{
mkdir('data/discographie/json');
chmod('data/discographie/json', $droitsDossiers);
}
+ if(!file_exists('data/discographie/images-mini'))
+ {
+ mkdir('data/discographie/images-mini');
+ chmod('data/discographie/images-mini', $droitsDossiers);
+ }
// fichier password.txt
if(!file_exists('data/password.txt'))
{
diff --git a/controller/visitor.php b/controller/visitor.php
index fccc287..2656798 100644
--- a/controller/visitor.php
+++ b/controller/visitor.php
@@ -70,7 +70,6 @@ function discoVisitor()
//var_dump($Albums->fileList); die();
-
// tri des albums avec l'année dans le .json
// noms des fichiers JSON
@@ -78,20 +77,13 @@ function discoVisitor()
//$annees = [];
for($i = 0; $i < $Albums->fileListCount; $i++)
- {
- // une case supplémentaire contient le "fileCode"
- //$albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename'];
- //$albumsJSON[$i][3] = pathinfo($Albums->fileList[$i]['fileCode'])['filename'];
-
- //$annees[$i] = $albumsJSON[$i][1];
- }
+ {}
//var_dump($annee); die();
// tri d'un tableau multidimensionnel
//array_multisort($annees, $albumsJSON);
-
// lien vers le HTML ou ancre?
/*$lienAlbum = [];
$avecLien = [];
diff --git a/index.php b/index.php
index 70ca884..5733e8e 100644
--- a/index.php
+++ b/index.php
@@ -4,14 +4,6 @@
// routeur MVC ou controlleur principal
// il traite les GET et passe la main aux contrôleurs
-
-// sessions, penser aux attaques CSRF (cross-site request forgery):
-// ça consite à faire qu'un utilisateur connecté avec une session envoie malgré lui une requête GET ou POST qu'un hacker aura cachée par exemple dans une fausse image clicable
-// - solution: faire qu'un GET seul dans une session ne suffise pas à effectuer une action (les GET ne doivent servir qu'à afficher la bonne page), une attaque sur un POST est possible aussi mais plus difficile et nécessite d'injecter du javascript
-// - on peut demander à l'utilisateur une vérification supplémentaire avant chaque action, mais c'est plutôt chiant
-// - il y a la méthode des jetons, "nonces" et horodatage
-// - vérifier le "référent", c'est à dire l'URL de la page d'où vient normallement la requête
-// infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery
session_start();
if(!empty($_SESSION['erreur']))
@@ -26,6 +18,12 @@ require('controller/installation.php');
require('controller/password.php');
installation();
+// config par défaut
+$imageLibrary = 'gd'; // 'gd' ou 'imagick'
+$storage = 'files'; // 'files' ou 'database'
+// config perso
+include('config.php');
+
// traitement des requêtes AJAX
if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image')
@@ -66,16 +64,6 @@ if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1
}
submitCKeditor();
- // modification
- /*if(isset($_SESSION['target']))
- {
- submitCKeditor($_SESSION['target']);
- }
- // nouvel article
- else
- {
- submitCKeditor(''); // $target = ''
- }*/
}
else
{
diff --git a/model/Album.php b/model/Album.php
index 386a50f..e716a99 100644
--- a/model/Album.php
+++ b/model/Album.php
@@ -21,7 +21,7 @@ class Album extends Article
// fonctions CRUD
// create
- public function createVignette($titre, $annee, $pochette)
+ public function createVignette($titre, $annee, $pochette, $pochetteMini)
{
//$this->format = 'json';
@@ -33,6 +33,7 @@ class Album extends Article
require('model/Image.php');
$Image = new Image(false);
$Image->upload();
+ $Image->makeThumbnail();
$erreur = $Image->erreur;
if(!empty($erreur))
@@ -40,7 +41,7 @@ class Album extends Article
}
// encodage avec un tableau simple
- $albumJSON = json_encode([$titre, $annee, $pochette]);
+ $albumJSON = json_encode([$titre, $annee, $pochette, $pochetteMini]);
//var_dump($albumJSON); die();
// encodage avec un tableau associatif
@@ -66,15 +67,13 @@ class Album extends Article
for($i = 0; $i < $this->fileListCount; $i++)
{
// ajout du JSON
- /*$content = file_get_contents($this->fileList[$i]['fileName']);
- $content = json_decode($content, true);*/
$content = json_decode($this->fileList[$i]['content'], true);
- //var_dump($content); die();
// lecture de $content étant un tableau simple
$this->fileList[$i]['titre'] = $content[0];
$this->fileList[$i]['annee'] = $content[1];
$this->fileList[$i]['pochette'] = $content[2];
+ $this->fileList[$i]['pochetteMini'] = $content[3];
// ajout du HTML si il existe
if(file_exists('data/' . $this->page . '/' . $this->format . '/' . $this->fileList[$i]['fileCode'] . '.' . $this->format))
@@ -107,6 +106,7 @@ class Album extends Article
$this->oneAlbum['titre'] = $content[0];
$this->oneAlbum['annee'] = $content[1];
$this->oneAlbum['pochette'] = $content[2];
+ $this->oneAlbum['pochetteMini'] = $content[3];
// html
$this->format = 'html';
@@ -138,14 +138,18 @@ class Album extends Article
}
// update
- public function updateVignetteJSON($titre, $annee, $pochette)
+ public function updateVignetteJSON($titre, $annee, $pochette, $pochetteMini)
{
- // garder l'ancienne image
+ // garder l'image si aucune n'est sélectionnée
+ // (on ne peut pas préremplir un )
$albumJSON = self::getVignetteJSON();
+ /*var_dump($pochette); var_dump($pochetteMini);
+ var_dump($albumJSON); die();*/
if($pochette == '')
{
$pochette = $albumJSON[2];
+ $pochetteMini = $albumJSON[3];
}
else
{
@@ -153,6 +157,7 @@ class Album extends Article
require('model/Image.php');
$Image = new Image(false);
$Image->upload();
+ $Image->makeThumbnail();
$erreur = $Image->erreur;
if(!empty($erreur))
{
@@ -161,7 +166,7 @@ class Album extends Article
}
}
- $albumJSON = json_encode([$titre, $annee, $pochette]);
+ $albumJSON = json_encode([$titre, $annee, $pochette, $pochetteMini]);
// écriture
$nom_fichier = 'data/discographie/json/' . $this->albumCode . '.json';
diff --git a/model/Image.php b/model/Image.php
index 8ebcd16..c305984 100644
--- a/model/Image.php
+++ b/model/Image.php
@@ -5,7 +5,10 @@ class Image
{
private const MAX_WEIGHT = 2000000; // à adapter au php.ini
private $page;
- private $ajax = false; // vaut true avec le ckeditor
+ private $ajax; // vaut true avec le ckeditor
+ public $path;
+ public $pathMini;
+ public $pathInfos;
public $erreur;
public function __construct($ajax)
@@ -13,14 +16,14 @@ class Image
// get envoyé avec le javascript
$this->page = $_GET['page'];
$this->ajax = $ajax;
+ $this->path = 'data/' . $this->page . '/images/';
+ $this->pathMini = 'data/' . $this->page . '/images-mini/';
}
// GET
// SET
- // miniatures des photos
-
public function upload()
{
// traitement et enregistrement de l'image
@@ -28,14 +31,14 @@ class Image
{
if ($_FILES['upload']['size'] <= self::MAX_WEIGHT)
{
- $infos = pathinfo($_FILES['upload']['name']);
- $extension = $infos['extension'];
+ $this->pathInfos = pathinfo($_FILES['upload']['name']);
+ $extension = $this->pathInfos['extension'];
$extautorisées = array('jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff');
// on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur)
if (in_array($extension, $extautorisées))
{
- move_uploaded_file($_FILES['upload']['tmp_name'], 'data/' . $this->page . '/images/' . $_FILES['upload']['name']);
- chmod('data/' . $this->page . '/images/' . $_FILES['upload']['name'], 0666);
+ move_uploaded_file($_FILES['upload']['tmp_name'], $this->path . $_FILES['upload']['name']);
+ chmod($this->path . $_FILES['upload']['name'], 0666);
}
else{$this->erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff
le format svg n\'est pas supporté';}
}
@@ -57,4 +60,49 @@ class Image
echo $chemin;
}
}
+
+ // miniatures des photos
+ public function makeThumbnail()
+ {
+ if($imageLibrary == 'gd')
+ {
+ // des infos sur GD
+ //print_r(gd_info());
+
+ // cette fonction fonctionne pour tous les formats
+ $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name']));
+ var_dump($source);
+
+ $nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.jpg';
+ var_dump($nomMiniImage);
+
+ //var_dump($nomMiniImage);
+ //var_dump(imagesx($image));
+
+ $forme = imagesy($source) / imagesx($source);
+ var_dump($forme);
+
+ if(imagesx($source) > 201)
+ {
+ // créer un rectangle noir
+ $destination = imagecreatetruecolor(201, 201 * $forme);
+ var_dump($destination);
+
+ // sélectionne un rectangle dans l'image source
+ // et le place dans un rectangle dans la nouvelle
+ imagecopyresampled($destination, $source, 0, 0, 0, 0, 201, 201 * $forme, imagesx($source), imagesy($source));
+
+ // envoie l'image dans un fichier
+ imagejpeg($destination, $nomMiniImage);
+ }
+ else
+ {
+ imagejpeg($source, $nomMiniImage);
+ }
+ }
+ elseif($imageLibrary == 'imagick')
+ {}
+ else
+ {}
+ }
}
\ No newline at end of file
diff --git a/view/discographie.php b/view/discographie.php
index 6d56854..f330a8d 100644
--- a/view/discographie.php
+++ b/view/discographie.php
@@ -51,7 +51,6 @@ ob_start();
fileListCount - 1; $i >= 0; $i--)
for($i = 0; $i < $Albums->fileListCount; $i++)
-//foreach($albumsJSON as $oneAlbum)
{
// menu dessous la mouette
// comporte un lien si fichier html existe, sinon une ancre
@@ -73,8 +72,9 @@ if($_SESSION['admin'] == 1)
$style = 'class="articleAvecEditeur"';
?>
>
- Ajouter un album
+ Ajouter un album
= $editeurHTML ?>
+
+
-
mettre le html à part
+
Sauvegarde des données !!
--
cgit v1.2.3