From 8b6f111212d40b8c0bd52e0aaabb75d0f1ddbdb5 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Mon, 27 Oct 2008 18:30:09 +0000 Subject: [PATCH] reparer la 'suppression' des documents utilises a de multiples endroits dans ce cas la suppression n'est qu'une desassociation la fonction supprimer_document est externalisee pour simplifier la surcharge --- .gitattributes | 1 + ecrire/action/documenter.php | 33 ++------------------- ecrire/action/supprimer_document.php | 44 ++++++++++++++++++++++++++++ ecrire/inc/legender.php | 4 +-- 4 files changed, 49 insertions(+), 33 deletions(-) create mode 100644 ecrire/action/supprimer_document.php diff --git a/.gitattributes b/.gitattributes index 7cb8e75bee..82db6fb4c1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -93,6 +93,7 @@ ecrire/action/referencer_traduction.php -text ecrire/action/regler_moderation.php -text ecrire/action/reorganiser.php -text ecrire/action/supprimer.php -text +ecrire/action/supprimer_document.php -text ecrire/action/supprimer_traduction.php -text ecrire/action/tester.php -text ecrire/action/tester_taille.php -text diff --git a/ecrire/action/documenter.php b/ecrire/action/documenter.php index a1843cd330..32e808df09 100644 --- a/ecrire/action/documenter.php +++ b/ecrire/action/documenter.php @@ -39,39 +39,12 @@ function supprimer_lien_document($id_document, $objet, $id_objet) { sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=".$id_document); // On supprime ensuite s'il est orphelin - if (!sql_countsel('spip_documents_liens', 'id_document='.$id_document)) - return supprimer_document($id_document); - -} - -// http://doc.spip.org/@supprimer_document -function supprimer_document ($id_document) { - include_spip('inc/documents'); - - if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.$id_document)) - return false; - - spip_log("Suppression du document $id_document (".$doc['fichier'].")"); - - // Si c'est un document ayant une vignette, supprimer aussi la vignette - if ($doc['id_vignette']) { - supprimer_document($doc['id_vignette']); - sql_delete('spip_documents_liens', 'id_document='.$doc['id_vignette']); - } - - // Supprimer le fichier si le doc est local, - // et la copie locale si le doc est distant - if ($doc['distant'] == 'oui') { - include_spip('inc/distant'); - if ($local = copie_locale($doc['fichier'],'test')) - spip_unlink($local); + if (!sql_countsel('spip_documents_liens', 'id_document='.$id_document)){ + $supprimer_document = charger_fonction('supprimer_document','action'); + return $supprimer_document($id_document); } - else spip_unlink(get_spip_doc($doc['fichier'])); - - sql_delete('spip_documents', 'id_document='.$id_document); } - // http://doc.spip.org/@action_documenter_post function action_documenter_post($r) { diff --git a/ecrire/action/supprimer_document.php b/ecrire/action/supprimer_document.php new file mode 100644 index 0000000000..7be935d930 --- /dev/null +++ b/ecrire/action/supprimer_document.php @@ -0,0 +1,44 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2008 * + * 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; + +// http://doc.spip.org/@supprimer_document +function action_supprimer_document_dist($id_document) { + if (!autoriser('supprimer','document',$id_document)) + return false; + + include_spip('inc/documents'); + if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.$id_document)) + return false; + + spip_log("Suppression du document $id_document (".$doc['fichier'].")"); + + // Si c'est un document ayant une vignette, supprimer aussi la vignette + if ($doc['id_vignette']) { + supprimer_document($doc['id_vignette']); + sql_delete('spip_documents_liens', 'id_document='.$doc['id_vignette']); + } + + // Supprimer le fichier si le doc est local, + // et la copie locale si le doc est distant + if ($doc['distant'] == 'oui') { + include_spip('inc/distant'); + if ($local = copie_locale($doc['fichier'],'test')) + spip_unlink($local); + } + else spip_unlink(get_spip_doc($doc['fichier'])); + + sql_delete('spip_documents', 'id_document='.$id_document); +} + +?> \ No newline at end of file diff --git a/ecrire/inc/legender.php b/ecrire/inc/legender.php index d99526c955..4b7ced1765 100644 --- a/ecrire/inc/legender.php +++ b/ecrire/inc/legender.php @@ -87,10 +87,8 @@ function legender_suppression($id, $id_document, $ancre, $s, $script, $supp, $ty // sans doute a revoir car le document serait alors peut-etre orphelin if ($id <= 0) return ''; - // si plusieurs liens sur le doc, pas de bouton de suppression - if (sql_countsel('spip_documents_liens', 'id_document='.$id_document) > 1) - return ''; + // la fonction 'supprimer_document' ne fait que de-associer si un document est utilise par ailleurs $texte = _T('icone_supprimer_document'); if (preg_match('/_edit$/', $script)) { -- GitLab