ff905e6aad501eeacd3331d54a7ffff913ec7395
[lhc/web/www.git] / www / plugins-dist / medias / action / supprimer_document.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
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 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 // https://code.spip.net/@supprimer_document
18 function action_supprimer_document_dist($id_document = 0) {
19 if (!$id_document) {
20 $securiser_action = charger_fonction('securiser_action', 'inc');
21 $id_document = $securiser_action();
22 }
23 include_spip('inc/autoriser');
24 if (!autoriser('supprimer', 'document', $id_document)) {
25 spip_log("Echec : Suppression document $id_document interdite", _LOG_ERREUR);
26
27 return false;
28 }
29
30 // si c'etait une vignette, modifier le document source !
31 if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette=' . intval($id_document))) {
32 include_spip('action/editer_document');
33 document_modifier($source, array('id_vignette' => 0));
34 }
35
36 include_spip('inc/documents');
37 if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document=' . intval($id_document))) {
38 spip_log("Echec : Suppression document $id_document : le document n'existe pas en base", _LOG_ERREUR);
39
40 return false;
41 }
42
43 spip_log("Suppression du document $id_document (" . $doc['fichier'] . ')');
44 include_spip('action/editer_liens');
45
46 // Si c'est un document ayant une vignette, supprimer aussi la vignette
47 if ($doc['id_vignette']) {
48 action_supprimer_document_dist($doc['id_vignette']);
49 objet_dissocier(array('document' => $doc['id_vignette']), '*');
50 }
51 // Si c'est un document ayant des documents annexes (sous-titre, ...)
52 // les supprimer aussi
53 $annexes = array_map(
54 'reset',
55 sql_allfetsel('id_document', 'spip_documents_liens', "objet='document' AND id_objet=" . intval($id_document))
56 );
57 foreach ($annexes as $id) {
58 action_supprimer_document_dist($id);
59 }
60
61 // dereferencer dans la base
62 objet_dissocier(array('document' => $id_document), '*', array('role' => '*'));
63 sql_delete('spip_documents', 'id_document=' . intval($id_document));
64
65
66 // Supprimer le fichier si le doc est local,
67 // et la copie locale si le doc est distant
68 if ($doc['distant'] == 'oui') {
69 include_spip('inc/distant');
70 if ($local = _DIR_RACINE . copie_locale($doc['fichier'], 'test')) {
71 spip_unlink($local);
72 }
73 } else {
74 spip_unlink(get_spip_doc($doc['fichier']));
75 }
76
77 pipeline(
78 'post_edition',
79 array(
80 'args' => array(
81 'operation' => 'supprimer_document', // compat v<=2
82 'action' => 'supprimer_document',
83 'table' => 'spip_documents',
84 'id_objet' => $id_document,
85 'document' => $doc,
86 ),
87 'data' => null
88 )
89 );
90
91 return true;
92 }