Valider f328c605 rédigé par esj's avatar esj
Parcourir les fichiers

Le formulaire de déballage du Zip était déjanté. Il est réparé, avec un peu...

Le formulaire de déballage du Zip était déjanté. Il est réparé, avec un peu plus de conformité XHTML (bien oublié là), mais il y a encore un peu de travail.

Par ailleurs, introduction de fonctions _dist pour les sous_actions de l'action joindre, avec un meilleur découpage fonctionnel, pour éviter d'avoir à tout réécrire quand on veut juste surcharger une sous-action.

Au passage il devient clair maintenant que les fonction action_*_dist doivent laisser public.php effectuer le redirect final, afin qu'on puisse ecrire une surcharge se contentant d'un travail supplémentaire en aval: la surcharge peut alors appeller la _dist sans crainte de perdre la main par une redirection, effectue le travail supplémentaire et revient gentiment elle aussi à public.php.
parent 204b2296
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+47 −56
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -16,10 +16,25 @@ include_spip('inc/charsets'); # pour le nom de fichier
include_spip('base/abstract_sql');
include_spip('inc/actions');

// http://doc.spip.org/@action_joindre_dist
function action_joindre_dist()
{
	global $hash, $url, $chemin, $ancre,
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	if (!preg_match(',^(-?\d+)\D(\d+)\D(\w+)/(\w+)$,',$arg,$r)) {
		spip_log("action_joindre_dist incompris: " . $arg);
		$redirect = urldecode(_request('redirect'));
		return;
	}

	list(, $id, $id_document, $mode, $type) = $r;
	$actifs = array();
	action_joindre_sous_action($id, $id_document, $mode, $type, $actifs);
}

