source: spip-zone/_core_/plugins/medias/medias_autoriser.php @ 43934

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

modifier un document est permis, si il existe !

File size: 6.5 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/* Pour que le pipeline de rale pas ! */
16function medias_autoriser(){}
17
18
19function autoriser_portfolio_administrer_dist($faire,$quoi,$id,$qui,$options) {
20        return $qui['statut'] == '0minirezo';
21}
22
23function autoriser_documents_bouton_dist($faire,$quoi,$id,$qui,$options) {
24        return autoriser('administrer','portfolio',$id,$qui,$options);
25}
26
27/**
28 * Autoriser le changement des dimensions sur un document
29 * @param <type> $faire
30 * @param <type> $quoi
31 * @param <type> $id
32 * @param <type> $qui
33 * @param <type> $options
34 * @return <type>
35 */
36function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) {
37
38        if (!$id_document=intval($id))
39                return false;
40        if (!autoriser('modifier','document',$id,$qui,$options))
41                return false;
42
43        if (!isset($options['document']) OR !$document = $options['document'])
44                $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
45
46        // (on ne le propose pas pour les images qu'on sait
47        // lire : gif jpg png), sauf bug, ou document distant
48        if (in_array($document['extension'], array('gif','jpg','png'))
49                AND $document['hauteur']
50                AND $document['largeur']
51                AND $document['distant']!='oui')
52                return false;
53
54        // Donnees sur le type de document
55        $extension = $document['extension'];
56        $type_inclus = sql_getfetsel('inclus','spip_types_documents', "extension=".sql_quote($extension));
57
58        if (($type_inclus == "embed" OR $type_inclus == "image")
59        AND (
60                // documents dont la taille est definie
61                ($document['largeur'] * $document['hauteur'])
62                // ou distants
63                OR $document['distant'] == 'oui'
64                // ou tous les formats qui s'affichent en embed
65                OR $type_inclus == "embed"
66        ))
67                return true;
68}
69
70// On ne peut joindre un document qu'a un article qu'on a le droit d'editer
71// mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond
72// au hack id_article = 0-id_auteur
73// http://doc.spip.org/@autoriser_joindredocument_dist
74function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){
75        return
76                autoriser('modifier', $type, $id, $qui, $opt)
77                OR (
78                        $type == 'article'
79                        AND $id<0
80                        AND abs($id) == $qui['id_auteur']
81                        AND autoriser('ecrire', $type, $id, $qui, $opt)
82                );
83}
84
85
86/**
87 * On ne peut modifier un document que s'il n'est pas lie a un objet qu'on n'a pas le droit d'editer
88 *
89 * @staticvar <type> $m
90 * @param <type> $faire
91 * @param <type> $type
92 * @param <type> $id
93 * @param <type> $qui
94 * @param <type> $opt
95 * @return <type>
96 */
97function autoriser_document_modifier($faire, $type, $id, $qui, $opt){
98        static $m = array();
99
100  if (isset($m[$id]))
101          return $m[$id];
102  $s = sql_getfetsel("statut", "spip_documents", "id_document=".intval($id));
103        // les admins ont le droit de modifier tous les documents existants
104        if ($qui['statut'] == '0minirezo'
105        AND !$qui['restreint'])
106                return is_string($s)?true:false;
107
108        if (!isset($m[$id])) {
109                // un document non publie peut etre modifie par tout le monde (... ?)
110                if ($s AND $s!=='publie')
111                        $m[$id] = true;
112        }
113
114        if (!isset($m[$id])) {
115                $interdit = false;
116
117                $s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".sql_quote($id));
118                while ($t = sql_fetch($s)) {
119                        if (!autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {
120                                $interdit = true;
121                                break;
122                        }
123                }
124
125                $m[$id] = ($interdit?false:true);
126        }
127
128        return $m[$id];
129}
130
131
132/**
133 * On ne peut supprimer un document que s'il n'est lie a aucun objet
134 * ET qu'on a le droit de le modifier !
135 *
136 * @param <type> $faire
137 * @param <type> $type
138 * @param <type> $id
139 * @param <type> $qui
140 * @param <type> $opt
141 * @return <type>
142 */
143function autoriser_document_supprimer($faire, $type, $id, $qui, $opt){
144        if (!intval($id)
145                OR !$qui['id_auteur']
146                OR !autoriser('ecrire','','',$qui))
147                return false;
148        // si c'est une vignette, se ramener a l'autorisation de son parent
149        if (sql_getfetsel('mode','spip_documents','id_document='.intval($id))=='vignette'){
150                $id_document = sql_getfetsel('id_document','spip_documents','id_vignette='.intval($id));
151          return !$id_document OR autoriser('modifier','document',$id_document);
152        }
153        if (sql_countsel('spip_documents_liens', 'id_document='.intval($id)))
154                return false;
155
156        return autoriser('modifier','document',$id,$qui,$opt);
157}
158
159
160//
161// Peut-on voir un document dans _DIR_IMG ?
162// Tout le monde (y compris les visiteurs non enregistres), puisque par
163// defaut ce repertoire n'est pas protege ; si une extension comme
164// acces_restreint a positionne creer_htaccess, on regarde
165// si le document est lie a un element publie
166// (TODO: a revoir car c'est dommage de sortir de l'API true/false)
167//
168// http://doc.spip.org/@autoriser_document_voir_dist
169function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
170
171        if (!isset($GLOBALS['meta']["creer_htaccess"])
172        OR $GLOBALS['meta']["creer_htaccess"] != 'oui')
173                return true;
174
175        if ((!is_numeric($id)) OR $id < 0) return false;
176
177        if (in_array($qui['statut'], array('0minirezo', '1comite')))
178                return 'htaccess';
179
180        if ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document='.intval($id)))
181        foreach ($liens as $l) {
182                $table_sql = table_objet_sql($l['objet']);
183                $id_table = id_table_objet($l['objet']);
184                if (sql_countsel($table_sql, "$id_table = ". intval($l['id_objet'])
185                . (in_array($l['objet'], array('article', 'rubrique', 'breve'))
186                        ? " AND statut = 'publie'"
187                        : '')
188                ) > 0)
189                        return 'htaccess';
190        }
191        return false;
192}
193
194
195/**
196 * Auto-association de documents a du contenu editorial qui le reference
197 * par defaut true pour tous les objets
198 */
199function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) {
200        return true;
201}
202
203/**
204 * Autoriser a nettoyer les orphelins de la base des documents
205 * reserve aux admins complets
206 *
207 * @param  $faire
208 * @param  $type
209 * @param  $id
210 * @param  $qui
211 * @param  $opt
212 * @return bool
213 */
214function autoriser_orphelins_supprimer($faire, $type, $id, $qui, $opt){
215        if ($qui['statut'] == '0minirezo'
216        AND !$qui['restreint'])
217                return true;
218}
Note: See TracBrowser for help on using the repository browser.