source: spip-zone/_plugins_/diogene/diogene/trunk/diogene_autoriser.php @ 87100

Last change on this file since 87100 was 87100, checked in by kent1@…, 5 years ago

Surcharge de l'autorisation d'institution d'article

File size: 12.8 KB
Line 
1<?php
2/**
3 * Plugin Diogene
4 *
5 * Auteurs :
6 * b_b
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 *
9 * Distribue sous licence GNU/GPL
10 *
11 * Autorisations spécifiques à Diogene
12 *
13 **/
14
15if (!defined("_ECRIRE_INC_VERSION")) return;
16 
17function diogene_autoriser(){};
18
19/**
20 * Autorisation à modifier un template de formulaire (Diogene)
21 *
22 * @param unknown_type $faire
23 * @param unknown_type $type
24 * @param unknown_type $id
25 * @param unknown_type $qui
26 * @param unknown_type $opt
27 */
28function autoriser_diogene_modifier_dist($faire,$type,$id,$qui,$opt){
29        return autoriser('configurer','','',$qui,$opt);
30}
31
32/**
33 * Autorisation a modifier le logo d'un template de formulaire (Diogene)
34 *
35 * @param string $faire L'action
36 * @param string $type Le type d'objet
37 * @param int $id L'identifiant numérique de l'objet
38 * @param array $qui Les informations de session de l'auteur
39 * @param array $opt Des options
40 * @return boolean true/false
41 */
42function autoriser_diogene_iconifier_dist($faire,$quoi,$id,$qui,$opts){
43        return (($qui['statut'] == '0minirezo') AND !$qui['restreint']);
44}
45
46/**
47 * Autorisation de creer dans le template
48 *
49 * @param string $faire L'action
50 * @param string $type Le type d'objet
51 * @param int $id L'identifiant numérique de l'objet
52 * @param array $qui Les informations de session de l'auteur
53 * @param array $opt Des options
54 * @return boolean true/false
55 */
56function autoriser_diogene_creerdans_dist($faire, $type, $id, $qui, $opt) {
57        $diogene = sql_fetsel('*','spip_diogenes','id_diogene='.intval($id));
58        if(
59                $qui['statut'] != '0minirezo' AND
60                $qui['statut'] AND 
61                $qui['statut'] <= $diogene['statut_auteur']){
62                if(in_array($diogene['objet'],array('article','emballe_media')) && $diogene['nombre_attente'] > 0){
63                        $nb_articles = sql_countsel('spip_articles as art LEFT JOIN spip_auteurs_liens as lien ON lien.objet="article" AND art.id_article=lien.id_objet','lien.id_auteur='.intval($qui['id_auteur']).' AND art.statut NOT IN ("poubelle","publie","refuse") AND art.id_secteur='.intval($diogene['id_secteur']));
64                        if(intval($nb_articles) >= intval($diogene['nombre_attente']))
65                                return false;
66                }
67        }
68        return
69                $qui['statut'] AND $id
70                AND ($qui['statut'] <= $diogene['statut_auteur']);
71}
72
73/**
74 * Autorisation d'utiliser dans le template
75 *
76 * @param string $faire L'action
77 * @param string $type Le type d'objet
78 * @param int $id L'identifiant numérique de l'objet
79 * @param array $qui Les informations de session de l'auteur
80 * @param array $opt Des options
81 * @return boolean true/false
82 */
83function autoriser_diogene_utiliser_dist($faire, $type, $id, $qui, $opt) {
84        $diogene = sql_fetsel('*','spip_diogenes','id_diogene='.intval($id));
85        return
86                $qui['statut'] AND $id
87                AND ($qui['statut'] <= $diogene['statut_auteur']);
88}
89
90/**
91 * Autoriser a creer un article dans la rubrique $id
92 * Surcharge de SPIP
93 *
94 * Changement par rapport à la fonction par défaut :
95 * Si on a le plugin pages, on autorise à publier dans la rubrique 0
96 * Si on est dans un diogene et que l'on a mis un nombre > 0 comme limite d'objet en attente de publication,
97 * on vérifie que l'on n'ai pas atteint cette limite
98 *
99 * @param string $faire L'action
100 * @param string $type Le type d'objet
101 * @param int $id L'identifiant numérique de l'objet
102 * @param array $qui Les informations de session de l'auteur
103 * @param array $opt Des options
104 * @return boolean true/false
105 *
106 * http://doc.spip.org/@autoriser_rubrique_creerarticledans_dist
107 */
108if(!function_exists('autoriser_rubrique_creerarticledans')){
109        function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt) {
110                if(_DIR_PLUGIN_PAGES && ($id < 1)){
111                        return $qui['statut'] && autoriser('voir','rubrique',$id);
112                }else{
113                        if($qui['statut'] != '0minirezo'){
114                                $id_secteur = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($id));
115                                $nb_attente = sql_getfetsel('nombre_attente','spip_diogenes','id_secteur='.intval($id_secteur).' AND objet IN ("article","emballe_media")');
116                                if($nb_attente > 0){
117                                        $nb_articles = sql_countsel('spip_articles as art LEFT JOIN spip_auteurs_liens as lien ON lien.objet="article" AND art.id_article=lien.id_objet','lien.id_auteur='.intval($qui['id_auteur']).' AND art.statut NOT IN ("poubelle","publie","refuse") AND art.id_secteur='.intval($id_secteur));
118                                        if(intval($nb_articles) >= intval($nb_attente))
119                                                return false;
120                                }
121                        }
122                        return $qui['statut'] && autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt);
123                }       
124        }
125}
126
127/**
128 * Permet de créer un article dans une rubrique
129 * Surcharge de SPIP
130 *
131 * Ne concerne que la création et non la publication
132 * voir : rubrique_creerarticledans_dist() dans ecrire/inc/autoriser
133 *
134 * @param string $faire L'action
135 * @param string $type Le type d'objet
136 * @param int $id L'identifiant numérique de l'objet
137 * @param array $qui Les informations de session de l'auteur
138 * @param array $opt Des options
139 * @return boolean true/false
140 */
141if(!function_exists('autoriser_rubrique_voir')){
142        function autoriser_rubrique_voir($faire, $type, $id, $qui, $opt) {
143                $id_secteur = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($id));
144       
145                /**
146                 * Cas des pages
147                 */
148                if($id == '-1'){
149                        $id_secteur=0;
150                }
151                $statut = sql_getfetsel('statut_auteur','spip_diogenes','id_secteur='.intval($id_secteur));
152               
153                if(!$statut)
154                        $statut = '0minirezo';
155       
156                return ($qui['statut'] AND ($qui['statut'] <= $statut));
157        }
158}
159
160/**
161 * Permet de publier dans une rubrique
162 * Surcharge de SPIP
163 *
164 * Concerne la publication d'articles dans une rubrique
165 * On vérifie que l'auteur à les droits dans le template
166 * voir : autoriser_rubrique_publierdans_dist() dans ecrire/inc/autoriser
167 * voir aussi pour les articles : http://trac.rezo.net/trac/spip/browser/spip/ecrire/action/editer_article.php#L174
168 *
169 * @param string $faire L'action
170 * @param string $type Le type d'objet
171 * @param int $id L'identifiant numérique de l'objet
172 * @param array $qui Les informations de session de l'auteur
173 * @param array $opt Des options
174 * @return boolean true/false
175 */
176if(!function_exists('autoriser_rubrique_publierdans')){
177        function autoriser_rubrique_publierdans($faire, $type, $id, $qui, $opt) {
178                $id_secteur = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($id));
179                if($id == 0)
180                        $id_secteur=0;
181
182                $statut_diogene = sql_getfetsel('statut_auteur_publier','spip_diogenes','id_secteur='.intval($id_secteur));
183                $statut = $statut_diogene ? $statut_diogene : '0minirezo';
184               
185                return ($qui['statut'] AND $id
186                        AND ($qui['statut'] <= $statut)) OR autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt);
187        }
188}
189
190/**
191 * Permet de modifier l'article dont on est l'auteur et que l'on peut publier nous même
192 * Surcharge de SPIP
193 *
194 * On peut modifier un article s'il existe
195 * On peut modifier un article dans tous les cas si on est admin (comme dans SPIP)
196 * On peut modifier un article si on est auteur de l'article dans tous les cas sauf si
197 * on demande de changer le statut à publier et que la configuration du diogène ne le permet pas
198 * (on utilise autoriser_rubrique_publierdans dans ce cas)
199 *
200 * @param string $faire L'action
201 * @param string $type Le type d'objet
202 * @param int $id L'identifiant numérique de l'objet
203 * @param array $qui Les informations de session de l'auteur
204 * @param array $opt Des options
205 * @return boolean true/false
206 */
207if(!function_exists('autoriser_article_modifier')){
208        function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
209                $r = sql_fetsel("id_secteur,id_rubrique,statut", "spip_articles", "id_article=".intval($id));
210                if(!$r)
211                        return false;
212                       
213                return
214                        in_array($qui['statut'], array('0minirezo')) OR
215                        (
216                                (autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
217                                AND auteurs_article($id, "id_auteur=".intval($qui['id_auteur'])))
218                                OR (
219                                        (!isset($opt['statut']) OR $opt['statut']!=='publie')
220                                        AND in_array($qui['statut'], array('0minirezo', '1comite'))
221                                        AND in_array($r['statut'], array('prop','prepa', 'publie'))
222                                        AND auteurs_article($id, "id_auteur=".$qui['id_auteur'])
223                                )
224                        );
225        }
226}
227
228if(!function_exists('autoriser_article_instituer')){
229        function autoriser_article_instituer($faire, $type, $id, $qui, $opt) {
230                $statut = sql_getfetsel('statut','spip_articles','id_article='.intval($id));
231                if(isset($opt['statut']) && $opt['statut'] == $statut)
232                        return true;
233                return autoriser_article_modifier($faire, $type, $id, $qui, $opt);
234        }
235}
236/**
237 * Autoriser a creer un site dans la rubrique $id
238 * Surcharge de SPIP : http://doc.spip.org/@autoriser_rubrique_creersitedans_dist
239 *
240 * @param string $faire L'action
241 * @param string $type Le type d'objet
242 * @param int $id L'identifiant numérique de l'objet
243 * @param array $qui Les informations de session de l'auteur
244 * @param array $opt Des options
245 * @return boolean true/false
246 */
247if(!function_exists('autoriser_rubrique_creersitedans')){
248        function autoriser_rubrique_creersitedans($faire, $type, $id, $qui, $opt) {
249                $id_secteur = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($id));
250                $statut = sql_getfetsel('statut_auteur','spip_diogenes','id_secteur='.intval($id_secteur));
251       
252                return
253                        $id
254                        AND autoriser('voir','rubrique',$id)
255                        AND $GLOBALS['meta']['activer_sites'] != 'non'
256                        AND (($qui['statut'] <= $statut) OR
257                                ($qui['statut']=='0minirezo'
258                                OR ($GLOBALS['meta']["proposer_sites"] >=
259                                    ($qui['statut']=='1comite' ? 1 : 2)))
260                                    );
261        }
262}
263
264/**
265 * Si le plugin champs extras 2 est activé, on utilise une fonction d'autorisation
266 * d'affichage des saisies de champs extras
267 *
268 * Cette fonction vérifie tout d'abord s'il existe un diogène associé au type d'objet en cours et
269 * au secteur en cours et si oui :
270 * -* on vérifie s'il y a une configuration liée aux champs extras sur ce diogène
271 * -* on retourne false s'il est nécessaire de cacher ces champs extras
272 * -* on retourne la fonction de base de cette autorisation dans le cas contraire
273 *
274 * @param string $faire L'action
275 * @param string $type Le type d'objet
276 * @param int $id L'identifiant numérique de l'objet
277 * @param array $qui Les informations de session de l'auteur
278 * @param array $opt Des options
279 * @return boolean true/false
280 */
281if(defined('_DIR_PLUGIN_CEXTRAS') && _DIR_PLUGIN_CEXTRAS){
282        if(!function_exists('autoriser_modifierextra')){
283                function autoriser_modifierextra($faire,$quoi,$id,$qui,$opts){
284                        /**
285                         * On recherche un parent pour trouver le secteur qui nous permettra de trouver le diogene s'il existe
286                         */
287                        if(is_numeric($opts['contexte']['id_parent']) OR is_numeric(_request('id_parent')) OR is_array(_request('parents'))){
288                                $id_parent = $opts['contexte']['id_parent'] ? $opts['contexte']['id_parent'] : (_request('id_parent') ? _request('id_parent') : table_valeur('0',_request('parents',array())));
289                                if($opts['type'] == 'article'){
290                                        $objets = array('emballe_media','article');
291                                }else{
292                                        $objets = array($opts['type']);
293                                }
294                                $id_secteur = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($id_parent));
295                                $diogene_parent = sql_fetsel('*','spip_diogenes','id_secteur='.intval($id_secteur).' AND '.sql_in('objet',$objets));
296                                if(is_array(unserialize($diogene_parent['options_complements'])) && ($complements = unserialize($diogene_parent['options_complements'])) && is_array(unserialize($complements['cextras_enleves']))){
297                                        foreach(unserialize($complements['cextras_enleves']) as $enleve){
298                                                if($opts['champ'] == $enleve){
299                                                        return false;
300                                                }
301                                        }
302                                }
303                        }
304                        return autoriser_modifierextra_dist($faire,$quoi,$id,$qui,$opts);
305                }
306        }
307}
308
309/**
310 * Autorisation à traduire un article (spécifique à Diogène)
311 *
312 * Est autorisé à traduire un article :
313 * -* Dans le cas général, un auteur qui a le droit de créer un article dans la même rubrique que
314 * l'article en question;
315 * -* Si on est dans un diogène, on se réfère à la configuration :
316 * -** Par défaut, l'autorisation précedente;
317 * -** Si dans la configuration du template, seulement l'auteur  ou un des auteurs originaux est sélectionné,
318 * on modifie le résultat à la configuration
319 * -** Si dans la configuration du template, aucune traduction possible est sélectionnée, on retourne false;
320 *
321 * On retourne toujours faux si :
322 * -* Uniquement une seule langue dans le site;
323 *
324 * @param unknown_type $faire
325 * @param unknown_type $quoi
326 * @param unknown_type $id
327 * @param unknown_type $qui
328 * @param unknown_type $opts
329 */
330function autoriser_article_traduire_dist($faire,$quoi,$id,$qui,$opts){
331        $article = sql_fetsel("id_secteur,id_rubrique", "spip_articles", "id_article=".sql_quote($id));
332        $diogene = sql_getfetsel("id_diogene","");
333        include_spip('inc/auth'); // pour auteurs_article si espace public
334        return
335                (autoriser('creerarticledans', 'rubrique', $r['id_rubrique'], $qui, $opt)
336                        AND in_array($r['statut'], array('prop','prepa', 'publie'))
337                        AND auteurs_article($id, "id_auteur=".$qui['id_auteur'])
338                )
339                OR in_array($qui['statut'], array('0minirezo'));
340}
341?>
Note: See TracBrowser for help on using the repository browser.