3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
13 if (!defined("_ECRIRE_INC_VERSION")) return;
15 // http://code.spip.net/@supprimer_document
16 function action_supprimer_document_dist($id_document=0) {
18 $securiser_action = charger_fonction('securiser_action','inc');
19 $id_document = $securiser_action();
21 include_spip('inc/autoriser');
22 if (!autoriser('supprimer','document',$id_document)){
23 spip_log("Echec : Suppression document $id_document interdite",_LOG_ERREUR
);
27 // si c'etait une vignette, modifier le document source !
28 if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette='.intval($id_document))){
29 include_spip('action/editer_document');
30 document_modifier($source,array("id_vignette" => 0));
33 include_spip('inc/documents');
34 if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.intval($id_document))){
35 spip_log("Echec : Suppression document $id_document : le document n'existe pas en base",_LOG_ERREUR
);
39 spip_log("Suppression du document $id_document (".$doc['fichier'].")");
40 include_spip('action/editer_liens');
42 // Si c'est un document ayant une vignette, supprimer aussi la vignette
43 if ($doc['id_vignette']) {
44 action_supprimer_document_dist($doc['id_vignette']);
45 objet_dissocier(array('document'=>$doc['id_vignette']),'*');
47 // Si c'est un document ayant des documents annexes (sous-titre, ...)
48 // les supprimer aussi
49 $annexes = array_map('reset',sql_allfetsel("id_document","spip_documents_liens","objet='document' AND id_objet=".intval($id_document)));
50 foreach($annexes as $id){
51 action_supprimer_document_dist($id);
54 // dereferencer dans la base
55 objet_dissocier(array('document'=>$id_document),'*');
56 sql_delete('spip_documents', 'id_document='.intval($id_document));
59 // Supprimer le fichier si le doc est local,
60 // et la copie locale si le doc est distant
61 if ($doc['distant'] == 'oui') {
62 include_spip('inc/distant');
63 if ($local = _DIR_RACINE
. copie_locale($doc['fichier'],'test'))
67 spip_unlink(get_spip_doc($doc['fichier']));
69 pipeline('post_edition',
72 'operation' => 'supprimer_document', // compat v<=2
73 'action' => 'supprimer_document',
74 'table' => 'spip_documents',
75 'id_objet' => $id_document