This repository has been archived by the owner on Jun 30, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbigup_pipelines.php
375 lines (345 loc) · 10.1 KB
/
bigup_pipelines.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
<?php
/**
* Utilisations de pipelines par Big Upload
*
* @plugin Big Upload
* @copyright 2015
* @author Matthieu Marcillaud
* @licence GNU/GPL
* @package SPIP\Bigup\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Charger des scripts jquery
*
* @pipeline jquery_plugins
* @param array $scripts Liste à charger
* @return array Liste complétée
**/
function bigup_jquery_plugins($scripts) {
include_spip('inc/config');
if (test_espace_prive() or lire_config('bigup/charger_public', false)) {
$scripts[] = 'javascript/bigup.utils.js';
$scripts[] = produire_fond_statique('javascript/bigup.trads.js', [
'lang' => $GLOBALS['spip_lang'],
]);
$scripts[] = 'lib/flow/flow.js';
$scripts[] = 'javascript/bigup.js';
$scripts[] = 'javascript/bigup.loader.js';
}
return $scripts;
}
/**
* Charger des JS dans l’espace public
*
* @pipeline insert_head_css
* @param string $flux Code html des styles CSS à charger
* @return string Code html complété
**/
function bigup_insert_head($flux) {
include_spip('inc/config');
if (lire_config('bigup/charger_public', false)) {
$flux = bigup_header_prive($flux);
}
return $flux;
}
/**
* Charger des JS dans l’espace prive
*
* @pipeline insert_head_css
* @param string $flux Code html des styles CSS à charger
* @return string Code html complété
**/
function bigup_header_prive($flux) {
include_spip('inc/config');
$maxFileSize = intval(lire_config('bigup/max_file_size', 0));
$formatLogos = json_encode($GLOBALS['formats_logos']);
$flux .= <<<EOS
<script type='text/javascript'>jQuery.bigup_config = {maxFileSize: $maxFileSize, formatsLogos: $formatLogos}</script>
EOS;
return $flux;
}
/**
* Charger des styles CSS dans l’espace public
*
* @pipeline insert_head_css
* @param string $flux Code html des styles CSS à charger
* @return string Code html complété
**/
function bigup_insert_head_css($flux) {
include_spip('inc/config');
if (lire_config('bigup/charger_public', false)) {
$flux = bigup_header_prive_css($flux);
}
return $flux;
}
/**
* Charger des styles CSS dans l'espace privé
*
* @pipeline insert_head_css
* @param string $flux Code html des styles CSS à charger
* @return string Code html complété
**/
function bigup_header_prive_css($flux) {
$flux .= '<link rel="stylesheet" href="' . produire_fond_statique('css/vignettes.css') . '" type="text/css" />' . "\n";
$flux .= '<link rel="stylesheet" href="' . timestamp(find_in_path('css/bigup.css')) . '" type="text/css" />' . "\n";
return $flux;
}
/**
* Obtenir une instance de la classe bigup pour ce formulaire
*
* @param array $flux
* Flux, tel que présent dans les pipelines des formulaires CVT
* @return \SPIP\Bigup\Bigup()
**/
function bigup_get_bigup($flux) {
include_spip('inc/Bigup');
$bigup = new \Spip\Bigup\Bigup(
\Spip\Bigup\Identifier::depuisArgumentsPipeline($flux['args'])
);
return $bigup;
}
/**
* Recherche de fichiers uploadés pour ce formulaire
*
* La recherche est conditionné par la présence dans le contexte
* de la clé `_bigup_rechercher_fichiers`. Ceci permet d'éviter de chercher
* des fichiers pour les formulaires qui n'en ont pas besoin.
*
* Réinsère les fichiers déjà présents pour ce formulaire
* dans `$_FILES` (a priori assez peu utile dans le chargement)
* et ajoute la description des fichiers présents pour chaque champ,
* dans l'environnement.
*
* Ajoute également un hidden, qui s'il est posté, demandera à recréer `$_FILES`
* juste avant la fonction verifier(). Voir `bigup_formulaire_receptionner()`
*
* @see bigup_formulaire_receptionner():
* @param array $flux
* @return array
**/
function bigup_formulaire_charger($flux) {
if (empty($flux['data']['_bigup_rechercher_fichiers'])) {
return $flux;
}
// s'il y a des fichiers pour ce formulaire / visiteur, on ajoute la liste à l'environnement.
$bigup = bigup_get_bigup($flux);
if ($fichiers = $bigup->retrouver_fichiers()) {
$flux['data']['_bigup_fichiers'] = [];
foreach ($fichiers as $racine => $listes) {
$flux['data']['_bigup_fichiers'][$racine] = $fichiers[$racine];
}
}
if (empty($flux['data']['_hidden'])) {
$flux['data']['_hidden'] = '';
}
$flux['data']['_hidden'] .= '<input type="hidden" name="bigup_retrouver_fichiers" value="1" />';
return $flux;
}
/**
* Branchement sur la réception d'un formulaire (avant verifier())
*
* On remet `$_FILES` avec les fichiers présents pour ce formulaire,
* et avant que la fonction verifier native du formulaire soit utilisée,
* de sorte qu'elle ait accès à $_FILES rempli.
*
* @pipeline formulaire_receptionner
* @param array $flux
* @return array
*/
function bigup_formulaire_receptionner($flux) {
if (_request('bigup_retrouver_fichiers')) {
$bigup = bigup_get_bigup($flux);
$bigup->gerer_fichiers_postes(); // les fichiers postés sans JS
$liste = $bigup->reinserer_fichiers(_request('bigup_reinjecter_uniquement'));
$bigup->surveiller_fichiers($liste);
}
return $flux;
}
/**
* Branchement sur verifier
*
* - Si on a demandé la suppression d'un fichier, le faire
* - Nettoyer les fichiers injectés effacés de $_FILES.
*
* @param array $flux
* @return array
**/
function bigup_formulaire_verifier($flux) {
$identifiant = _request('bigup_enlever_fichier');
if ($identifiant or _request('bigup_retrouver_fichiers')) {
$bigup = bigup_get_bigup($flux);
// enlever un fichier dont on demande sa suppression
if ($identifiant) {
if ($bigup->supprimer_fichiers($identifiant)) {
// on n'affiche pas les autres erreurs
$flux['data'] = [];
$flux['data']['message_erreur'] = '';
$flux['data']['message_ok'] = _T('bigup:fichier_efface');
$flux['data']['_erreur'] = true;
}
} else {
// nettoyer nos fichiers réinsérés s'ils ont été enlevés de $_FILES
$bigup->verifier_fichiers_surveilles();
}
}
return $flux;
}
/**
* Branchement sur traiter
*
* - Si on a effectué les traitements sans erreur,
* tous les fichiers restants doivent disparaître
* du cache.
* - Nettoyer les fichiers injectés effacés de $_FILES.
*
* @param array $flux
* @return array
**/
function bigup_formulaire_traiter($flux) {
if (_request('bigup_retrouver_fichiers')) {
$bigup = bigup_get_bigup($flux);
// à voir si on cherche systématiquement
// ou uniquement lorsqu'on a demandé à recuperer les fichiers
if (empty($flux['data']['message_erreur'])) {
$bigup->supprimer_fichiers(_request('bigup_reinjecter_uniquement'));
} else {
// nettoyer nos fichiers réinsérés s'ils ont été enlevés de $_FILES
$bigup->verifier_fichiers_surveilles();
}
}
return $flux;
}
/**
* Liste les formulaires où BigUP se charge automatiquement
* (necessite un traitement spécifique)
*
* @return array
*/
function bigup_medias_formulaires_traitements_automatiques() {
return ['joindre_document', 'editer_logo', 'editer_document', 'illustrer_document', 'formidable'];
}
/**
* Ajouter bigup sur certains formulaires
*
* - le documents du plugin Medias
* - le formulaire de logo de SPIP
*
* @param array $flux
* @return array
**/
function bigup_medias_formulaire_charger($flux) {
if (
in_array($flux['args']['form'], bigup_medias_formulaires_traitements_automatiques())
and is_array($flux['data'])
) {
$flux['data']['_bigup_rechercher_fichiers'] = true;
}
return $flux;
}
/**
* Utiliser Bigup sur certains formulaires
*
* - le documents du plugin Medias
* - le formulaire de logo de SPIP
*
* @param array $flux
* @return array
**/
function bigup_medias_formulaire_fond($flux) {
if (
!empty($flux['args']['contexte']['_bigup_rechercher_fichiers'])
and $form = $flux['args']['form']
and $bigup_medias_formulaire = charger_fonction('bigup_medias_formulaire_'.$form, 'inc', true)
) {
$bigup = bigup_get_bigup(['args' => $flux['args']['contexte']]);
$formulaire = $bigup->formulaire($flux['data'], $flux['args']['contexte']);
$formulaire = $bigup_medias_formulaire($flux['args'], $formulaire);
$flux['data'] = $formulaire->get();
}
return $flux;
}
/**
* @param array $args
* @param \Spip\Bigup\Formulaire $formulaire
* @return \Spip\Bigup\Formulaire
*/
function inc_bigup_medias_formulaire_joindre_document_dist($args, $formulaire) {
$formulaire->preparer_input(
'fichier_upload[]',
[
'previsualiser' => true,
'drop-zone-extended' => '#contenu'
]
);
$formulaire->inserer_js('bigup.documents.js');
return $formulaire;
}
/**
* @param array $args
* @param \Spip\Bigup\Formulaire $formulaire
* @return \Spip\Bigup\Formulaire
*/
function inc_bigup_medias_formulaire_editer_document_dist($args, $formulaire) {
$formulaire->preparer_input(
'fichier_upload[]',
[
'multiple' => false,
'previsualiser' => true
]
);
$formulaire->inserer_js('bigup.documents_edit.js');
return $formulaire;
}
/**
* @param array $args
* @param \Spip\Bigup\Formulaire $formulaire
* @return \Spip\Bigup\Formulaire
*/
function inc_bigup_medias_formulaire_illustrer_document_dist($args, $formulaire) {
$formulaire->preparer_input(
'fichier_upload[]',
[
'multiple' => false,
'accept' => bigup_get_accept_logos(),
'previsualiser' => true,
'input_class' => 'bigup_illustration',
'drop-zone-extended' => '.formulaire_illustrer_document .editer_fichier',
]
);
$formulaire->inserer_js('bigup.documents_illustrer.js');
return $formulaire;
}
/**
* @param array $args
* @param \Spip\Bigup\Formulaire $formulaire
* @return \Spip\Bigup\Formulaire
*/
function inc_bigup_medias_formulaire_editer_logo_dist($args, $formulaire) {
$options = [
'accept' => bigup_get_accept_logos(),
'previsualiser' => true,
'input_class' => 'bigup_logo',
];
if (intval($args['args'][1]) or $args['args'][0] !== 'site') {
$options['drop-zone-extended'] = '#navigation';
}
$formulaire->preparer_input(
['logo_on', 'logo_off'],
$options
);
$formulaire->inserer_js('bigup.logos.js');
return $formulaire;
}
/**
* @param array $args
* @param \Spip\Bigup\Formulaire $formulaire
* @return \Spip\Bigup\Formulaire
*/
function inc_bigup_medias_formulaire_formidable_dist($args, $formulaire) {
$formulaire->preparer_input_class(
'bigup', // 'file' pour rendre automatique.
['previsualiser' => true]
);
return $formulaire;
}