summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-03-28 03:45:38 +0200
committerpolo <ordipolo@gmx.fr>2022-03-28 03:45:38 +0200
commit4873117ec6aeb86ef169cbf8750123ca24041cdf (patch)
tree7f8ec95171e74d03d9cd9a6edc12108ecbd59785 /public
parent92a4565f303f5b9f273a8d1eb74d52ac541e89bc (diff)
downloadmelaine-4873117ec6aeb86ef169cbf8750123ca24041cdf.zip
upload gros zip AJAX
Diffstat (limited to 'public')
-rw-r--r--public/css/accueil.css58
-rw-r--r--public/file_upload.js103
-rw-r--r--public/main.js46
3 files changed, 121 insertions, 86 deletions
diff --git a/public/css/accueil.css b/public/css/accueil.css
index 0bf838d..8425cfa 100644
--- a/public/css/accueil.css
+++ b/public/css/accueil.css
@@ -82,7 +82,6 @@ img
82 82
83.boutonAnnuler:hover 83.boutonAnnuler:hover
84{ 84{
85 /*text-decoration: none;*/
86 border: none; 85 border: none;
87} 86}
88 87
@@ -126,10 +125,6 @@ form
126 text-decoration: none; 125 text-decoration: none;
127} 126}
128 127
129#courriel a:hover
130{
131 /*padding: 5px;*/
132}
133#courriel>button /* bouton pour remonter */ 128#courriel>button /* bouton pour remonter */
134{ 129{
135 float: right; 130 float: right;
@@ -163,11 +158,6 @@ form
163 margin: 0px; 158 margin: 0px;
164 padding: 2px; 159 padding: 2px;
165} 160}
166#modeAdmin>div p
167{
168 /*margin: 5px;*/
169 /*padding: 0px;*/
170}
171#modeAdmin>p a 161#modeAdmin>p a
172{ 162{
173 text-decoration: none; 163 text-decoration: none;
@@ -176,26 +166,18 @@ form
176 166
177#lienModeAdmin 167#lienModeAdmin
178{ 168{
179 margin: 0px 20px; 169 font-size: 90%;
180} 170 margin-top: 10px;
181 171 margin-right: 30px;
182#lienModeAdmin p
183{
184 text-align: right; 172 text-align: right;
185 /* enlever la bande bleue en dessous du bloc_page */ 173 /* enlever la bande bleue en dessous du bloc_page */
186 margin-bottom: 0; 174 /*margin-bottom: 0;*/
187 padding-bottom: 5px; 175 padding-bottom: 8px;
188}
189
190#lienModeAdmin p a
191{
192 color: #666;
193 font-weight: bold;
194 padding: 2px;
195} 176}
196 177
197#lienModeAdmin p a:hover 178#lienModeAdmin a
198{ 179{
180 text-decoration: none;
199 color: black; 181 color: black;
200} 182}
201 183
@@ -239,16 +221,17 @@ form
239 color: initial; 221 color: initial;
240} 222}
241 223
224button
225{
226 padding: 1px;
227}
228
242/* options au survol */ 229/* options au survol */
243#options 230#options
244{ 231{
245 /*display: none;*/ 232 /*display: none;*/
246 display: flex; 233 display: flex;
247} 234}
248/*#modeAdmin:hover #options
249{
250 display: flex;
251}*/
252 235
253 236
254/* PC, y compris vieux écrans 800x600 */ 237/* PC, y compris vieux écrans 800x600 */
@@ -494,6 +477,11 @@ form
494 max-width: 180px; 477 max-width: 180px;
495 } 478 }
496 479
480 #lienModeAdmin
481 {
482 margin-right: 20px;
483 }
484
497 .zoneVideAdmin, #modeAdmin 485 .zoneVideAdmin, #modeAdmin
498 { 486 {
499 height: 61px; 487 height: 61px;
@@ -503,18 +491,6 @@ form
503 { 491 {
504 max-width: 380px; 492 max-width: 380px;
505 } 493 }
506
507 .boutonBackup
508 {
509 /*margin: 5px;*/
510 /*padding: 1px;*/
511
512 }
513 #modeAdmin button
514 {
515 font-size: 95%;
516 padding: 1px;
517 }
518} 494}
519 495
520/* spécialement pour les petits smartphones*/ 496/* spécialement pour les petits smartphones*/
diff --git a/public/file_upload.js b/public/file_upload.js
new file mode 100644
index 0000000..8106806
--- /dev/null
+++ b/public/file_upload.js
@@ -0,0 +1,103 @@
1// public/file_upload.js
2
3// envoie gros fichier ZIP
4// ce fichier est "caché", le serveur ne l'envoit
5// qu'un utilisateur connecté et sur la page "restauration"
6
7// -> input file onchange
8function sendFileSize()
9{
10 var tagId = 'archiveUpload';
11 var fileInfos = getFileInfo(tagId);
12 //var fileSize = document.getElementById(tagId).files[0].size;
13
14 const xhr = new XMLHttpRequest();
15 url = 'index.php?action=restauration&file_name='+fileInfos.name+'&file_size='+fileInfos.size;
16 xhr.open("GET", url);
17 xhr.send();
18}
19
20// -> input submit onclick
21function uploadDespiteServerMaxWeightLimit(maxPHPiniWeight, archiveFormat)
22{
23 // dans <input id="archiveUpload" type="file" >
24 var tagId = 'archiveUpload';
25 //var fileInfos = getFileInfo(tagId);
26 var file = document.getElementById(tagId).files[0];
27
28 // si le le fichier est assez léger, javascript s'arrête ici
29 if(file.size > maxPHPiniWeight)
30 {
31 // découpage
32 // envoyer et recevoir des pointeurs pour les perfs
33 // chunksArray est un tableau de "blob"
34 var nbChunks = Math.ceil(file.size / maxPHPiniWeight);
35 var chunksArray = sliceFile(file, nbChunks);
36
37 // requêtes AJAX
38 chunkIndex = 0; // une variable globale
39 uploadChunksAJAX(chunksArray, tagId);
40
41 // annule l'envoi normal par POST
42 event.preventDefault();
43
44 // vider le formulaire et recharger
45 // reload() est un F5 et non un Ctrl + F5
46 //document.getElementById(tagId).value = '';
47 //location.reload();
48
49 location.href = "index.php?from=menu&action=restauration";
50 }
51}
52
53function getFileInfo(tagId)
54{
55 var infos =
56 {
57 name: document.getElementById(tagId).files[0].name,
58 size: document.getElementById(tagId).files[0].size,
59 type: document.getElementById(tagId).files[0].type,
60 }
61
62 return(infos);
63}
64
65function sliceFile(file, nbChunks)
66{
67 var byteIndex = 0; // octet du début
68 var chunks = []; // données
69
70 for (var i = 0; i < nbChunks; i += 1)
71 {
72 // octet de fin
73 var byteEnd = Math.ceil((file.size / nbChunks) * (i + 1));
74
75 // un morceau du fichier va dans une case du tableau
76 chunks.push(file.slice(byteIndex, byteEnd));
77
78 // nouvel octet du début
79 byteIndex += (byteEnd - byteIndex);
80 }
81
82 return chunks;
83}
84
85function uploadChunksAJAX(chunksArray, tagId)
86{
87 var fileName = document.getElementById(tagId).files[0].name;
88 var formData = new FormData();
89 const xhr = new XMLHttpRequest();
90
91 for(var i = 0; i < chunksArray.length; i++)
92 {
93 formData.append('blob', chunksArray[i]);
94
95 url = 'index.php?from=menu&action=restauration&chunk_name='+fileName+'_'+i;
96 // false => synchrone, déprécié parce que fige le navigateur
97 // mais ici on s'en fout
98 xhr.open("POST", url, false);
99 xhr.send(formData);
100
101 formData.delete('blob');
102 }
103}
diff --git a/public/main.js b/public/main.js
index 5ca23c7..ede1a30 100644
--- a/public/main.js
+++ b/public/main.js
@@ -29,16 +29,7 @@ function confirmerSuppression() // appel 'onCLick'
29 29
30// code exécuté à la validation du formulaire 30// code exécuté à la validation du formulaire
31function envoiDonnees() 31function envoiDonnees()
32{ 32{}
33 // supprimer le positionnement absolu de l'iframe
34 /*let balisesIframe = document.getElementsByTagName("iframe");
35 for(var i = 0; i < balisesIframe.length; i++)
36 {
37 alert(balisesIframe[i].getAttribute("style")); // affiche le CSS
38 balisesIframe[i].removeAttribute("style");
39 alert(balisesIframe[i].getAttribute("style")); // affiche null
40 }*/
41}
42 33
43// bouton "mailto", le visiteur ne quitte pas la page 34// bouton "mailto", le visiteur ne quitte pas la page
44function clientCourriel() 35function clientCourriel()
@@ -89,38 +80,3 @@ function nouveauMotdepasse(page)
89 alert('Le mot de passe a été modifié.'); 80 alert('Le mot de passe a été modifié.');
90 window.setTimeout(location=('index.php?page=' + page + '&message=nouveau_mdp'), 0); 81 window.setTimeout(location=('index.php?page=' + page + '&message=nouveau_mdp'), 0);
91} 82}
92
93// envoie gros fichier ZIP
94// si le fichier ne passe pas la limite de l'hébergeur (php.ini)
95// l'ouvrir en javascript chaque envoyer progressivement
96function 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
109function extraireZIPetEnvoyerUnParUn(maxPHPiniWeight, archiveFormat)
110{
111 // taille du fichier?
112 var fileInfos = getFileInfo();
113 alert(fileInfos);
114
115 // taille limite autorisée?
116 // obtenue par php avec: ini_get('upload_max_filesize');
117
118 // si le fichier est plus gros que la limite:
119 // extraire l'archive
120 // envoyer les fichiers un par un par des requêtes AJAX
121 // le serveur peut aussi limiter le nombre de fichiers
122 // lors d'un envoie multiple
123 // en les envoyant un par un ça devrait être bon
124
125 // sinon ne rien faire et laisser l'envoi normal se faire
126}