Update of /home/spip-cvs/spip/ecrire
In directory alan:/tmp/cvs-serv23942/ecrire
Added Files:
inc_getdocument.php3
Log Message:
mauvais retour après deballage ---> menage
--- NEW FILE: inc_getdocument.php3 ---
<?php
function creer_repertoire_documents($ext) {
global $dossier_squelettes;
# est-il bien raisonnable d'accepter de creer si creer_rep retourne '' ?
$rep = _DIR_DOC . creer_repertoire(_DIR_DOC, $ext);
// Securite
if (!$ext || ($rep == $dossier_squelettes) || (substr($rep,0,-1) == $dossier_squelettes))
{
spip_log("creer_repertoire_documents interdit");
exit;
}
if (lire_meta("creer_htaccess") == 'oui') {
include_ecrire('inc_acces.php3');
verifier_htaccess($rep);
}
return $rep;
}
function copier_document($ext, $orig, $source) {
$dir = creer_repertoire_documents($ext);
$dest = $dir .
ereg_replace("[^.a-zA-Z0-9_=-]+", "_",
translitteration(ereg_replace("\.([^.]+)$", "",
ereg_replace("<[^>]*>", '', basename($orig)))));
# bien vu ?
if ($source == ($dest . '.' . $ext)) return $source;
$n = 0;
while (@file_exists($newFile = $dest.($n++ ? '-'.$n : '').'.'.$ext));
$r = deplacer_fichier_upload($source, $newFile);
return (!$r ? '' : $newFile);
}
function verifier_compactes($image_name) {
$zip = new PclZip($image_name);
if ($list = $zip->listContent()) {
// si pas possible de decompacter: installer comme fichier zip joint
// Verifier si le contenu peut etre uploade (verif extension)
$aff_fichiers = array();
for ($i=0; $i<sizeof($list); $i++) {
for(reset($list[$i]); $key = key($list[$i]); next($list[$i])) {
if ($key == "stored_filename") {
$f = $list[$i][$key];
// Regexp des fichiers a ignorer
if (!ereg("^(\.|.*/\.|.*__MACOSX/)", $f)) {
if (ereg("\.([^.]+)$", $f, $match)) {
$result = spip_query("SELECT * FROM spip_types_documents WHERE extension='"
. corriger_extension(addslashes(strtolower($match[1])))
. "' AND upload='oui'");
if ($row = @spip_fetch_array($result))
$aff_fichiers[]= $f;
else
spip_log("chargement de $f interdit");
}
}
}
}
}
}
return $aff_fichiers ;
}
function afficher_compactes($image_name, $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'),
_L(''),
"<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();
}
//
// Ajouter un unique document
//
function ajout_doc($orig, $source, $mode, $id_document) {
global $hash_id_auteur, $hash, $id_article, $type;
//
// Securite
//
if (!verifier_action_auteur("ajout_doc", $hash, $hash_id_auteur))
return;
// type de document inconnu ?
if (!ereg("\.([^.]+)$", $orig, $match)) return;
$ext = corriger_extension(addslashes(strtolower($match[1])));
$row = spip_query("SELECT * FROM spip_types_documents WHERE extension='$ext' AND upload='oui'" . (($mode != 'vignette') ? '' : " AND inclus='image'"));
// type de document invalide ?
if (!$row = spip_fetch_array($row)) {return;}
// Recopier le fichier sauf si deja fait (zip tel quel)
$dest_path = !$source ? $orig : copier_document($ext,$orig, $source);
if (!$dest_path) return;
// Preparation
if ($mode == 'vignette') {
$id_document_lie = $id_document;
$query = "UPDATE spip_documents SET mode='document' where id_document='$id_document_lie'";
spip_query($query); // requete inutile a mon avis (Fil)...
$id_document = 0;
}
if (!$id_document) {
$id_type = $row['id_type'];
$id_document = spip_abstract_insert("documents", "(id_type, titre, date)", "($id_type, '', NOW())");
$nouveau = true;
if ($id_article && isset($type)) {
$query = "INSERT INTO spip_documents_".$type."s (id_document, id_".$type.") VALUES ($id_document, $id_article)";
spip_query($query);
}
}
//
// Mettre a jour les infos du document uploade
//
$size_image = @getimagesize($dest_path);
$type_image = decoder_type_image($size_image[2]);
if ($type_image) {
$largeur = $size_image[0];
$hauteur = $size_image[1];
}
$taille = filesize($dest_path);
if ($nouveau) {
$type_inclus = $row['inclus'];
if (!$mode) $mode = ($type_image AND $type_inclus == 'image') ? 'vignette' : 'document';
$update = "mode='$mode', ";
}
spip_query("UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier='$dest_path' WHERE id_document=$id_document");
if ($id_document_lie) {
$query = "UPDATE spip_documents SET id_vignette=$id_document WHERE id_document=$id_document_lie";
spip_query($query);
$id_document = $id_document_lie; // pour que le 'return' active le bon doc.
}
// Creer la vignette
if ($mode == 'document' AND ereg(",$ext,", ','.lire_meta('formats_graphiques').',')) {
creer_fichier_vignette($dest_path);
}
}
// Ajouter un ou plusieurs documents ?
function ajout_doc_zip($image, $image_name, $mode, $forcer_document, $action_zip, $id_document, $hash, $link)
{
// image_name n'est valide que par POST http, mais pas par la methode ftp/upload
// par ailleurs, pour un fichier ftp/upload, il faut effacer l'original nous-memes
// action_zip indique un rappel par la fonction affiche_compactes
if (!$action_zip){
// on va se rappeler: copier le fichier car PHP va le virer
$image_name = copier_document("zip", $image_name, $image);
// anormal, on se tire
if (!$image_name) exit;
// renvoyer un formulaire demandant si on deballe ou pas
require_once(_DIR_RESTREINT . 'pclzip.lib.php');
$fichiers = verifier_compactes($image_name);
if ($fichiers) {
$link->addVar("image_name", $image_name);
afficher_compactes($image_name, $fichiers, $link);
exit;
}
// pas possible de deballer, on continue
$forcer_document = 'oui';
$image = $image_name;
}
else {
// reponse au formulaire
if ($action_zip == "telquel") {
$forcer_document = 'oui';
} else {
require_once(_DIR_RESTREINT . 'pclzip.lib.php');
$archive = new PclZip($image_name);
$tmp_dir = creer_repertoire_documents($hash);
$archive->extract(PCLZIP_OPT_PATH, $tmp_dir, PCLZIP_OPT_REMOVE_ALL_PATH);
# virer le zip après le déballage
@unlink($image_name);
$image_name = $tmp_dir;
}
}
ajout_doc_s($image, $image_name, $mode, $forcer_document,$id_document, $hash);
}
function ajout_doc_s($image, $image_name, $mode, $forcer_document, $id_document, $hash)
{
if (!is_dir($image_name)) {
ajout_doc($image_name,
$image,
($forcer_document == 'oui' ? "document" : $mode),
$id_document);
} else {
include_ecrire('inc_documents.php3');
$fichiers = fichiers_upload($image_name);
while (list(,$f) = each($fichiers)) {
if (ereg("\.([^.]+)$", $f, $match)) {
$ext = strtolower($match[1]);
if ($ext == 'jpeg')
$ext = 'jpg';
$r = spip_query("SELECT extension FROM spip_types_documents WHERE extension='$ext'" . ($inclus ? " AND inclus='$inclus'" : ''));
if (spip_fetch_array($r))
ajout_doc($f, $f, 'document', false);
}
}
# détruire le repertoire de deballage
if ($tmp_dir) effacer_repertoire_temporaire($tmp_dir);
}
}
function effacer_repertoire_temporaire($nom) {
$d = opendir($nom);
while ($f = readdir($d)) {
if (is_file($f = "$nom/$f")) @unlink($f);
}
@rmdir($nom);
}
?>