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 | |
---|
13 | if (!defined("_ECRIRE_INC_VERSION")) return; |
---|
14 | |
---|
15 | |
---|
16 | function 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 |
---|
37 | function 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 | |
---|
81 | function 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 | ?> |
---|