Skip to content
Extraits de code Groupes Projets
Valider c59f4a1f rédigé par cerdic's avatar cerdic Validation de Gitea
Parcourir les fichiers

Utiliser l'archiviste pour lister/deballer les zips lors de l'upload (meme si...

Utiliser l'archiviste pour lister/deballer les zips lors de l'upload (meme si la feature n'est visible que sans bigup)
parent 263f2dff
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -27,10 +27,6 @@ ...@@ -27,10 +27,6 @@
<input type='checkbox' name='options_deballe_zip_titrer' id='options_deballe_zip_titrer' value='1' /> <input type='checkbox' name='options_deballe_zip_titrer' id='options_deballe_zip_titrer' value='1' />
<label for='options_deballe_zip_titrer'><:medias:upload_zip_titrer:></label> <label for='options_deballe_zip_titrer'><:medias:upload_zip_titrer:></label>
</div> </div>
<div class='choix'>
<input type='checkbox' name='options_deballe_zip_mode_document' id='options_deballe_zip_mode_document' value='1' />
<label for='options_deballe_zip_mode_document'><:medias:upload_zip_mode_document:></label>
</div>
</div> </div>
</div> </div>
</div>] </div>]
......
...@@ -243,10 +243,11 @@ function joindre_verifier_zip($files) { ...@@ -243,10 +243,11 @@ function joindre_verifier_zip($files) {
); );
// Est-ce qu'on sait le lire ? // Est-ce qu'on sait le lire ?
include_spip('inc/pclzip'); include_spip('inc/archives');
if ($zip if ($zip
and $archive = new PclZip($zip) and $archive = new Spip\Archives\SpipArchives($zip)
and $contenu = joindre_decrire_contenu_zip($archive) and $infos = $archive->informer()
and $contenu = joindre_decrire_contenu_zip($infos)
and $tmp = sous_repertoire(_DIR_TMP, 'zip') and $tmp = sous_repertoire(_DIR_TMP, 'zip')
and rename($zip, $tmp = $tmp . basename($zip)) and rename($zip, $tmp = $tmp . basename($zip))
) { ) {
...@@ -272,18 +273,18 @@ function joindre_verifier_zip($files) { ...@@ -272,18 +273,18 @@ function joindre_verifier_zip($files) {
* @param object $zip * @param object $zip
* @return array * @return array
*/ */
function joindre_decrire_contenu_zip($zip) { function joindre_decrire_contenu_zip($infos) {
include_spip('action/ajouter_documents'); include_spip('action/ajouter_documents');
// si pas possible de decompacter: installer comme fichier zip joint // si pas possible de decompacter: installer comme fichier zip joint
if (!$list = $zip->listContent()) { if (empty($infos['fichiers'])) {
return false; return false;
} }
// Verifier si le contenu peut etre uploade (verif extension) // Verifier si le contenu peut etre uploade (verif extension)
$fichiers = array(); $fichiers = array();
$erreurs = array(); $erreurs = array();
foreach ($list as $file) { foreach ($infos['fichiers'] as $file) {
if (accepte_fichier_upload($f = $file['stored_filename'])) { if (accepte_fichier_upload($f = $file['filename'])) {
$fichiers[$f] = $file; $fichiers[$f] = $file;
} else // pas de message pour les dossiers et fichiers caches } else // pas de message pour les dossiers et fichiers caches
{ {
...@@ -306,28 +307,26 @@ function joindre_decrire_contenu_zip($zip) { ...@@ -306,28 +307,26 @@ function joindre_decrire_contenu_zip($zip) {
// https://code.spip.net/@joindre_deballes // https://code.spip.net/@joindre_deballes
function joindre_deballer_lister_zip($path, $tmp_dir) { function joindre_deballer_lister_zip($path, $tmp_dir) {
include_spip('inc/pclzip'); include_spip('inc/archives');
$archive = new PclZip($path); $archive = new Spip\Archives\SpipArchives($path);
$archive->extract(
PCLZIP_OPT_PATH, if ($infos = $archive->informer()
$tmp_dir, and $contenu = joindre_decrire_contenu_zip($infos)) {
PCLZIP_CB_PRE_EXTRACT,
'callback_deballe_fichier'
);
if ($contenu = joindre_decrire_contenu_zip($archive)) {
$files = array();
$fichiers = reset($contenu); $fichiers = reset($contenu);
foreach ($fichiers as $fichier) { $fichiers = array_column($fichiers, 'filename');
$f = basename($fichier['filename']); if ($archive->deballer($tmp_dir, $fichiers)) {
$files[] = array( $files = [];
'tmp_name' => $tmp_dir . $f, foreach ($fichiers as $fichier) {
'name' => $f, $f = basename($fichier);
'titrer' => _request('options_deballe_zip_titrer'), $files[] = array(
'mode' => _request('options_deballe_zip_mode_document') ? 'document' : null 'tmp_name' => $tmp_dir . $fichier,
); 'name' => $f,
'titrer' => _request('options_deballe_zip_titrer'),
'mode' => null
);
}
return $files;
} }
return $files;
} }
return _T('avis_operation_impossible'); return _T('avis_operation_impossible');
...@@ -339,8 +338,8 @@ if (!function_exists('fixer_extension_document')) { ...@@ -339,8 +338,8 @@ if (!function_exists('fixer_extension_document')) {
* et corrige le nom du fichier ; retourne array(extension, nom corrige) * et corrige le nom du fichier ; retourne array(extension, nom corrige)
* s'il ne trouve pas, retourne '' et le nom inchange * s'il ne trouve pas, retourne '' et le nom inchange
* *
* @param unknown_type $doc * @param array $doc
* @return unknown * @return array
*/ */
// https://code.spip.net/@fixer_extension_document // https://code.spip.net/@fixer_extension_document
function fixer_extension_document($doc) { function fixer_extension_document($doc) {
...@@ -366,11 +365,13 @@ if (!function_exists('fixer_extension_document')) { ...@@ -366,11 +365,13 @@ if (!function_exists('fixer_extension_document')) {
} }
} }
// /**
// Gestion des fichiers ZIP * Gestion des fichiers ZIP
// * https://code.spip.net/@accepte_fichier_upload
// https://code.spip.net/@accepte_fichier_upload *
* @param sring $f
* @return bool|int
*/
function accepte_fichier_upload($f) { function accepte_fichier_upload($f) {
if (!preg_match(',.*__MACOSX/,', $f) if (!preg_match(',.*__MACOSX/,', $f)
and !preg_match(',^\.,', basename($f)) and !preg_match(',^\.,', basename($f))
...@@ -385,16 +386,3 @@ function accepte_fichier_upload($f) { ...@@ -385,16 +386,3 @@ function accepte_fichier_upload($f) {
} }
} }
# callback pour le deballage d'un zip telecharge
# http://www.phpconcept.net/pclzip/man/en/?options-pclzip_cb_pre_extractfunction
// https://code.spip.net/@callback_deballe_fichier
function callback_deballe_fichier($p_event, &$p_header) {
if (accepte_fichier_upload($p_header['filename'])) {
$p_header['filename'] = _TMP_DIR . basename($p_header['filename']);
return 1;
} else {
return 0;
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter