You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
423 lines
11 KiB
423 lines
11 KiB
<?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'], JSON_THROW_ON_ERROR); |
|
$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 [ |
|
'configurer_ecran_connexion', |
|
'editer_logo', |
|
'editer_document', |
|
'illustrer_document', |
|
'formidable', |
|
'joindre_document', |
|
]; |
|
} |
|
|
|
/** |
|
* 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) { |
|
include_spip('inc/config'); |
|
|
|
if ( |
|
(test_espace_prive() or lire_config('bigup/charger_public')) |
|
and !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; |
|
} |
|
|
|
|
|
/** |
|
* @param array $args |
|
* @param \Spip\Bigup\Formulaire $formulaire |
|
* @return \Spip\Bigup\Formulaire |
|
*/ |
|
function inc_bigup_medias_formulaire_configurer_ecran_connexion_dist($args, $formulaire) { |
|
$formulaire->preparer_input( |
|
'upload_image_fond_login', |
|
[ |
|
'multiple' => false, |
|
'previsualiser' => true, |
|
'input_class' => 'bigup_simple', |
|
] |
|
); |
|
$formulaire->inserer_js('bigup.simples.js'); |
|
return $formulaire; |
|
} |
|
|
|
/** |
|
* Ajoute la configuration des documents à la page de configuration des contenus |
|
* |
|
* @pipeline affiche_milieu |
|
* @param array $flux |
|
* @return array |
|
*/ |
|
function bigup_affiche_milieu(array $flux) : array { |
|
if ($flux['args']['exec'] === 'configurer_avancees') { |
|
$flux['data'] .= recuperer_fond( |
|
'prive/squelettes/inclure/configurer', |
|
['configurer' => 'configurer_bigup'] |
|
); |
|
} |
|
|
|
return $flux; |
|
}
|
|
|