Bifurcation depuis
spip / spip
5784 validations de retard le dépôt en amont.
-
cerdic a rédigé
Report de r21019 : Lorsqu'on upload un logo par le formulaire de l'interface privee et qu'une erreur se produit, la requete ajax part en vrille car l'erreur etait affichee en minipres au lieu de revenir par le canal normal du CVT On corrige en introduisant un $return optionnel dans action/iconifier et dans check_upload_error qui permet de faire remonter l'erreur par le CVT le comportement par defaut des fonctions reste identique
cerdic a rédigéReport de r21019 : Lorsqu'on upload un logo par le formulaire de l'interface privee et qu'une erreur se produit, la requete ajax part en vrille car l'erreur etait affichee en minipres au lieu de revenir par le canal normal du CVT On corrige en introduisant un $return optionnel dans action/iconifier et dans check_upload_error qui permet de faire remonter l'erreur par le CVT le comportement par defaut des fonctions reste identique
documents.php 6,64 Kio
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* donne le chemin du fichier relatif a _DIR_IMG
* pour stockage 'tel quel' dans la base de donnees
*
* http://doc.spip.org/@set_spip_doc
*
* @param string $fichier
* @return string
*/
function set_spip_doc($fichier) {
if (strpos($fichier, _DIR_IMG) === 0)
return substr($fichier, strlen(_DIR_IMG));
else
return $fichier; // ex: fichier distant
}
/**
* donne le chemin complet du fichier
*
* http://doc.spip.org/@get_spip_doc
*
* @param string $fichier
* @return bool|string
*/
function get_spip_doc($fichier) {
// fichier distant
if (preg_match(',^\w+://,', $fichier))
return $fichier;
// gestion d'erreurs, fichier=''
if (!strlen($fichier))
return false;
$fichier = (
strncmp($fichier,_DIR_IMG, strlen(_DIR_IMG))!=0
)
? _DIR_IMG . $fichier
: $fichier ;
// fichier normal
return $fichier;
}
/**
* Creer IMG/pdf/
*
* http://doc.spip.org/@creer_repertoire_documents
*
* @param $ext
* @return string
*/
function creer_repertoire_documents($ext) {
$rep = sous_repertoire(_DIR_IMG, $ext);
if (!$ext OR !$rep) {
spip_log("creer_repertoire_documents '$rep' interdit");
exit;
}
// Cette variable de configuration peut etre posee par un plugin
// par exemple acces_restreint
if (isset($GLOBALS['meta']["creer_htaccess"]) AND $GLOBALS['meta']["creer_htaccess"] == 'oui') {
include_spip('inc/acces');
verifier_htaccess($rep);
}
return $rep;
}
/**
* Efface le repertoire de maniere recursive !
*
* http://doc.spip.org/@effacer_repertoire_temporaire
*
* @param string $nom
*/
function effacer_repertoire_temporaire($nom) {
$d = opendir($nom);
while (($f = readdir($d)) !== false) {
if (is_file("$nom/$f"))
spip_unlink("$nom/$f");
else if ($f <> '.' AND $f <> '..'
AND is_dir("$nom/$f"))
effacer_repertoire_temporaire("$nom/$f");
}
closedir($d);
@rmdir($nom);
}
//
/**
* Copier un document $source un dossier IMG/$ext/$orig.$ext
* en numerotant eventuellement si un du meme nom existe deja
*
* http://doc.spip.org/@copier_document
*
* @param string $ext
* @param string $orig
* @param string $source
* @return bool|mixed|string
*/
function copier_document($ext, $orig, $source) {
$orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
$dir = creer_repertoire_documents($ext);
$dest = preg_replace("/[^.=\w-]+/", "_",
translitteration(preg_replace("/\.([^.]+)$/", "",
preg_replace("/<[^>]*>/", '', basename($orig)))));
// ne pas accepter de noms de la forme -r90.jpg qui sont reserves
// pour les images transformees par rotation (action/documenter)
$dest = preg_replace(',-r(90|180|270)$,', '', $dest);
// Si le document "source" est deja au bon endroit, ne rien faire
if ($source == ($dir . $dest . '.' . $ext))
return $source;
// sinon tourner jusqu'a trouver un numero correct
$n = 0;
while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));
return deplacer_fichier_upload($source, $newFile);
}
/**
* Trouver le dossier utilise pour upload un fichier
*
* http://doc.spip.org/@determine_upload
*
* @param string $type
* @return bool|string
*/
function determine_upload($type='') {
if(!function_exists('autoriser'))
include_spip('inc/autoriser');
if (!autoriser('chargerftp')
OR $type == 'logos') # on ne le permet pas pour les logos
return false;
$repertoire = _DIR_TRANSFERT;
if (!@is_dir($repertoire)) {
$repertoire = str_replace(_DIR_TMP, '', $repertoire);
$repertoire = sous_repertoire(_DIR_TMP, $repertoire);
}
if (!$GLOBALS['visiteur_session']['restreint'])
return $repertoire;
else
return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
}
/**
* Deplacer ou copier un fichier
*
* http://doc.spip.org/@deplacer_fichier_upload
*
* @param string $source
* @param string $dest
* @param bool $move
* @return bool|mixed|string
*/
function deplacer_fichier_upload($source, $dest, $move=false) {
// Securite
if (substr($dest,0,strlen(_DIR_RACINE))==_DIR_RACINE)
$dest = _DIR_RACINE.preg_replace(',\.\.+,', '.', substr($dest,strlen(_DIR_RACINE)));
else
$dest = preg_replace(',\.\.+,', '.', $dest);
if ($move) $ok = @rename($source, $dest);
else $ok = @copy($source, $dest);
if (!$ok) $ok = @move_uploaded_file($source, $dest);
if ($ok)
@chmod($dest, _SPIP_CHMOD & ~0111);
else {
$f = @fopen($dest,'w');
if ($f) {
fclose ($f);
} else {
include_spip('inc/flock');
raler_fichier($dest);
}
spip_unlink($dest);
}
return $ok ? $dest : false;
}
// Erreurs d'upload
// renvoie false si pas d'erreur
// et true si erreur = pas de fichier
// pour les autres erreurs affiche le message d'erreur et meurt
// http://doc.spip.org/@check_upload_error
function check_upload_error($error, $msg='', $return=false) {
global $spip_lang_right;
if (!$error) return false;
spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
switch ($error) {
case 4: /* UPLOAD_ERR_NO_FILE */
return true;
# on peut affiner les differents messages d'erreur
case 1: /* UPLOAD_ERR_INI_SIZE */
$msg = _T('upload_limit',
array('max' => ini_get('upload_max_filesize')));
break;
case 2: /* UPLOAD_ERR_FORM_SIZE */
$msg = _T('upload_limit',
array('max' => ini_get('upload_max_filesize')));
break;
case 3: /* UPLOAD_ERR_PARTIAL */
$msg = _T('upload_limit',
array('max' => ini_get('upload_max_filesize')));
break;
default: /* autre */
if (!$msg)
$msg = _T('pass_erreur').' '. $error
. '<br />' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]");
break;
}
spip_log ("erreur upload $error");
if ($return)
return $msg;
if(_request("iframe")=="iframe") {
echo "<div class='upload_answer upload_error'>$msg</div>";
exit;
}
include_spip('inc/minipres');
echo minipres($msg,
"<div style='text-align: $spip_lang_right'><a href='" . rawurldecode($GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . "</button></a></div>");
exit;
}
?>