diff options
| author | polo <ordipolo@gmx.fr> | 2022-03-10 03:12:58 +0100 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2022-03-10 03:12:58 +0100 |
| commit | f331b3ab14f2b404c2089607aba2e2d434cd510d (patch) | |
| tree | 09ecb84aa9db383f661d9e9a064b0d3d13d40a8b | |
| parent | 608856e0853b7e1d9b9b43e69b2012227ccefb43 (diff) | |
| download | melaine-f331b3ab14f2b404c2089607aba2e2d434cd510d.tar.gz melaine-f331b3ab14f2b404c2089607aba2e2d434cd510d.tar.bz2 melaine-f331b3ab14f2b404c2089607aba2e2d434cd510d.zip | |
fichiers index.php
35 files changed, 252 insertions, 116 deletions
diff --git a/config.php b/config.php deleted file mode 100644 index 946763a..0000000 --- a/config.php +++ /dev/null | |||
| @@ -1,36 +0,0 @@ | |||
| 1 | <?php | ||
| 2 | // à adapter au serveur apache pour attraper les erreurs 404 | ||
| 3 | // permet d'adapter le contenu du .htaccess | ||
| 4 | $racineDuSite = '/var/www/melaine'; | ||
| 5 | |||
| 6 | // bibliothèque utilisée pour créer les miniatures | ||
| 7 | // écrire 'gd' ou 'imagick' | ||
| 8 | $imageLibrary = 'imagick'; | ||
| 9 | |||
| 10 | // format des sauvegardes à la création | ||
| 11 | // écrire 'zip' ou 'tar' ou 'phar' | ||
| 12 | $archiveFormat = 'zip'; | ||
| 13 | // seul zip est supporté pour l'instant | ||
| 14 | |||
| 15 | // mode de stockage des données | ||
| 16 | // écrire 'files' ou 'database' | ||
| 17 | $storage = 'files'; | ||
| 18 | // laisser 'files'!! | ||
| 19 | // l'utilisation d'une BDD n'est pas prévue pour l'instant | ||
| 20 | |||
| 21 | |||
| 22 | // actuellement inutile | ||
| 23 | // taille max des fichiers dans le php.ini (défaut = 2M) | ||
| 24 | /*function return_bytes ($size_str) | ||
| 25 | { | ||
| 26 | switch (substr ($size_str, -1)) | ||
| 27 | { | ||
| 28 | case 'M': case 'm': return (int)$size_str * 1048576; | ||
| 29 | case 'K': case 'k': return (int)$size_str * 1024; | ||
| 30 | case 'G': case 'g': return (int)$size_str * 1073741824; | ||
| 31 | default: return $size_str; | ||
| 32 | } | ||
| 33 | } | ||
| 34 | $maxWeight = return_bytes(ini_get('upload_max_filesize'));*/ | ||
| 35 | /*ini_set('upload_max_filesize', '3M'); | ||
| 36 | echo(ini_get('upload_max_filesize')); die();*/ | ||
diff --git a/controller/Security.php b/controller/Security.php index c53cdc6..15c44b2 100644 --- a/controller/Security.php +++ b/controller/Security.php | |||
| @@ -1,9 +1,6 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // controller/Security.php | 2 | // controller/Security.php |
| 3 | 3 | ||
| 4 | // sécurité faille XSS avec htmLawed | ||
| 5 | require('lib/htmlawed/htmLawed.php'); | ||
| 6 | |||
| 7 | class Security | 4 | class Security |
| 8 | { | 5 | { |
| 9 | private static $configHtmLawed = array( | 6 | private static $configHtmLawed = array( |
| @@ -16,6 +13,9 @@ class Security | |||
| 16 | 13 | ||
| 17 | public static function secureString(string $chaine): string | 14 | public static function secureString(string $chaine): string |
| 18 | { | 15 | { |
| 16 | // sécurité faille XSS avec htmLawed | ||
| 17 | require('lib/htmlawed/htmLawed.php'); | ||
| 18 | |||
| 19 | $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed); | 19 | $chaine = htmLawed($chaine, self::$configHtmLawed, self::$specHtmLawed); |
| 20 | $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) | 20 | $chaine = trim($chaine); // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine (pour l'entrée de l'éditeur) |
| 21 | return $chaine; | 21 | return $chaine; |
diff --git a/controller/backup.php b/controller/backup.php index 1477c55..2cfccaa 100644 --- a/controller/backup.php +++ b/controller/backup.php | |||
| @@ -103,55 +103,63 @@ function restaurer($from) | |||
| 103 | { | 103 | { |
| 104 | $title = 'Restauration des données'; | 104 | $title = 'Restauration des données'; |
| 105 | $message = ''; | 105 | $message = ''; |
| 106 | global $archiveFormat; | ||
| 106 | 107 | ||
| 107 | // recharger la même page en écrivant les données | 108 | // recharger la même page en écrivant les données |
| 108 | if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0) | 109 | if(isset($_FILES['archive']) && $_FILES['archive']['error'] == 0) |
| 109 | { | 110 | { |
| 110 | // détecter le format (zip ou autre) | 111 | // détecter le format (zip ou autre) |
| 112 | if($archiveFormat == 'zip') | ||
| 113 | { | ||
| 114 | // une copie du zip est conservée dans data/ au cas où | ||
| 115 | move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']); | ||
| 116 | chmod('data/' . $_FILES['archive']['name'], 0666); | ||
| 111 | 117 | ||
| 112 | // une copie du zip est conservée dans data/ au cas où | 118 | $nomFichier = 'data/' . $_FILES['archive']['name']; |
| 113 | move_uploaded_file($_FILES['archive']['tmp_name'], 'data/' . $_FILES['archive']['name']); | ||
| 114 | chmod('data/' . $_FILES['archive']['name'], 0666); | ||
| 115 | |||
| 116 | $nomFichier = 'data/' . $_FILES['archive']['name']; | ||
| 117 | 119 | ||
| 118 | // extraction | 120 | // extraction |
| 119 | try | 121 | try |
| 120 | { | 122 | { |
| 121 | $Zip = new ZipArchive(); | 123 | $Zip = new ZipArchive(); |
| 122 | } | 124 | } |
| 123 | catch (Throwable $e) // l'extension zip n'est pas activée | 125 | catch (Throwable $e) // l'extension zip n'est pas activée |
| 124 | { | ||
| 125 | echo($e); | ||
| 126 | die(); | ||
| 127 | } | ||
| 128 | if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE) | ||
| 129 | { | ||
| 130 | $j = 0; | ||
| 131 | for($i = 0; $i < $Zip->numFiles; $i++) | ||
| 132 | { | 126 | { |
| 133 | $nomEntree = $Zip->getNameIndex($i); | 127 | echo($e); |
| 134 | if($Zip->extractTo('.', $nomEntree) === TRUE) | 128 | die(); |
| 129 | } | ||
| 130 | if($Zip->open($nomFichier, ZipArchive::RDONLY) === TRUE) | ||
| 131 | { | ||
| 132 | $j = 0; | ||
| 133 | for($i = 0; $i < $Zip->numFiles; $i++) | ||
| 135 | { | 134 | { |
| 136 | $j++; | 135 | $nomEntree = $Zip->getNameIndex($i); |
| 136 | if($Zip->extractTo('.', $nomEntree) === TRUE) | ||
| 137 | { | ||
| 138 | $j++; | ||
| 139 | } | ||
| 140 | else | ||
| 141 | { | ||
| 142 | $message = '<p style="color: red;" >Erreur: extraction du zip impossible.</p>'; | ||
| 143 | } | ||
| 144 | chmod($nomEntree, 0666); | ||
| 137 | } | 145 | } |
| 138 | else | 146 | |
| 147 | if($j == $Zip->numFiles) | ||
| 139 | { | 148 | { |
| 140 | $message = '<p style="color: red;" >Erreur: extraction du zip impossible.</p>'; | 149 | $message = '<p style="color: red;" >Restauration réussie !!</p>'; |
| 141 | } | 150 | } |
| 142 | chmod($nomEntree, 0666); | 151 | $Zip->close(); |
| 143 | } | 152 | } |
| 144 | 153 | else | |
| 145 | if($j == $Zip->numFiles) | ||
| 146 | { | 154 | { |
| 147 | $message = '<p style="color: red;" >Restauration réussie !!</p>'; | 155 | // mauvais fichier |
| 156 | $message = '<p style="color: red;" >Erreur: Impossible d\'ouvrir l\'archive Zip."</p>'; | ||
| 148 | } | 157 | } |
| 149 | $Zip->close(); | ||
| 150 | } | 158 | } |
| 151 | else | 159 | else |
| 152 | { | 160 | { |
| 153 | // mauvais fichier | 161 | // pas de module zip |
| 154 | $message = '<p style="color: red;" >Erreur: Impossible d\'ouvrir l\'archive Zip."</p>'; | 162 | $message = '<p style="color: red" >Erreur: Veuillez activer l\'extension zip dans le php.ini pour pouvoir gérer les sauvegardes.</p>'; |
| 155 | } | 163 | } |
| 156 | } | 164 | } |
| 157 | elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0) | 165 | elseif(isset($_FILES['archive']) && $_FILES['archive']['error'] != 0) |
diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 4b4297a..d6ea8ad 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php | |||
| @@ -47,6 +47,9 @@ function submitCKeditor() | |||
| 47 | if(isset($_POST['contenu'])) // optionnel pour discographie | 47 | if(isset($_POST['contenu'])) // optionnel pour discographie |
| 48 | { | 48 | { |
| 49 | $contenu = Security::secureString($_POST['contenu']); | 49 | $contenu = Security::secureString($_POST['contenu']); |
| 50 | |||
| 51 | // liens sans http:// devant | ||
| 52 | $contenu = fixLinks($contenu); | ||
| 50 | 53 | ||
| 51 | // récupérer les liens multimedia | 54 | // récupérer les liens multimedia |
| 52 | //require("media.php"); | 55 | //require("media.php"); |
| @@ -142,14 +145,29 @@ function submitCKeditor() | |||
| 142 | 145 | ||
| 143 | 146 | ||
| 144 | // lien sans http:// | 147 | // lien sans http:// |
| 145 | // un clic sur un lien dans l'éditeur affiche une infobulle montrant l'adresse cible du lien si celle-ci a déjà été précisée | 148 | // si une adresse est de type "domaine.fr" sans le http:// devant, le comportement des navigateurs est de rechercher un fichier comme si mon adresse commençait par file:// |
| 146 | // il est possible de cliquer sur ce lien, ce qui ouvre un onglet avec le site demandé | 149 | // tomber ainsi sur une page d'erreur est parfaitement déroutant |
| 147 | // toutefois si cette adresse est de type "domaine.fr" (sans http:// devant), le navigateur ne va pas rechercher un site mais un fichier comme si mon adresse était de type file:///fichier | 150 | // une erreur 404 est détectée et le visiteur redirigé, mais ça ne règle pas le problème |
| 148 | // tomber ainsi sur une page d'erreur est déroutant: | 151 | // 2ème problème, en train d'écrire un article, l'utilisateur clique sur ce lien qu'il vient de créer et qui apparaît dans l'infobulle, un nouvelle onglet apparaît |
| 149 | // "ai-je perdu le texte que j'étais en train de taper?"" | 152 | // solution: fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; |
| 150 | // solution 1 (mauvaise): activer la redirection en cas d'erreur 404 dans le .htaccess | 153 | // le .htaccess doit pour ça détecter que l'erreur 404 est particulière |
| 151 | // solution 2 (façon pop-up): fermer ce nouvel onglet avec echo '<SCRIPT>javascript:window.close()</SCRIPT>'; | 154 | |
| 152 | // pour faire passer par le .htaccess l'info comme quoi la page précédente comportait un éditeur ouvert... | 155 | function fixLinks($data) |
| 153 | 156 | { | |
| 154 | function cleanHTML($contenu) | 157 | // regex pour détecter les balises <a>, analyser les liens à l'interieur et les modifier si nécessaire |
| 155 | {} | 158 | $pattern = '#<a href=".*">.*</a>#'; |
| 159 | |||
| 160 | if(preg_match($pattern, $data)) | ||
| 161 | {} | ||
| 162 | |||
| 163 | //$remplacement = 'http://$0'; | ||
| 164 | //$data = preg_replace($pattern, $remplacement, $data); | ||
| 165 | |||
| 166 | // contrairement à ce qui dit la doc | ||
| 167 | // https://www.php.net/manual/fr/filter.filters.validate.php | ||
| 168 | // une adresse du type "domaine.fr" ne passe pas le filtre | ||
| 169 | // il renvoie false, ce qui nous arrange ici! | ||
| 170 | //var_dump(filter_var($link, FILTER_VALIDATE_URL)); | ||
| 171 | |||
| 172 | return($data); | ||
| 173 | } | ||
diff --git a/controller/installation.php b/controller/installation.php index e8b1af8..0bd56c2 100644 --- a/controller/installation.php +++ b/controller/installation.php | |||
| @@ -68,10 +68,19 @@ function installation() | |||
| 68 | require('view/backup.php'); | 68 | require('view/backup.php'); |
| 69 | exit(); | 69 | exit(); |
| 70 | } | 70 | } |
| 71 | if(!file_exists('data/index.html')) | 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 | |||
| 81 | if(!file_exists('data/index.php')) | ||
| 72 | { | 82 | { |
| 73 | touch('data/index.html'); | 83 | createIndexPHP('data/index.php', $droitsFichiers); |
| 74 | chmod('data/index.html', $droitsFichiers); | ||
| 75 | } | 84 | } |
| 76 | 85 | ||
| 77 | $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); | 86 | $listePages = array('melaine', 'discographie', 'concerts', 'presse', 'ateliers', 'liens', 'peinture', 'archives'); |
| @@ -82,30 +91,27 @@ function installation() | |||
| 82 | mkdir('data/' . $page); | 91 | mkdir('data/' . $page); |
| 83 | chmod('data/' . $page, $droitsDossiers); | 92 | chmod('data/' . $page, $droitsDossiers); |
| 84 | } | 93 | } |
| 85 | if(!file_exists('data/' . $page . 'index.html')) | 94 | if(!file_exists('data/' . $page . '/index.php')) |
| 86 | { | 95 | { |
| 87 | touch('data/' . $page . '/index.html'); | 96 | createIndexPHP('data/' . $page . '/index.php', $droitsFichiers); |
| 88 | chmod('data/' . $page . '/index.html', $droitsFichiers); | ||
| 89 | } | 97 | } |
| 90 | if(!file_exists('data/' . $page . '/html')) | 98 | if(!file_exists('data/' . $page . '/html')) |
| 91 | { | 99 | { |
| 92 | mkdir('data/' . $page . '/html'); | 100 | mkdir('data/' . $page . '/html'); |
| 93 | chmod('data/' . $page . '/html', $droitsDossiers); | 101 | chmod('data/' . $page . '/html', $droitsDossiers); |
| 94 | } | 102 | } |
| 95 | if(!file_exists('data/' . $page . '/html/index.html')) | 103 | if(!file_exists('data/' . $page . '/html/index.php')) |
| 96 | { | 104 | { |
| 97 | touch('data/' . $page . '/html/index.html'); | 105 | createIndexPHP('data/' . $page . '/html/index.php', $droitsFichiers); |
| 98 | chmod('data/' . $page . '/html/index.html', $droitsFichiers); | ||
| 99 | } | 106 | } |
| 100 | if(!file_exists('data/' . $page . '/images')) | 107 | if(!file_exists('data/' . $page . '/images')) |
| 101 | { | 108 | { |
| 102 | mkdir('data/' . $page . '/images'); | 109 | mkdir('data/' . $page . '/images'); |
| 103 | chmod('data/' . $page . '/images', $droitsDossiers); | 110 | chmod('data/' . $page . '/images', $droitsDossiers); |
| 104 | } | 111 | } |
| 105 | if(!file_exists('data/' . $page . '/images/index.html')) | 112 | if(!file_exists('data/' . $page . '/images/index.php')) |
| 106 | { | 113 | { |
| 107 | touch('data/' . $page . '/images/index.html'); | 114 | createIndexPHP('data/' . $page . '/images/index.php', $droitsFichiers); |
| 108 | chmod('data/' . $page . '/images/index.html', $droitsFichiers); | ||
| 109 | } | 115 | } |
| 110 | // if(!file_exists('data/' . $page . '/multimedia')) | 116 | // if(!file_exists('data/' . $page . '/multimedia')) |
| 111 | // { | 117 | // { |
| @@ -119,10 +125,9 @@ function installation() | |||
| 119 | mkdir('data/discographie/json'); | 125 | mkdir('data/discographie/json'); |
| 120 | chmod('data/discographie/json', $droitsDossiers); | 126 | chmod('data/discographie/json', $droitsDossiers); |
| 121 | } | 127 | } |
| 122 | if(!file_exists('data/discographie/json/index.html')) | 128 | if(!file_exists('data/discographie/json/index.php')) |
| 123 | { | 129 | { |
| 124 | touch('data/discographie/json/index.html'); | 130 | createIndexPHP('data/discographie/json/index.php', $droitsFichiers); |
| 125 | chmod('data/discographie/json/index.html', $droitsFichiers); | ||
| 126 | } | 131 | } |
| 127 | if(!file_exists('data/discographie/images-mini')) | 132 | if(!file_exists('data/discographie/images-mini')) |
| 128 | { | 133 | { |
| @@ -131,8 +136,7 @@ function installation() | |||
| 131 | } | 136 | } |
| 132 | if(!file_exists('data/discographie/images-mini/index.html')) | 137 | if(!file_exists('data/discographie/images-mini/index.html')) |
| 133 | { | 138 | { |
| 134 | touch('data/discographie/images-mini/index.html'); | 139 | createIndexPHP('data/discographie/images-mini/index.php', $droitsFichiers); |
| 135 | chmod('data/discographie/images-mini/index.html', $droitsFichiers); | ||
| 136 | } | 140 | } |
| 137 | // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers | 141 | // le modèle donnera les droits 0666 (octal) aux nouveaux fichiers à l'intérieur des dossiers |
| 138 | 142 | ||
diff --git a/dependances.php b/dependances.php new file mode 100644 index 0000000..cd42e3f --- /dev/null +++ b/dependances.php | |||
| @@ -0,0 +1,67 @@ | |||
| 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'));*/ | ||
| @@ -15,7 +15,7 @@ if(!empty($_SESSION['erreur'])) | |||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | // fichier destiné à l'utilisateur | 17 | // fichier destiné à l'utilisateur |
| 18 | require('config.php'); | 18 | require('dependances.php'); |
| 19 | 19 | ||
| 20 | // au premier démarrage du site | 20 | // au premier démarrage du site |
| 21 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: | 21 | // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: |
diff --git a/lib/ckeditor5/build/index.html b/lib/ckeditor5/build/index.html deleted file mode 100644 index e69de29..0000000 --- a/lib/ckeditor5/build/index.html +++ /dev/null | |||
diff --git a/lib/ckeditor5/build/index.php b/lib/ckeditor5/build/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/lib/ckeditor5/build/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/lib/ckeditor5/build/translations/index.html b/lib/ckeditor5/build/translations/index.html deleted file mode 100644 index e69de29..0000000 --- a/lib/ckeditor5/build/translations/index.html +++ /dev/null | |||
diff --git a/lib/ckeditor5/build/translations/index.php b/lib/ckeditor5/build/translations/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/lib/ckeditor5/build/translations/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/lib/ckeditor5/index.html b/lib/ckeditor5/index.html deleted file mode 100644 index e69de29..0000000 --- a/lib/ckeditor5/index.html +++ /dev/null | |||
diff --git a/lib/ckeditor5/index.php b/lib/ckeditor5/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/lib/ckeditor5/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/lib/ckeditor5/src/index.html b/lib/ckeditor5/src/index.html deleted file mode 100644 index e69de29..0000000 --- a/lib/ckeditor5/src/index.html +++ /dev/null | |||
diff --git a/lib/ckeditor5/src/index.php b/lib/ckeditor5/src/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/lib/ckeditor5/src/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/lib/index.html b/lib/index.html deleted file mode 100644 index e69de29..0000000 --- a/lib/index.html +++ /dev/null | |||
diff --git a/lib/index.php b/lib/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/lib/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/model/Image.php b/model/Image.php index 4cceb0f..e8bf3f9 100644 --- a/model/Image.php +++ b/model/Image.php | |||
| @@ -64,9 +64,6 @@ class Image | |||
| 64 | 64 | ||
| 65 | if($imageLibrary == 'gd') | 65 | if($imageLibrary == 'gd') |
| 66 | { | 66 | { |
| 67 | // des infos sur GD | ||
| 68 | //print_r(gd_info()); | ||
| 69 | |||
| 70 | // cette fonction fonctionne pour tous les formats | 67 | // cette fonction fonctionne pour tous les formats |
| 71 | $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name'])); | 68 | $source = imagecreatefromstring(file_get_contents($this->path . $_FILES['upload']['name'])); |
| 72 | 69 | ||
diff --git a/public/accueil/index.html b/public/accueil/index.html deleted file mode 100644 index e69de29..0000000 --- a/public/accueil/index.html +++ /dev/null | |||
diff --git a/public/accueil/index.php b/public/accueil/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/public/accueil/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/public/css/accueil.css b/public/css/accueil.css index 0afffeb..7d75e11 100644 --- a/public/css/accueil.css +++ b/public/css/accueil.css | |||
| @@ -249,6 +249,14 @@ form | |||
| 249 | { | 249 | { |
| 250 | display: flex; | 250 | display: flex; |
| 251 | }*/ | 251 | }*/ |
| 252 | footer | ||
| 253 | { | ||
| 254 | margin-top: 20px; | ||
| 255 | padding: 10px 30px; | ||
| 256 | font-size: 90%; | ||
| 257 | font-style: italic; | ||
| 258 | background-color: #9fa6cf; | ||
| 259 | } | ||
| 252 | 260 | ||
| 253 | 261 | ||
| 254 | /* PC, y compris vieux écrans 800x600 */ | 262 | /* PC, y compris vieux écrans 800x600 */ |
| @@ -297,7 +305,7 @@ form | |||
| 297 | height: 596px; | 305 | height: 596px; |
| 298 | } | 306 | } |
| 299 | 307 | ||
| 300 | #contenu, footer | 308 | #contenu |
| 301 | { | 309 | { |
| 302 | width: 630px; | 310 | width: 630px; |
| 303 | margin: auto; | 311 | margin: auto; |
| @@ -377,7 +385,7 @@ form | |||
| 377 | margin: auto; | 385 | margin: auto; |
| 378 | } | 386 | } |
| 379 | 387 | ||
| 380 | #contenu, footer | 388 | #contenu |
| 381 | { | 389 | { |
| 382 | width: 480px; | 390 | width: 480px; |
| 383 | margin: auto; | 391 | margin: auto; |
| @@ -472,7 +480,7 @@ form | |||
| 472 | height: 316px; | 480 | height: 316px; |
| 473 | } | 481 | } |
| 474 | 482 | ||
| 475 | #contenu, footer | 483 | #contenu |
| 476 | { | 484 | { |
| 477 | width: 320px; | 485 | width: 320px; |
| 478 | margin: auto; | 486 | margin: auto; |
diff --git a/public/css/index.html b/public/css/index.html deleted file mode 100644 index e69de29..0000000 --- a/public/css/index.html +++ /dev/null | |||
diff --git a/public/css/index.php b/public/css/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/public/css/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/public/fonts/index.html b/public/fonts/index.html deleted file mode 100644 index e69de29..0000000 --- a/public/fonts/index.html +++ /dev/null | |||
diff --git a/public/fonts/index.php b/public/fonts/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/public/fonts/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/public/header_images/index.html b/public/header_images/index.html deleted file mode 100644 index e69de29..0000000 --- a/public/header_images/index.html +++ /dev/null | |||
diff --git a/public/header_images/index.php b/public/header_images/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/public/header_images/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/public/index.html b/public/index.html deleted file mode 100644 index e69de29..0000000 --- a/public/index.html +++ /dev/null | |||
diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/public/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/public/main.js b/public/main.js index f3fe6f0..b6021d6 100644 --- a/public/main.js +++ b/public/main.js | |||
| @@ -86,19 +86,34 @@ function copierAdresse() | |||
| 86 | 86 | ||
| 87 | function nouveauMotdepasse(page) | 87 | function nouveauMotdepasse(page) |
| 88 | { | 88 | { |
| 89 | confirm('Le mot de passe a été modifié.'); | 89 | alert('Le mot de passe a été modifié.'); |
| 90 | window.setTimeout(location=('index.php?page=' + page + '&message=nouveau_mdp'), 0); | 90 | window.setTimeout(location=('index.php?page=' + page + '&message=nouveau_mdp'), 0); |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | // envoie gros fichier ZIP | 93 | // envoie gros fichier ZIP |
| 94 | // si le fichier ne passe pas la limite de l'hébergeur (php.ini) | 94 | // si le fichier ne passe pas la limite de l'hébergeur (php.ini) |
| 95 | // l'ouvrir en javascript chaque envoyer progressivement | 95 | // l'ouvrir en javascript chaque envoyer progressivement |
| 96 | function extraireZIPetEnvoyerUnParUn() | 96 | function getFileInfo() |
| 97 | { | ||
| 98 | // l'idi est dans le formulaire | ||
| 99 | var name = document.getElementById('myFile').files[0].name; | ||
| 100 | var size = document.getElementById('myFile').files[0].size; | ||
| 101 | var type = document.getElementById('myFile').files[0].type; | ||
| 102 | var date = document.getElementById('myFile').files[0].lastModifiedDate; | ||
| 103 | |||
| 104 | var infos = name+" "+size+" "+type+" "+date; | ||
| 105 | alert(infos) | ||
| 106 | return(infos); | ||
| 107 | } | ||
| 108 | |||
| 109 | function extraireZIPetEnvoyerUnParUn(maxPHPiniWeight, archiveFormat) | ||
| 97 | { | 110 | { |
| 98 | // taille du fichier? | 111 | // taille du fichier? |
| 112 | var fileInfos = getFileInfo(); | ||
| 113 | alert(fileInfos); | ||
| 99 | 114 | ||
| 100 | // taille limite autorisée? | 115 | // taille limite autorisée? |
| 101 | // obtenue avant avec phpinfo() puis insérée dans le code JS | 116 | // obtenue par php avec: ini_get('upload_max_filesize'); |
| 102 | 117 | ||
| 103 | // si le fichier est plus gros que la limite: | 118 | // si le fichier est plus gros que la limite: |
| 104 | // extraire l'archive | 119 | // extraire l'archive |
diff --git a/public/menu/index.html b/public/menu/index.html deleted file mode 100644 index e69de29..0000000 --- a/public/menu/index.html +++ /dev/null | |||
diff --git a/public/menu/index.php b/public/menu/index.php new file mode 100644 index 0000000..f67f1d7 --- /dev/null +++ b/public/menu/index.php | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <?php | ||
| 2 | header('Location: ../index.php'); | ||
| 3 | exit(); | ||
diff --git a/view/menu.php b/view/menu.php index f752d09..2e07a94 100644 --- a/view/menu.php +++ b/view/menu.php | |||
| @@ -31,7 +31,6 @@ $header = ob_get_clean(); | |||
| 31 | ob_start(); | 31 | ob_start(); |
| 32 | echo "\n"; | 32 | echo "\n"; |
| 33 | ?> | 33 | ?> |
| 34 | <div id="contenu" > | ||
| 35 | <div id="colonne1" > | 34 | <div id="colonne1" > |
| 36 | <a href="index.php?page=liens" > | 35 | <a href="index.php?page=liens" > |
| 37 | <div id="canoe" ></div> | 36 | <div id="canoe" ></div> |
| @@ -69,6 +68,5 @@ echo "\n"; | |||
| 69 | 68 | ||
| 70 | <a id="hey_ho" href="index.php?page=discographie" ></a> | 69 | <a id="hey_ho" href="index.php?page=discographie" ></a> |
| 71 | </div> | 70 | </div> |
| 72 | </div> | ||
| 73 | <?php | 71 | <?php |
| 74 | $content = ob_get_clean(); \ No newline at end of file | 72 | $content = ob_get_clean(); \ No newline at end of file |
diff --git a/view/template.php b/view/template.php index 0b084f6..313e35a 100644 --- a/view/template.php +++ b/view/template.php | |||
| @@ -53,7 +53,7 @@ if($page != "accueil") | |||
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | // lien vers le mode admin | 55 | // lien vers le mode admin |
| 56 | if($_SESSION['admin'] == 0) | 56 | if($_SESSION['admin'] == 0 && isset($_GET['page'])) |
| 57 | { | 57 | { |
| 58 | ?> | 58 | ?> |
| 59 | <div id="lienModeAdmin" > | 59 | <div id="lienModeAdmin" > |
| @@ -87,6 +87,24 @@ if($_SESSION['admin'] == 1) | |||
| 87 | </div> | 87 | </div> |
| 88 | <?php | 88 | <?php |
| 89 | } | 89 | } |
| 90 | // mentions légales | ||
| 91 | // à déplacer dans une page dédiée | ||
| 92 | if(isset($page) && $page != 'accueil') | ||
| 93 | { | ||
| 94 | ?> | ||
| 95 | <footer> | ||
| 96 | <p>Melaine Favennec<br/> | ||
| 97 | Ty Glaz, 29120 Plomeur<br/> | ||
| 98 | Tel: ...<br/> | ||
| 99 | SIRET: 318 152 071</p> | ||
| 100 | <p>Directeur/codirecteur de la publication: ...</p> | ||
| 101 | <p>Ce site a été créé par Florant ... et utilise des illustrations de François Bourgeon.</p> | ||
| 102 | <p>Il a été rénové et est actuellement hébergé par Paul Jusot.<br/> | ||
| 103 | 2A, rue de l'île de Man<br/> | ||
| 104 | SIRET: 814 320 610</p> | ||
| 105 | </footer> | ||
| 106 | <?php | ||
| 107 | } | ||
| 90 | ?> | 108 | ?> |
| 91 | </div> | 109 | </div> |
| 92 | </body> | 110 | </body> |
diff --git a/à faire après livraison.txt b/à faire après livraison.txt index f42f6f1..b8de449 100644 --- a/à faire après livraison.txt +++ b/à faire après livraison.txt | |||
| @@ -1,12 +1,20 @@ | |||
| 1 | rassembler les pages | ||
| 2 | presse (fille qui tombe) dans melaine | ||
| 3 | ateliers (cheval) dans archives (blonde) | ||
| 4 | remplacer concerts (sirene) par "écouter" | ||
| 5 | une page mentions légales (dans fille qui tombe ou cheval) | ||
| 6 | |||
| 1 | liens sans http dans l'éditeur | 7 | liens sans http dans l'éditeur |
| 2 | 8 | ||
| 3 | dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess | 9 | dans installation.php, utiliser la racine dans config.php pour adapter le .htaccess (si c'est possible) |
| 4 | 10 | ||
| 5 | réduire les droits des dossiers | 11 | réduire les droits des dossiers |
| 6 | 12 | ||
| 7 | bouton pour remonter: remplacer le lien par du JS pour ne pas recharger la page | 13 | bouton pour remonter: remplacer le lien par du JS pour ne pas recharger la page |
| 8 | 14 | ||
| 9 | captcha dans password.php | 15 | captcha dans password.php? |
| 16 | |||
| 17 | sauvegardes automatiques | ||
| 10 | 18 | ||
| 11 | Zoom sur images (articles) | 19 | Zoom sur images (articles) |
| 12 | 20 | ||
| @@ -39,7 +47,7 @@ pagination + AJAX | |||
| 39 | 47 | ||
| 40 | système d'onglets avec AJAX: changement de page sans recharger | 48 | système d'onglets avec AJAX: changement de page sans recharger |
| 41 | 49 | ||
| 42 | plugin autosave | 50 | plugin autosave de l'éditeur |
| 43 | 51 | ||
| 44 | Editeur "inline" ou "balloon block" | 52 | Editeur "inline" ou "balloon block" |
| 45 | 53 | ||
| @@ -85,5 +93,3 @@ Version avec base de données | |||
| 85 | Site bilingue (nécessite la base de données) | 93 | Site bilingue (nécessite la base de données) |
| 86 | 94 | ||
| 87 | Editeur tout AJAX (pas juste les images) | 95 | Editeur tout AJAX (pas juste les images) |
| 88 | |||
| 89 | Utilisation de l'éditeur sans recharger la page (en | ||
