3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 /* Pour que le pipeline de rale pas ! */
16 function medias_autoriser(){}
19 function autoriser_mediatheque_administrer_dist($faire,$quoi,$id,$qui,$options) {
20 return $qui['statut'] == '0minirezo';
23 function autoriser_documents_menu_dist($faire,$quoi,$id,$qui,$options) {
24 return autoriser('administrer','mediatheque',$id,$qui,$options);
28 * Autoriser le changement des dimensions sur un document
29 * @param <type> $faire
33 * @param <type> $options
36 function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) {
38 if (!$id_document=intval($id))
40 if (!autoriser('modifier','document',$id,$qui,$options))
43 if (!isset($options['document']) OR !$document = $options['document'])
44 $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
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')
54 // Donnees sur le type de document
55 $extension = $document['extension'];
56 $type_inclus = sql_getfetsel('inclus','spip_types_documents', "extension=".sql_quote($extension));
58 if (($type_inclus == "embed" OR $type_inclus == "image")
60 // documents dont la taille est definie
61 ($document['largeur'] * $document['hauteur'])
63 OR $document['distant'] == 'oui'
64 // ou tous les formats qui s'affichent en embed
65 OR $type_inclus == "embed"
71 * On ne peut joindre un document qu'a un objet qu'on a le droit d'editer
72 * mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond
73 * au hack id_objet = 0-id_auteur
74 * Il faut aussi que les documents aient ete actives sur les objets concernes
75 * ou que ce soit un article, sur lequel on peut toujours uploader des images
77 * http://doc.spip.org/@autoriser_joindredocument_dist
81 function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){
82 include_spip('inc/config');
86 OR in_array(table_objet_sql($type),explode(',',lire_config('documents_objets', '')))
91 AND autoriser('modifier', $type, $id, $qui, $opt)
95 AND abs($id) == $qui['id_auteur']
96 AND autoriser('ecrire', $type, $id, $qui, $opt)
103 * 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
105 * @staticvar <type> $m
106 * @param <type> $faire
107 * @param <type> $type
113 function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){
116 $q=$qui['id_auteur'];
117 if (isset($m[$q][$id]))
120 $s = sql_getfetsel("statut", "spip_documents", "id_document=".intval($id));
121 // les admins ont le droit de modifier tous les documents existants
122 if ($qui['statut'] == '0minirezo'
123 AND !$qui['restreint'])
124 return is_string($s)?
true:false;
126 if (!isset($m[$q][$id])) {
127 // un document non publie peut etre modifie par tout le monde (... ?)
128 if ($s AND $s!=='publie' AND ($qui['id_auteur'] > 0))
132 if (!isset($m[$q][$id])) {
135 $s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".intval($id));
136 while ($t = sql_fetch($s)) {
137 if (!autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {
143 $m[$q][$id] = ($interdit?
false:true);
151 * On ne peut supprimer un document que s'il n'est lie a aucun objet
152 * ET qu'on a le droit de le modifier !
154 * @param <type> $faire
155 * @param <type> $type
161 function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt){
163 OR !$qui['id_auteur']
164 OR !autoriser('ecrire','','',$qui))
167 // ne pas considerer les document parent
168 // (cas des vignettes ou autre document annexe rattache a un document)
169 if (sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".intval($id)))
172 // si c'est une vignette, se ramener a l'autorisation de son parent
173 if (sql_getfetsel('mode','spip_documents','id_document='.intval($id))=='vignette'){
174 $id_document = sql_getfetsel('id_document','spip_documents','id_vignette='.intval($id));
175 return !$id_document OR autoriser('modifier','document',$id_document);
177 // si c'est un document annexe, se ramener a l'autorisation de son parent
178 if ($id_document=sql_getfetsel('id_objet','spip_documents_liens',"objet='document' AND id_document=".intval($id))){
179 return autoriser('modifier','document',$id_document);
182 return autoriser('modifier','document',$id,$qui,$opt);
187 // Peut-on voir un document dans _DIR_IMG ?
188 // Tout le monde (y compris les visiteurs non enregistres), puisque par
189 // defaut ce repertoire n'est pas protege ; si une extension comme
190 // acces_restreint a positionne creer_htaccess, on regarde
191 // si le document est lie a un element publie
192 // (TODO: a revoir car c'est dommage de sortir de l'API true/false)
194 // http://doc.spip.org/@autoriser_document_voir_dist
195 function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {
197 if (!isset($GLOBALS['meta']["creer_htaccess"])
198 OR $GLOBALS['meta']["creer_htaccess"] != 'oui')
201 if ((!is_numeric($id)) OR $id < 0) return false;
203 if (in_array($qui['statut'], array('0minirezo', '1comite')))
206 if ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document='.intval($id)))
207 foreach ($liens as $l) {
208 $table_sql = table_objet_sql($l['objet']);
209 $id_table = id_table_objet($l['objet']);
210 if (sql_countsel($table_sql, "$id_table = ". intval($l['id_objet'])
211 . (in_array($l['objet'], array('article', 'rubrique', 'breve'))
212 ?
" AND statut = 'publie'"
222 * Auto-association de documents a du contenu editorial qui le reference
223 * par defaut true pour tous les objets
225 function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) {
230 * Autoriser a nettoyer les orphelins de la base des documents
231 * reserve aux admins complets
240 function autoriser_orphelins_supprimer_dist($faire, $type, $id, $qui, $opt){
241 if ($qui['statut'] == '0minirezo'
242 AND !$qui['restreint'])