source: spip-zone/_core_/plugins/medias/action/supprimer_document.php

Last change on this file was 113294, checked in by spip.franck@…, 4 months ago

Il parait que le futur c'est maintenant :-D

File size: 3.1 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2019                                                *
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
13if (!defined('_ECRIRE_INC_VERSION')) {
14        return;
15}
16
17// https://code.spip.net/@supprimer_document
18function 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_column(
54                sql_allfetsel('id_document', 'spip_documents_liens', "objet='document' AND id_objet=" . intval($id_document)),
55                '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}
Note: See TracBrowser for help on using the repository browser.