summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-07-06 01:59:48 +0200
committerpolo <ordipolo@gmx.fr>2022-07-06 01:59:48 +0200
commited5df18ed28a338ecd763e6492991ccbf5e23eb0 (patch)
treed1112d52bf89856f0edbb2dfbdb02b3423c50ecd /controller
parent9608a1de748363403b410cc4193f791419e6efc0 (diff)
downloadmelaine-ed5df18ed28a338ecd763e6492991ccbf5e23eb0.zip
rangement du code
Diffstat (limited to 'controller')
-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
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
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()