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.tar.gz melaine-ed5df18ed28a338ecd763e6492991ccbf5e23eb0.tar.bz2 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() |
