diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3 index 6de61094a3765370e8c17746c33fa94f4c3617db..766e10ac6110abaa95a5e35472feee4ac3813dd5 100644 --- a/ecrire/inc_documents.php3 +++ b/ecrire/inc_documents.php3 @@ -442,7 +442,6 @@ function afficher_formulaire_taille($document, $type_inclus='AUTO') { } } - // // Afficher un formulaire d'upload // @@ -451,97 +450,96 @@ function afficher_upload($image_url, $redirect='', $intitule, $inclus = '', $env global $clean_link, $connect_statut, $connect_toutes_rubriques, $options, $spip_lang_right,$connect_id_auteur; static $num_form = 0; $num_form ++; - if (!$redirect) - $redirect = $clean_link->getUrl(); - - $link = new Link ($image_url); - $link->addVar('redirect', $redirect); - $link->addVar('hash', calculer_action_auteur("ajout_doc")); - $link->addVar('hash_id_auteur', $connect_id_auteur); - $link->addVar('ajout_doc', 'oui'); - $link->addVar('mode', $mode); - $link->addVar('type', $type); - - echo $link->getForm('POST', '', 'multipart/form-data'); - echo "<div>"; - - // bouton permettant de telecharger 10 images ou docs a la fois - $envoi_multiple &= ($options == "avancees"); - if ($envoi_multiple OR ($mode = 'document' AND $type)) - echo bouton_block_invisible("ftp$num_form"); - - if (tester_upload()) { - echo "$intitule</div>"; + $res = ""; + if ($GLOBALS['flag_upload']) { + $res .= "\n<div>" . bouton_block_invisible("ftp$num_form") . + $intitule . "</div>\n<div>" . + "\n<input name='fichier' type='file' style='font-size: 10px;' class='forml' size='15' />" . + "\n<div align='" . + $GLOBALS['spip_lang_right'] . + "'><input name='sousaction1' type='Submit' VALUE='" . + _T('bouton_telecharger') . + "' CLASS='fondo'></div>\n"; + } - // un modele de selecteur de fichier - $upload = "<div><input name='fichier*' type='File' style='font-size: 10px;' class='forml' size='15'></div>"; + $res .= "<div>" . debut_block_invisible("ftp$num_form"); - // afficher le premier - echo str_replace('*', '1', $upload); + if ($connect_statut == '0minirezo') { + $res .= afficher_transferer_upload($type, + texte_upload_manuel(_DIR_TRANSFERT, + $inclus)); - /* (TESTS POUR ENVOI MULTIPLE ; DESACTIVE) - // afficher les suivants, masques - if ($envoi_multiple) { - echo debut_block_invisible ("upload$num_form"); - for ($i=2; $i<=10; $i++) - echo str_replace('*', "$i", $upload); - echo fin_block(); - } - */ + } - echo "<div align='".$GLOBALS['spip_lang_right']."'><input name='ok_post' type='Submit' VALUE='"._T('bouton_telecharger')."' CLASS='fondo'></div>\n<div>"; + // Lien document distant, jamais en mode image + if ($mode == 'document' AND $type) { + $res .= + "<p /><div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>" . + "<img src='"._DIR_IMG_PACK.'attachment.gif' . + "' style='float: $spip_lang_right;' alt=\"\" />\n" . + "\n"._T('info_referencer_doc_distant')."<br />" . + "\n<input name='url' size='32' class='fondo' value='http://' />" . + "\n <div align='".$GLOBALS['spip_lang_right']. + "'><input name='sousaction2' type='Submit' value='"._T('bouton_choisir')."' class='fondo'></div>" . + "</div>\n"; } - echo debut_block_invisible("ftp$num_form"); + $res .= "</div>\n" . fin_block(); + + if (!$redirect) $redirect = $clean_link->getUrl(); + return construire_upload($res, + array( + 'redirect' => $redirect, + 'hash' => calculer_action_auteur("joindre"), + 'hash_id_auteur' => $connect_id_auteur, + 'mode' => $mode, + 'type' => $type), + $image_url, + 'multipart/form-data'); +} - if ($connect_statut == '0minirezo' # AND $connect_toutes_rubriques - AND $envoi_multiple) { - $texte_upload = texte_upload_manuel(_DIR_TRANSFERT, $inclus); - if ($texte_upload) { - echo afficher_transferer_upload($texte_upload,$type); - } - else { - echo "<div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>"; - echo _T('info_installer_ftp').aide("ins_upload"); - echo "</div>"; - } - } +function construire_upload($corps, $args, $action, $enc='') +{ + $res = ""; + foreach($args as $k => $v) + $res .= "\n<input type='hidden' name='$k' value='$v' />"; + $res .= "\n<input type='hidden' name='action' value='joindre' />"; - // Lien document distant, jamais en mode image - if ($mode = 'document' AND $type) { - echo "<p /><div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>"; - echo "<img src='"._DIR_IMG_PACK.'attachment.gif', - "' style='float: $spip_lang_right;' alt=\"\" />\n"; - echo "\n"._T('info_referencer_doc_distant')."<br />"; - echo "\n<input name='image_url' size='32' class='fondo' value='http://' />"; - echo "\n <div align='".$GLOBALS['spip_lang_right']."'><input name='ok_url' type='Submit' value='"._T('bouton_choisir')."' class='fondo'></div>"; - echo "</div>\n"; - } + $link = new Link ($action); - echo "</div>\n"; - echo fin_block(); - echo "</form>\n"; + return "\n" . $link->getForm('POST', '', $enc) . "<div>" . + $res . $corps . "</div></form>"; } -function afficher_transferer_upload($texte_upload,$type) +function afficher_transferer_upload($type, $texte_upload) { - - return "<p><div style='color: #505050;'>" . - "\n"._T('info_selectionner_fichier')." :<br />" . - "\n<select name='image2' size='1' class='fondl'>" . - $texte_upload . - "\n</select>" . - (($type != 'rubrique') ? "" : - ("<br />\n<span style='margin-left: 20px'><input type='radio' name='identifier' /> " . - _L("et identifier l'arborescence du répertoire à celle des rubriques.") . - "</span>\n")) . - "<div align='". - $GLOBALS['spip_lang_right'] . - "'><input name='ok_ftp' type='Submit' value='" . - _T('bouton_choisir'). - "' class='fondo'></div>" . - "</div>\n"; - } + if (!$texte_upload) { + return "<div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>" . + _T('info_installer_ftp') . + aide("ins_upload") . + "</div>"; + } + else { return + "<p><div style='color: #505050;'>" . + "\n"._T('info_selectionner_fichier')." :<br />" . + "\n<select name='chemin' size='1' class='fondl'>" . + $texte_upload . + "\n</select>" . + (($type != 'rubrique') ? "" : ("<br />". _L("et choisir le mode de transfert:"))) . + "\n<div align='". + $GLOBALS['spip_lang_right'] . + "'><input name='sousaction3' type='Submit' value='" . + _L('recopier'). + "' class='fondo'></div>" . + (($type != 'rubrique') ? "" : + ("\n<div align='". + $GLOBALS['spip_lang_right'] . + "'><input name='sousaction4' type='Submit' value='" . + _L('identifier repertoires et rubriques'). + "' class='fondo'></div>")) . + "</div>\n"; + } +} // // Afficher les documents non inclus @@ -834,7 +832,7 @@ function bloc_gerer_vignette($document, $image_url, $redirect_url, $album) { // lien "upload vignette" $image_url .= "&id_document=$id_document&ancre=$album"; - afficher_upload($image_url, + echo afficher_upload($image_url, $redirect_url.'&show_docs='.$id_document, /* _T('info_remplacer_vignette') */'', 'portfolio', @@ -928,7 +926,7 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod echo debut_cadre_relief("image-24.gif", false, "", _T('titre_joindre_document')); - afficher_upload($image_url, $redirect_url, _T('info_telecharger_ordinateur'), '', true, 'document', $type); + echo afficher_upload($image_url, $redirect_url, _T('info_telecharger_ordinateur'), '', true, 'document', $type); echo fin_cadre_relief(); @@ -964,7 +962,7 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif = $titre_cadre = _T('bouton_ajouter_image').aide("ins_img"); debut_cadre_relief("image-24.gif", false, "creer.gif", $titre_cadre); - afficher_upload($image_url, $redirect_url, _T('info_telecharger'),'',true,'vignette',$type); + echo afficher_upload($image_url, $redirect_url, _T('info_telecharger'),'',true,'vignette',$type); fin_cadre_relief(); @@ -1011,7 +1009,7 @@ function afficher_documents_colonne($id_article, $type="article", $flag_modif = $titre_cadre = _T('bouton_ajouter_document').aide("ins_doc"); debut_cadre_enfonce("doc-24.gif", false, "creer.gif", $titre_cadre); - afficher_upload($image_url, $redirect_url,_T('info_telecharger_ordinateur'), '',true,'document',$type); + echo afficher_upload($image_url, $redirect_url,_T('info_telecharger_ordinateur'), '',true,'document',$type); fin_cadre_enfonce(); } diff --git a/ecrire/inc_getdocument.php3 b/ecrire/inc_getdocument.php3 index 388994467dae8fc0746058d510778bdb649f98ab..4035fb8e355ef34e31865762e14ee84a0d23e912 100644 --- a/ecrire/inc_getdocument.php3 +++ b/ecrire/inc_getdocument.php3 @@ -184,36 +184,6 @@ function verifier_compactes($zip) { } } -function afficher_compactes($image_name /* not used */, $fichiers, $link) { -// presenter une interface pour choisir si fichier joint ou decompacter -// passer ca en squelette un de ces jours. - - include_ecrire ("inc_presentation.php3"); - install_debut_html(_T('upload_fichier_zip')); - echo "<p>", - _T('upload_fichier_zip_texte'), - "</p>", - "<p>", - _T('upload_fichier_zip_texte2'), - "</p>", - $link->getForm('POST'), - "<div><input type='radio' checked name='action_zip' value='telquel'>", - _T('upload_zip_telquel'), - "</div>", - "<div><input type='radio' name='action_zip' value='decompacter'>", - _T('upload_zip_decompacter'), - "</div>", - "<ul><li>" , - join("</li>\n<li>",$fichiers) , - "</li></ul>", - "<div> </div>", - "<div style='text-align: right;'><input class='fondo' style='font-size: 9px;' type='submit' value='", - _T('bouton_valider'), - "'></div>", - "</form>"; - install_fin_html(); -} - // Si on doit conserver une copie locale des fichiers distants, autant que ca // soit a un endroit canonique -- si ca peut etre bijectif c'est encore mieux, // mais la tout de suite je ne trouve pas l'idee, etant donne les limitations @@ -321,11 +291,23 @@ function recuperer_infos_distantes($source, $max=0) { // // Ajouter un document (au format $_FILES) // +# $source, # le fichier sur le serveur (/var/tmp/xyz34) +# $nom_envoye, # son nom chez le client (portequoi.pdf) +# $type_lien, # lie a un article, une breve ou une rubrique ? +# $id_lien, # identifiant de l'article (ou rubrique) lie +# $mode, # 'vignette' => image en mode image +# # ou vignette personnalisee liee a un document + # 'document' => doc ou image en mode document + # 'distant' => lien internet +# $id_document, # pour une vignette, l'id_document de maman +# $actifs # les documents dont il faudra ouvrir la boite de dialogue + function ajouter_un_document ($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document, &$documents_actifs) { - // Documents distants : pas trop de verifications bloquantes, mais un test - // via une requete HEAD pour savoir si la ressource existe (non 404), si le - // content-type est connu, et si possible recuperer la taille, voire plus. +// Documents distants : pas trop de verifications bloquantes, mais un test +// via une requete HEAD pour savoir si la ressource existe (non 404), si le +// content-type est connu, et si possible recuperer la taille, voire plus. + spip_log ("ajout du document $nom_envoye ($mode $type_lien $id_lien $id_document)"); if ($mode == 'distant') { if ($a = recuperer_infos_distantes($source)) { # fichier local pour creer la vignette (!!), @@ -521,144 +503,182 @@ function ajouter_un_document ($source, $nom_envoye, $type_lien, $id_lien, $mode, return true; } +function afficher_compactes($fichiers, $args, $action) { +// presenter une interface pour choisir si fichier joint ou decompacte +// passer ca en squelette un de ces jours. + + include_ecrire ("inc_presentation.php3"); + install_debut_html(_T('upload_fichier_zip')); + echo "<p>", + _T('upload_fichier_zip_texte'), + "</p>", + "<p>", + _T('upload_fichier_zip_texte2'), + "</p>", + construire_upload( + "<div><input type='radio' checked='checked' name='sousaction5' value='5'>" . + _T('upload_zip_telquel'). + "</div>". + "<div><input type='radio' name='sousaction5' value='6'>". + _T('upload_zip_decompacter'). + "</div>". + "<ul><li>" . + join("</li>\n<li>",$fichiers) . + "</li></ul>". + "<div> </div>". + "<div style='text-align: right;'><input class='fondo' style='font-size: 9px;' type='submit' value='". + _T('bouton_valider'). + "'></div>", + $args, $action); + install_fin_html(); +} + // -// Upload d'un ZIP +// Traiter la liste des fichiers // -function deballer_upload($_FILES, $source, $action_zip, $hash, $hash_id_auteur, $id_article, $id_document, $mode, $redirect, $type) +function examiner_les_fichiers($files, $mode, $type, $id, $id_document, $hash, $hash_id_auteur, $redirect, &$actifs) { - // traiter la reponse de l'utilisateur ('telquel' ou 'decompacter') - if ($source AND !strstr($source, '..')) # securite - { - $_FILES = array( - array('name' => basename($source), - 'tmp_name' => $source) - ); - } - - // traiter le zip si c'en est un tout seul - if (count($_FILES) == 1 AND $action_zip!='telquel') { - $desc = array_pop($_FILES); # recuperer la description - $_FILES = array($desc); - - if (preg_match('/\.zip$/i', $desc['name']) - OR ($desc['type'] == 'application/zip')) { + if (function_exists('gzopen') + AND !($mode == 'distant') + AND (count($files) == 1)) { + + $desc = $files[0]; + if (preg_match('/\.zip$/i', $desc['name']) + OR ($desc['type'] == 'application/zip')) { - // on pose le fichier dans le repertoire zip et on met - // a jour $_FILES (nota : copier_document n'ecrase pas - // un fichier avec lui-meme : ca autorise a boucler) - $zip = copier_document("zip", + // on pose le fichier dans le repertoire zip + // (nota : copier_document n'ecrase pas un fichier avec lui-meme + // ca autorise a boucler) + $zip = copier_document("zip", $desc['name'], $desc['tmp_name'] ); - if (!$zip) die ('Erreur upload zip'); # pathologique - $desc['tmp_name'] = $zip; # nouvel emplacement du fichier - $_FILES = array($desc); - - // Est-ce qu'on sait le lire ? - require_once(_DIR_RESTREINT . 'pclzip.lib.php'); - $archive = new PclZip($zip); - $contenu = verifier_compactes($archive); - - // si non, on le force comme document - // sans effet meme en global !! - /* if (!$contenu) { - $forcer_document = 'oui'; - } - else */ - // si le deballage est demande - if ($action_zip == 'decompacter') { - // 1. on deballe - define('_tmp_dir', creer_repertoire_documents($hash)); - if (_tmp_dir == _DIR_DOC) die(_L('Opération impossible')); - $archive->extract( - PCLZIP_OPT_PATH, _tmp_dir, - PCLZIP_CB_PRE_EXTRACT, 'callback_deballe_fichier' - ); - $contenu = verifier_compactes($archive); - // 2. on supprime le fichier temporaire - @unlink($zip); - - $_FILES = array(); - foreach ($contenu as $fichier) { - $_FILES[] = array( - 'name' => basename($fichier), - 'tmp_name' => _tmp_dir.basename($fichier)); - } - } - - // sinon on demande une reponse - else { - $link = new Link('spip_image.php3'); - $link->addVar('ajout_doc', 'oui'); - $link->addVar('redirect', $redirect); - $link->addVar('id_article', $id_article); - $link->addVar('mode', $mode); - $link->addVar('type', $type); - $link->addVar('hash', $hash); - $link->addVar('hash_id_auteur', $hash_id_auteur); - $link->addVar('source_zip', $zip); - afficher_compactes($desc, $contenu, $link); - exit; - } + if (!$zip) die ('Erreur upload zip'); # pathologique + // Est-ce qu'on sait le lire ? + require_once(_DIR_RESTREINT . 'pclzip.lib.php'); + $archive = new PclZip($zip); + if ($archive) { + // demander confirmation + afficher_compactes(verifier_compactes($archive), + array( + 'redirect' => $redirect, + 'hash' => $hash, + 'hash_id_auteur' => $hash_id_auteur, + 'chemin' => $zip, + 'mode' => $mode, + 'type' => $type), + "spip_image.php3?id_article=$id"); + // a tout de suite en joindre5 ou joindre6 + exit; + } + } + } + foreach ($files as $arg) { + check_upload_error($arg['error']); + ajouter_un_document($arg['tmp_name'], $arg['name'], + $type, $id, $mode, $id_document, $actifs); } - } - return $_FILES; } - // - // Traiter la liste des fichiers - // +// +// Fonctions referencees dans spip-image par calcul +// + +// Cas d'un document distant reference sur internet -function ajouter_les_fichiers($_FILES, $mode, $type, $id, $id_document, &$actifs) +function joindre2($arg, $mode, $type, $id, $id_document,$hash, $hash_id_auteur, $redirect, &$actifs) { - foreach ($_FILES as $file) { - // afficher l'erreur 'fichier trop gros' ou autre - check_upload_error($file['error']); - - spip_log ("ajout du document ".$file['name'].", $mode ($type $id $id_document)"); - ajouter_un_document ( - $file['tmp_name'], # le fichier sur le serveur (/var/tmp/xyz34) - $file['name'], # son nom chez le client (portequoi.pdf) - $type, # lie a un article, une breve ou une rubrique ? - $id, # identifiant de l'article (ou rubrique) lie - $mode, # 'vignette' => image en mode image - # ou vignette personnalisee liee a un document - # 'document' => doc ou image en mode document - # 'distant' => lien internet - $id_document, # pour une vignette, l'id_document de maman - $actifs # tableau des id_document "actifs" (par ref) - ); - } // foreach $_FILES - - // Nettoyer le repertoire temporaire d'extraction des fichiers - if (defined('_tmp_dir')) - effacer_repertoire_temporaire(_tmp_dir); + examiner_les_fichiers(array( + array('name' => basename($arg), + 'tmp_name' => $arg) + ), 'distant', $type, $id, $id_document, + $hash, $hash_id_auteur, $redirect, &$actifs); } -// lire le repertoire upload et retourner ses fichiers +// Cas d'un fichier transmis -function ajouter_par_upload($upload, $identifier, $id, $id_auteur, &$actifs) +function joindre1($arg, $mode, $type, $id, $id_document,$hash, $hash_id_auteur, $redirect, &$actifs) { - $files = array(); - if ($identifier) - { - identifie_repertoire_et_rubrique($upload, $id, $id_auteur, $actifs); - include_ecrire("inc_rubriques.php3"); - calculer_rubriques(); - } - else { - foreach (fichiers_upload($upload) as $fichier) { - $files[] = array ( + $files = array(); + if (is_array($arg)) + foreach ($arg as $file) { + if (!$file['error'] == 4 /* UPLOAD_ERR_NO_FILE */) + $files[]=$file; + } + examiner_les_fichiers($files, $mode, $type, $id, $id_document, + $hash, $hash_id_auteur, $redirect, $actifs); +} + +// copie de tout ou partie du repertoire upload + +function joindre3($arg, $mode, $type, $id, $id_document,$hash, $hash_id_auteur, $redirect, &$actifs) +{ + if (!$arg || strstr($arg, '..')) return; + + $upload = (_DIR_TRANSFERT .$arg); + + if (!is_dir($upload)) + // seul un fichier est demande + $files = array(array ('name' => basename($upload), + 'tmp_name' => $upload) + ); + else { + $files = array(); + foreach (fichiers_upload($upload) as $fichier) { + $files[]= array ( 'name' => basename($fichier), 'tmp_name' => $fichier ); - } - } - return $files; + } + } + + examiner_les_fichiers($files, $mode, $type, $id, $id_document, + $hash, $hash_id_auteur, $redirect, $actifs); +} + +// identifie les repertoires de upload aux rubriques Spip + +function joindre4($arg, $mode, $type, $id, $id_document, $hash, $hash_id_auteur, $redirect, &$documents_actifs) +{ + if (!$arg || strstr($arg, '..')) return; + $upload = (_DIR_TRANSFERT .$arg); + identifie_repertoire_et_rubrique($upload, $id, $id_auteur); + include_ecrire("inc_rubriques.php3"); + calculer_rubriques(); } -function identifie_repertoire_et_rubrique($DIR, $id_rubrique, $id_auteur, $art, &$actifs) +// Zip avec confirmation "tel quel" + +function joindre5($arg, $mode, $type, $id, $id_document,$hash, $hash_id_auteur, $redirect, &$actifs) +{ + ajouter_un_document($arg, basename($arg), $type, $id, $mode, $id_document, $actifs); +} + +// cas du zip a deballer. On ressort la bibli + +function joindre6($arg, $mode, $type, $id, $id_document,$hash, $hash_id_auteur, $redirect, &$actifs) +{ + define('_tmp_dir', creer_repertoire_documents($hash)); + if (_tmp_dir == _DIR_DOC) die(_L('Opération impossible')); + require_once(_DIR_RESTREINT . 'pclzip.lib.php'); + $archive = new PclZip($arg); + $archive->extract( + PCLZIP_OPT_PATH, _tmp_dir, + PCLZIP_CB_PRE_EXTRACT, 'callback_deballe_fichier' + ); + $contenu = verifier_compactes($archive); + // on supprime la copie temporaire + @unlink($arg); + + foreach ($contenu as $fichier) + ajouter_un_document(_tmp_dir.basename($fichier), + basename($fichier), + $type, $id, $mode, $id_document, $actifs); + effacer_repertoire_temporaire(_tmp_dir); +} + +function identifie_repertoire_et_rubrique($DIR, $id_rubrique, $id_auteur, $art=0) { static $exts = array(); @@ -742,7 +762,7 @@ function identifie_repertoire_et_rubrique($DIR, $id_rubrique, $id_auteur, $art, $rub=spip_abstract_insert($GLOBALS['table_prefix'] . "_rubriques", "(titre,id_parent,statut)", "('" . addslashes($v) . "', $id_rubrique, 'prepa')"); - $m = identifie_repertoire_et_rubrique($k, $rub, $id_auteur, $art, $actifs); + $m = identifie_repertoire_et_rubrique($k, $rub, $id_auteur, $art); if ($m) $n++; else { @@ -756,6 +776,7 @@ function identifie_repertoire_et_rubrique($DIR, $id_rubrique, $id_auteur, $art, } + // // Convertit le type numerique retourne par getimagesize() en extension fichier // diff --git a/spip_image.php3 b/spip_image.php3 index ee69849869b09eef5ddf0e6bbf4201e6f5c25e8d..93cb9428892a538a053c48782558a9f37518cc42 100644 --- a/spip_image.php3 +++ b/spip_image.php3 @@ -15,14 +15,14 @@ // supprimer cet element, creer les vignettes, etc. include ("ecrire/inc_version.php3"); -include_ecrire('inc_presentation.php3'); # regler la langue en cas d'erreur -include_ecrire('inc_getdocument.php3'); # diverses fonctions de ce fichier -include_ecrire("inc_charsets.php3"); # pour le nom de fichier -include_ecrire("inc_meta.php3"); # ne pas faire confiance au cache - # (alea_ephemere a peut-etre change) -include_ecrire("inc_admin.php3"); # verifier_action_auteur -include_ecrire("inc_abstract_sql.php3"); # spip_insert -include_ecrire('inc_documents.php3'); # fichiers_upload() +include_ecrire('inc_presentation.php3');# regler la langue en cas d'erreur +include_ecrire('inc_getdocument.php3'); # diverses fonctions de ce fichier +include_ecrire("inc_charsets.php3"); # pour le nom de fichier +include_ecrire("inc_meta.php3"); # ne pas faire confiance au cache + # (alea_ephemere a peut-etre change) +include_ecrire("inc_admin.php3"); # verifier_action_auteur +include_ecrire("inc_abstract_sql.php3");# spip_insert +include_ecrire('inc_documents.php3'); # fichiers_upload() $documents_actifs = array(); // @@ -33,49 +33,27 @@ $documents_actifs = array(); if ($test_vignette) redirige_par_entete(tester_vignette($test_vignette)); - else if ($ajout_doc == "oui") + else if ($action == 'joindre') { - // Autorisation ? - if (!verifier_action_auteur("ajout_doc", $hash, $hash_id_auteur)) + if (!verifier_action_auteur("joindre", $hash, $hash_id_auteur)) die ('Interdit'); - -// Cas d'un document distant reference sur internet - if (preg_match(',^https?://....+,i', $_POST['image_url'])) { - ajouter_les_fichiers(array( - array('name' => basename($_POST['image_url']), - 'tmp_name' => $_POST['image_url']) - ), 'distant', $type, $id_article, $id_document, $documents_actifs); - } else { - - $image2 = $_POST['image2']; - if ($image2 AND !strstr($image2, '..') AND $_POST['ok_ftp']) { - // - // Cas d'un fichier ou d'un repertoire installe dans ecrire/upload/ - // - $upload = _DIR_TRANSFERT .$image2; - if (!is_dir($upload)) - // seul un fichier est demande - $_FILES = array( - array ('name' => basename($upload), - 'tmp_name' => $upload) - ); - else $_FILES = ajouter_par_upload($upload, $_POST['identifier'], $id_article, $hash_id_auteur); - } else { - if (!$_FILES) - $_FILES = &$HTTP_POST_FILES; - if (!is_array($_FILES)) - $_FILES = array(); - foreach ($_FILES as $id => $file) { - if ($file['error'] == 4 /* UPLOAD_ERR_NO_FILE */) - unset ($_FILES[$id]); - } - } - if (function_exists('gzopen') AND !($mode == 'distant')) - $_FILES = deballer_upload($_FILES, $_POST['source_zip'],$action_zip, $hash, $hash_id_auteur, $id_article, $id_document, $mode, $redirect, $type); - - ajouter_les_fichiers($_FILES, $mode, $type, $id_article, $id_document, $documents_actifs); - } + // pas terrible, mais c'est le pb du bouton Submit qui retourne son texte + // et son transcodage est couteux et perilleux + $fonc = 'joindre' . + ($sousaction1 ? 1 : + ($sousaction2 ? 2 : + ($sousaction3 ? 3 : + ($sousaction4 ? 4 : + $sousaction5 )))); + + $arg = ($sousaction1 ? ($_FILES ? $_FILES : $HTTP_POST_FILES) : + ($sousaction2 ? $url : $chemin)); + + if (function_exists($fonc)) + $fonc($arg, $mode, $type, $id_article, $id_document, + $hash, $hash_id_auteur, $redirect, $documents_actifs); + else spip_log("spip_image ne connait pas $fonc"); } // Ajout d'un logo else if ($ajout_logo == "oui" and $logo) {