X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fgetdocument.php;fp=www%2Fecrire%2Finc%2Fgetdocument.php;h=a4f826078dc5de51f44f893258880e8ccd8517d7;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/getdocument.php b/www/ecrire/inc/getdocument.php new file mode 100644 index 0000000..a4f8260 --- /dev/null +++ b/www/ecrire/inc/getdocument.php @@ -0,0 +1,198 @@ + '.' AND $f <> '..' + AND is_dir("$nom/$f")) + effacer_repertoire_temporaire("$nom/$f"); + } + closedir($d); + @rmdir($nom); +} + +// http://doc.spip.org/@copier_document +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\d]+/", "_", + 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); +} + +// +// Deplacer un fichier +// + +// http://doc.spip.org/@deplacer_fichier_upload +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='') { + 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 + . '
' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]"); + break; + } + + spip_log ("erreur upload $error"); + + if(_request("iframe")=="iframe") { + echo "
$msg
"; + exit; + } + + echo minipres($msg, + "
"); + exit; +} + +// Erreur appelee depuis public.php (la precedente ne fonctionne plus +// depuis qu'on est sortis de spip_image.php, apparemment). +// http://doc.spip.org/@erreur_upload_trop_gros +function erreur_upload_trop_gros() { + include_spip('inc/filtres'); + + $msg = "

" + .taille_en_octets($_SERVER["CONTENT_LENGTH"]) + .'
' + ._T('upload_limit', + array('max' => ini_get('upload_max_filesize'))) + ."

"; + + echo minipres(_T('pass_erreur'),"
".$msg."
"); + exit; +} + +// +// Gestion des fichiers ZIP +// +// http://doc.spip.org/@accepte_fichier_upload +function accepte_fichier_upload ($f) { + if (!preg_match(",.*__MACOSX/,", $f) + AND !preg_match(",^\.,", basename($f))) { + $ext = corriger_extension((strtolower(substr(strrchr($f, "."), 1)))); + return sql_countsel('spip_types_documents', "extension=" . sql_quote($ext) . " AND upload='oui'"); + } +} + +# callback pour le deballage d'un zip telecharge +# http://www.phpconcept.net/pclzip/man/en/?options-pclzip_cb_pre_extractfunction +// http://doc.spip.org/@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; + } +} + +?>