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

Last change on this file since 44157 was 44157, checked in by cedric@…, 9 years ago

report de r44136
prevoir que l'on peut rattacher un document a un autre. C'est une pre-figuration de la reorganisation des documents.
Dans spip_documents_liens id_document designe toujours l'enfant (dependant de) et (id_objet,objet) le parent.
Donc ici un document annexe (sous-titrage, licence, ..) est designe par id_document, et (id_objet,objet='document') pointe vers le document maitre.
Des variantes du mode 'vignette' sont donc a prevoir, pour les documents annexes

File size: 3.0 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2011                                                *
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")) return;
14
15// http://doc.spip.org/@supprimer_document
16function action_supprimer_document_dist($id_document=0) {
17        if (!$id_document){
18                $securiser_action = charger_fonction('securiser_action','inc');
19                $id_document = $securiser_action();
20        }
21        include_spip('inc/autoriser');
22        if (!autoriser('supprimer','document',$id_document)){
23                spip_log("Echec : Suppression document $id_document interdite",_LOG_ERREUR);
24                return false;
25        }
26
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_set($source,array("id_vignette" => 0));
31        }
32
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);
36                return false;
37        }
38
39        spip_log("Suppression du document $id_document (".$doc['fichier'].")");
40
41        // Si c'est un document ayant une vignette, supprimer aussi la vignette
42        if ($doc['id_vignette']) {
43                action_supprimer_document_dist($doc['id_vignette']);
44                sql_delete('spip_documents_liens', 'id_document='.$doc['id_vignette']);
45        }
46        // Si c'est un document ayant des documents annexes (sous-titre, ...)
47        // les supprimer aussi
48        $annexes = array_map('reset',sql_allfetsel("id_document","spip_documents_liens","objet='document' AND id_objet=".intval($id_document)));
49  foreach($annexes as $id){
50          action_supprimer_document_dist($id);
51  }
52
53        // dereferencer dans la base
54  sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
55        sql_delete('spip_documents', 'id_document='.intval($id_document));
56        // securite
57        sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
58
59
60        // Supprimer le fichier si le doc est local,
61        // et la copie locale si le doc est distant
62        if ($doc['distant'] == 'oui') {
63                include_spip('inc/distant');
64                if ($local = _DIR_RACINE . copie_locale($doc['fichier'],'test'))
65                        spip_unlink($local);
66        }
67        else
68                spip_unlink(get_spip_doc($doc['fichier']));
69
70        pipeline('post_edition',
71                array(
72                        'args' => array(
73                                'operation' => 'supprimer_document',
74                                'table' => 'spip_documents',
75                                'id_objet' => $id_document
76                        ),
77                        'data' => null
78                )
79        );
80  return true;
81}
82
83?>
Note: See TracBrowser for help on using the repository browser.