summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.htaccess8
-rw-r--r--controller/ajax.php60
-rw-r--r--controller/backup.php2
-rw-r--r--controller/config.php63
-rw-r--r--controller/installation.php92
-rw-r--r--controller/password.php3
-rw-r--r--dependances.php67
-rw-r--r--erreur404.php11
-rw-r--r--index.php68
-rw-r--r--model/Album.php8
-rw-r--r--model/Image.php30
11 files changed, 195 insertions, 217 deletions
diff --git a/.htaccess b/.htaccess
index 72d17a4..aaae3a8 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,12 +1,8 @@
1# redirection en cas d'erreur 404 1# redirection en cas d'erreur 404
2# ne décocher qu'une seule ligne "ErrorDocument"
2 3
3# site simple 4# site simple
4#ErrorDocument 404 http://localhost/melaine/erreur404.php 5#ErrorDocument 404 http://localhost/melaine/erreur404.php
5 6
6# site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut) 7# site "hôte virtuel" (cas des hébergeurs et d'une debian par défaut)
7ErrorDocument 404 http://melaine.localhost/erreur404.php 8ErrorDocument 404 /erreur404.php
8#ErrorDocument 404 "<a href='http://melaine.localhost/erreur404.php' >retour au site</a>"
9
10# Interdire l'exploration des répertoires
11# mettre un .htaccess avec cette ligne dans chacun des dossiers à la racine
12# Options -Indexes
diff --git a/controller/ajax.php b/controller/ajax.php
new file mode 100644
index 0000000..489e814
--- /dev/null
+++ b/controller/ajax.php
@@ -0,0 +1,60 @@
1<?php
2// controller/ajax.php
3
4// traitement des requêtes AJAX
5// -> insertion d'une image dans l'éditeur
6if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image')
7{
8 // sécurité !!
9 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1
10 || !isset($_FILES['upload']) || empty($_FILES['upload']))
11 {
12 // sans effet?
13 header('Location: index.php?erreur=image_ajax');
14 }
15 else
16 {
17 require('model/Image.php');
18 // paramètre "true" parce qu'on reçoit une requête AJAX
19 $Image = new Image(true);
20 $Image->upload();
21 echo($Image->reponseAjax); // attendu par l'éditeur
22 }
23 exit; // stop !!
24}
25
26// page restauration quand le fichier zip est lourd
27// -> input file onchange
28if(isset($_GET['action']) && $_GET['action'] == 'restauration'
29 && isset($_GET['file_name']) && isset($_GET['file_size']))
30{
31 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
32 {
33 header('Location: index.php?erreur=file_infos_ajax');
34 }
35 else
36 {
37 $_SESSION['fileSize'] = $_GET['file_size'];
38 $_SESSION['fileName'] = $_GET['file_name'];
39 //echo("file infos send");
40 var_dump($_SESSION['fileName']);
41 exit(); // stop !!
42 }
43}
44// -> input submit onclick
45if(isset($_GET['action']) && $_GET['action'] == 'restauration'
46 && isset($_GET['chunk_name']) && isset($_FILES['blob']))
47{
48
49 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
50 {
51 header('Location: index.php?erreur=upload_ajax');
52 }
53 else
54 {
55 require('controller/backup.php');
56 uploadChunkAndMerge();
57 echo('file send');
58 exit(); // stop !!
59 }
60} \ No newline at end of file
diff --git a/controller/backup.php b/controller/backup.php
index 62f08a1..014a6cb 100644
--- a/controller/backup.php
+++ b/controller/backup.php
@@ -156,10 +156,12 @@ function restoreData($path)
156 return($message); 156 return($message);
157} 157}
158 158
159
159function pageRestauration($from) 160function pageRestauration($from)
160{ 161{
161 $title = 'Restauration des données'; 162 $title = 'Restauration des données';
162 $message = ''; 163 $message = '';
164 // taille max des fichiers dans le php.ini (défaut = 2M)
163 global $maxWeight; 165 global $maxWeight;
164 166
165 // recharger la même page en écrivant les données 167 // recharger la même page en écrivant les données
diff --git a/controller/config.php b/controller/config.php
new file mode 100644
index 0000000..47b85f9
--- /dev/null
+++ b/controller/config.php
@@ -0,0 +1,63 @@
1<?php
2// controller/config.php
3
4// Ce fichier sert à:
5// => vérifier la disponibilité des extensions PHP
6// => obtenir des variables globales
7// => permettre une configuration à la main par l'utilisateur
8
9
10// mode de stockage des données, écrire 'files' ou 'database'
11$storage = 'files';
12// laisser 'files'!!
13// l'utilisation d'une BDD n'est pas prévue pour l'instant
14
15// Racine du site (inutile pour l'instant)
16//$root = getcwd();
17
18// nom de domaine (inutile pour l'instant)
19//$host = $_SERVER['HTTP_HOST'];
20
21// bibliothèque utilisée pour créer les miniatures
22if(extension_loaded("imagick")) // on préfère imagemagick
23{
24 $imageLibrary = 'imagick';
25}
26elseif(extension_loaded('gd'))
27{
28 $imageLibrary = 'gd';
29}
30else
31{
32 echo('<script>alert(\'Erreur: Une de ces extensions de PHP est nécessaire: imagemagick ou GD. Veuillez activer une des deux dans le fichier php.ini ou installer le paquet php-imagick ou php-gd.\');</script>');
33}
34
35// format dans lequel créer les sauvegardes
36// zip uniquement pour l'instant
37if(extension_loaded("zip"))
38{
39 $archiveFormat = 'zip';
40}
41else
42{
43 echo('<script>alert(\'Erreur: PHP doit être capable de gérer les archives. Veuillez activer zip dans le fichier php.ini.\');</script>');
44}
45
46
47// conversion des 2M du php.ini en 2000000
48// les kibi, mébi et gibi sont inutiles ici
49function returnBytes ($size_str) // chaine du style '2M'
50{
51 switch (substr ($size_str, -1))
52 {
53 case 'Ki': case 'ki': return (int)$size_str * 1024;
54 case 'Mi': case 'mi': return (int)$size_str * 1048576;
55 case 'Gi': case 'gi': return (int)$size_str * 1073741824;
56 case 'K': case 'k': return (int)$size_str * 1000;
57 case 'M': case 'm': return (int)$size_str * 1000000;
58 case 'G': case 'g': return (int)$size_str * 1000000000;
59 default: return $size_str;
60 }
61}
62// taille max des fichiers dans le php.ini (défaut = 2M)
63$maxWeight = returnBytes(ini_get('upload_max_filesize'));
diff --git a/controller/installation.php b/controller/installation.php
index 1c90026..b2a687c 100644
--- a/controller/installation.php
+++ b/controller/installation.php
@@ -1,54 +1,36 @@
1<?php 1<?php
2// controller/installation.php
3
2// premier démarrage du site 4// premier démarrage du site
3function installation() 5function installation()
4{ 6{
5 // les chemins dans le .htaccess seront des chemins relatifs, 7 // présence du .htaccess
6 // la racine dépendant du serveur, donc de l'hébergeur,
7 // par défaut c'est /var/www/ pour debian, etc
8 // c'est /var/www/nom_de_domaine/ avec des hôtes virtuels
9 // on utilisera donc des chemins adaptés à des hôtes virtuels
10
11 // le nom du serveur sera le nom de domaine tout court
12 // la racine sera /var/www/nom_de_domaine
13
14 //echo('document root: ' . $_SERVER['DOCUMENT_ROOT'] . '<br />');
15 //echo('server name: ' . $_SERVER['SERVER_NAME'] . '<br /');
16 // echo('getcwd: ' . getcwd() . '<br />');
17 // echo('dirname: ' . dirname(__FILE__) . '<br />');
18 // echo('file: ' . __FILE__ . '<br />');
19 // echo('dir: ' . __DIR__. '<br />');
20
21 //$lien_htaccess = $_SERVER['SERVER_NAME'] . "/.htaccess";
22 //$nomDuSite = "melaine";
23
24 // créer le .htaccess
25 if(!file_exists(".htaccess")) 8 if(!file_exists(".htaccess"))
26 { 9 {
27 echo('<p style="color: red;" >Le .htaccess semble absent ce qui rend le site vulnérable, veuillez contacter l\'administrateur.</p>'); 10 $contenu = "ErrorDocument 404 /erreur404.php";
28 //$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"; 11
12 echo('<p style="color: orange; text-align:center;" >Le .htaccess est absent.<br/>
13 Si vous ne savez pas de quoi il s\'agit, contactez le responsable du site.<br/>
14 Sinon, veuillez créer un fichier nommé .htaccess à la racine du site et y copier-coller la ligne suivante:<br/><br/>
15 <i>' . $contenu . '</i></p>');
16
17 // Pour le créer
18 // laisser commenté, la création risque d'échouer
29 // $fichier = fopen('.htaccess', 'w'); 19 // $fichier = fopen('.htaccess', 'w');
30 // fputs($fichier, $contenu); 20 // fputs($fichier, $contenu);
31 // fclose($fichier); 21 // fclose($fichier);
32 // chmod('.htaccess', 0666); // mettre 0644 en production 22 // chmod('.htaccess', 0666); // mettre 0644 en production
33 } 23 }
34 24
35 // droits en lecture et écriture dans le cas d'une migration 25
36 // tester si le site est "vide" et prévoir un formulaire permettant d'upload le fichier .zip 26 // dans le cas de l'utilisation d'une base de données, le fichiers zip devrait contenir un "dump" (un fichier .sql),
37 // contenant toutes les données qu'il est possible de créer depuis le mode admin 27 // à voir si php est capable d'obtenir ou redonner ce fichier à la BDD
38 // cette méthode a deux intérêts:
39 // - facilité pour l'utilisateur
40 // - toutes les données sont la "possession" du serveur apache,
41 // on prévient ainsi tous les futurs problèmes de droits
42
43 // dans le cas de l'utilisation d'une base de données, le fichiers zip devrait contenir un "dump"
44 // (un fichier .sql), à voir si php est capable d'obtenir ou redonner ce fichier à la BDD
45 28
46 // créer les dossiers (fait également à l'extraction du zip de données)
47 // attention: ne fonctionne pas sans une manipulation préalable
48 // - modifier soit-même les droits du dossier data pour 777
49 // - modifier ceux du dossier parent (nom du site) avec son client FTP à la mise en ligne chez l'hébergeur et ensuite remettre tout comme avant
50 29
51 // création des dossiers 30 // création des dossiers
31 // attention: ne fonctionne pas sans une manipulation préalable
32 // - créer le dossier data à la racine du site
33 // - lui donner les droits du dossier data pour 777
52 34
53 // valeur en octal 35 // valeur en octal
54 $droitsDossiers = 0777; // mettre 0755 en production 36 $droitsDossiers = 0777; // mettre 0755 en production
@@ -61,22 +43,13 @@ function installation()
61 require('view/backup.php'); 43 require('view/backup.php');
62 exit(); 44 exit();
63 } 45 }
64 if(!touch('data')) 46 if(!touch('data')) // test autorisation en écriture
65 { 47 {
66 $erreur = 'data'; 48 $erreur = 'data';
67 $title = 'Écriture non autorisée dans le dossier data'; 49 $title = 'Écriture non autorisée dans le dossier data';
68 require('view/backup.php'); 50 require('view/backup.php');
69 exit(); 51 exit();
70 } 52 }
71
72 function createIndexPHP($path, $droitsFichiers)
73 {
74 $content = "<?php\nheader('Location: ../index.php');\nexit();";
75 $file = fopen($path, 'w');
76 fputs($file, $content);
77 fclose($file);
78 chmod($path, $droitsFichiers);
79 }
80 53
81 if(!file_exists('data/index.php')) 54 if(!file_exists('data/index.php'))
82 { 55 {
@@ -113,6 +86,15 @@ function installation()
113 { 86 {
114 createIndexPHP('data/' . $page . '/images/index.php', $droitsFichiers); 87 createIndexPHP('data/' . $page . '/images/index.php', $droitsFichiers);
115 } 88 }
89 if(!file_exists('data/' . $page . '/images-mini'))
90 {
91 mkdir('data/' . $page . '/images-mini');
92 chmod('data/' . $page . '/images-mini', $droitsDossiers);
93 }
94 if(!file_exists('data/' . $page . '/images-mini/index.html'))
95 {
96 createIndexPHP('data/' . $page . '/images-mini/index.php', $droitsFichiers);
97 }
116 // if(!file_exists('data/' . $page . '/multimedia')) 98 // if(!file_exists('data/' . $page . '/multimedia'))
117 // { 99 // {
118 // mkdir('data/' . $page . '/multimedia'); 100 // mkdir('data/' . $page . '/multimedia');
@@ -129,15 +111,6 @@ function installation()
129 { 111 {
130 createIndexPHP('data/discographie/json/index.php', $droitsFichiers); 112 createIndexPHP('data/discographie/json/index.php', $droitsFichiers);
131 } 113 }
132 if(!file_exists('data/discographie/images-mini'))
133 {
134 mkdir('data/discographie/images-mini');
135 chmod('data/discographie/images-mini', $droitsDossiers);
136 }
137 if(!file_exists('data/discographie/images-mini/index.html'))
138 {
139 createIndexPHP('data/discographie/images-mini/index.php', $droitsFichiers);
140 }
141 // fichiers temporaires pour upload des grosses archives 114 // fichiers temporaires pour upload des grosses archives
142 if(!file_exists('data/tmp')) 115 if(!file_exists('data/tmp'))
143 { 116 {
@@ -160,3 +133,12 @@ function installation()
160 // création d'un mot de passe si password.txt est vide 133 // création d'un mot de passe si password.txt est vide
161 createPassword(); 134 createPassword();
162} 135}
136
137function createIndexPHP($path, $droitsFichiers)
138{
139 $content = "<?php\nheader('Location: ../index.php');\nexit();";
140 $file = fopen($path, 'w');
141 fputs($file, $content);
142 fclose($file);
143 chmod($path, $droitsFichiers);
144}
diff --git a/controller/password.php b/controller/password.php
index 8f6a875..e739363 100644
--- a/controller/password.php
+++ b/controller/password.php
@@ -1,6 +1,5 @@
1<?php 1<?php
2// password.php 2// controller/password.php
3
4 3
5// affichage 4// affichage
6function createPassword() 5function createPassword()
diff --git a/dependances.php b/dependances.php
deleted file mode 100644
index 216b639..0000000
--- a/dependances.php
+++ /dev/null
@@ -1,67 +0,0 @@
1<?php
2// dependances.php
3
4// mentions légales dans le "footer"
5// - entreprise
6// n° RCS
7// telephone
8// n°identification TVA ?
9// hébergeur
10
11
12// mode de stockage des données
13// écrire 'files' ou 'database'
14$storage = 'files';
15// laisser 'files'!!
16// l'utilisation d'une BDD n'est pas prévue pour l'instant
17
18
19// à adapter au serveur apache pour attraper les erreurs 404
20// permet d'adapter le contenu du .htaccess
21//$racineDuSite = '/var/www/melaine';
22$racineDusite = 'getcwd()';
23
24// bibliothèque utilisée pour créer les miniatures
25if(extension_loaded("imagick"))
26{
27 $imageLibrary = 'imagick';
28}
29elseif(extension_loaded('gd'))
30{
31 $imageLibrary = 'gd';
32}
33else
34{
35 echo('<script>alert(\'Erreur: Une de ces extensions de PHP est nécessaire: imagemagick ou GD. Veuillez activer une des deux dans le fichier php.ini ou installer le paquet php-imagick ou php-gd.\');</script>');
36}
37
38// format des sauvegardes à la création
39if(extension_loaded("zip"))
40{
41 $archiveFormat = 'zip';
42}
43else
44{
45 echo('<script>alert(\'Erreur: PHP doit être capable de gérer les archives. Veuillez activer zip dans le fichier php.ini.\');</script>');
46}
47
48
49// bout de code à déplacer dans controller/backup.php
50// taille max des fichiers dans le php.ini (défaut = 2M)
51$maxWeight = ini_get('upload_max_filesize');
52
53// on utilisera cette valeur dans "main.js" pour envoyer
54// les fichiers un par un quand un zip est trop grand
55
56// conversion des mégas en octets
57function return_bytes ($size_str)
58{
59 switch (substr ($size_str, -1))
60 {
61 case 'M': case 'm': return (int)$size_str * 1048576;
62 case 'K': case 'k': return (int)$size_str * 1024;
63 case 'G': case 'g': return (int)$size_str * 1073741824;
64 default: return $size_str;
65 }
66}
67$maxWeight = return_bytes(ini_get('upload_max_filesize'));
diff --git a/erreur404.php b/erreur404.php
index 3059e70..e8fc033 100644
--- a/erreur404.php
+++ b/erreur404.php
@@ -1,13 +1,9 @@
1<?php 1<?php
2// les erreurs 404 sont renvoyées ici par le .htaccess 2// erreur404.php
3header('Location: index.php?erreur=404');
4 3
5//echo '<script>javascript:window.close()</script>'; 4// les erreurs 404 sont renvoyées ici par le .htaccess
5header('Location: http://' . $_SERVER['HTTP_HOST'] . '/index.php?erreur=404');
6 6
7// Le fichier .htaccess est situé dans le répertoire racine du site (et non du serveur), il comporte cette ligne:
8// ErrorDocument 404 /siteweb/erreur404.php
9// en cas d'erreur 404, le serveur apache renverra le visiteur vers ce fichier (erreur404.php)
10//
11// ATTENTION depuis apache en version 2.4 le .htaccess est ignoré par défaut, il y a deux méthodes pour y remedier: 7// ATTENTION depuis apache en version 2.4 le .htaccess est ignoré par défaut, il y a deux méthodes pour y remedier:
12// - méthode facile et moins sécurisée: trouver la ligne "AllowOverride None" dans le fichier de conf d'apache et changer "None" par "All" 8// - méthode facile et moins sécurisée: trouver la ligne "AllowOverride None" dans le fichier de conf d'apache et changer "None" par "All"
13// - méthode sécurisée consistant à autoriser uniquement la directive ErrorDocument pour notre site, 9// - méthode sécurisée consistant à autoriser uniquement la directive ErrorDocument pour notre site,
@@ -21,4 +17,3 @@ header('Location: index.php?erreur=404');
21// identifier l'adresse qui a provoqué l'erreur 17// identifier l'adresse qui a provoqué l'erreur
22// $_SERVER['REQUEST_URI'] 18// $_SERVER['REQUEST_URI']
23// https://www.developpez.net/forums/d107096/php/langage/recuperer-url-erreur-404-a/ 19// https://www.developpez.net/forums/d107096/php/langage/recuperer-url-erreur-404-a/
24
diff --git a/index.php b/index.php
index ac3910b..7cef980 100644
--- a/index.php
+++ b/index.php
@@ -14,72 +14,20 @@ if(!empty($_SESSION['erreur']))
14 unset($_SESSION['erreur']); 14 unset($_SESSION['erreur']);
15} 15}
16 16
17// fichier destiné à l'utilisateur 17// variables globales, dépendances et config par l'utilisateur
18require('dependances.php'); 18require('controller/config.php');
19 19
20// au premier démarrage du site 20// au premier démarrage du site (création du dossier "data")
21// l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici:
22require('controller/installation.php'); 21require('controller/installation.php');
22
23// penser à faire qu'on ne l'ouvre pas tout le temps
24// -> présence du data/password.txt?
23require('controller/password.php'); 25require('controller/password.php');
24installation();
25 26
27installation();
26 28
27// traitement des requêtes AJAX 29// traitement des requêtes AJAX
28// -> insertion d'une image dans l'éditeur 30require('controller/ajax.php');
29if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image')
30{
31 // sécurité !!
32 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1
33 || !isset($_FILES['upload']) || empty($_FILES['upload']))
34 {
35 // sans effet?
36 header('Location: index.php?erreur=image_ajax');
37 }
38 else
39 {
40 require('model/Image.php');
41 // paramètre "true" parce qu'on reçoit une requête AJAX
42 $Image = new Image(true);
43 $Image->upload();
44 echo($Image->reponseAjax); // attendu par l'éditeur
45 }
46 exit; // stop !!
47}
48// page restauration quand le fichier zip est lourd
49// -> input file onchange
50if(isset($_GET['action']) && $_GET['action'] == 'restauration'
51 && isset($_GET['file_name']) && isset($_GET['file_size']))
52{
53 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
54 {
55 header('Location: index.php?erreur=file_infos_ajax');
56 }
57 else
58 {
59 $_SESSION['fileSize'] = $_GET['file_size'];
60 $_SESSION['fileName'] = $_GET['file_name'];
61 //echo("file infos send");
62 var_dump($_SESSION['fileName']);
63 exit(); // stop !!
64 }
65}
66// -> input submit onclick
67if(isset($_GET['action']) && $_GET['action'] == 'restauration'
68 && isset($_GET['chunk_name']) && isset($_FILES['blob']))
69{
70
71 if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1)
72 {
73 header('Location: index.php?erreur=upload_ajax');
74 }
75 else
76 {
77 require('controller/backup.php');
78 uploadChunkAndMerge();
79 echo('file send');
80 exit(); // stop !!
81 }
82}
83 31
84// traitement des POST du ckeditor 32// traitement des POST du ckeditor
85// la fonction submitCKeditor est "autonome", elle n'affiche rien puis redirige sans GET 33// la fonction submitCKeditor est "autonome", elle n'affiche rien puis redirige sans GET
diff --git a/model/Album.php b/model/Album.php
index 3f13939..95dac50 100644
--- a/model/Album.php
+++ b/model/Album.php
@@ -51,7 +51,7 @@ class Album extends Article
51 require('model/Image.php'); 51 require('model/Image.php');
52 $Image = new Image(false); 52 $Image = new Image(false);
53 $Image->upload(); 53 $Image->upload();
54 $Image->makeThumbnail(); 54 $Image->makeThumbnail(201);
55 55
56 $erreur = $Image->erreur; 56 $erreur = $Image->erreur;
57 if(!empty($erreur)) 57 if(!empty($erreur))
@@ -181,7 +181,7 @@ class Album extends Article
181 require('model/Image.php'); 181 require('model/Image.php');
182 $Image = new Image(false); 182 $Image = new Image(false);
183 $Image->upload(); 183 $Image->upload();
184 $Image->makeThumbnail(); 184 $Image->makeThumbnail(201);
185 $erreur = $Image->erreur; 185 $erreur = $Image->erreur;
186 if(!empty($erreur)) 186 if(!empty($erreur))
187 { 187 {
@@ -205,12 +205,12 @@ class Album extends Article
205 // delete 205 // delete
206 public function delete() 206 public function delete()
207 { 207 {
208 parent::delete(); 208 parent::delete(); // json
209 209
210 if(file_exists('data/' . $this->page . '/html/' . $this->fileCode . '.' . $this->format)); 210 if(file_exists('data/' . $this->page . '/html/' . $this->fileCode . '.' . $this->format));
211 { 211 {
212 $this->format = 'html'; 212 $this->format = 'html';
213 parent::delete(); 213 parent::delete(); // html
214 } 214 }
215 } 215 }
216} 216}
diff --git a/model/Image.php b/model/Image.php
index 05773e9..59665e9 100644
--- a/model/Image.php
+++ b/model/Image.php
@@ -16,8 +16,8 @@ class Image
16 public function __construct($ajax) 16 public function __construct($ajax)
17 { 17 {
18 // get envoyé avec le javascript 18 // get envoyé avec le javascript
19 $this->page = $_GET['page'];
20 $this->ajax = $ajax; 19 $this->ajax = $ajax;
20 $this->page = $_GET['page'];
21 $this->path = 'data/' . $this->page . '/images/'; 21 $this->path = 'data/' . $this->page . '/images/';
22 $this->pathMini = 'data/' . $this->page . '/images-mini/'; 22 $this->pathMini = 'data/' . $this->page . '/images-mini/';
23 } 23 }
@@ -60,11 +60,19 @@ class Image
60 } 60 }
61 61
62 // miniatures des photos 62 // miniatures des photos
63 public function makeThumbnail() 63 public function makeThumbnail($largeur)
64 { 64 {
65 global $imageLibrary; 65 global $imageLibrary;
66 66
67 if($imageLibrary == 'gd') 67 if($imageLibrary == 'imagick')
68 {
69 $Image = new Imagick($this->path . $_FILES['upload']['name']);
70 // 0 signifie qu'on conserve les proportions
71 $Image->thumbnailImage($largeur, 0);
72 // écriture dans un fichier
73 $Image->writeImage($this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']);
74 }
75 elseif($imageLibrary == 'gd')
68 { 76 {
69 // cette fonction fonctionne pour tous les formats 77 // cette fonction fonctionne pour tous les formats
70 $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name'])); 78 $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name']));
@@ -74,15 +82,15 @@ class Image
74 $forme = imagesy($source) / imagesx($source); 82 $forme = imagesy($source) / imagesx($source);
75 var_dump($forme); 83 var_dump($forme);
76 84
77 if(imagesx($source) > 201) 85 if(imagesx($source) > $largeur)
78 { 86 {
79 // créer un rectangle noir 87 // créer un rectangle noir
80 $destination = imagecreatetruecolor(201, 201 * $forme); 88 $destination = imagecreatetruecolor($largeur, $largeur * $forme);
81 var_dump($destination); 89 //var_dump($destination);
82 90
83 // sélectionne un rectangle dans l'image source 91 // sélectionne un rectangle dans l'image source
84 // et le place dans un rectangle dans la nouvelle 92 // et le place dans un rectangle dans la nouvelle
85 imagecopyresampled($destination, $source, 0, 0, 0, 0, 201, 201 * $forme, imagesx($source), imagesy($source)); 93 imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur, $largeur * $forme, imagesx($source), imagesy($source));
86 94
87 // envoie l'image dans un fichier 95 // envoie l'image dans un fichier
88 imagejpeg($destination, $nomMiniImage); 96 imagejpeg($destination, $nomMiniImage);
@@ -92,14 +100,6 @@ class Image
92 imagejpeg($source, $nomMiniImage); 100 imagejpeg($source, $nomMiniImage);
93 } 101 }
94 } 102 }
95 elseif($imageLibrary == 'imagick')
96 {
97 $Image = new Imagick($this->path . $_FILES['upload']['name']);
98 // 0 signifie qu'on conserve les proportions
99 $Image->thumbnailImage(201, 0);
100 // écriture dans un fichier
101 $Image->writeImage($this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension']);
102 }
103 else 103 else
104 { 104 {
105 // utiliser la grande image si il est impossible de créer une miniature 105 // utiliser la grande image si il est impossible de créer une miniature