diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index 723d4636956ac3a0b87b69e92a3003ab004e5935..915212ce1fdd7966df73a11e40cf43e4bf83f9e2 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -286,41 +286,36 @@ function nom_fichier_copie_locale($source, $extension) { // // http://doc.spip.org/@fichier_copie_locale function fichier_copie_locale($source) { - // Si c'est une image locale pas de souci + // Si c'est deja local pas de souci if (!preg_match(',^\w+://,', $source)) { if (_DIR_RACINE) $source = preg_replace(',^'.preg_quote(_DIR_RACINE).',', '', $source); return $source; } - // Chercher d'abord le doc dans la table des documents, pour se baser sur son type reel - $s = sql_select("extension", "spip_documents", "fichier=" . sql_quote($source) . " AND distant='oui' AND extension>''"); - if ($t = sql_fetch($s)) { - $extension = $t['extension']; + // Si c'est deja dans la table des documents, + // ramener le nom de sa copie potentielle + $ext = sql_getfetsel("extension", "spip_documents", "fichier=" . sql_quote($source) . " AND distant='oui' AND extension <> ''"); + if ($ext) return nom_fichier_copie_locale($source, $ext); - // si la source n'est pas dans la table des documents, - // on determine son extension et on verifie que c'est ok - } else { - if ( - // voir si l'extension est pas indiquee dans le nom du fichier et si il aurait pas deja ete rapatrie, auquel cas c'est ok - ($path_parts = pathinfo($source) AND $ext = $path_parts['extension'] AND $f = _DIR_RACINE . nom_fichier_copie_locale($source, $ext) AND file_exists($f)) - OR - // on la ping et on regarde si son extension est connue et autorisee - ($a = recuperer_infos_distantes($source,0,false) AND $ext = $a['extension']) - OR - // a defaut on fait confiance a l'extension - ($path_parts = pathinfo($source) AND $ext = $path_parts['extension']) - ) { - // verifier que c'est un type autorise - $t = sql_fetsel("extension", "spip_types_documents", "extension=".sql_quote($ext)); - if ($t) - $extension = $t['extension']; - } - } + // voir si l'extension indiquee dans le nom du fichier est ok + // et si il n'aurait pas deja ete rapatrie - if (isset($extension)) - return nom_fichier_copie_locale($source, $extension); + $path_parts = pathinfo($source); + $ext = $path_part ? $path_parts['extension'] : ''; + + if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=".sql_quote($ext))) { + $f = nom_fichier_copie_locale($source, $ext); + if (file_exists(_DIR_RACINE . $f)) + return $f; + } + // Ping pour voir si son extension est connue et autorisee + $path_parts = recuperer_infos_distantes($source,0,false) ; + $ext = $path_part ? $path_parts['extension'] : ''; + if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=".sql_quote($ext))) { + return nom_fichier_copie_locale($source, $ext); + } } diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php index 32e83c374cf9ba776b31aa5e71292d7999ad8242..54ee7bc0fa2337195f18409a9c4655fe93a784e7 100644 --- a/ecrire/inc/documents.php +++ b/ecrire/inc/documents.php @@ -42,12 +42,17 @@ function get_spip_doc($fichier) { : $fichier; } -function contenu_document($id_document) +// Filtre pour #ID_DOCUMENT ou #URL_DOCUMENT + +function contenu_document($arg) { - $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($id_document)); - if (!$r) return ''; - $f = $r['fichier']; - $f = ($r['distant'] =='oui') ? copie_locale($f) : get_spip_doc($f); + if (is_numeric($arg)) { + $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($arg)); + if (!$r) return ''; + $f = $r['fichier']; + $f = ($r['distant'] =='oui') ? copie_locale($f) : get_spip_doc($f); + } else if (!$f = copie_locale($arg)) return ''; + return spip_file_get_contents($f); } @@ -65,7 +70,7 @@ function generer_url_document_dist($id_document, $args='', $ancre='') { // Si droit de voir tous les docs, pas seulement celui-ci // il est inutilement couteux de rajouter une protection - if (($row['distant'] == 'oui') OR !autoriser('voir', 'document')) + if (($row['distant'] == 'oui') OR autoriser('voir', 'document')) return get_spip_doc($f); include_spip('inc/securiser_action');