diff options
-rw-r--r-- | .htaccess | 8 | ||||
-rw-r--r-- | controller/ajax.php | 60 | ||||
-rw-r--r-- | controller/backup.php | 2 | ||||
-rw-r--r-- | controller/config.php | 63 | ||||
-rw-r--r-- | controller/installation.php | 92 | ||||
-rw-r--r-- | controller/password.php | 3 | ||||
-rw-r--r-- | dependances.php | 67 | ||||
-rw-r--r-- | erreur404.php | 11 | ||||
-rw-r--r-- | index.php | 68 | ||||
-rw-r--r-- | model/Album.php | 8 | ||||
-rw-r--r-- | model/Image.php | 30 |
11 files changed, 195 insertions, 217 deletions
@@ -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) |
7 | ErrorDocument 404 http://melaine.localhost/erreur404.php | 8 | ErrorDocument 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 | ||
6 | if(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 | ||
28 | if(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 | ||
45 | if(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 | |||
159 | function pageRestauration($from) | 160 | function 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 | ||
22 | if(extension_loaded("imagick")) // on préfère imagemagick | ||
23 | { | ||
24 | $imageLibrary = 'imagick'; | ||
25 | } | ||
26 | elseif(extension_loaded('gd')) | ||
27 | { | ||
28 | $imageLibrary = 'gd'; | ||
29 | } | ||
30 | else | ||
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 | ||
37 | if(extension_loaded("zip")) | ||
38 | { | ||
39 | $archiveFormat = 'zip'; | ||
40 | } | ||
41 | else | ||
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 | ||
49 | function 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 |
3 | function installation() | 5 | function 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 | |||
137 | function 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 |
6 | function createPassword() | 5 | function 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 | ||
25 | if(extension_loaded("imagick")) | ||
26 | { | ||
27 | $imageLibrary = 'imagick'; | ||
28 | } | ||
29 | elseif(extension_loaded('gd')) | ||
30 | { | ||
31 | $imageLibrary = 'gd'; | ||
32 | } | ||
33 | else | ||
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 | ||
39 | if(extension_loaded("zip")) | ||
40 | { | ||
41 | $archiveFormat = 'zip'; | ||
42 | } | ||
43 | else | ||
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 | ||
57 | function 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 |
3 | header('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 |
5 | header('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 | |||
@@ -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 |
18 | require('dependances.php'); | 18 | require('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: | ||
22 | require('controller/installation.php'); | 21 | require('controller/installation.php'); |
22 | |||
23 | // penser à faire qu'on ne l'ouvre pas tout le temps | ||
24 | // -> présence du data/password.txt? | ||
23 | require('controller/password.php'); | 25 | require('controller/password.php'); |
24 | installation(); | ||
25 | 26 | ||
27 | installation(); | ||
26 | 28 | ||
27 | // traitement des requêtes AJAX | 29 | // traitement des requêtes AJAX |
28 | // -> insertion d'une image dans l'éditeur | 30 | require('controller/ajax.php'); |
29 | if(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 | ||
50 | if(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 | ||
67 | if(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 |