source: spip-zone/_plugins_/mediatheque/action/dissocier_document.php @ 48093

Last change on this file since 48093 was 48093, checked in by rastapopoulos@…, 10 years ago

Pouvoir appeler des actions depuis n'importe où en passant l'argument explicitement.

File size: 3.9 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2009                                                *
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
16function action_dissocier_document_dist($arg=null){
17        if(is_null($arg)){
18                $securiser_action = charger_fonction('securiser_action', 'inc');
19                $arg = $securiser_action();
20        }
21
22        $arg = explode('-',$arg);
23
24        list($id_objet, $objet, $document) = $arg;
25        $suppr=false;
26        if (count($arg)>3 AND $arg[3]=='suppr')
27                $suppr = true;
28        if (count($arg)>4 AND $arg[4]=='safe')
29                $check = true;
30        if ($id_objet=intval($id_objet) AND autoriser('modifier',$objet,$id_objet))
31                dissocier_document($document, $objet, $id_objet, $suppr, $check);
32        else
33                spip_log("Interdit de modifier $objet $id_objet","spip");
34}
35
36// http://doc.spip.org/@supprimer_lien_document
37function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false) {
38        if (!$id_document = intval($id_document))
39                return false;
40
41        // D'abord on ne supprime pas, on dissocie
42        sql_delete("spip_documents_liens", "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND id_document=".$id_document);
43
44        // Si c'est une vignette, l'eliminer du document auquel elle appartient
45        // cas tordu peu probable
46        sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=".$id_document);
47
48        pipeline('post_edition',
49                array(
50                        'args' => array(
51                                'operation' => 'delier_document',
52                                'table' => 'spip_documents',
53                                'id_objet' => $id_document,
54                                'objet' => $objet,
55                                'id' => $id_objet
56                        ),
57                        'data' => null
58                )
59        );
60
61        if ($check) {
62                // si demande, on verifie que ses documents vus sont bien lies !
63                $spip_table_objet = table_objet_sql($objet);
64                $table_objet = table_objet($objet);
65                $id_table_objet = id_table_objet($objet,$serveur);
66                $champs = sql_fetsel('*',$spip_table_objet,addslashes($id_table_objet)."=".intval($id_objet));
67
68                $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
69                $marquer_doublons_doc($champs,$id_objet,$objet,$id_table_objet,$table_objet,$spip_table_objet, '', $serveur);
70        }
71
72        // On supprime ensuite s'il est orphelin
73        // et si demande
74        // ici on ne bloque pas la suppression d'un document rattache a un autre
75        if ($supprime AND !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".$id_document)){
76                $supprimer_document = charger_fonction('supprimer_document','action');
77                return $supprimer_document($id_document);
78        }
79}
80
81function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false){
82        if ($id_document=intval($document)) {
83                supprimer_lien_document($id_document, $objet, $id_objet, $supprime, $check);
84        }
85        else {
86                list($image,$mode) = explode('/',$document);
87                $image = ($image=='I');
88                $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image  ? '' : 'NOT');
89
90                $obj = "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet);
91
92                $s = sql_select('docs.id_document',
93                        "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document",
94                        "$obj AND vu='non' AND docs.mode=".sql_quote($mode)." AND $typdoc");
95                while ($t = sql_fetch($s)) {
96                        supprimer_lien_document($t['id_document'], $objet, $id_objet, $supprime, $check);
97                }
98        }
99
100        // pas tres generique ca ...
101        if ($objet == 'rubrique') {
102                include_spip('inc/rubriques');
103                depublier_branche_rubrique_if($id);
104        }
105}
106?>
Note: See TracBrowser for help on using the repository browser.