diff options
author | polo <ordipolo@gmx.fr> | 2022-07-06 01:59:48 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2022-07-06 01:59:48 +0200 |
commit | ed5df18ed28a338ecd763e6492991ccbf5e23eb0 (patch) | |
tree | d1112d52bf89856f0edbb2dfbdb02b3423c50ecd /controller | |
parent | 9608a1de748363403b410cc4193f791419e6efc0 (diff) | |
download | melaine-ed5df18ed28a338ecd763e6492991ccbf5e23eb0.zip |
rangement du code
Diffstat (limited to 'controller')
-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 |
5 files changed, 163 insertions, 57 deletions
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() |