function action_joindre_sous_action($id, $id_document, $mode, $type, &$documents_actifs)
{
	global $redirect, $hash, $url, $chemin, $ancre,
	  $sousaction1,
	  $sousaction2,
	  $sousaction3,
@@ -27,20 +42,12 @@ function action_joindre_dist()
	  $sousaction5,
	  $_FILES,  $HTTP_POST_FILES;

	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	$redirect = _request('redirect');
	$iframe_redirect = _request('iframe_redirect');
	if (!preg_match(',^(-?\d+)\D(\d+)\D(\w+)/(\w+)$,',$arg,$r)) {
	  spip_log("action_joindre_dist incompris: " . $arg);
	  redirige_par_entete(urldecode($redirect));
	}
	list($arg, $id, $id_document, $mode, $type) = $r;

// pas terrible, mais c'est le pb du bouton Submit qui retourne son texte,
// et son transcodage est couteux et perilleux
     $sousaction = 'spip_action_joindre' .
	$sousaction = 
       ($sousaction1 ? 1 :
	($sousaction2 ? 2 :
	 ($sousaction3 ? 3 : 
@@ -50,14 +57,10 @@ function action_joindre_dist()
     $path = ($sousaction1 ? ($_FILES ? $_FILES : $HTTP_POST_FILES) :
	     ($sousaction2 ? $url : $chemin));

     $documents_actifs = array();

     if (function_exists($sousaction))
     $sousaction = charger_fonction('joindre' . $sousaction, 'inc');
     $type_image = $sousaction($path, $mode, $type, $id, $id_document, 
		 $hash, $redirect, $documents_actifs, $iframe_redirect);

     else spip_log("spip_action: sousaction inconnue $sousaction");

     $redirect = urldecode($redirect);
     if ($documents_actifs) {
	$redirect = parametre_url($redirect,'show_docs',join(',',$documents_actifs),'&');
@@ -82,16 +85,11 @@ function action_joindre_dist()
	if(_request("iframe") == 'iframe') {
		$redirect = parametre_url(urldecode($iframe_redirect),"show_docs",join(',',$documents_actifs),'&')."&iframe=iframe";
	}

	redirige_par_entete($redirect);
     ## redirection a supprimer si on veut poster dans l'espace prive directement (UPLOAD_DIRECT)
}


// Cas d'un document distant reference sur internet

// http://doc.spip.org/@spip_action_joindre2
function spip_action_joindre2($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
function inc_joindre2_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
{
	return joindre_documents(array(
				   array('name' => basename($path),
@@ -102,13 +100,13 @@ function spip_action_joindre2($path, $mode, $type, $id, $id_document,$hash, $red

// Cas d'un fichier transmis

// http://doc.spip.org/@spip_action_joindre1
function spip_action_joindre1($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
function inc_joindre1_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
{
	$files = array();
	if (is_array($path))
	  foreach ($path as $file) {
		if (!($file['error'] == 4) /* UPLOAD_ERR_NO_FILE */)
	  //UPLOAD_ERR_NO_FILE
		if (!($file['error'] == 4) )
			$files[]=$file;
	}

@@ -118,8 +116,7 @@ function spip_action_joindre1($path, $mode, $type, $id, $id_document,$hash, $red

// copie de tout ou partie du repertoire upload

// http://doc.spip.org/@spip_action_joindre3
function spip_action_joindre3($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
function inc_joindre3_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
{
	if (!$path || strstr($path, '..')) return;
	    
@@ -156,15 +153,14 @@ function joindre_documents($files, $mode, $type, $id, $id_document, $hash, $redi

	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')) {
	AND (count($files) == 1)
	AND (preg_match('/\.zip$/i', $files[0]['name'])
	     OR ($files[0]['type'] == 'application/zip'))) {
	
	  // on pose le fichier dans le repertoire zip 
	  // (nota : copier_document n'ecrase pas un fichier avec lui-meme
	  // ca autorise a boucler)
		$desc = $files[0];
		$zip = copier_document("zip",
					$desc['name'],
					$desc['tmp_name']
@@ -177,13 +173,13 @@ function joindre_documents($files, $mode, $type, $id, $id_document, $hash, $redi
		if ($archive) {
			$valables = verifier_compactes($archive);
			if ($valables) {
			    echo liste_archive_jointe($valables, $mode, $type, $id, $id_document, $hash, $redirect, $zip, $iframe_redirect);
			  echo $ajouter_documents($valables, $zip, $type, $id, $mode, $id_document, $actifs, $hash, $redirect, $iframe_redirect);
	// a tout de suite en joindre4, joindre5, ou joindre6
			    exit;
			}
		}
	}
	}

	foreach ($files as $arg) {
		check_upload_error($arg['error']);
		$x = $ajouter_documents($arg['tmp_name'], $arg['name'], 
@@ -203,8 +199,7 @@ function joindre_documents($files, $mode, $type, $id, $id_document, $hash, $redi

//  Zip avec confirmation "tel quel"

// http://doc.spip.org/@spip_action_joindre5
function spip_action_joindre5($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs)
function inc_joindre5_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs)
{
	$ajouter_documents = charger_fonction('ajouter_documents', 'inc');
	$pos = strpos($path, '/zip/');
@@ -216,8 +211,7 @@ function spip_action_joindre5($path, $mode, $type, $id, $id_document,$hash, $red

// Zip a deballer. 

// http://doc.spip.org/@spip_action_joindre6
function spip_action_joindre6($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
function inc_joindre6_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
{
	$x = joindre_deballes($path, $mode, $type, $id, $id_document,$hash, $redirect, $actifs);
	//  suppression de l'archive en zip
@@ -227,11 +221,10 @@ function spip_action_joindre6($path, $mode, $type, $id, $id_document,$hash, $red

// Zip avec les 2 options a la fois

// http://doc.spip.org/@spip_action_joindre4
function spip_action_joindre4($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
function inc_joindre4_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, &$actifs, $iframe_redirect)
{
	joindre_deballes($path, $mode, $type, $id, $id_document,$hash, $redirect, $actifs);
	return spip_action_joindre5($path, $mode, $type, $id, $id_document,$hash, $redirect, $actifs);
	return inc_joindre5_dist($path, $mode, $type, $id, $id_document,$hash, $redirect, $actifs);
}

// http://doc.spip.org/@joindre_deballes
@@ -261,6 +254,4 @@ function joindre_deballes($path, $mode, $type, $id, $id_document,$hash, $redirec
	    effacer_repertoire_temporaire(_tmp_dir);
	    return $x;
}


?>
+23 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,6 +15,17 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/getdocument');
include_spip('inc/documents');

// Joindre un document ou un Zip a deballer (fonction pour action/joindre)
// Distinguer les deux cas pour commencer

function inc_ajouter_documents_dist ($sources, $file, $type, $id, $mode, $id_document, &$actifs, $hash='', $redirect='', $iframe_redirect='')
{
	if (is_array($sources))
	  return liste_archive_jointe($sources, $file, $type, $id, $mode, $id_document, $hash, $redirect, $iframe_redirect);
	else
	  return ajouter_un_document($sources, $file, $type, $id, $mode, $id_document, $actifs);
}

//
// Ajouter un document (au format $_FILES)
//
@@ -29,8 +40,7 @@ include_spip('inc/documents');
# $id_document,	# pour une vignette, l'id_document de maman
# $actifs	# les documents dont il faudra ouvrir la boite de dialogue

// http://doc.spip.org/@inc_ajouter_documents_dist
function inc_ajouter_documents_dist ($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document, &$documents_actifs) {
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
@@ -223,7 +233,7 @@ function inc_ajouter_documents_dist ($source, $nom_envoye, $type_lien, $id_lien,
		}
		// par defaut (upload ZIP ou ftp) integrer
		// les images en mode 'vignette' et le reste en mode document
		if (!$mode)
		if (!in_array($mode, array('vignette', 'distant', 'document')))
			if ($type_image AND $type_inclus_image)
				$mode = 'vignette';
			else
@@ -237,10 +247,10 @@ function inc_ajouter_documents_dist ($source, $nom_envoye, $type_lien, $id_lien,
	if ($id_document_lie) {
		spip_query("UPDATE spip_documents SET id_vignette=$id_document	WHERE id_document=$id_document_lie");
		// hack pour que le retour vers ecrire/ active le bon doc.
		$documents_actifs[] = $id_document_lie; 
		$documents_actifs[$fichier] = $id_document_lie; 
	}
	else
		$documents_actifs[] = $id_document; 
		$documents_actifs[$fichier] = $id_document; 

	// Demander l'indexation du document
	include_spip('inc/indexation');
@@ -364,32 +374,30 @@ function corriger_extension($ext) {
// Passer ca en squelette un de ces jours.

// http://doc.spip.org/@liste_archive_jointe
function liste_archive_jointe($valables, $mode, $type, $id, $id_document, $hash, $redirect, $zip, $iframe_redirect)
function liste_archive_jointe($valables, $zip, $type, $id, $mode, $id_document, $hash, $redirect, $iframe_redirect)
{
	$arg = (intval($id) .'/' .intval($id_document) . "/$mode/$type");

	$texte = "
<input name='redirect' value='$redirect' />
	$texte = "<div style='text-align: left'>
<input type='hidden' name='redirect' value='$redirect' />
<input type='hidden' name='iframe_redirect' value='$iframe_redirect' />
<input type='hidden' name='hash' value='$hash' />
<input type='hidden' name='chemin' value='$zip' />
<input type='hidden' name='arg' value='$arg' />
<input type='radio' checked='checked' name='sousaction5' value='5'>" .
<input type='radio' checked='checked' name='sousaction5' value='5' />" .
	  	_T('upload_zip_telquel').
		"</div>".
		"<div><input type='radio' name='sousaction5' value='6'>".
		"<br />".
		"<input type='radio' name='sousaction5' value='6' />".
		_T('upload_zip_decompacter').
		"</div>".
		"<ol><li><tt>" .
		join("</tt></li>\n<li><tt>", $valables) .
		"</tt></li></ol>".
		"<div>&nbsp;</div>" .
		"<div><input type='checkbox' name='sousaction4' value='4'>".
		"<br /><input type='checkbox' name='sousaction4' value='4' />".
		_T('les_deux').
		"</div>".
		"<div style='text-align: right;'><input class='fondo spip_xx-small' type='submit' value='".
		_T('bouton_valider').
		  "'>";
		  "' />";

	$texte = "<p>" .
		_T('upload_fichier_zip_texte') .