950ddbd22d845a8e9eda86ac83bdc5458ff28ad4
[lhc/web/clavette_www.git] / www / ecrire / inc / autoriser.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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 /**
14 * Gestion de l'API autoriser et fonctions d'autorisations de SPIP
15 *
16 * @package SPIP\Autorisations
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) return;
19
20 include_spip('base/abstract_sql');
21
22 /**
23 * Tracer les autorisations dans tmp/spip.log pour débug ?
24 */
25 defined('_DEBUG_AUTORISER') || define('_DEBUG_AUTORISER', false);
26
27 // Constantes surchargeables, cf. plugin autorite
28
29 /**
30 * Gérer les admins restreints ?
31 *
32 * @todo une option à activer
33 */
34 defined('_ADMINS_RESTREINTS') || define('_ADMINS_RESTREINTS', true);
35
36 /** Statut par defaut à la creation */
37 defined('_STATUT_AUTEUR_CREATION') || define('_STATUT_AUTEUR_CREATION', '1comite');
38
39 /** statuts associables a des rubriques (separes par des virgules) */
40 defined('_STATUT_AUTEUR_RUBRIQUE') || define('_STATUT_AUTEUR_RUBRIQUE', _ADMINS_RESTREINTS ? '0minirezo' : '');
41
42 // mes_fonctions peut aussi declarer des autorisations, donc il faut donc le charger
43 if ($f = find_in_path('mes_fonctions.php')) {
44 global $dossier_squelettes;
45 include_once(_ROOT_CWD . $f);
46 }
47
48
49 if (!function_exists('autoriser')) {
50 /**
51 * Autoriser une action
52 *
53 * Teste si une personne (par défaut le visiteur en cours) peut effectuer
54 * une certaine action. Cette fonction est le point d'entrée de toutes
55 * les autorisations.
56 *
57 * La fonction se charge d'appeler des fonctions d'autorisations spécifiques
58 * aux actions demandées si elles existent. Elle cherche donc les fonctions
59 * dans cet ordre :
60 * - autoriser_{type}_{faire}, sinon avec _dist
61 * - autoriser_{type}, sinon avec _dist
62 * - autoriser_{faire}, sinon avec _dist
63 * - autoriser_{defaut}, sinon avec _dist
64 *
65 * Seul le premier argument est obligatoire
66 *
67 * @api
68 * @see autoriser_dist()
69 *
70 * @param string $faire
71 * une action ('modifier', 'publier'...)
72 * @param string $type
73 * type d'objet ou nom de table ('article')
74 * @param int $id
75 * id de l'objet sur lequel on veut agir
76 * @param null|int|array $qui
77 * - si null on prend alors visiteur_session
78 * - un id_auteur (on regarde dans la base)
79 * - un tableau auteur complet, y compris [restreint]
80 * @param null|array $opt
81 * options sous forme de tableau associatif
82 * @return bool
83 * true si la personne peut effectuer l'action
84 */
85 function autoriser($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
86 // Charger les fonctions d'autorisation supplementaires
87 static $pipe;
88 if (!isset($pipe)) { $pipe = 1; pipeline('autoriser'); }
89
90 $args = func_get_args();
91 return call_user_func_array('autoriser_dist', $args);
92 }
93 }
94
95
96 /**
97 * Autoriser une action
98 *
99 * Voir autoriser() pour une description complète
100 *
101 * @see autoriser()
102 *
103 * @param string $faire
104 * une action ('modifier', 'publier'...)
105 * @param string $type
106 * type d'objet ou nom de table ('article')
107 * @param int $id
108 * id de l'objet sur lequel on veut agir
109 * @param null|int|array $qui
110 * si null on prend alors visiteur_session
111 * un id_auteur (on regarde dans la base)
112 * un tableau auteur complet, y compris [restreint]
113 * @param null|array $opt
114 * options sous forme de tableau associatif
115 * @return bool
116 * true si la personne peut effectuer l'action
117 */
118 function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
119
120 // Qui ? visiteur_session ?
121 // si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
122 if ($qui === NULL OR $qui==='')
123 $qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array('statut' => '', 'id_auteur' =>0, 'webmestre' => 'non');
124 elseif (is_numeric($qui)) {
125 $qui = sql_fetsel("*", "spip_auteurs", "id_auteur=".$qui);
126 }
127
128 // Admins restreints, on construit ici (pas generique mais...)
129 // le tableau de toutes leurs rubriques (y compris les sous-rubriques)
130 if (_ADMINS_RESTREINTS AND is_array($qui)) {
131 $qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : array();
132 }
133
134 if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id (" . (isset($qui['nom']) ? $qui['nom'] : '') . ") ?");
135
136 // passer par objet_type pour avoir les alias
137 // et supprimer les _
138 $type = str_replace('_','', strncmp($type,"_",1)==0?$type:objet_type($type,false));
139
140 // Si une exception a ete decretee plus haut dans le code, l'appliquer
141 if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id])
142 AND autoriser_exception($faire,$type,$id,'verifier'))
143 return true;
144
145 // Chercher une fonction d'autorisation
146 // Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
147 // autoriser_faire[_dist], autoriser_defaut[_dist]
148 $fonctions = $type
149 ? array (
150 'autoriser_'.$type.'_'.$faire,
151 'autoriser_'.$type.'_'.$faire.'_dist',
152 'autoriser_'.$type,
153 'autoriser_'.$type.'_dist',
154 'autoriser_'.$faire,
155 'autoriser_'.$faire.'_dist',
156 'autoriser_defaut',
157 'autoriser_defaut_dist'
158 )
159 : array (
160 'autoriser_'.$faire,
161 'autoriser_'.$faire.'_dist',
162 'autoriser_defaut',
163 'autoriser_defaut_dist'
164 );
165
166 foreach ($fonctions as $f) {
167 if (function_exists($f)) {
168 $a = $f($faire,$type,$id,$qui,$opt);
169 break;
170 }
171 }
172
173 if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id," . (isset($qui['nom']) ? $qui['nom'] : '') . "): ".($a?'OK':'niet'));
174
175 return $a;
176 }
177
178 // une globale pour aller au plus vite dans la fonction generique ci dessus
179 $GLOBALS['autoriser_exception']=array();
180
181 /**
182 * Accorder une autorisation exceptionnel pour le hit en cours, ou la revoquer
183 *
184 * http://doc.spip.org/@autoriser_exception
185 *
186 * @param string $faire Action demandée
187 * @param string $type Type d'objet sur lequel appliquer l'action
188 * @param int $id Identifiant de l'objet
189 * @param bool $autoriser accorder (true) ou revoquer (false)
190 * @return bool
191 */
192 function autoriser_exception($faire,$type,$id,$autoriser=true){
193 // une static innaccessible par url pour verifier que la globale est positionnee a bon escient
194 static $autorisation;
195 if ($autoriser==='verifier')
196 return isset($autorisation[$faire][$type][$id]);
197 if ($autoriser===true)
198 $GLOBALS['autoriser_exception'][$faire][$type][$id] = $autorisation[$faire][$type][$id] = true;
199 if ($autoriser===false) {
200 unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
201 unset($autorisation[$faire][$type][$id]);
202 }
203 return false;
204 }
205
206
207 /**
208 * Autorisation par defaut
209 *
210 * Les admins complets OK, les autres non
211 *
212 * @param string $faire Action demandée
213 * @param string $type Type d'objet sur lequel appliquer l'action
214 * @param int $id Identifiant de l'objet
215 * @param array $qui Description de l'auteur demandant l'autorisation
216 * @param array $opt Options de cette autorisation
217 * @return bool true s'il a le droit, false sinon
218 **/
219 function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) {
220 return
221 $qui['statut'] == '0minirezo'
222 AND !$qui['restreint'];
223 }
224
225
226 /**
227 * Autorisation d'accès è l'espace privé ?
228 *
229 * @param string $faire Action demandée
230 * @param string $type Type d'objet sur lequel appliquer l'action
231 * @param int $id Identifiant de l'objet
232 * @param array $qui Description de l'auteur demandant l'autorisation
233 * @param array $opt Options de cette autorisation
234 * @return bool true s'il a le droit, false sinon
235 **/
236 function autoriser_ecrire_dist($faire, $type, $id, $qui, $opt) {
237 return in_array($qui['statut'], array('0minirezo', '1comite'));
238 }
239
240 /**
241 * Autorisation de créer un contenu
242 *
243 * Accordée par defaut ceux qui accèdent à l'espace privé,
244 * peut-être surchargée au cas par cas
245 *
246 * @param string $faire Action demandée
247 * @param string $type Type d'objet sur lequel appliquer l'action
248 * @param int $id Identifiant de l'objet
249 * @param array $qui Description de l'auteur demandant l'autorisation
250 * @param array $opt Options de cette autorisation
251 * @return bool true s'il a le droit, false sinon
252 **/
253 function autoriser_creer_dist($faire, $type, $id, $qui, $opt) {
254 return in_array($qui['statut'], array('0minirezo', '1comite'));
255 }
256
257 /**
258 * Autorisation de prévisualiser un contenu
259 *
260 * @param string $faire Action demandée
261 * @param string $type Type d'objet sur lequel appliquer l'action
262 * @param int $id Identifiant de l'objet
263 * @param array $qui Description de l'auteur demandant l'autorisation
264 * @param array $opt Options de cette autorisation
265 * @return bool true s'il a le droit, false sinon
266 **/
267 function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) {
268 // si auteur pas autorise, NIET
269 if (strpos($GLOBALS['meta']['preview'], ",". $qui['statut'] .",")===false)
270 return false;
271 // si pas de type et statut fourni, c'est une autorisation generale => OK
272 if (!$type)
273 return true;
274
275 include_spip('base/objets');
276 $infos = lister_tables_objets_sql(table_objet_sql($type));
277 if (isset($infos['statut']))
278 foreach($infos['statut'] as $c){
279 if (isset($c['publie'])){
280 if (!isset($c['previsu'])) return false; // pas de previsu definie => NIET
281 $champ = $c['champ'];
282 if (!isset($opt[$champ])) return false; // pas de champ passe a la demande => NIET
283 $previsu = explode(',',$c['previsu']);
284 if (!in_array($opt[$champ],$previsu)) // le statut n'est pas dans ceux definis par la previsu => NIET
285 return false;
286 }
287 }
288 return true;
289 }
290
291 /**
292 * Autorisation de changer de langue un contenu
293 *
294 * @param string $faire Action demandée
295 * @param string $type Type d'objet sur lequel appliquer l'action
296 * @param int $id Identifiant de l'objet
297 * @param array $qui Description de l'auteur demandant l'autorisation
298 * @param array $opt Options de cette autorisation
299 * @return bool true s'il a le droit, false sinon
300 **/
301 function autoriser_changerlangue_dist($faire, $type, $id, $qui, $opt) {
302 return autoriser('modifier',$type,$id,$qui,$opt);
303 }
304
305 /**
306 * Autorisation de changer la date d'un contenu
307 *
308 * @param string $faire Action demandée
309 * @param string $type Type d'objet sur lequel appliquer l'action
310 * @param int $id Identifiant de l'objet
311 * @param array $qui Description de l'auteur demandant l'autorisation
312 * @param array $opt Options de cette autorisation
313 * @return bool true s'il a le droit, false sinon
314 **/
315 function autoriser_dater_dist($faire, $type, $id, $qui, $opt) {
316 if (!isset($opt['statut'])){
317 $table = table_objet($type);
318 $trouver_table = charger_fonction('trouver_table','base');
319 $desc = $trouver_table($table);
320 if (!$desc)
321 return false;
322 if (isset($desc['field']['statut'])){
323 $statut = sql_getfetsel("statut", $desc['table'], id_table_objet($type)."=".intval($id));
324 }
325 else
326 $statut = 'publie'; // pas de statut => publie
327 }
328 else
329 $statut = $opt['statut'];
330
331 if ($statut == 'publie'
332 OR ($statut == 'prop' AND $type=='article' AND $GLOBALS['meta']["post_dates"] == "non"))
333 return autoriser('modifier', $type, $id);
334 return false;
335 }
336
337 /**
338 * Autorisation d'instituer un contenu
339 *
340 * C'est à dire de changer son statut ou son parent.
341 * Par défaut, il faut l'autorisation de modifier le contenu
342 *
343 * @param string $faire Action demandée
344 * @param string $type Type d'objet sur lequel appliquer l'action
345 * @param int $id Identifiant de l'objet
346 * @param array $qui Description de l'auteur demandant l'autorisation
347 * @param array $opt Options de cette autorisation
348 * @return bool true s'il a le droit, false sinon
349 **/
350 function autoriser_instituer_dist($faire, $type, $id, $qui, $opt) {
351 return autoriser('modifier',$type,$id,$qui,$opt);
352 }
353
354 /**
355 * Autorisation de publier dans une rubrique $id
356 *
357 * Il faut être administrateur ou administrateur restreint de la rubrique
358 *
359 * @param string $faire Action demandée
360 * @param string $type Type d'objet sur lequel appliquer l'action
361 * @param int $id Identifiant de l'objet
362 * @param array $qui Description de l'auteur demandant l'autorisation
363 * @param array $opt Options de cette autorisation
364 * @return bool true s'il a le droit, false sinon
365 **/
366 function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt) {
367 return
368 ($qui['statut'] == '0minirezo')
369 AND (
370 !$qui['restreint'] OR !$id
371 OR in_array($id, $qui['restreint'])
372 );
373 }
374
375 /**
376 * Autorisation de créer une rubrique
377 *
378 * Il faut être administrateur pour pouvoir publier à la racine
379 *
380 * @param string $faire Action demandée
381 * @param string $type Type d'objet sur lequel appliquer l'action
382 * @param int $id Identifiant de l'objet
383 * @param array $qui Description de l'auteur demandant l'autorisation
384 * @param array $opt Options de cette autorisation
385 * @return bool true s'il a le droit, false sinon
386 **/
387 function autoriser_rubrique_creer_dist($faire, $type, $id, $qui, $opt) {
388 return
389 ((!$id AND autoriser('defaut',null,null,$qui, $opt))
390 OR $id AND autoriser('creerrubriquedans','rubrique', $id, $qui, $opt)
391 );
392 }
393
394 /**
395 * Autorisation de créer une sous rubrique dans une rubrique $id
396 *
397 * Il faut être administrateur et pouvoir publier dans la rubrique
398 *
399 * @param string $faire Action demandée
400 * @param string $type Type d'objet sur lequel appliquer l'action
401 * @param int $id Identifiant de l'objet
402 * @param array $qui Description de l'auteur demandant l'autorisation
403 * @param array $opt Options de cette autorisation
404 * @return bool true s'il a le droit, false sinon
405 **/
406 function autoriser_rubrique_creerrubriquedans_dist($faire, $type, $id, $qui, $opt) {
407 return
408 ($id OR ($qui['statut'] == '0minirezo' AND !$qui['restreint']))
409 AND autoriser('voir','rubrique',$id)
410 AND autoriser('publierdans','rubrique',$id);
411 }
412
413 /**
414 * Autorisation de créer un article dans une rubrique $id
415 *
416 * Il faut pouvoir voir la rubrique
417 *
418 * @param string $faire Action demandée
419 * @param string $type Type d'objet sur lequel appliquer l'action
420 * @param int $id Identifiant de l'objet
421 * @param array $qui Description de l'auteur demandant l'autorisation
422 * @param array $opt Options de cette autorisation
423 * @return bool true s'il a le droit, false sinon
424 **/
425 function autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt) {
426 return
427 $id
428 AND autoriser('voir','rubrique',$id)
429 AND autoriser('creer', 'article');
430 }
431
432
433 /**
434 * Autorisation de modifier une rubrique $id
435 *
436 * Il faut pouvoir publier dans cette rubrique
437 *
438 * @param string $faire Action demandée
439 * @param string $type Type d'objet sur lequel appliquer l'action
440 * @param int $id Identifiant de l'objet
441 * @param array $qui Description de l'auteur demandant l'autorisation
442 * @param array $opt Options de cette autorisation
443 * @return bool true s'il a le droit, false sinon
444 **/
445 function autoriser_rubrique_modifier_dist($faire, $type, $id, $qui, $opt) {
446 return
447 autoriser('publierdans', 'rubrique', $id, $qui, $opt);
448 }
449
450 /**
451 * Autorisation de supprimer une rubrique $id
452 *
453 * Il faut quelle soit vide (pas d'enfant) et qu'on ait le droit de la modifier
454 *
455 * @param string $faire Action demandée
456 * @param string $type Type d'objet sur lequel appliquer l'action
457 * @param int $id Identifiant de l'objet
458 * @param array $qui Description de l'auteur demandant l'autorisation
459 * @param array $opt Options de cette autorisation
460 * @return bool true s'il a le droit, false sinon
461 **/
462 function autoriser_rubrique_supprimer_dist($faire, $type, $id, $qui, $opt) {
463 if (!$id = intval($id))
464 return false;
465
466 if (sql_countsel('spip_rubriques', "id_parent=".intval($id)))
467 return false;
468
469 if (sql_countsel('spip_articles', "id_rubrique=".intval($id)." AND (statut<>'poubelle')"))
470 return false;
471
472 $compte = pipeline('objet_compte_enfants',array('args'=>array('objet'=>'rubrique','id_objet'=>$id),'data'=>array()));
473 foreach($compte as $objet => $n)
474 if ($n)
475 return false;
476
477 return autoriser('modifier','rubrique',$id);
478 }
479
480
481 /**
482 * Autorisation de modifier un article $id
483 *
484 * Il faut pouvoir publier dans le parent
485 * ou, si on change le statut en proposé ou préparation être auteur de l'article
486 *
487 * @param string $faire Action demandée
488 * @param string $type Type d'objet sur lequel appliquer l'action
489 * @param int $id Identifiant de l'objet
490 * @param array $qui Description de l'auteur demandant l'autorisation
491 * @param array $opt Options de cette autorisation
492 * @return bool true s'il a le droit, false sinon
493 **/
494 function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt) {
495 $r = sql_fetsel("id_rubrique,statut", "spip_articles", "id_article=".sql_quote($id));
496
497 if (!function_exists('auteurs_article'))
498 include_spip('inc/auth'); // pour auteurs_article si espace public
499
500 return
501 $r
502 AND
503 (
504 autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
505 OR (
506 (!isset($opt['statut']) OR $opt['statut']!=='publie')
507 AND in_array($qui['statut'], array('0minirezo', '1comite'))
508 AND in_array($r['statut'], array('prop','prepa', 'poubelle'))
509 AND auteurs_article($id, "id_auteur=".$qui['id_auteur'])
510 )
511 );
512 }
513
514 /**
515 * Autorisation de créer un article
516 *
517 * Il faut qu'une rubrique existe et être au moins rédacteur
518 *
519 * @param string $faire Action demandée
520 * @param string $type Type d'objet sur lequel appliquer l'action
521 * @param int $id Identifiant de l'objet
522 * @param array $qui Description de l'auteur demandant l'autorisation
523 * @param array $opt Options de cette autorisation
524 * @return bool true s'il a le droit, false sinon
525 **/
526 function autoriser_article_creer_dist($faire, $type, $id, $qui, $opt) {
527 return (sql_countsel('spip_rubriques')>0 AND in_array($qui['statut'], array('0minirezo', '1comite')));
528 }
529
530 /**
531 * Autorisation de voir un article
532 *
533 * Il faut être admin ou auteur de l'article, sinon il faut que l'article
534 * soit publié ou proposé.
535 *
536 * Peut-être appelée sans $id, mais avec un $opt['statut'] pour tester
537 * la liste des status autorisés en fonction de $qui['statut']
538 *
539 * @param string $faire Action demandée
540 * @param string $type Type d'objet sur lequel appliquer l'action
541 * @param int $id Identifiant de l'objet
542 * @param array $qui Description de l'auteur demandant l'autorisation
543 * @param array $opt Options de cette autorisation
544 * @return bool true s'il a le droit, false sinon
545 */
546 function autoriser_article_voir_dist($faire, $type, $id, $qui, $opt){
547 if ($qui['statut'] == '0minirezo') return true;
548 // cas des articles : depend du statut de l'article et de l'auteur
549 if (isset($opt['statut']))
550 $statut = $opt['statut'];
551 else {
552 if (!$id) return false;
553 $statut = sql_getfetsel("statut", "spip_articles", "id_article=".intval($id));
554 }
555
556 return
557 // si on est pas auteur de l'article,
558 // seuls les propose et publies sont visibles
559 in_array($statut, array('prop', 'publie'))
560 // sinon si on est auteur, on a le droit de le voir, evidemment !
561 OR
562 ($id AND $qui['id_auteur']
563 AND (function_exists('auteurs_article') OR include_spip('inc/auth'))
564 AND auteurs_article($id, "id_auteur=".$qui['id_auteur']));
565 }
566
567
568 /**
569 * Autorisation de voir un objet
570 *
571 * Tout est visible par défaut, sauf les auteurs où il faut au moins être rédacteur.
572 *
573 * @param string $faire Action demandée
574 * @param string $type Type d'objet sur lequel appliquer l'action
575 * @param int $id Identifiant de l'objet
576 * @param array $qui Description de l'auteur demandant l'autorisation
577 * @param array $opt Options de cette autorisation
578 * @return bool true s'il a le droit, false sinon
579 **/
580 function autoriser_voir_dist($faire, $type, $id, $qui, $opt) {
581 # securite, mais on aurait pas du arriver ici !
582 if (function_exists($f='autoriser_'.$type.'_voir') OR function_exists($f='autoriser_'.$type.'_voir_dist')){
583 return $f($faire, $type, $id, $qui, $opt);
584 }
585
586 if ($qui['statut'] == '0minirezo') return true;
587 // admins et redacteurs peuvent voir un auteur
588 if ($type == 'auteur')
589 return in_array($qui['statut'], array('0minirezo', '1comite'));
590 // sinon par defaut tout est visible
591 // sauf cas particuliers traites separemment (ie article)
592 return true;
593 }
594
595
596 /**
597 * Autorisation de webmestre
598 *
599 * Est-on webmestre ? Signifie qu'on n'a même pas besoin de passer par ftp
600 * pour modifier les fichiers, cf. notamment inc/admin
601 *
602 * Soit la liste des webmestres est définie via une constante _ID_WEBMESTRES,
603 * soit on regarde l'état "webmestre" de l'auteur
604 *
605 * @param string $faire Action demandée
606 * @param string $type Type d'objet sur lequel appliquer l'action
607 * @param int $id Identifiant de l'objet
608 * @param array $qui Description de l'auteur demandant l'autorisation
609 * @param array $opt Options de cette autorisation
610 * @return bool true s'il a le droit, false sinon
611 **/
612 function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) {
613 return
614 (defined('_ID_WEBMESTRES')?
615 in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
616 :$qui['webmestre']=='oui')
617 AND $qui['statut'] == '0minirezo'
618 AND !$qui['restreint']
619 ;
620 }
621
622 /**
623 * Autorisation Configurer le site
624 *
625 * Il faut être administrateur complet
626 *
627 * @param string $faire Action demandée
628 * @param string $type Type d'objet sur lequel appliquer l'action
629 * @param int $id Identifiant de l'objet
630 * @param array $qui Description de l'auteur demandant l'autorisation
631 * @param array $opt Options de cette autorisation
632 * @return bool true s'il a le droit, false sinon
633 **/
634 function autoriser_configurer_dist($faire, $type, $id, $qui, $opt) {
635 return
636 $qui['statut'] == '0minirezo'
637 AND !$qui['restreint']
638 ;
639 }
640
641 /**
642 * Autorisation de sauvegarder la base de données
643 *
644 * Il faut être administrateur (y compris restreint)
645 *
646 * @param string $faire Action demandée
647 * @param string $type Type d'objet sur lequel appliquer l'action
648 * @param int $id Identifiant de l'objet
649 * @param array $qui Description de l'auteur demandant l'autorisation
650 * @param array $opt Options de cette autorisation
651 * @return bool true s'il a le droit, false sinon
652 **/
653 function autoriser_sauvegarder_dist($faire, $type, $id, $qui, $opt) {
654 return
655 $qui['statut'] == '0minirezo'
656 ;
657 }
658
659 /**
660 * Autorisation d'effacer la base de données
661 *
662 * Il faut être webmestre
663 *
664 * @param string $faire Action demandée
665 * @param string $type Type d'objet sur lequel appliquer l'action
666 * @param int $id Identifiant de l'objet
667 * @param array $qui Description de l'auteur demandant l'autorisation
668 * @param array $opt Options de cette autorisation
669 * @return bool true s'il a le droit, false sinon
670 **/
671 function autoriser_detruire_dist($faire, $type, $id, $qui, $opt) {
672 return
673 autoriser('webmestre', null, null, $qui, $opt);
674 }
675
676 /**
677 * Autorisation de prévisialiser un auteur
678 *
679 * Il faut être administrateur ou que l'auteur à prévisualiser
680 * ait au moins publié un article
681 *
682 * @param string $faire Action demandée
683 * @param string $type Type d'objet sur lequel appliquer l'action
684 * @param int $id Identifiant de l'objet
685 * @param array $qui Description de l'auteur demandant l'autorisation
686 * @param array $opt Options de cette autorisation
687 * @return bool true s'il a le droit, false sinon
688 **/
689 function autoriser_auteur_previsualiser_dist($faire, $type, $id, $qui, $opt) {
690 // les admins peuvent "previsualiser" une page auteur
691 if ($qui['statut'] == '0minirezo'
692 AND !$qui['restreint']) return true;
693 // "Voir en ligne" si l'auteur a un article publie
694 $n = sql_fetsel('A.id_article', 'spip_auteurs_liens AS L LEFT JOIN spip_articles AS A ON (L.objet=\'article\' AND L.id_objet=A.id_article)', "A.statut='publie' AND L.id_auteur=".sql_quote($id));
695 return $n ? true : false;
696 }
697
698 /**
699 * Autorisation de créer un auteur
700 *
701 * Il faut être administrateur (restreint compris).
702 *
703 * @note
704 * Seuls les administrateurs complets ont accès à tous les
705 * champs du formulaire d'édition d'un auteur. À la création
706 * d'un auteur, son statut est 'poubelle'. C'est l'autorisation
707 * de modifier qui permet de changer les informations sensibles
708 * (statut, login, pass, etc.) à l'institution.
709 *
710 * @see auteur_inserer()
711 * @see auteur_instituer()
712 * @see autoriser_auteur_modifier_dist()
713 *
714 * @param string $faire Action demandée
715 * @param string $type Type d'objet sur lequel appliquer l'action
716 * @param int $id Identifiant de l'objet
717 * @param array $qui Description de l'auteur demandant l'autorisation
718 * @param array $opt Options de cette autorisation
719 * @return bool true s'il a le droit, false sinon
720 **/
721 function autoriser_auteur_creer_dist($faire, $type, $id, $qui, $opt) {
722 return ($qui['statut'] == '0minirezo');
723 }
724
725
726 /**
727 * Autorisation de modifier un auteur
728 *
729 * Attention tout depend de ce qu'on veut modifier. Il faut être au moins
730 * rédacteur, mais on ne peut pas promouvoir (changer le statut) un auteur
731 * avec des droits supérieurs au sien.
732 *
733 * @param string $faire Action demandée
734 * @param string $type Type d'objet sur lequel appliquer l'action
735 * @param int $id Identifiant de l'objet
736 * @param array $qui Description de l'auteur demandant l'autorisation
737 * @param array $opt Options de cette autorisation
738 * @return bool true s'il a le droit, false sinon
739 **/
740 function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) {
741
742 // Ni admin ni redacteur => non
743 if (!in_array($qui['statut'], array('0minirezo', '1comite')))
744 return false;
745
746 // Un redacteur peut modifier ses propres donnees mais ni son login/email
747 // ni son statut (qui sont le cas echeant passes comme option)
748 if ($qui['statut'] == '1comite') {
749 if ($opt['webmestre'])
750 return false;
751 elseif ($opt['statut'] OR $opt['restreintes'] OR $opt['email'])
752 return false;
753 elseif ($id == $qui['id_auteur'])
754 return true;
755 else
756 return false;
757 }
758
759 // Un admin restreint peut modifier/creer un auteur non-admin mais il
760 // n'a le droit ni de le promouvoir admin, ni de changer les rubriques
761 if ($qui['restreint']) {
762 if ($opt['webmestre'])
763 return false;
764 elseif ($opt['statut'] == '0minirezo' OR $opt['restreintes'])
765 return false;
766 else {
767 if ($id == $qui['id_auteur']) {
768 if ($opt['statut'])
769 return false;
770 else
771 return true;
772 }
773 else if ($id_auteur = intval($id)) {
774 $t = sql_fetsel("statut", "spip_auteurs", "id_auteur=$id_auteur");
775 if ($t AND $t['statut'] != '0minirezo')
776 return true;
777 else
778 return false;
779 }
780 // id = 0 => creation
781 else
782 return true;
783 }
784 }
785
786 // Un admin complet fait ce qu'elle veut
787 // sauf se degrader
788 if ($id == $qui['id_auteur'] && $opt['statut'])
789 return false;
790 // et toucher au statut webmestre si il ne l'est pas lui meme
791 // ou si les webmestres sont fixes par constante (securite)
792 elseif (isset($opt['webmestre']) AND $opt['webmestre'] AND (defined('_ID_WEBMESTRES') OR !autoriser('webmestre')))
793 return false;
794 // et modifier un webmestre si il ne l'est pas lui meme
795 elseif (intval($id) AND autoriser('webmestre','',0,$id) AND !autoriser('webmestre'))
796 return false;
797 else
798 return true;
799 }
800
801
802 /**
803 * Autorisation d'associer un auteur sur un objet
804 *
805 * Il faut pouvoir modifier l'objet en question
806 *
807 * @param string $faire Action demandée
808 * @param string $type Type d'objet sur lequel appliquer l'action
809 * @param int $id Identifiant de l'objet
810 * @param array $qui Description de l'auteur demandant l'autorisation
811 * @param array $opt Options de cette autorisation
812 * @return bool true s'il a le droit, false sinon
813 **/
814 function autoriser_associerauteurs_dist($faire, $type, $id, $qui, $opt){
815 return autoriser('modifier', $type, $id, $qui, $opt);
816 }
817
818
819 /**
820 * Autorisation d'upload FTP
821 *
822 * Il faut être administrateur.
823 *
824 * @param string $faire Action demandée
825 * @param string $type Type d'objet sur lequel appliquer l'action
826 * @param int $id Identifiant de l'objet
827 * @param array $qui Description de l'auteur demandant l'autorisation
828 * @param array $opt Options de cette autorisation
829 * @return bool true s'il a le droit, false sinon
830 **/
831 function autoriser_chargerftp_dist($faire, $type, $id, $qui, $opt) {
832 return $qui['statut'] == '0minirezo';
833 }
834
835 /**
836 * Autorisation d'activer le mode debug
837 *
838 * Il faut être administrateur.
839 *
840 * @param string $faire Action demandée
841 * @param string $type Type d'objet sur lequel appliquer l'action
842 * @param int $id Identifiant de l'objet
843 * @param array $qui Description de l'auteur demandant l'autorisation
844 * @param array $opt Options de cette autorisation
845 * @return bool true s'il a le droit, false sinon
846 **/
847 function autoriser_debug_dist($faire, $type, $id, $qui, $opt) {
848 return $qui['statut'] == '0minirezo';
849 }
850
851 /**
852 * Liste les rubriques d'un auteur
853 *
854 * Renvoie la liste des rubriques liées à cet auteur, independamment de son
855 * statut (pour les admins restreints, il faut donc aussi vérifier statut)
856 *
857 * Mémorise le resultat dans un tableau statique indéxé par les id_auteur.
858 * On peut reinitialiser un élément en passant un 2e argument non vide
859 *
860 * @param int $id_auteur Identifiant de l'auteur
861 * @param bool $raz Recalculer le résultat connu pour cet auteur
862 * @return array Liste des rubriques
863 **/
864 function liste_rubriques_auteur($id_auteur, $raz=false) {
865 static $restreint = array();
866
867 if (!$id_auteur = intval($id_auteur)) return array();
868 if ($raz) unset($restreint[$id_auteur]);
869 elseif (isset($restreint[$id_auteur])) return $restreint[$id_auteur];
870
871 $rubriques = array();
872 if (
873 (!isset($GLOBALS['meta']['version_installee']) OR $GLOBALS['meta']['version_installee']>16428)
874 AND $r = sql_allfetsel('id_objet', 'spip_auteurs_liens', "id_auteur=".intval($id_auteur)." AND objet='rubrique' AND id_objet!=0")
875 AND count($r)) {
876 $r = array_map('reset',$r);
877
878 // recuperer toute la branche, au format chaine enumeration
879 include_spip('inc/rubriques');
880 $r = calcul_branche_in($r);
881 $r = explode(',',$r);
882
883 // passer les rubriques en index, elimine les doublons
884 $r = array_flip($r);
885 // recuperer les index seuls
886 $r = array_keys($r);
887 // combiner pour avoir un tableau id_rubrique=>id_rubrique
888 // est-ce vraiment utile ? (on preserve la forme donnee par le code precedent)
889 $rubriques = array_combine($r,$r);
890 }
891
892 // Affecter l'auteur session le cas echeant
893 if (isset($GLOBALS['visiteur_session']['id_auteur'])
894 AND $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur)
895 $GLOBALS['visiteur_session']['restreint'] = $rubriques;
896
897
898 return $restreint[$id_auteur] = $rubriques;
899 }
900
901 /**
902 * Autorisation de modifier l'URL d'un objet
903 *
904 * Il faut pouvoir modifier l'objet.
905 *
906 * @param string $faire Action demandée
907 * @param string $type Type d'objet sur lequel appliquer l'action
908 * @param int $id Identifiant de l'objet
909 * @param array $qui Description de l'auteur demandant l'autorisation
910 * @param array $opt Options de cette autorisation
911 * @return bool true s'il a le droit, false sinon
912 **/
913 function autoriser_modifierurl_dist($faire, $type, $id, $qui, $opt) {
914 return autoriser('modifier', $type, $id, $qui, $opt);
915 }
916
917 /**
918 * Autorisation de prévisualiser une rubrique
919 *
920 * Il faut pouvoir prévisualiser.
921 *
922 * @param string $faire Action demandée
923 * @param string $type Type d'objet sur lequel appliquer l'action
924 * @param int $id Identifiant de l'objet
925 * @param array $qui Description de l'auteur demandant l'autorisation
926 * @param array $opt Options de cette autorisation
927 * @return bool true s'il a le droit, false sinon
928 **/
929 function autoriser_rubrique_previsualiser_dist($faire,$type,$id,$qui,$opt){
930 return autoriser('previsualiser');
931 }
932
933 /**
934 * Autorisation d'iconifier une rubrique (mettre un logo)
935 *
936 * Il faut pouvoir publier dans la rubrique.
937 *
938 * @param string $faire Action demandée
939 * @param string $type Type d'objet sur lequel appliquer l'action
940 * @param int $id Identifiant de l'objet
941 * @param array $qui Description de l'auteur demandant l'autorisation
942 * @param array $opt Options de cette autorisation
943 * @return bool true s'il a le droit, false sinon
944 **/
945 function autoriser_rubrique_iconifier_dist($faire,$type,$id,$qui,$opt){
946 return autoriser('publierdans', 'rubrique', $id, $qui, $opt);
947 }
948
949 /**
950 * Autorisation d'iconifier un auteur (mettre un logo)
951 *
952 * Il faut un administrateur ou que l'auteur soit celui qui demande l'autorisation
953 *
954 * @param string $faire Action demandée
955 * @param string $type Type d'objet sur lequel appliquer l'action
956 * @param int $id Identifiant de l'objet
957 * @param array $qui Description de l'auteur demandant l'autorisation
958 * @param array $opt Options de cette autorisation
959 * @return bool true s'il a le droit, false sinon
960 **/
961 function autoriser_auteur_iconifier_dist($faire,$type,$id,$qui,$opt){
962 return (($id == $qui['id_auteur']) OR
963 (($qui['statut'] == '0minirezo') AND !$qui['restreint']));
964 }
965
966 /**
967 * Autorisation d'iconifier un objet (mettre un logo)
968 *
969 * Il faut pouvoir modifier l'objet
970 *
971 * @param string $faire Action demandée
972 * @param string $type Type d'objet sur lequel appliquer l'action
973 * @param int $id Identifiant de l'objet
974 * @param array $qui Description de l'auteur demandant l'autorisation
975 * @param array $opt Options de cette autorisation
976 * @return bool true s'il a le droit, false sinon
977 **/
978 function autoriser_iconifier_dist($faire,$type,$id,$qui,$opt){
979 // par defaut, on a le droit d'iconifier si on a le droit de modifier
980 return autoriser('modifier', $type, $id, $qui, $opt);
981 }
982
983
984 /**
985 * Autorisation OK
986 *
987 * Autorise toujours !
988 * Fonction sans surprise pour permettre les tests.
989 *
990 * @param string $faire Action demandée
991 * @param string $type Type d'objet sur lequel appliquer l'action
992 * @param int $id Identifiant de l'objet
993 * @param array $qui Description de l'auteur demandant l'autorisation
994 * @param array $opt Options de cette autorisation
995 * @return bool true
996 **/
997 function autoriser_ok_dist($faire, $type, $id, $qui, $opt) { return true; }
998
999 /**
1000 * Autorisation NIET
1001 *
1002 * Refuse toujours !
1003 * Fonction sans surprise pour permettre les tests.
1004 *
1005 * @param string $faire Action demandée
1006 * @param string $type Type d'objet sur lequel appliquer l'action
1007 * @param int $id Identifiant de l'objet
1008 * @param array $qui Description de l'auteur demandant l'autorisation
1009 * @param array $opt Options de cette autorisation
1010 * @return bool false
1011 **/
1012 function autoriser_niet_dist($faire, $type, $id, $qui, $opt) { return false; }
1013
1014 /**
1015 * Autorisation de réparer la base de données
1016 *
1017 * Il faut pouvoir la détruire (et ne pas être en cours de réinstallation)
1018 *
1019 * @param string $faire Action demandée
1020 * @param string $type Type d'objet sur lequel appliquer l'action
1021 * @param int $id Identifiant de l'objet
1022 * @param array $qui Description de l'auteur demandant l'autorisation
1023 * @param array $opt Options de cette autorisation
1024 * @return bool false
1025 **/
1026 function autoriser_base_reparer_dist($faire, $type, $id, $qui, $opt) {
1027 if (!autoriser('detruire') OR _request('reinstall'))
1028 return false;
1029
1030 return true;
1031 }
1032
1033 /**
1034 * Autorisation de voir l'onglet infosperso
1035 *
1036 * Toujours OK
1037 *
1038 * @param string $faire Action demandée
1039 * @param string $type Type d'objet sur lequel appliquer l'action
1040 * @param int $id Identifiant de l'objet
1041 * @param array $qui Description de l'auteur demandant l'autorisation
1042 * @param array $opt Options de cette autorisation
1043 * @return bool true s'il a le droit, false sinon
1044 **/
1045 function autoriser_infosperso_onglet_dist($faire,$type,$id,$qui,$opt) {
1046 return true;
1047 }
1048
1049 /**
1050 * Autorisation de voir l'onglet configurerlangage
1051 *
1052 * Toujours OK
1053 *
1054 * @param string $faire Action demandée
1055 * @param string $type Type d'objet sur lequel appliquer l'action
1056 * @param int $id Identifiant de l'objet
1057 * @param array $qui Description de l'auteur demandant l'autorisation
1058 * @param array $opt Options de cette autorisation
1059 * @return bool true s'il a le droit, false sinon
1060 **/
1061 function autoriser_configurerlangage_onglet_dist($faire,$type,$id,$qui,$opt) {
1062 return true;
1063 }
1064
1065 /**
1066 * Autorisation de voir l'onglet configurerpreferences
1067 *
1068 * Toujours OK
1069 *
1070 * @param string $faire Action demandée
1071 * @param string $type Type d'objet sur lequel appliquer l'action
1072 * @param int $id Identifiant de l'objet
1073 * @param array $qui Description de l'auteur demandant l'autorisation
1074 * @param array $opt Options de cette autorisation
1075 * @return bool true s'il a le droit, false sinon
1076 **/
1077 function autoriser_configurerpreferences_onglet_dist($faire,$type,$id,$qui,$opt) {
1078 return true;
1079 }
1080
1081 /**
1082 * Autorisation de voir le menu auteurs
1083 *
1084 * Toujours OK
1085 *
1086 * @param string $faire Action demandée
1087 * @param string $type Type d'objet sur lequel appliquer l'action
1088 * @param int $id Identifiant de l'objet
1089 * @param array $qui Description de l'auteur demandant l'autorisation
1090 * @param array $opt Options de cette autorisation
1091 * @return bool true s'il a le droit, false sinon
1092 **/
1093 function autoriser_auteurs_menu_dist($faire, $type, $id, $qui, $opt){return true;}
1094
1095 /**
1096 * Autorisation de voir le menu articles
1097 *
1098 * Toujours OK
1099 *
1100 * @param string $faire Action demandée
1101 * @param string $type Type d'objet sur lequel appliquer l'action
1102 * @param int $id Identifiant de l'objet
1103 * @param array $qui Description de l'auteur demandant l'autorisation
1104 * @param array $opt Options de cette autorisation
1105 * @return bool true s'il a le droit, false sinon
1106 **/
1107 function autoriser_articles_menu_dist($faire, $type, $id, $qui, $opt){return true;}
1108
1109 /**
1110 * Autorisation de voir le menu rubriques
1111 *
1112 * Toujours OK
1113 *
1114 * @param string $faire Action demandée
1115 * @param string $type Type d'objet sur lequel appliquer l'action
1116 * @param int $id Identifiant de l'objet
1117 * @param array $qui Description de l'auteur demandant l'autorisation
1118 * @param array $opt Options de cette autorisation
1119 * @return bool true s'il a le droit, false sinon
1120 **/
1121 function autoriser_rubriques_menu_dist($faire, $type, $id, $qui, $opt){return true;}
1122
1123 /**
1124 * Autorisation de voir le menu articlecreer
1125 *
1126 * Il faut au moins une rubrique présente.
1127 *
1128 * @param string $faire Action demandée
1129 * @param string $type Type d'objet sur lequel appliquer l'action
1130 * @param int $id Identifiant de l'objet
1131 * @param array $qui Description de l'auteur demandant l'autorisation
1132 * @param array $opt Options de cette autorisation
1133 * @return bool true s'il a le droit, false sinon
1134 **/
1135 function autoriser_articlecreer_menu_dist($faire, $type, $id, $qui, $opt){
1136 return verifier_table_non_vide();
1137 }
1138
1139 /**
1140 * Autorisation de voir le menu auteurcreer
1141 *
1142 * Il faut pouvoir créer un auteur !
1143 *
1144 * @see autoriser_auteur_creer_dist()
1145 *
1146 * @param string $faire Action demandée
1147 * @param string $type Type d'objet sur lequel appliquer l'action
1148 * @param int $id Identifiant de l'objet
1149 * @param array $qui Description de l'auteur demandant l'autorisation
1150 * @param array $opt Options de cette autorisation
1151 * @return bool true s'il a le droit, false sinon
1152 **/
1153 function autoriser_auteurcreer_menu_dist($faire, $type, $id, $qui, $opt) {
1154 return autoriser('creer', 'auteur', $id, $qui, $opt);
1155 }
1156
1157 /**
1158 * Autorisation de voir le menu suiviedito
1159 *
1160 * Il faut être administrateur (y compris restreint).
1161 *
1162 * @param string $faire Action demandée
1163 * @param string $type Type d'objet sur lequel appliquer l'action
1164 * @param int $id Identifiant de l'objet
1165 * @param array $qui Description de l'auteur demandant l'autorisation
1166 * @param array $opt Options de cette autorisation
1167 * @return bool true s'il a le droit, false sinon
1168 **/
1169 function autoriser_suiviedito_menu_dist($faire, $type, $id, $qui, $opt){
1170 return $qui['statut']=='0minirezo';
1171 }
1172
1173 /**
1174 * Autorisation de voir le menu synchro
1175 *
1176 * Il faut être administrateur (y compris restreint).
1177 *
1178 * @param string $faire Action demandée
1179 * @param string $type Type d'objet sur lequel appliquer l'action
1180 * @param int $id Identifiant de l'objet
1181 * @param array $qui Description de l'auteur demandant l'autorisation
1182 * @param array $opt Options de cette autorisation
1183 * @return bool true s'il a le droit, false sinon
1184 **/
1185 function autoriser_synchro_menu_dist($faire, $type, $id, $qui, $opt){
1186 return $qui['statut']=='0minirezo';
1187 }
1188
1189 /**
1190 * Autorisation de purger la queue de travaux
1191 *
1192 * Il faut être webmestre.
1193 *
1194 * @param string $faire Action demandée
1195 * @param string $type Type d'objet sur lequel appliquer l'action
1196 * @param int $id Identifiant de l'objet
1197 * @param array $qui Description de l'auteur demandant l'autorisation
1198 * @param array $opt Options de cette autorisation
1199 * @return bool true s'il a le droit, false sinon
1200 **/
1201 function autoriser_queue_purger_dist($faire, $type, $id, $qui, $opt){
1202 return autoriser('webmestre');
1203 }
1204
1205
1206 /**
1207 * Autorisation l'échafaudage de squelettes en Z
1208 *
1209 * Il faut être dans l'espace privé (et authentifié),
1210 * sinon il faut être webmestre (pas de fuite d'informations publiées)
1211 *
1212 * @param string $faire Action demandée
1213 * @param string $type Type d'objet sur lequel appliquer l'action
1214 * @param int $id Identifiant de l'objet
1215 * @param array $qui Description de l'auteur demandant l'autorisation
1216 * @param array $opt Options de cette autorisation
1217 * @return bool true s'il a le droit, false sinon
1218 **/
1219 function autoriser_echafauder_dist($faire, $type, $id, $qui, $opt){
1220 if (test_espace_prive())
1221 return intval($qui['id_auteur'])?true:false;
1222 else
1223 return autoriser('webmestre','',$id,$qui,$opt);
1224 }
1225
1226
1227 /**
1228 * Lister les auteurs d'un article
1229 *
1230 * Fonction générique utilisée par plusieurs autorisations
1231 *
1232 * @param int $id_article Identifiant de l'article
1233 * @param string $cond Condition en plus dans le where de la requête
1234 * @return array|bool
1235 * - array : liste des id_auteur trouvés
1236 * - false : serveur SQL indisponible
1237 */
1238 function auteurs_article($id_article, $cond='')
1239 {
1240 return sql_allfetsel("id_auteur", "spip_auteurs_liens", "objet='article' AND id_objet=$id_article". ($cond ? " AND $cond" : ''));
1241 }
1242
1243
1244 /**
1245 * Tester si on est admin restreint sur une rubrique donnée
1246 *
1247 * Fonction générique utilisee dans des autorisations ou assimilée
1248 *
1249 * @param int $id_rubrique Identifiant de la rubrique
1250 * @return bool true si administrateur de cette rubrique, false sinon.
1251 */
1252 function acces_restreint_rubrique($id_rubrique) {
1253 global $connect_id_rubrique;
1254
1255 return (isset($connect_id_rubrique[$id_rubrique]));
1256 }
1257
1258
1259 /**
1260 * Verifier qu'il existe au moins un parent
1261 *
1262 * Fonction utilisee dans des autorisations des boutons / menus du prive des objets enfants (articles, breves, sites)
1263 *
1264 * @param string $table la table a verifier
1265 * @return bool true si un parent existe
1266 */
1267 function verifier_table_non_vide($table='spip_rubriques') {
1268 static $done = array();
1269 if (!isset($done[$table]))
1270 $done[$table] = sql_countsel($table)>0;
1271 return $done[$table];
1272 }
1273
1274 /**
1275 * Une autorisation determiner la possibilite de s'inscire pour un statut et un id_rubrique,
1276 * a l'aide de la liste globale des statuts (tableau mode => nom du mode)
1277 * Utile pour le formulaire d'inscription.
1278 * Par defaut, seuls 6forum et 1comite possibles, les autres sont en false
1279 * pour un nouveau mode il suffit de definir l'autorisation specifique
1280 *
1281 * @param $faire
1282 * @param $quoi
1283 * statut auteur demande
1284 * @param $id
1285 * id_rubrique eventuel (pas utilise ici, utilise dans des usages persos)
1286 * @param $qui
1287 * @param $opt
1288 * @return bool
1289 */
1290 function autoriser_inscrireauteur_dist($faire, $quoi, $id, $qui, $opt){
1291
1292 $s = array_search($quoi, $GLOBALS['liste_des_statuts']);
1293 switch ($s) {
1294
1295 case 'info_redacteurs' :
1296 return ($GLOBALS['meta']['accepter_inscriptions'] == 'oui');
1297
1298 case 'info_visiteurs' :
1299 return ($GLOBALS['meta']['accepter_visiteurs'] == 'oui' OR $GLOBALS['meta']['forums_publics'] == 'abo');
1300
1301 }
1302
1303 return false;
1304 }
1305 ?>