[SPIP Zone] r11771 - in /_plugins_/_dev_/autorite: fonds/cfg_autorite.html inc/autoriser.php

fil-JM9gtpQu/Ho@public.gmane.org wrote:

Author: fil-JM9gtpQu/Ho@public.gmane.org
Date: Tue May 1 13:02:27 2007
New Revision: 11771

Log:
le wiki sur des secteurs multiples (chaud)

Modified:
    _plugins_/_dev_/autorite/fonds/cfg_autorite.html
    _plugins_/_dev_/autorite/inc/autoriser.php

Modified: _plugins_/_dev_/autorite/fonds/cfg_autorite.html

--- _plugins_/_dev_/autorite/fonds/cfg_autorite.html (original)
+++ _plugins_/_dev_/autorite/fonds/cfg_autorite.html Tue May 1 13:02:27 2007
@@ -70,13 +70,29 @@
<p>
<label>
Choisissez ci-dessous un secteur &#224; traiter comme un wiki, c'est-&#224;-dire &#233;ditable par tous depuis l'espace public (&#224; condition d'avoir une interface, par exemple les crayons)&nbsp;:
+
<br />
-<select name="espace_wiki" id="espace_wiki">
- <option value="0">(aucun)</option>
- <BOUCLE_r(RUBRIQUES){racine}{par num titre, titre}>
- <option value="#ID_RUBRIQUE"[(#ENV{espace_wiki}|=={#ID_RUBRIQUE}|?{' selected="selected"'})]>#TITRE</option>
- </BOUCLE_r>
+
+[(#REM)
+ Hack: si notre config n'existe pas, on veut un array vide
+ pour ne pas avoir d'erreur sur |in_array !
+]
+[(#SET{selected,[(#REM|sinon{-}|explode{''})]})]
+[(#CONFIG{autorite/espace_wiki,'',''}|is_array|?{
+ [(#SET{selected,#CONFIG{autorite/espace_wiki,'',''}})]
+})]

Mais on peut pas utiliser un #ARRAY vide, genre:

[(#CONFIG{autorite/espace_wiki,#ARRAY,''}

?
En tout cas, tu a raison, le in_array de l'exemple de cfg est un peu rapide ...
--
toggg

+
+<select name="espace_wiki" multiple="multiple" size="5" id="espace_wiki">
+<BOUCLE_rmul(RUBRIQUES){racine}{par num titre, titre}>
+ <option value="#ID_RUBRIQUE"[(#ID_RUBRIQUE|in_array{#GET{selected}}|?{' selected="selected"'})]>
+ #TITRE
+ </option>
+</BOUCLE_rmul>
</select>
+
+<small><br />(vous pouvez s&#233;lectionner plusieurs secteurs avec la touche shift)
+<br /><a onclick="$('#espace_wiki').find('option').attr('selected', false).end().trigger('change');">x</a> tout d&#233;selectionner</small>
+
</label>
</p>
@@ -105,7 +121,7 @@
     else
       $('#espace_wiki_qui:visible').slideUp('slow');
   })
- if (parseInt($('#espace_wiki')[0].value) == 0)
+ if ($('#espace_wiki option[@selected]').length == 0)
     $('#espace_wiki_qui').hide();
// --></script>

Modified: _plugins_/_dev_/autorite/inc/autoriser.php

--- _plugins_/_dev_/autorite/inc/autoriser.php (original)
+++ _plugins_/_dev_/autorite/inc/autoriser.php Tue May 1 13:02:27 2007
@@ -38,7 +38,16 @@
##
if ($GLOBALS['autorite']['espace_wiki']) {
   if (!function_exists('autorisation_wiki_visiteur')) {
- function autorisation_wiki_visiteur($qui) {
+ function autorisation_wiki_visiteur($qui, $id_secteur) {
+ // espace_wiki est un array(secteur1, secteur2), ou un id_secteur
+ if (
+ (is_array($GLOBALS['autorite']['espace_wiki'])
+ AND !in_array($id_secteur,$GLOBALS['autorite']['espace_wiki']))
+ AND
+ $id_secteur != $GLOBALS['autorite']['espace_wiki']
+ )
+ return false;
+
     switch($qui['statut']) {
       case '0minirezo':
       case '1comite':
@@ -73,15 +81,11 @@
   include_spip('inc/auth');
   return
     autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
- OR (
+ OR
       // Cas du wiki, on appelle la fonction qui verifie les droits wiki
- $r['id_secteur'] == $GLOBALS['autorite']['espace_wiki']
- AND autorisation_wiki_visiteur($qui)
- )
+ autorisation_wiki_visiteur($qui, $r['id_secteur'])
     OR (
       in_array($qui['statut'], array('0minirezo', '1comite'))
-
- # si on commente cette ligne : tous les articles sont modifiables
       AND (
         $GLOBALS['autorite']['auteur_mod_article']
         OR in_array($r['statut'], array('prop','prepa', 'poubelle'))
@@ -111,8 +115,7 @@
   $s = spip_query(
   "SELECT id_secteur FROM spip_rubriques WHERE id_rubrique="._q($id));
   $r = spip_fetch_array($s);
- if ($r['id_secteur'] == $GLOBALS['autorite']['espace_wiki']
- AND autorisation_wiki_visiteur($qui))
+ if (autorisation_wiki_visiteur($qui, $r['id_secteur']))
     return true;
    // par defaut, NIET

Mais on peut pas utiliser un #ARRAY vide, genre:

[(#CONFIG{autorite/espace_wiki,#ARRAY,''}

?
En tout cas, tu a raison, le in_array de l'exemple de cfg est un peu
rapide ...

Si tu as mieux envoie ; ça ne me plaît pas ces ajouts de gros code que
j'ai dû faire pour éviter d'affreux warning sur in_array() qui veut un
array (l'imbécile).