summaryrefslogtreecommitdiff
path: root/view
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-02-17 18:13:00 +0100
committerpolo <ordipolo@gmx.fr>2022-02-17 18:13:00 +0100
commit787d03e48471ba62cd830379428f04d996f0b74b (patch)
treee9f98c7b9288c4530b50985688dd82622106ba2d /view
parent29df6f1362745eabf4fbcaedf309eb63795152fa (diff)
downloadmelaine-787d03e48471ba62cd830379428f04d996f0b74b.zip
model update
Diffstat (limited to 'view')
-rw-r--r--view/accueil.php46
-rw-r--r--view/album.php9
-rw-r--r--view/courriel.php18
-rw-r--r--view/discographie.php103
-rw-r--r--view/melaine.php255
-rw-r--r--view/menu.php146
-rw-r--r--view/nav.php24
-rw-r--r--view/password.php212
-rw-r--r--view/template-formulaires.php375
-rw-r--r--view/template.php182
10 files changed, 699 insertions, 671 deletions
diff --git a/view/accueil.php b/view/accueil.php
index a7b6b71..10e107f 100644
--- a/view/accueil.php
+++ b/view/accueil.php
@@ -1,24 +1,24 @@
1<?php 1<?php
2// view/accueil.php 2// view/accueil.php
3 3
4// variable $js 4// variable $js
5ob_start(); 5ob_start();
6?> 6?>
7 <script type="text/javascript" src="public/main.js" ></script> 7 <script type="text/javascript" src="public/main.js" ></script>
8 <script type="text/javascript" >versMenu();</script> 8 <script type="text/javascript" >versMenu();</script>
9<?php 9<?php
10$js = ob_get_clean(); 10$js = ob_get_clean();
11 11
12// variable $header 12// variable $header
13ob_start(); 13ob_start();
14echo "\n\n"; 14echo "\n\n";
15?> 15?>
16 <header> 16 <header>
17 <a class="no_underline" href="index.php?page=menu" > 17 <a class="no_underline" href="index.php?page=menu" >
18 <div id="bienvenue" > 18 <div id="bienvenue" >
19 <span class="police_titre" >Bienvenue sur le site de</span> 19 <span class="police_titre" >Bienvenue sur le site de</span>
20 </div> 20 </div>
21 </a> 21 </a>
22 </header> 22 </header>
23<?php 23<?php
24$header = ob_get_clean(); \ No newline at end of file 24$header = ob_get_clean(); \ No newline at end of file
diff --git a/view/album.php b/view/album.php
index 921efaf..783cfab 100644
--- a/view/album.php
+++ b/view/album.php
@@ -2,7 +2,7 @@
2// view/album.php 2// view/album.php
3 3
4// variable $css 4// variable $css
5// avec discographie.css 5// utilise discographie.css
6ob_start(); 6ob_start();
7?> 7?>
8 <link rel="stylesheet" type="text/css" href="public/discographie.css" /> 8 <link rel="stylesheet" type="text/css" href="public/discographie.css" />
@@ -10,6 +10,13 @@ ob_start();
10<?php 10<?php
11$css = ob_get_clean(); 11$css = ob_get_clean();
12 12
13// variable $js
14ob_start();
15?>
16 <script type="text/javascript" src="public/main.js" ></script>
17<?php
18$js = ob_get_clean();
19
13// variable $header 20// variable $header
14ob_start(); 21ob_start();
15echo "\n"; 22echo "\n";
diff --git a/view/courriel.php b/view/courriel.php
index ed5fe79..be3b1d7 100644
--- a/view/courriel.php
+++ b/view/courriel.php
@@ -1,10 +1,10 @@
1 <div id="courriel" > 1 <div id="courriel" >
2 <div> 2 <div>
3 <img src="public/timbre.png" alt="" ><br />Envoyez-moi un courriel à: <img src="public/courriel.png" > 3 <img src="public/timbre.png" alt="" ><br />Envoyez-moi un courriel à: <img src="public/courriel.png" >
4 </div> 4 </div>
5 5
6 <div id="courrielJS" > 6 <div id="courrielJS" >
7 <button onclick="clientCourriel();" >Avec mon logiciel<br />de messagerie</button> 7 <button onclick="clientCourriel();" >Avec mon logiciel<br />de messagerie</button>
8 <button onclick="copierAdresse();" >Copier l'adresse dans<br />le presse-papier</button> 8 <button onclick="copierAdresse();" >Copier l'adresse dans<br />le presse-papier</button>
9 </div> 9 </div>
10 </div> \ No newline at end of file 10 </div> \ No newline at end of file
diff --git a/view/discographie.php b/view/discographie.php
index d9bc6be..6d56854 100644
--- a/view/discographie.php
+++ b/view/discographie.php
@@ -10,7 +10,7 @@ ob_start();
10$css = ob_get_clean(); 10$css = ob_get_clean();
11 11
12 12
13//variable $js 13// variable $js
14ob_start(); 14ob_start();
15?> 15?>
16 <script type="text/javascript" src="public/main.js" ></script> 16 <script type="text/javascript" src="public/main.js" ></script>
@@ -43,41 +43,45 @@ $header = ob_get_clean();
43// variable $content 43// variable $content
44ob_start(); 44ob_start();
45?> 45?>
46 <aside> 46 <aside>
47 <div> 47 <div>
48 <p id="bouton_chronologie" >Chronologie</p> 48 <p id="bouton_chronologie" >Chronologie</p>
49 <div id="chronologie" > 49 <div id="chronologie" >
50 <!-- ajouter à chaque entrée une ancre et un lien soit vers l'ancre soit vers la page dédiée --> 50 <!-- ajouter à chaque entrée une ancre et un lien soit vers l'ancre soit vers la page dédiée -->
51<?php 51<?php
52for($i = count($albumsJSON) - 1; $i >= 0; $i--) 52//for($i = $Albums->fileListCount - 1; $i >= 0; $i--)
53//for($i = 0; $i < count($albumsJSON); $i++) 53for($i = 0; $i < $Albums->fileListCount; $i++)
54//foreach($albumsJSON as $oneAlbum) 54//foreach($albumsJSON as $oneAlbum)
55{ 55{
56 // menu dessous la mouette 56 // menu dessous la mouette
57 // comporte un lien si fichier html existe, sinon une ancre 57 // comporte un lien si fichier html existe, sinon une ancre
58?> 58?>
59 <p><a class="<?= $linkDiscoChrono[$i] ?>" href="index.php?<?= $lienAlbum[$i] ?>" ><?= $albumsJSON[$i][1] ?> - <?= $albumsJSON[$i][0] ?></a></p> 59 <p><a class="<?= $linkDiscoChrono[$i] ?>" href="index.php?<?= $lienAlbum[$i] ?>" ><?= $Albums->fileList[$i]['annee'] ?> - <?= $Albums->fileList[$i]['titre'] ?></a></p>
60<?php 60<?php
61} 61}
62?> 62?>
63 </div> 63 </div>
64 </div> 64 </div>
65 </aside> 65 </aside>
66 <section> 66 <section>
67<?php 67<?php
68// éditeur ou bouton "Nouvel album" 68// éditeur ou bouton "Nouvel album"
69if($_SESSION['admin'] == 1) 69if($_SESSION['admin'] == 1)
70{ 70{
71 if(isset($_GET['action']) && $_GET['action'] == 'edition' && $albumCode == '') 71 if(isset($_GET['action']) && $_GET['action'] == 'edition' && $fileCode == '')
72 { 72 {
73 $style = 'class="articleAvecEditeur"';
73?> 74?>
74 <h3>Ajouter un album</h3> 75 <article <?= $style ?>>
76 <h3>Ajouter un album</h3>
75<?= $editeurHTML ?> 77<?= $editeurHTML ?>
76<?php 78<?php
77 } 79 }
78 else 80 else
79 { 81 {
82 $style = '';
80?> 83?>
84 <article>
81 <p class="boutonAlbum" > 85 <p class="boutonAlbum" >
82 <a href="index.php?page=discographie&action=edition" > 86 <a href="index.php?page=discographie&action=edition" >
83 Nouvel album 87 Nouvel album
@@ -86,15 +90,31 @@ if($_SESSION['admin'] == 1)
86<?php 90<?php
87 } 91 }
88} 92}
93?>
94 </article>
95 <div id="articles">
96<?php
89 97
90// tableau des albums 98// tableau des albums
91for($i = count($albumsJSON) - 1; $i >= 0; $i--) 99//for($i = $Albums->fileListCount - 1; $i >= 0; $i--)
92//for($i = 0; $i < count($albumsJSON); $i++) 100for($i = 0; $i < $Albums->fileListCount; $i++)
93{ 101{
102 // article modifié sur fond coloré
103 if(isset($fileCode) && $Albums->fileList[$i]['fileCode'] == $fileCode)
104 {
105 $style = 'class="articleAvecEditeur"';
106 }
107 else
108 {
109 $style = 'class="articleSansEditeur"';
110 }
111?>
112 <article id="<?= $Albums->fileList[$i]['fileCode'] ?>" <?= $style ?>>
113<?php
94 // formulaires et éditeur 114 // formulaires et éditeur
95 // comparer le GET avec $albumsJSON[3] 115 if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1
96 if(isset($_GET['action']) && $_GET['action'] == 'edition' 116 && isset($_GET['action']) && $_GET['action'] == 'edition'
97 && $albumsJSON[$i][3] == $_GET['album_code']) 117 && $Albums->fileList[$i]['fileCode'] == $fileCode)
98 { 118 {
99 ?> 119 ?>
100 <h3>Modifier un album</h3> 120 <h3>Modifier un album</h3>
@@ -104,53 +124,54 @@ for($i = count($albumsJSON) - 1; $i >= 0; $i--)
104 // affichage normal 124 // affichage normal
105 else 125 else
106 { 126 {
107?>
108 <article id="<?= $albumsJSON[$i][0] ?>" >
109<?php
110 // mettre une adresse lorsqu'un fichier html existe 127 // mettre une adresse lorsqu'un fichier html existe
111 if($avecLien[$i]) 128 if($avecLien[$i])
112 { 129 {
113?> 130?>
114 <a href="index.php?<?= $lienAlbum[$i] ?>" > 131 <a href="index.php?<?= $lienAlbum[$i] ?>" >
115<?php 132<?php
116 } 133 }
117?> 134?>
118 <figure> 135 <figure>
119 <img class="vignette" src="data/discographie/images/<?= $albumsJSON[$i][2] ?>" alt="" > 136 <img class="vignette" src="data/discographie/images/<?= $Albums->fileList[$i]['pochette'] ?>" alt="" >
120 <figcaption><?= $albumsJSON[$i][0] ?><br><?= $albumsJSON[$i][1] ?></figcaption> 137 <figcaption><?= $Albums->fileList[$i]['titre'] ?><br><?= $Albums->fileList[$i]['annee'] ?></figcaption>
121 </figure> 138 </figure>
122<?php 139<?php
123 if($avecLien[$i]) 140 if($avecLien[$i])
124 { 141 {
125?> 142?>
126 </a> 143 </a>
127<?php 144<?php
128 } 145 }
129 // bouton 146 // bouton
130 if($_SESSION['admin'] == 1) 147 if($_SESSION['admin'] == 1)
131 { 148 {
132 ?> 149 ?>
133 <p> 150 <p>
134 <a href="index.php?<?= $lienBoutonModif[$i] ?>" > 151 <a href="index.php?<?= $lienBoutonModif[$i] ?>" >
135 Modifier cet article 152 Modifier l'album
136 </a> 153 </a>
137 &nbsp;<!-- un espace --> 154 <!-- &nbsp; --><!-- un espace -->
138 <a href="index.php?page=discographie&action=suppression&album_code=<?= $albumsJSON[$i][3] ?>" onclick="confirmerSuppression()" > 155 <a href="index.php?page=discographie&action=suppression&file_code=<?= $Albums->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" >
139 Supprimer cet article 156 <img src="public/icone_supprimer.png" >
140 </a> 157 </a>
141 </p> 158 </p>
142 <?php 159 <?php
143 } 160 }
144?> 161?>
145 </article> 162 <!-- </article> -->
146<?php 163<?php
147 164
148 // bouton pour modifier 165 // bouton pour modifier
149 if($_SESSION['admin'] == 1) 166 if($_SESSION['admin'] == 1)
150 {} 167 {}
151 } 168 }
169?>
170 </article>
171<?php
152} 172}
153?> 173?>
154 </section> 174 </div>
175 </section>
155<?php 176<?php
156$content = ob_get_clean(); 177$content = ob_get_clean();
diff --git a/view/melaine.php b/view/melaine.php
index 216857d..2325f5c 100644
--- a/view/melaine.php
+++ b/view/melaine.php
@@ -1,117 +1,138 @@
1<?php 1<?php
2// view/melaine.php 2// view/melaine.php
3 3
4// variable $css 4// variable $css
5ob_start(); 5ob_start();
6?> 6?>
7 <link rel="stylesheet" type="text/css" href="public/<?= $page_actuelle ?>.css" /> 7 <link rel="stylesheet" type="text/css" href="public/<?= $page_actuelle ?>.css" />
8 <link rel="stylesheet" type="text/css" href="public/donnees_hors_editeur.css" /> 8 <link rel="stylesheet" type="text/css" href="public/donnees_hors_editeur.css" />
9<?php 9<?php
10$css = ob_get_clean(); 10$css = ob_get_clean();
11 11
12 12
13//variable $js 13//variable $js
14ob_start(); 14ob_start();
15?> 15?>
16 <script type="text/javascript" src="public/main.js" ></script> 16 <script type="text/javascript" src="public/main.js" ></script>
17<?php 17<?php
18if(isset($_GET['action']) && $_GET['action'] == 'editor') 18if(isset($_GET['action']) && $_GET['action'] == 'editor')
19{ 19{
20 20
21 // bibliothèques JS ckeditor 21 // bibliothèques JS ckeditor
22?> 22?>
23 <script src="lib/ckeditor5/build/ckeditor.js"></script> 23 <script src="lib/ckeditor5/build/ckeditor.js"></script>
24<?php 24<?php
25} 25}
26$js = ob_get_clean(); 26$js = ob_get_clean();
27 27
28 28
29// variable $header 29// variable $header
30ob_start(); 30ob_start();
31echo "\n"; 31echo "\n";
32?> 32?>
33 <header> 33 <header>
34 <div id="titre" > 34 <div id="titre" >
35 <span class="police_titre" >Melaine Favennec</span> 35 <span class="police_titre" >Melaine Favennec</span>
36 </div> 36 </div>
37 <div id="photo" ></div> 37 <div id="photo" ></div>
38 </header> 38 </header>
39 <?php 39 <?php
40$header = ob_get_clean(); 40$header = ob_get_clean();
41 41
42 42
43// variable $content 43// variable $content
44ob_start(); 44ob_start();
45if($_SESSION['admin'] == 1) 45if($_SESSION['admin'] == 1)
46{ 46{
47 // à la place du bouton après rechargement 47 // à la place du bouton après rechargement
48 if(isset($_GET['action']) && $_GET['action'] == 'editor' && !isset($_GET['article'])) 48 if(isset($_GET['action']) && $_GET['action'] == 'editor' && !isset($_GET['file_code']))
49 { 49 {
50 echo("<p>Rédiger un nouvel article</p>"); 50 $style = 'class="articleAvecEditeur"';
51 echo($editeurHTML); // injection de template-editor.php 51?>
52 } 52 <div <?= $style ?>>
53 53 <h3>Rédiger un nouvel article</h3>
54 // bouton 54<?php
55 else 55
56 { 56
57?> 57 echo($editeurHTML); // injection de template-editor.php
58 <p class="boutonArticle" > 58 }
59 <a href="index.php?page=melaine&action=editor" > 59
60 Nouvel article 60 // bouton
61 </a> 61 else
62 </p> 62 {
63<?php 63?>
64 } 64 <div>
65} 65 <p class="boutonArticle" >
66 66 <a href="index.php?page=melaine&action=editor" >
67// on pourrait paginer avec des onglets contenant 5 ou 10 articles chacun 67 Nouvel article
68 68 </a>
69// tableau articles[] du dernier au premier (1 case = 1 article) 69 </p>
70$j = count($articles); 70<?php
71foreach ($articles as $article) 71 }
72{ 72?>
73 // la div invisible sert à la compensation des liens d'ancre # 73 </div>
74?> 74<?php
75 <div class="zoneVideNav" ></div> 75}
76 <article id="article<?= $j ?>" > 76
77<?php 77// on pourrait paginer avec des onglets de par exemple 10 articles
78 78
79 // remplacer un article par l'éditeur 79// tableau articles[] du plus récent au plus ancien
80 if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor' && isset($_GET['article']) && $_GET['article'] == $j) 80for($i = 0; $i < $Articles->fileListCount; $i++)
81 { 81{
82 // on pourrait utiliser le timedate, ou encore le nom de l'article 82 // la div invisible sert à la compensation des liens d'ancre #
83 echo("<p>Modification d'un article</p>"); 83
84 echo "\n"; 84 // article modifié sur fond coloré
85 85 if(isset($fileCode) && $Articles->fileList[$i]['fileCode'] == $fileCode)
86 echo($editeurHTML); // injection de template-editor.php 86 {
87 } 87 $style = 'class="articleAvecEditeur"';
88 88 }
89 // placer un article 89 else
90 else 90 {
91 { 91 $style = '';
92 // et voila 92 }
93 echo($article . "\n"); 93?>
94 94 <div class="zoneVideNav" ></div>
95 // bouton 95 <article id="<?= $Articles->fileList[$i]['fileCode'] ?>">
96 if($_SESSION['admin'] == 1) 96 <div <?= $style ?>>
97 { 97<?php
98 ?> 98
99 <p class="boutonArticle" > 99 // remplacer un article par l'éditeur
100 <a href="index.php?page=melaine&action=editor&article=<?= $j ?>#article<?= $j ?>" > 100 if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'editor' && isset($_GET['file_code'])
101 Modifier cet article 101 && $_GET['file_code'] == $Articles->fileList[$i]['fileCode']
102 </a> 102 )
103 &nbsp;<!-- un espace --> 103 {
104 <a href="index.php?page=melaine&action=suppression&article=<?= $j ?>" onclick="confirmerSuppression()" > 104 // on pourrait utiliser ici le timedate, ou encore le nom de l'article
105 Supprimer cet article 105?>
106 </a> 106 <h3>Modification d'un article</h3>
107 </p> 107<?php
108 <?php 108 echo($editeurHTML); // injection de template-editor.php
109 } 109 }
110 } 110
111 111 // placer un article
112?> 112 else
113 </article> 113 {
114<?php 114 // et voila
115 $j--; 115 echo($Articles->fileList[$i]['content'] . "\n");
116} 116
117$content = ob_get_clean(); 117 // bouton
118 if($_SESSION['admin'] == 1)
119 {
120 ?>
121 <p class="boutonArticle" >
122 <a href="index.php?page=melaine&action=editor&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>#<?= $Articles->fileList[$i]['fileCode'] ?>" >
123 Modifier cet article
124 </a>
125 &nbsp;<!-- un espace -->
126 <a href="index.php?page=melaine&action=suppression&file_code=<?= $Articles->fileList[$i]['fileCode'] ?>" onclick="confirmerSuppression()" >
127 Supprimer cet article
128 </a>
129 </p>
130 <?php
131 }
132 }
133?>
134 </div>
135 </article>
136<?php
137}
138$content = ob_get_clean();
diff --git a/view/menu.php b/view/menu.php
index 51476b4..c20acf9 100644
--- a/view/menu.php
+++ b/view/menu.php
@@ -1,74 +1,74 @@
1<?php 1<?php
2// view/menu.php 2// view/menu.php
3 3
4// variable $css 4// variable $css
5ob_start(); 5ob_start();
6?> 6?>
7 <link rel="stylesheet" type="text/css" href="public/<?= $page_actuelle ?>.css" /> 7 <link rel="stylesheet" type="text/css" href="public/<?= $page_actuelle ?>.css" />
8<?php 8<?php
9$css = ob_get_clean(); 9$css = ob_get_clean();
10 10
11//variable $js 11//variable $js
12ob_start(); 12ob_start();
13?> 13?>
14 <script type="text/javascript" src="public/main.js" ></script> 14 <script type="text/javascript" src="public/main.js" ></script>
15<?php 15<?php
16$js = ob_get_clean(); 16$js = ob_get_clean();
17 17
18// variable $header 18// variable $header
19ob_start(); 19ob_start();
20echo "\n\n"; 20echo "\n\n";
21?> 21?>
22 <header> 22 <header>
23 <div id="titre" > 23 <div id="titre" >
24 <span class="police_titre" >Choisissez une rubrique</span> 24 <span class="police_titre" >Choisissez une rubrique</span>
25 </div> 25 </div>
26 </header> 26 </header>
27 <?php 27 <?php
28$header = ob_get_clean(); 28$header = ob_get_clean();
29 29
30// variable $content 30// variable $content
31ob_start(); 31ob_start();
32echo "\n"; 32echo "\n";
33?> 33?>
34 <div id="contenu" > 34 <div id="contenu" >
35 <div id="colonne1" > 35 <div id="colonne1" >
36 <a href="index.php?page=liens" > 36 <a href="index.php?page=liens" >
37 <div id="canoe" ></div> 37 <div id="canoe" ></div>
38 </a> 38 </a>
39 39
40 <a href="index.php?page=presse" > 40 <a href="index.php?page=presse" >
41 <div id="fille_qui_tombe" ></div> 41 <div id="fille_qui_tombe" ></div>
42 </a> 42 </a>
43 43
44 <a href="index.php?page=melaine" > 44 <a href="index.php?page=melaine" >
45 <div id="pochette" ></div> 45 <div id="pochette" ></div>
46 </a> 46 </a>
47 47
48 <a href="index.php?page=ateliers" > 48 <a href="index.php?page=ateliers" >
49 <div id="cavalier" ></div> 49 <div id="cavalier" ></div>
50 </a> 50 </a>
51 51
52 <a href="index.php" > 52 <a href="index.php" >
53 <div id="pommes" ></div> 53 <div id="pommes" ></div>
54 </a> 54 </a>
55 </div> 55 </div>
56 56
57 <div id="colonne2" > 57 <div id="colonne2" >
58 <a href="index.php?page=concerts" > 58 <a href="index.php?page=concerts" >
59 <div id="sirene" ></div> 59 <div id="sirene" ></div>
60 </a> 60 </a>
61 61
62 <a href="index.php?page=peinture" > 62 <a href="index.php?page=peinture" >
63 <div id="mouette_ocean" ></div> 63 <div id="mouette_ocean" ></div>
64 </a> 64 </a>
65 65
66 <a href="index.php?page=archives" > 66 <a href="index.php?page=archives" >
67 <div id="blonde"></div> 67 <div id="blonde"></div>
68 </a> 68 </a>
69 69
70 <a id="hey_ho" href="index.php?page=discographie" ></a> 70 <a id="hey_ho" href="index.php?page=discographie" ></a>
71 </div> 71 </div>
72 </div> 72 </div>
73<?php 73<?php
74$content = ob_get_clean(); \ No newline at end of file 74$content = ob_get_clean(); \ No newline at end of file
diff --git a/view/nav.php b/view/nav.php
index 80d73b9..40be1cb 100644
--- a/view/nav.php
+++ b/view/nav.php
@@ -1,13 +1,13 @@
1 <nav> 1 <nav>
2 <ul id="ul_menu"> 2 <ul id="ul_menu">
3 <li><a href="index.php?page=menu" <?php if($page_actuelle == "menu") {echo('id="actuelle" ');} ?>>Menu</a></li> 3 <li><a href="index.php?page=menu" <?php if($page_actuelle == "menu") {echo('id="actuelle" ');} ?>>Menu</a></li>
4 <li><a href="index.php?page=melaine" <?php if($page_actuelle == "melaine") {echo('id="actuelle" ');} ?>>Melaine</a></li> 4 <li><a href="index.php?page=melaine" <?php if($page_actuelle == "melaine") {echo('id="actuelle" ');} ?>>Melaine</a></li>
5 <li><a href="index.php?page=discographie" <?php if($page_actuelle == "discographie") {echo('id="actuelle" ');} ?>>Discographie</a></li> 5 <li><a href="index.php?page=discographie" <?php if($page_actuelle == "discographie") {echo('id="actuelle" ');} ?>>Discographie</a></li>
6 <li><a href="index.php?page=concerts" <?php if($page_actuelle == "concerts") {echo('id="actuelle" ');} ?>>Concerts</a></li> 6 <li><a href="index.php?page=concerts" <?php if($page_actuelle == "concerts") {echo('id="actuelle" ');} ?>>Concerts</a></li>
7 <li><a href="index.php?page=presse" <?php if($page_actuelle == "presse") {echo('id="actuelle" ');} ?>>La Presse</a></li> 7 <li><a href="index.php?page=presse" <?php if($page_actuelle == "presse") {echo('id="actuelle" ');} ?>>La Presse</a></li>
8 <li><a href="index.php?page=ateliers" <?php if($page_actuelle == "ateliers ") {echo('id="actuelle" ');} ?>>Ateliers</a></li> 8 <li><a href="index.php?page=ateliers" <?php if($page_actuelle == "ateliers ") {echo('id="actuelle" ');} ?>>Ateliers</a></li>
9 <li><a href="index.php?page=liens" <?php if($page_actuelle == "liens") {echo('id="actuelle" ');} ?>>Liens</a></li> 9 <li><a href="index.php?page=liens" <?php if($page_actuelle == "liens") {echo('id="actuelle" ');} ?>>Liens</a></li>
10 <li><a href="index.php?page=peinture" <?php if($page_actuelle == "peinture") {echo('id="actuelle" ');} ?>>Peinture</a></li> 10 <li><a href="index.php?page=peinture" <?php if($page_actuelle == "peinture") {echo('id="actuelle" ');} ?>>Peinture</a></li>
11 <li><a href="index.php?page=archives" <?php if($page_actuelle == "archives") {echo('id="actuelle" ');} ?>>Archives</a></li> 11 <li><a href="index.php?page=archives" <?php if($page_actuelle == "archives") {echo('id="actuelle" ');} ?>>Archives</a></li>
12 </ul> 12 </ul>
13 </nav> \ No newline at end of file 13 </nav> \ No newline at end of file
diff --git a/view/password.php b/view/password.php
index c315610..2dabcdd 100644
--- a/view/password.php
+++ b/view/password.php
@@ -1,107 +1,107 @@
1<?php 1<?php
2// view/password.php 2// view/password.php
3// 3//
4// ce fichier contient le HTML de deux pages du site: 4// ce fichier contient le HTML de deux pages du site:
5// - connexion au mode admin 5// - connexion au mode admin
6// - changement de mot de passe 6// - changement de mot de passe
7 7
8// formulaire création du mot de passe 8// formulaire création du mot de passe
9ob_start(); 9ob_start();
10?> 10?>
11 <form class="connexionFormulaire" method="post" action="index.php" > 11 <form class="connexionFormulaire" method="post" action="index.php" >
12 <label for="motdepasse" >Mot de passe:</label> 12 <label for="motdepasse" >Mot de passe:</label>
13 <input type="password" name="motdepasse" autofocus required > 13 <input type="password" name="motdepasse" autofocus required >
14 <input type="submit" value="Valider" > 14 <input type="submit" value="Valider" >
15 </form> 15 </form>
16<?php 16<?php
17$formulaireNouveauMDP = ob_get_clean(); 17$formulaireNouveauMDP = ob_get_clean();
18 18
19// formulaire connexion 19// formulaire connexion
20ob_start(); 20ob_start();
21?> 21?>
22 <form class="connexionFormulaire" method="post" action="index.php?page=connexion&from=<?= $_GET['from'] ?>" > 22 <form class="connexionFormulaire" method="post" action="index.php?page=connexion&from=<?= $_GET['from'] ?>" >
23 <label for="motdepasse" >Mot de passe:</label> 23 <label for="motdepasse" >Mot de passe:</label>
24 <input type="password" name="motdepasse" autofocus required > 24 <input type="password" name="motdepasse" autofocus required >
25 <input type="submit" value="Valider" > 25 <input type="submit" value="Valider" >
26 </form> 26 </form>
27<?php 27<?php
28$formulaireConnexion = ob_get_clean(); 28$formulaireConnexion = ob_get_clean();
29 29
30// formulaire changement de mot de passe 30// formulaire changement de mot de passe
31// vérification de l'ancien et choix du nouveau à taper deux fois dont une à l'aveugle 31// vérification de l'ancien et choix du nouveau à taper deux fois dont une à l'aveugle
32ob_start(); 32ob_start();
33?> 33?>
34 <form class="connexionFormulaire" method="post" action="index.php?from=<?= $_GET['from'] ?>&action=modif_mdp" > 34 <form class="connexionFormulaire" method="post" action="index.php?from=<?= $_GET['from'] ?>&action=modif_mdp" >
35 <label for="motdepasse" >Ancien mot de passe:</label> 35 <label for="motdepasse" >Ancien mot de passe:</label>
36 <input type="password" name="ancienMotdepasse" autofocus required ><br /><br /> 36 <input type="password" name="ancienMotdepasse" autofocus required ><br /><br />
37 <label for="motdepasse" >Nouveau mot de passe:</label> 37 <label for="motdepasse" >Nouveau mot de passe:</label>
38 <input type="password" name="nouveauMotdepasse" required > 38 <input type="password" name="nouveauMotdepasse" required >
39 <br /><br /> 39 <br /><br />
40 <input type="submit" value="Valider" > 40 <input type="submit" value="Valider" >
41 </form> 41 </form>
42<?php 42<?php
43$formulaireModifMDP = ob_get_clean(); 43$formulaireModifMDP = ob_get_clean();
44 44
45 45
46// en-tête 46// en-tête
47ob_start(); 47ob_start();
48?> 48?>
49<!DOCTYPE html> 49<!DOCTYPE html>
50 50
51<html lang="fr" > 51<html lang="fr" >
52 <head> 52 <head>
53 <meta charset="utf-8" /> 53 <meta charset="utf-8" />
54 <title><?= $title ?></title> 54 <title><?= $title ?></title>
55 55
56 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> --> 56 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> -->
57 <link rel="icon" type="image/png" href="public/mouette-logo.png" > 57 <link rel="icon" type="image/png" href="public/mouette-logo.png" >
58 <link rel="stylesheet" type="text/css" href="public/normalize.css"> 58 <link rel="stylesheet" type="text/css" href="public/normalize.css">
59 <link rel="stylesheet" type="text/css" href="public/accueil.css" /> 59 <link rel="stylesheet" type="text/css" href="public/accueil.css" />
60 <script type="text/javascript" src="public/main.js" ></script> 60 <script type="text/javascript" src="public/main.js" ></script>
61 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 61 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
62 </head> 62 </head>
63 63
64 <body> 64 <body>
65 <div id="bloc_page" > 65 <div id="bloc_page" >
66 <h2 class="connexionTitre" ><?= $title ?></h2> 66 <h2 class="connexionTitre" ><?= $title ?></h2>
67 <p class="connexionTitre" ><?= $subHeading ?></p> 67 <p class="connexionTitre" ><?= $subHeading ?></p>
68<?php 68<?php
69$header = ob_get_clean(); 69$header = ob_get_clean();
70 70
71 71
72// message d'erreur 72// message d'erreur
73$erreurMDP = '<p class="avertissement" >Mauvais mot de passe</p>'; 73$erreurMDP = '<p class="avertissement" >Mauvais mot de passe</p>';
74 74
75 75
76// confirmation modification du mot de passe 76// confirmation modification du mot de passe
77ob_start(); 77ob_start();
78?> 78?>
79<script type="text/javascript" >nouveauMotdepasse('<?= $_GET["from"] ?>');</script> 79<script type="text/javascript" >nouveauMotdepasse('<?= $_GET["from"] ?>');</script>
80<noscript> 80<noscript>
81 <p class="avertissement" >Le mot de passe a été modifié<br /> 81 <p class="avertissement" >Le mot de passe a été modifié<br />
82 <a href="index.php" >Retour au site.</a><br/></p> 82 <a href="index.php" >Retour au site.</a><br/></p>
83</noscript> 83</noscript>
84<?php 84<?php
85$message = ob_get_clean(); 85$message = ob_get_clean();
86 86
87 87
88// avertissement 88// avertissement
89ob_start(); 89ob_start();
90?> 90?>
91 <p class="avertissement" >Rappel de sécurité<br />Vous n'utilisez pas votre propre ordinateur ou téléphone? Utilisez la navigation privée!</p> 91 <p class="avertissement" >Rappel de sécurité<br />Vous n'utilisez pas votre propre ordinateur ou téléphone? Utilisez la navigation privée!</p>
92<?php 92<?php
93$warning = ob_get_clean(); 93$warning = ob_get_clean();
94 94
95 95
96// pied de page 96// pied de page
97ob_start(); 97ob_start();
98?> 98?>
99 <p class="connexionFooter" > 99 <p class="connexionFooter" >
100 <i>N'oubliez de cliquer sur "déconnexion" quand vous aurez fini.</i><br /> 100 <i>N'oubliez de cliquer sur "déconnexion" quand vous aurez fini.</i><br />
101 <a href="index.php?page=<?= $_GET['from'] ?>" >Retour à la page précédente</a> 101 <a href="index.php?page=<?= $_GET['from'] ?>" >Retour à la page précédente</a>
102 </p> 102 </p>
103 </div> 103 </div>
104 </body> 104 </body>
105</html> 105</html>
106<?php 106<?php
107$footer = ob_get_clean(); \ No newline at end of file 107$footer = ob_get_clean(); \ No newline at end of file
diff --git a/view/template-formulaires.php b/view/template-formulaires.php
index e864719..a3dc9cd 100644
--- a/view/template-formulaires.php
+++ b/view/template-formulaires.php
@@ -1,199 +1,178 @@
1<?php 1<?php
2// view/template-formulaire.php 2// view/template-formulaire.php
3 3
4// voici la partie HTML et javascript du ckeditor, 4// voici la partie HTML et javascript du ckeditor:
5// elle permette d'insérer l'éditeur dans la page avec un formulaire qui comporte 4 éléments: 5// on crée un formulaire <form> avec zones de saisie et boutons
6// barre d'outils, zone de saisie, formulaire caché, bouton "valider" 6// l'éditeur est inséré par lib/ckeditor5/build/ckeditor.js
7 7// en remplaçant les balises <textarea>
8// le formulaire est presque classique, en effet on utilise le ckeditor 5 dans sa version "Document" (ou DecoupledEditor): 8
9// - avantage: plus de possibilité dans la barre d'outils (se rapproche d'un traitement de texte) 9// il est en version "Classic" customizée pour pouvoir ressembler à la version "DecoupledEditor", on peut le créer ici:
10// - inconvénient: on ne peut utiliser la balise <textarea> qu'on remplace par une <div> 10// https://ckeditor.com/ckeditor-5/online-builder/
11 11// la version DecoupledEditor ne peut remplacer une <textarea>, il faut une <div>, ce qui interdit la méthode 1) ci-dessous
12// pour pouvoir envoyer le contenu dans le POST, on a deux possibilité: 12
13// - savoir coder en javascript ! et donc faire de l'AJAX, dans ce cas on n'a même plus besoin de formulaire, le contenu est envoyé au serveur au fur et à mesure! ce sera l'objet d'une future amélioration 13// pour envoyer les données au serveur, on a trois méthodes:
14// - utiliser l'astuce du formulaire caché ! 14// 1) facile: le JS de la bibliothèque remplace la <textarea> par l'éditeur, noter que c'est impossible avec la version DecoupledEditor du ckeditor5, d'ou le choix la "custom"
15 15// 2) moins facile; technique du formulaire caché (l'éditeur remplace une <div>), à la validation, du JS (appelé avec onload="") place les données dans l'<input> caché duquel part le POST
16// le javascript place les données dans le formulaire caché 16// 3) méthode AJAX (compliquée): le formulaire ni le bouton "valider" ne sont plus nécessaires et l'enregistrement des données est immédiat
17// avec la fonction envoiDonnees(), les données se retrouvent dans une <input> et sont donc envoyées avec par la POST (haha) 17
18 18
19 19// falsification de requête inter-site - CSRF
20// variable $inputsAlbum (page discographie uniquement) 20// à faire plus tard
21// note: on ne peut préremplir le champ input texte 21
22// solution: on affiche le nom du fichier, si l'utilisateur en télécharge un autre, on le remplace 22
23ob_start(); 23// variable $inputsAlbum (page discographie uniquement)
24?> 24// attention: on ne peut préremplir le champ input file
25 <p><i>Infos qui seront affichées sur cette page:</i></p> 25// solution: on affiche le nom du fichier, si l'utilisateur en télécharge un autre, on le remplace;
26 <label for="titre" >Titre</label> 26// il devient donc impossible de n'avoir aucun fichier
27 <input type="text" name="titre" value="<?= $vignette[0] ?>" required ><br /> 27ob_start();
28 <label for="annee" >Année</label> 28?>
29 <input type="text" name="annee" value="<?= $vignette[1] ?>" required ><br /> 29 <img class="imageFormulaire" src="<?= $imageFormulaire ?>" >
30 <label for="pochette" >Pochette du disque (jpg ou png) : <?= $vignette[2] ?></label><br/> 30 <br/>
31 <input type="file" name="upload" > 31 <p><i>Infos qui seront affichées sur cette page:</i></p>
32 <br /><br /> 32 <label for="titre" >Titre</label>
33<?php 33 <input type="text" name="titre" value="<?= $vignette[0] ?>" required ><br />
34$inputsAlbum = ob_get_clean(); 34 <label for="annee" >Année</label>
35 35 <input type="text" name="annee" value="<?= $vignette[1] ?>" required ><br />
36 36 <label for="pochette" >Pochette du disque (jpg ou png) : <?= $vignette[2] ?></label><br/>
37// variable $editeurHTML 37 <input type="file" name="upload" ><br /><br /><br />
38ob_start(); 38<?php
39?> 39$inputsAlbum = ob_get_clean();
40 40
41 <div class="conteneur_article" > 41
42 <form action="index.php?page=<?= $page_actuelle ?>&article=<?= $album_code ?>&action=submit" method="post" enctype="multipart/form-data" > 42// variable $editeurHTML
43<?php 43ob_start();
44if($page_actuelle == 'discographie') 44?>
45{ 45
46 echo($inputsAlbum . "<p><i>Infos qui seront affichées dans la page spécifique à cet album:</i></p>"); 46 <div class="conteneur_article" >
47} 47 <form action="index.php?page=<?= $page_actuelle ?><?= $fileCodeArgument ?>&action=submit" method="post" enctype="multipart/form-data" >
48?> 48<?php
49 49if($page_actuelle == 'discographie')
50 <textarea id="editor" name="contenu" ></textarea> 50{
51<?php 51 echo($inputsAlbum . "<p><i>Infos qui seront affichées dans la page spécifique à cet album:</i></p>");
52// falsification de requête inter-site 52}
53// on ajoute un formulaire caché avec une valeur aléatoire cryptée utilisable une seule fois (=jeton) 53?>
54 54
55// "Vous pouvez rendre chaque jeton utilisable une seule fois et ainsi éviter de rejouer plusieurs fois la même requête. 55 <textarea id="editor" name="contenu" ></textarea>
56// Les jetons sont stockés dans le back-office. 56 <input class="boutonSubmitEditeur" type="submit" value="Valider" />
57// Une rotation des jetons est effectuée quand le nombre maximum a été atteint, les plus vieux en premier. 57 <a class="boutonAnnuler" href="index.php?page=<?= $page_actuelle ?>" >
58// Chaque jeton peut être lié à une URL spécifique. 58 <input type="button" value="Annuler" />
59// Si un jeton est intercepté, il ne peut pas être utilisé dans un autre contexte. 59 </a>
60// Si besoin, les jetons peuvent être attachés à une adresse IP spécifique. 60
61// Depuis la version v2.1, les jetons peuvent être réutilisés (par exemple pour les requêtes AJAX). 61 <script>
62// Si vous n’utilisez pas un framework qui gère la protection CSRF pour vous, jetez un oeil à Anti-CSRF." 62 let editor; // variable utilisable depuis une fonction
63 63
64// une bibli qui fait ça: https://github.com/paragonie/anti-csrf 64 // ATTENTION: si l'éditeur ne fonctionne pas, empêcher qu'on puisse cliquer sur Valider!
65?> 65 // Il y a aussi des paramètres dans le fichier de config: ckeditor/webpack.config.js
66 66 ClassicEditor
67 <input class="boutonSubmitEditeur" type="submit" value="Valider" onclick="envoiDonnees();" /> 67 .create( document.querySelector( '#editor' ),{
68 68 language: 'fr',
69 <script> 69
70 let editor; // variable utilisable depuis une fonction 70 // barre d'outils à adapter au "custom build"
71 71 toolbar: {
72 // code exécuté à la validation du formulaire 72 items: [ 'undo', 'redo', 'selectAll', '|', 'heading', '|', 'alignment', 'bulletedList', 'numberedList', 'todoList', 'blockQuote', 'horizontalLine', '-', 'bold', 'italic', 'underline',
73 function envoiDonnees() 73 //'strikethrough',
74 { 74 '|',
75 // supprimer le positionnement absolu de l'iframe 75 //'fontFamily',
76 //~ let balisesIframe = document.getElementsByTagName("iframe"); 76 'fontColor', 'fontSize', 'highlight', '|', 'imageInsert', 'link',
77 //~ for(var i = 0; i < balisesIframe.length; i++) 77 //'htmlEmbed',
78 //~ { 78 //'mediaEmbed',
79 //~ alert(balisesIframe[i].getAttribute("style")); // affiche le CSS 79 'insertTable'
80 //~ balisesIframe[i].removeAttribute("style"); 80 //'|', 'textPartLanguage'
81 //~ alert(balisesIframe[i].getAttribute("style")); // affiche null 81 ],
82 //~ } 82 // multiligne automatique (le '-' dans la liste permet de choisir l'endroit où couper)
83 } 83 shouldNotGroupWhenFull: true
84 84
85 // ATTENTION: si l'éditeur ne fonctionne pas, empêcher qu'on puisse cliquer sur Valider! 85 // noter que 'fontFamily' ne comporte que des polices microsoft => problèmes de droits?
86 // Il y a aussi des paramètres dans le fichier de config: ckeditor/webpack.config.js 86 // de plus, il faut que le navigateur connaisse toutes les polices
87 ClassicEditor 87 },
88 .create( document.querySelector( '#editor' ),{ 88
89 language: 'fr', 89 // barre d'outils dans une image
90 90 image: {
91 // barre d'outils à adapter au build 91 toolbar: [
92 toolbar: { 92 'imageTextAlternative',
93 items: [ 'undo', 'redo', 'selectAll', '|', 'heading', '|', 'alignment', 'bulletedList', 'numberedList', 'todoList', 'blockQuote', 'horizontalLine', '-', 'bold', 'italic', 'underline', 93 'imageStyle:full',
94 //'strikethrough', 94 'imageStyle:side',
95 '|', 95 'linkImage'
96 //'fontFamily', 96 ]
97 'fontColor', 'fontSize', 'highlight', '|', 'imageInsert', 'link', 97 },
98 //'htmlEmbed', 98
99 //'mediaEmbed', 99 // barre d'outils dans un tableau
100 'insertTable' 100 table: {
101 //'|', 'textPartLanguage' 101 contentToolbar: [
102 ], 102 'tableColumn',
103 // multiligne automatique (le '-' dans la liste permet de choisir l'endroit où couper) 103 'tableRow',
104 shouldNotGroupWhenFull: true 104 'mergeTableCells',
105 105 //'tableCellProperties',
106 // noter que 'fontFamily' ne comporte que des polices microsoft => problèmes de droits? 106 'tableProperties'
107 // de plus, il faut que le navigateur connaisse toutes les polices 107 ]
108 }, 108 },
109 109
110 // barre d'outils dans une image 110 // plugin code HTML
111 image: { 111 // pour coller le code HTML "embed" proposé par certains sites
112 toolbar: [ 112
113 'imageTextAlternative', 113 // media embarqué (audio, vidéo, carte)
114 'imageStyle:full', 114 //mediaEmbed: {
115 'imageStyle:side', 115 //previewsInData: true,
116 'linkImage' 116 // vaut "false" par defaut, on crée la balise non standard <oembed url="" > // https://oembed.com/
117 ] 117 // qui nécessite un traitement (en JS ou côté serveur) en utilisant le lien à l'intérieur
118 }, 118 // avec "true", on crée la balise <iframe> qui sert à insérer une page HTML dans une autre,
119 119 // notre "embarquement de média" devrit donc réussir quelque soit le site
120 // barre d'outils dans un tableau 120 // c'est plus simple, il ne reste plus qu'à ajuster le contenu avec du CSS (important)
121 table: { 121 // on doit supprimer le positionnement absolu qui fait que l'iframe se place par dessus le reste et adapter la taille de l'élément
122 contentToolbar: [ 122
123 'tableColumn', 123 // en outre, le plugin mediaEmbed (dans l'éditeur), tout comme la balise "iframe" (hors éditeur),
124 'tableRow', 124 // permettent d'afficher un aperçu (preview): une image avec un bouton lecture dessus
125 'mergeTableCells', 125 // cette image est envoyée imédiatement par le serveur, et le contenu après un clic dessus
126 //'tableCellProperties', 126 //
127 'tableProperties' 127 //},
128 ] 128
129 }, 129 // images
130 130 // https://ckeditor.com/docs/ckeditor5/latest/features/image-upload/simple-upload-adapter.html
131 // plugin code HTML 131 // le plugin "image upload" s'occupe est la partie graphique, il crée un objet "createLoader",
132 // pour coller le code HTML "embed" proposé par certains sites 132 // le plugin "simple upload adapter" est la classe qui communique avec le serveur au moyen de requêtes AJAX
133 133 // il attend du serveur une réponse au format .json contenant l'adresse où est stockée l'image:
134 // media embarqué (audio, vidéo, carte) 134 //{
135 //mediaEmbed: { 135 // "url": "https://example.com/images/foo.jpg"
136 //previewsInData: true, 136 //}
137 // vaut "false" par defaut, on crée la balise non standard <oembed url="" > // https://oembed.com/ 137 // cette url sert à deux choses:
138 // qui nécessite un traitement (en JS ou côté serveur) en utilisant le lien à l'intérieur 138 // - à télécharger immédiatement l'image envoyée pour la placer dans l'éditeur
139 // avec "true", on crée la balise <iframe> qui sert à insérer une page HTML dans une autre, 139 // - à inclure l'adresse de l'image dans le HTML produit par l'éditeur
140 // notre "embarquement de média" devrit donc réussir quelque soit le site 140 simpleUpload: {
141 // c'est plus simple, il ne reste plus qu'à ajuster le contenu avec du CSS (important) 141 uploadUrl: 'index.php?action=upload_image&page=<?= $page_actuelle ?>',
142 // on doit supprimer le positionnement absolu qui fait que l'iframe se place par dessus le reste et adapter la taille de l'élément 142 // noter qu'il est possible (parce que souhaitable je ne pense pas) d'envoyer une requête AJAX
143 143 // en indiquant une adresse "statique" du type: fichier.txt ou .xml, jpg, png, etc,
144 // en outre, le plugin mediaEmbed (dans l'éditeur), tout comme la balise "iframe" (hors éditeur), 144
145 // permettent d'afficher un aperçu (preview): une image avec un bouton lecture dessus 145 // Headers supplémentaires envoyés avec la requête
146 // cette image est envoyée imédiatement par le serveur, et le contenu après un clic dessus 146 // c'est ici qu'on installe les mécanismes de sécurités comme l'authentification et la protection au CSRF
147 // 147 headers: {
148 //}, 148 'X-CSRF-TOKEN': 'CSRF-Token',
149 149 Authorization: 'Bearer <JSON Web Token>'
150 // images 150 }
151 // https://ckeditor.com/docs/ckeditor5/latest/features/image-upload/simple-upload-adapter.html 151 },
152 // le plugin "image upload" s'occupe est la partie graphique, il crée un objet "createLoader", 152 // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff
153 // le plugin "simple upload adapter" est la classe qui communique avec le serveur au moyen de requêtes AJAX 153 // le svg n'est pas dans la liste, pour raison de sécurité apparemment, il parait qu'on peut mettre du javascript à l'intérieur
154 // il attend du serveur une réponse au format .json contenant l'adresse où est stockée l'image: 154 // ce plugin est simple (JS pur) et n'oblige pas le serveur à disposer de l'extension GD
155 //{ 155 // niveau perfs, on garde le choix d'utiler GD ou imagemagick ou un système d'onglets
156 // "url": "https://example.com/images/foo.jpg" 156
157 //} 157 // plugin autosave
158 // cette url sert à deux choses: 158 } )
159 // - à télécharger immédiatement l'image envoyée pour la placer dans l'éditeur 159
160 // - à inclure l'adresse de l'image dans le HTML produit par l'éditeur 160 .then( newEditor => {
161 simpleUpload: { 161 editor = newEditor;
162 uploadUrl: 'index.php?action=upload_image&page=<?= $page_actuelle ?>', 162
163 // noter qu'il est possible (parce que souhaitable je ne pense pas) d'envoyer une requête AJAX 163 // obtenir la liste des éléments disponibles pour la barre d'outils
164 // en indiquant une adresse "statique" du type: fichier.txt ou .xml, jpg, png, etc, 164 //alert(Array.from( editor.ui.componentFactory.names() ));
165 165 // obtenir la liste des plugins disponibles:
166 // Headers supplémentaires envoyés avec la requête 166 //alert(ClassicEditor.builtinPlugins.map( plugin => plugin.pluginName ));
167 // c'est ici qu'on installe les mécanismes de sécurités comme l'authentification et la protection au CSRF 167
168 headers: { 168 var initial = '<?= $texte ?>';
169 'X-CSRF-TOKEN': 'CSRF-Token', 169 editor.setData(initial);
170 Authorization: 'Bearer <JSON Web Token>' 170 } )
171 } 171 .catch( error => {
172 }, 172 console.error( error );
173 // formats acceptés par défaut: jpeg, png, gif, bmp, webp, tiff 173 } );
174 // le svg n'est pas dans la liste, pour raison de sécurité apparemment, il parait qu'on peut mettre du javascript à l'intérieur 174 </script>
175 // ce plugin est simple (JS pur) et n'oblige pas le serveur à disposer de l'extension GD 175 </form>
176 // niveau perfs, on garde le choix d'utiler GD ou imagemagick ou un système d'onglets 176 </div>
177 177<?php
178 // plugin autosave
179 } )
180
181 .then( newEditor => {
182 editor = newEditor;
183
184 // obtenir la liste des éléments disponibles pour la barre d'outils
185 //alert(Array.from( editor.ui.componentFactory.names() ));
186 // obtenir la liste des plugins disponibles:
187 //alert(ClassicEditor.builtinPlugins.map( plugin => plugin.pluginName ));
188
189 var initial = '<?= $texte ?>';
190 editor.setData(initial);
191 } )
192 .catch( error => {
193 console.error( error );
194 } );
195 </script>
196 </form>
197 </div>
198<?php
199$editeurHTML = ob_get_clean(); \ No newline at end of file 178$editeurHTML = ob_get_clean(); \ No newline at end of file
diff --git a/view/template.php b/view/template.php
index a14555d..aeb157a 100644
--- a/view/template.php
+++ b/view/template.php
@@ -1,92 +1,92 @@
1<!DOCTYPE html> 1<!DOCTYPE html>
2 2
3<html lang="fr" > 3<html lang="fr" >
4 <head> 4 <head>
5 <meta charset="utf-8" /> 5 <meta charset="utf-8" />
6 <title><?= $title ?></title> 6 <title><?= $title ?></title>
7 7
8 <!-- partie que Melaine doit écrire --> 8 <!-- partie que Melaine doit écrire -->
9 <meta name="description" content="" /> 9 <meta name="description" content="" />
10 10
11 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> --> 11 <!-- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /> -->
12 <link rel="icon" type="image/png" href="public/mouette-logo.png" > 12 <link rel="icon" type="image/png" href="public/mouette-logo.png" >
13 <link rel="stylesheet" type="text/css" href="public/normalize.css"> 13 <link rel="stylesheet" type="text/css" href="public/normalize.css">
14 <link rel="stylesheet" type="text/css" href="public/accueil.css" /> 14 <link rel="stylesheet" type="text/css" href="public/accueil.css" />
15<?php 15<?php
16if(isset($css)) // fichiers CSS supplémentaires 16if(isset($css)) // fichiers CSS supplémentaires
17{ 17{
18 echo($css); 18 echo($css);
19} 19}
20 20
21if(isset($js)) // fonctions dans main.js puis appel des fonctions 21if(isset($js)) // fonctions dans main.js puis appel des fonctions
22{ 22{
23 echo($js); 23 echo($js);
24} 24}
25?> 25?>
26 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 26 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
27 </head> 27 </head>
28 28
29 <body> 29 <body>
30 <div id="bloc_page" > 30 <div id="bloc_page" >
31<?php 31<?php
32echo "\n"; 32echo "\n";
33require("view/nav.php"); 33require("view/nav.php");
34echo "\n"; 34echo "\n";
35 35
36// variables obtenues avec le buffer 36// variables obtenues avec le buffer
37echo($header); 37echo($header);
38?> 38?>
39 39
40 <div id="contenu" > 40 <div id="contenu" >
41<?php 41<?php
42echo($content); 42echo($content);
43?> 43?>
44 </div> 44 </div>
45<?php 45<?php
46 46
47// section courriel sur toutes les pages sauf accueil 47// section courriel sur toutes les pages sauf accueil
48if($page_actuelle != "accueil") 48if($page_actuelle != "accueil")
49{ 49{
50 echo "\n"; 50 echo "\n";
51 require("view/courriel.php"); 51 require("view/courriel.php");
52 echo "\n\n"; 52 echo "\n\n";
53} 53}
54 54
55// lien vers le mode admin 55// lien vers le mode admin
56if($_SESSION['admin'] == 0) 56if($_SESSION['admin'] == 0)
57{ 57{
58?> 58?>
59 <div id="lienModeAdmin" > 59 <div id="lienModeAdmin" >
60 <p><a href="index.php?page=connexion&from=<?= $page_actuelle ?>" >Mode Administrateur</a></p> 60 <p><a href="index.php?page=connexion&from=<?= $page_actuelle ?>" >Mode Administrateur</a></p>
61 </div> 61 </div>
62<?php 62<?php
63} 63}
64 64
65// actions en mode admin 65// actions en mode admin
66if($_SESSION['admin'] == 1) 66if($_SESSION['admin'] == 1)
67{ 67{
68?> 68?>
69 <!-- zone superposée par les commandes du mode admin --> 69 <!-- zone superposée par les commandes du mode admin -->
70 <div class="zoneVideAdmin" ></div> 70 <div class="zoneVideAdmin" ></div>
71 71
72 <div id="modeAdmin" > 72 <div id="modeAdmin" >
73 <p>Vous êtes en mode administrateur. 73 <p>Vous êtes en mode administrateur.
74 <a id="options" >Options</a> 74 <a id="options" >Options</a>
75 <a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a> 75 <a href="index.php?page=<?= $page_actuelle ?>&action=deconnexion" >Déconnexion</a>
76 </p> 76 </p>
77 <div> 77 <div>
78 <p><a href="index.php?from=<?= $page_actuelle ?>&action=modif_mdp" > 78 <p><a href="index.php?from=<?= $page_actuelle ?>&action=modif_mdp" >
79 Changer le mot de passe de connexion.</a></p> 79 Changer le mot de passe de connexion.</a></p>
80 <p><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" > 80 <p><a href="index.php?from=<?= $page_actuelle ?>&action=sauvegarde" >
81 Sauvegarder les données de tout le site.</a></p> 81 Sauvegarder les données de tout le site.</a></p>
82 <p><a href="index.php?from=<?= $page_actuelle ?>&action=restauration" >Restaurer les données avec une sauvegarde.</a></p> 82 <p><a href="index.php?from=<?= $page_actuelle ?>&action=restauration" >Restaurer les données avec une sauvegarde.</a></p>
83 <p><a href="melainePHP.zip" > 83 <p><a href="melainePHP.zip" >
84 Télécharger le code PHP pour migration.</a></p> 84 Télécharger le code PHP pour migration.</a></p>
85 </div> 85 </div>
86 </div> 86 </div>
87<?php 87<?php
88} 88}
89?> 89?>
90 </div> 90 </div>
91 </body> 91 </body>
92</html> \ No newline at end of file 92</html> \ No newline at end of file