Dépôt officiel du core SPIP * Copie possible par svn sur svn://trac.rezo.net/spip * Les svn:externals sont présent dans https://git.spip.net/SPIP/[nom du plugin dist]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

559 lines
17 KiB

<?php
18 years ago
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2008 *
18 years ago
* 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;
include_spip('inc/actions'); // *action_auteur et determine_upload
include_spip('inc/date');
// 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
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
function get_spip_doc($fichier) {
// fichier distant
if (preg_match(',^\w+://,', $fichier))
return $fichier;
// gestion d'erreurs, fichier=''
if (!strlen($fichier))
return false;
// fichier normal
return (strpos($fichier, _DIR_IMG) === false)
? _DIR_IMG . $fichier
: $fichier;
}
// Filtre pour #ID_DOCUMENT ou #FICHIER
15 years ago
// http://doc.spip.org/@contenu_document
function contenu_document($arg)
Extension du modèle ''emb''. http://www.spip-contrib.net/Creer-de-grands-tableaux-dans-SPIP,24 remarque qu'il est malcommode de transformer en article SPIP un texte issu d'un tableur. En conséquence, le modèle ''emb'' voit son domaine étendu. Le squelette se réduit à présent à inclure un autre squelette, portant le nom du type MIME principal du document, officiellement au nombre de 5 pour les types simples: ''application, audio, image, video, text''. Pour les quatre premiers, le squelette fait la même chose que la version précédente du squelette ''emb'', mais leur écriture en est simplifiée (et pourrait certainement l'être encore plus); Pour le type ''text'', le comportement de ''emb'' est à présent d'insérer le contenu du document dans la zone de texte où est utilisé ce modèle (auparant il ne faisait rien). Il suffit donc, pour faire apparaitre le contenu d'un tel fichier (txt, html etc) dans le corps d'un article, d'écrire {{{<embNNN|>}}} où NNN est son id_document. De plus, ce squelette applique, s'il existe, le filtre {{{filtre_text_}}}''sous_type'' sur le contenu en question. En particulier, est fourni le filtre {{{filtre_text_csv}}} qui transforme les ";" en "|", et permet ainsi de visualiser sous forme d'une table HTML mise en page par SPIP, le contenu d'un fichier fourni par un tableur au format CSV. A noter que sont donc implicitement fournis les modèles ''application, audio, image, video, text'' dont l'usage direct est un peu plus rapide que ''emb''. Prospectives: - on pourrait convenir dans le squelette standard qu'un article sans texte mais muni d'un pièce jointe de type text utilise ce modèle; - il faudrait fusionner les fonctions charger_fonction, filtrer, chercher_filtre et appliquer_filtre qui font presque la même chose.
15 years ago
{
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 '';
Extension du modèle ''emb''. http://www.spip-contrib.net/Creer-de-grands-tableaux-dans-SPIP,24 remarque qu'il est malcommode de transformer en article SPIP un texte issu d'un tableur. En conséquence, le modèle ''emb'' voit son domaine étendu. Le squelette se réduit à présent à inclure un autre squelette, portant le nom du type MIME principal du document, officiellement au nombre de 5 pour les types simples: ''application, audio, image, video, text''. Pour les quatre premiers, le squelette fait la même chose que la version précédente du squelette ''emb'', mais leur écriture en est simplifiée (et pourrait certainement l'être encore plus); Pour le type ''text'', le comportement de ''emb'' est à présent d'insérer le contenu du document dans la zone de texte où est utilisé ce modèle (auparant il ne faisait rien). Il suffit donc, pour faire apparaitre le contenu d'un tel fichier (txt, html etc) dans le corps d'un article, d'écrire {{{<embNNN|>}}} où NNN est son id_document. De plus, ce squelette applique, s'il existe, le filtre {{{filtre_text_}}}''sous_type'' sur le contenu en question. En particulier, est fourni le filtre {{{filtre_text_csv}}} qui transforme les ";" en "|", et permet ainsi de visualiser sous forme d'une table HTML mise en page par SPIP, le contenu d'un fichier fourni par un tableur au format CSV. A noter que sont donc implicitement fournis les modèles ''application, audio, image, video, text'' dont l'usage direct est un peu plus rapide que ''emb''. Prospectives: - on pourrait convenir dans le squelette standard qu'un article sans texte mais muni d'un pièce jointe de type text utilise ce modèle; - il faudrait fusionner les fonctions charger_fonction, filtrer, chercher_filtre et appliquer_filtre qui font presque la même chose.
15 years ago
return spip_file_get_contents($f);
}
16 years ago
// http://doc.spip.org/@generer_url_document_dist
Revision de l'interface aux jeux de fonctions generer_url_$objet, commandés en particulier par la globale $type_urls. Ces fonctions n'admettaient auparavant qu'un seul argument, index de la clé primaire dans la table correspondante. En conséquence, il n'était pas possible d'exploiter à fond les possibilités des raccourcis données par la RegExp: define('_RACCOURCI_URL', ',^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?$,S'); qui autorise explicitement paramètres supplémentaires et ancre, lesquels étaient raoutés ultérieurement, et mal à propos en cas de redirection. A présent, les fonctions generer_url_*objet sont appelées avec les 2 arguments supplémentaires trouvés dans le raccourci, le premier étant censé etre une suite n1=v1&n2=v2 et le deuxième une ancre. Les définitions standards de ces jeux de fonctions (urls/page urls/html urls/propres et inc/urls) admettent ces nouveaux arguments et les injectent dans les URL construites. Dans le cas où les URLs sont en fait des scripts qui provoqueront une redirection, l'ancre est fourni sous la forme "ancre=nom", le script de redirection synthétisant "#$ancre" dans l'URL finale. Compatibilité: - totale pour les sites sans mes_options.php personnelle; - vraisemblablement assurée pour ceux définissant un jeu de fonctions generer_url_$objet car: -- PHP ne dit rien en présence d'arguments excédentaires -- les variantes generer_url_ecrire_$objet admettaient certes déjà un 2e argument, mais son utilisation comportait un bug suggérant qu'il n'avait jamais utilisé en dehors du noyau de Spip où il était transparent (cet argument est donc maintenant en 4e position, et permet de forcer le statut de l'objet) -- le 2e argument generer_url_forum n'avait jamais été utilisé; -- ce sont à présent ces fonctions qui doivent rajouter la suite d'arguments supplémentaires et l'ancre, mais il est douteux que certaines comptaient dessus sinon la faute de conception motivant ce dépot aurait été signalée depuis longtemps; - pour le sous-jeu de fonctions calculer_url_$objet, il reçoit à présent en 3e argument ce qu'a calculé le generer_url_$objet correspondant, ce qui leur facilite le travail. A noter une curieuse dissymétrie pour le raccourci des sites, qui dans ce cas retoune l'URL du site et non du script (conservée telle quelle). A signaler également que la RegExp des raccourcis était assez laxiste, cherchanten vain des fonctions generer_url_$objet avec $objet n'étant pas nécessairement un \w+.
16 years ago
function generer_url_document_dist($id_document, $args='', $ancre='') {
include_spip('inc/autoriser');
if (!autoriser('voir', 'document', $id_document)) return '';
$r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($id_document));
if (!$r) return '';
$f = $r['fichier'];
if ($r['distant'] == 'oui') return $f;
// Si droit de voir tous les docs, pas seulement celui-ci
// il est inutilement couteux de rajouter une protection
$r = autoriser('voir', 'document');
if ($r AND $r !== 'htaccess') return get_spip_doc($f);
include_spip('inc/securiser_action');
return generer_url_action('acceder_document',
$args . ($args ? "&" : '')
. 'arg='.$id_document
. ($ancre ? "&ancre=$ancre" : '')
. '&cle=' . calculer_cle_action($id_document.','.$f)
. '&file=' . rawurlencode($f)
);
}
//
// Vignette pour les documents lies
//
// http://doc.spip.org/@vignette_par_defaut
function vignette_par_defaut($ext, $size=true, $loop = true) {
if (!$ext)
$ext = 'txt';
// Chercher la vignette correspondant a ce type de document
// dans les vignettes persos, ou dans les vignettes standard
if (!@file_exists($v = _DIR_IMG_ICONES . $ext.'.png')
AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.gif')
# icones standard
AND !@file_exists($v = _DIR_IMG_ICONES_DIST . $ext.'.png')
# cas d'une install dans un repertoire "applicatif"...
AND !@file_exists(_ROOT_IMG_ICONES_DIST . $v)
)
if ($loop)
$v = vignette_par_defaut('defaut', false, $loop=false);
else
$v = false; # pas trouve l'icone de base
if (!$size) return $v;
if ($size = @getimagesize($v)) {
$largeur = $size[0];
$hauteur = $size[1];
}
return array($v, $largeur, $hauteur);
}
//
// Affiche le document avec sa vignette par defaut
//
// Attention : en mode 'doc', si c'est un fichier graphique on prefere
// afficher une vue reduite, quand c'est possible (presque toujours, donc)
// En mode 'image', l'image conserve sa taille
//
// A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille
// de la vignette -> c'est a ca que sert la variable $portfolio
// http://doc.spip.org/@image_pattern
function image_pattern($vignette) {
return "<img src='"
. get_spip_doc($vignette['fichier'])."'
alt=' '
width='".$vignette['largeur']."'
height='".$vignette['hauteur']."' />";
}
// http://doc.spip.org/@document_et_vignette
function document_et_vignette($document, $url, $portfolio=false) {
$extension = $document['extension'];
$vignette = $document['id_vignette'];
if ($vignette)
$vignette = sql_fetsel("*", "spip_documents", "id_document = ".$vignette);
if ($vignette) {
if (!$portfolio OR !($GLOBALS['meta']['creer_preview'] == 'oui')) {
$image = image_pattern($vignette);
} else {
include_spip('inc/filtres');
$loc = get_spip_doc($vignette['fichier']);
$image = filtrer('image_reduire', $loc, 120, 110, false, true);
if ($loc == $image)
$image = image_pattern($vignette);
}
}
else if (in_array($extension,
explode(',', $GLOBALS['meta']['formats_graphiques']))
AND $GLOBALS['meta']['creer_preview'] == 'oui') {
include_spip('inc/distant');
include_spip('inc/filtres');
// Si le document distant a une copie locale, on peut l'exploiter
if ($document['distant'] == 'oui') {
$image = _DIR_RACINE.copie_locale($document['fichier'], 'test');
} else {
$image = get_spip_doc($document['fichier']);
}
if ($image) {
if ($portfolio) {
$image = filtrer('image_reduire', $image, 110, 120, false, true);
} else {
$image = filtrer('image_reduire', $image, -1,-1,false, true);
}
}
} else {
$image = '';
}
if (!$image) {
list($fichier, $largeur, $hauteur) = vignette_par_defaut($extension);
$image = "<img src='$fichier'\n\theight='$hauteur' width='$largeur' alt=' ' />";
} else $image = inserer_attribut($image, 'alt', ' ');
if (!$url)
return $image;
else {
$t = sql_fetsel("mime_type", "spip_types_documents", "extension=".sql_quote($document['extension']));
return "<a href='$url'\n\ttype='".$t['mime_type']."'>$image</a>";
}
}
//
// Afficher un document dans la colonne de gauche
//
// http://doc.spip.org/@afficher_documents_colonne
function afficher_documents_colonne($id, $type="article",$script=NULL) {
include_spip('inc/autoriser');
// il faut avoir les droits de modif sur l'article pour pouvoir uploader !
if (!autoriser('joindredocument',$type,$id))
return "";
include_spip('inc/presentation'); // pour l'aide quand on appelle afficher_documents_colonne depuis un squelette
// seuls cas connus : article, breve ou rubrique
if ($script==NULL){
$script = $type.'s_edit';
if (!test_espace_prive())
$script = parametre_url(self(),"show_docs",'');
}
$id_document_actif = _request('show_docs');
// Ajouter nouvelle image
$joindre = charger_fonction('joindre', 'inc');
$ret = "<div id='images'>\n"
. $joindre(array(
'cadre' => 'relief',
'icone' => 'image-24.gif',
'fonction' => 'creer.gif',
'titre' => _T('bouton_ajouter_image').aide("ins_img"),
'script' => $script,
'args' => "id_$type=$id",
'id' => $id,
'intitule' => _T('info_telecharger'),
'mode' => 'image',
'type' => $type,
'ancre' => '',
'id_document' => 0,
'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true)
))
. '</div><br />';
//// Documents associes
$res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_".$type."=" .sql_quote($id) . " AND D.mode='document'", "", "D.id_document");
$documents_lies = array();
while ($row = sql_fetch($res))
$documents_lies[]= $row['id_document'];
//// Images sans documents
$res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_".$type."=" .sql_quote($id) . " AND D.mode='image'", "", "D.id_document");
$ret .= "\n<div id='liste_images'>";
while ($doc = sql_fetch($res)) {
$id_document = $doc['id_document'];
$deplier = ($id_document_actif==$id_document);
$ret .= afficher_case_document($id_document, $id, $script, $type, $deplier);
}
/// Ajouter nouveau document
$ret .= "</div><br /><br /><div id='documents'></div>\n<div id='portfolio'></div>\n";
if (!isset($GLOBALS['meta']["documents_$type"]) OR $GLOBALS['meta']["documents_$type"]!='non') {
$ret .= $joindre(array(
'cadre' => 'enfonce',
'icone' => 'doc-24.gif',
'fonction' => 'creer.gif',
'titre' => _T('bouton_ajouter_document').aide("ins_doc"),
'script' => $script,
'args' => "id_$type=$id",
'id' => $id,
'intitule' => _T('info_telecharger'),
'mode' => 'document',
'type' => $type,
'ancre' => '',
'id_document' => 0,
'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true)
));
}
// Afficher les documents lies
$ret .= "<div id='liste_documents'>\n";
foreach($documents_lies as $id_document) {
$ret .= afficher_case_document($id_document, $id, $script, $type, ($id_document_actif==$id_document));
}
$ret .= "</div>";
if (test_espace_prive()){
$ret .= http_script('', "async_upload.js")
. http_script('$("form.form_upload").async_upload(async_upload_article_edit)');
}
return $ret;
}
//
// Affiche le raccourci <doc123|left>
// et l'insere quand on le clique
//
// http://doc.spip.org/@affiche_raccourci_doc
function affiche_raccourci_doc($doc, $id, $align) {
static $num = 0;
if ($align) {
$pipe = "|$align";
if ($GLOBALS['browser_barre'])
$onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe&gt;', $('.barre_inserer')[0]);\"\ntitle=\"". str_replace('&amp;', '&', entites_html(_T('double_clic_inserer_doc')))."\"";
} else {
$align='center';
}
return
((++$num > 1) ? "" : http_script('', "spip_barre.js"))
. "\n<div style='text-align: $align'$onclick>&lt;$doc$id$pipe&gt;</div>\n";
}
// Est-ce que le document est inclus dans le texte ?
16 years ago
// http://doc.spip.org/@est_inclus
function est_inclus($id_document) {
return isset($GLOBALS['doublons_documents_inclus']) ?
in_array($id_document,$GLOBALS['doublons_documents_inclus']) : false;
}
//
// Afficher un document sous forme de ligne depliable (pages xxx_edit)
//
// TODO: il y a du code a factoriser avec inc/documenter
// http://doc.spip.org/@afficher_case_document
function afficher_case_document($id_document, $id, $script, $type, $deplier=false) {
global $spip_lang_right;
$table = 'spip_documents_liens';
$prim = id_table_objet($table);
if (!$prim) return '';
$prim = 'id_' . $type;
charger_generer_url();
$document = sql_fetsel("docs.id_document, docs.id_vignette,docs.extension,docs.titre,docs.descriptif,docs.fichier,docs.largeur,docs.hauteur,docs.taille,docs.mode,docs.distant, docs.date, L.vu", "spip_documents AS docs JOIN $table AS L ON L.id_document=docs.id_document", "L.$prim=".sql_quote($id)." AND L.id_document=".sql_quote($id_document));
if (!$document) return "";
$id_vignette = $document['id_vignette'];
$extension = $document['extension'];
$titre = $document['titre'];
$descriptif = $document['descriptif'];
$url = generer_url_document($id_document);
$fichier = $document['fichier'];
$largeur = $document['largeur'];
$hauteur = $document['hauteur'];
$taille = $document['taille'];
$mode = $document['mode'];
$distant = $document['distant'];
// le doc est-il appele dans le texte ?
$doublon = est_inclus($id_document);
$cadre = strlen($titre) ? $titre : basename($fichier);
$letype = sql_fetsel("titre,inclus", "spip_types_documents", "extension=".sql_quote($extension));
if ($letype) {
$type_inclus = $letype['inclus'];
$type_titre = $letype['titre'];
}
//
// Afficher un document
//
$ret = "";
if ($mode == 'document') {
$ret .= "<a id='document$id_document' name='document$id_document'></a>\n";
$ret .= debut_cadre_enfonce("doc-24.gif", true, "", lignes_longues(typo($cadre),20));
if ($distant == 'oui') {
$dist = "\n<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>";
// Signaler les documents distants par une icone de trombone
$dist .= "\n<img src='" . chemin_image('attachment.gif') . "'\n\talt=\"$fichier\"\n\ttitle=\"$fichier\" />\n";
// Bouton permettant de copier en local le fichier
include_spip('inc/tourner');
$dist .= bouton_copier_local($document, $type, $id, $id_document, $script);
$dist .="</div>\n";
} else {
$dist = '';
}
//
// Affichage de la vignette
//
$ret .= "\n<div style='text-align: center'>"
. $dist
. document_et_vignette($document, $url, true)
. '</div>'
. "\n<div class='verdana1' style='text-align: center; color: black;'>\n"
. ($type_titre ? $type_titre :
( _T('info_document').' '.majuscules($extension)))
. "</div>";
// Affichage du raccourci <doc...> correspondant
$raccourci = '';
if (($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) {
$raccourci .= "<b>"._T('info_inclusion_vignette')."</b><br />";
}
$raccourci .= "<div style='color: 333333'>"
. affiche_raccourci_doc('doc', $id_document, 'left')
. affiche_raccourci_doc('doc', $id_document, 'center')
. affiche_raccourci_doc('doc', $id_document, 'right')
. "</div>\n";
if (($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) {
$raccourci .= "<div style='padding:2px; ' class='arial1 spip_xx-small'>";
$raccourci .= "<b>"._T('info_inclusion_directe')."</b><br />";
$raccourci .= "<div style='color: 333333'>"
. affiche_raccourci_doc('emb', $id_document, 'left')
. affiche_raccourci_doc('emb', $id_document, 'center')
. affiche_raccourci_doc('emb', $id_document, 'right')
. "</div>\n";
$raccourci .= "</div>";
}
$raccourci = $doublon
? affiche_raccourci_doc('doc', $id_document, '')
: $raccourci;
$ret .= "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>"
. $raccourci."</div>\n";
$legender = charger_fonction('legender', 'inc');
$ret .= $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier);
$ret .= fin_cadre_enfonce(true);
} else if ($mode == 'image') {
//
// Afficher une image inserable dans l'article
//
$ret .= debut_cadre_relief("image-24.gif", true, "", lignes_longues(typo($cadre),20));
//
// Afficher un apercu (pour les images)
//
if ($type_inclus == 'image') {
$ret .= "<div style='text-align: center; padding: 2px;'>\n";
$ret .= document_et_vignette($document, $url, true);
$ret .= "</div>\n";
}
//
// Preparer le raccourci a afficher sous la vignette ou sous l'apercu
//
$raccourci = "";
if (strlen($descriptif) > 0 OR strlen($titre) > 0)
$doc = 'doc';
else
$doc = 'img';
$raccourci .=
affiche_raccourci_doc($doc, $id_document, 'left')
. affiche_raccourci_doc($doc, $id_document, 'center')
. affiche_raccourci_doc($doc, $id_document, 'right');
$raccourci = $doublon
? affiche_raccourci_doc($doc, $id_document, '')
: $raccourci;
$ret .= "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>"
. $raccourci."</div>\n";
$legender = charger_fonction('legender', 'inc');
$ret .= $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier);
$ret .= fin_cadre_relief(true);
}
return $ret;
}
// Etablit la liste des documents orphelins, c'est-a-dire qui ne sont lies
// a aucun article ni breve ni rubrique ; renvoie un tableau (id_document)
15 years ago
// http://doc.spip.org/@lister_les_documents_orphelins
function lister_les_documents_orphelins() {
$s = sql_select("d.id_document, d.id_vignette",
"spip_documents AS d
LEFT JOIN spip_documents_liens AS l
ON d.id_document=l.id_document
LEFT JOIN spip_articles AS aa
ON aa.id_article=l.id_article
LEFT JOIN spip_breves AS bb
ON bb.id_breve=l.id_breve
LEFT JOIN spip_rubriques AS rr
ON rr.id_rubrique=l.id_rubrique
LEFT JOIN spip_forum AS ff
ON ff.id_forum=l.id_forum
",
"(aa.id_article IS NULL)
AND (bb.id_breve IS NULL)
AND (rr.id_rubrique IS NULL)
AND (ff.id_forum IS NULL)
");
$orphelins = array();
while ($t = sql_fetch($s)) {
$orphelins[$t['id_document']] = true;
// la vignette d'un orphelin est orpheline
if ($t['id_vignette'])
$orphelins[$t['id_vignette']] = true;
}
// les vignettes qui n'appartiennent a aucun document sont aussi orphelines
$s = sql_select("v.id_document",
"spip_documents AS v LEFT JOIN spip_documents AS d ON v.id_document=d.id_vignette",
"v.mode='vignette' AND d.id_document IS NULL");
while ($t = sql_fetch($s))
$orphelins[$t['id_document']] = true;
return array_keys(array_filter($orphelins));
}
// Supprimer les documents de la table spip_documents,
// ainsi que les fichiers correspondants dans IMG/
// Fonction a n'appeler que sur des documents orphelins
// http://doc.spip.org/@supprimer_documents
function supprimer_documents($liste = array()) {
if (!count($liste))
return;
$in = sql_in('id_document', $liste);
// Supprimer les fichiers locaux et les copies locales
// des docs distants
$s = sql_select("fichier, distant", "spip_documents", $in);
while ($t = sql_fetch($s)) {
if ($t['distant'] == 'oui') {
include_spip('inc/distant');
if ($local = copie_locale($t['fichier'], 'test'))
spip_log("efface $local = ".$t['fichier']);
supprimer_fichier($local);
}
else {
if (@file_exists($f = get_spip_doc($t['fichier']))) {
spip_log("efface $f");
supprimer_fichier($f);
}
}
}
// Supprimer les entrees dans spip_documents et associees
sql_delete('spip_documents', $in);
sql_delete('spip_documents_liens', $in);
}
?>