[SPIP Zone] patch pour le plugin acces restreint groupes

Bonjour ,

je propose de rejouter ces quelques lignes qui dans mon cas ( spip 1.9.2b [9381] + plugin acces restreint groupes version 1.0.3 (spip192) ) fonctionne.

Cela permet d'avoir sur la page naviguer et uniquement sur la première page ( quand id_rubrique n'est pas rensignée dans l'url ) un cadre permettant d'avboir un lien vers les rubriques auxquelles l'utilisateur connecté a accés.
Dans mon cas, certains utilisateurs n'ont accés qu'a une rubrique au fin fond de l'arborescence du site... et si on leur ouvre le chemin jusqu'a cette rubrique alors ca ne colle pas au fonctionnement voulu : l'accés a une seule rubrique.
Evidemment ce code est perso et ne colle peut-être pas a l'esprit du dév de spip c'est pour cela que je le poste ici afin d'en discuter avant de commit éventuellement sur le plugin ( si ca interesse d'autres utilisateurs bien sur ).

les points a modifier : substr($_REQUEST['spip_admin'],1) pour avoir le login de l'utilisateur connecté ... je n'ai pas trouvé ca ailleurs ( si dans $_COOKIES mais je me suis dit que ca devait pas être super déjà que c'est pas terrible ... )

pour cela il faut rajouter dans le fichier exec/naviguer.php et dans la fonction exec_naviguer_dist() ce code
plutot a la fin de la fonction juste avant le fin_gauche() ; fin_page()

(si vous voulez des captures d'crans pour voir ce que ca donne n'hésitez pas a demander en privée ... je ne pense pas que ca interesse toute la liste :slight_smile: )

if(!$id_rubrique)
    {
        debut_cadre_relief();
             //texte a internationalisé
        echo "Voici la liste des rubriques auxquelles vous avez accés : <br/>";

        $row = spip_fetch_array(spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='".substr($_REQUEST['spip_admin'],1)."'"));
        $id_auteur=$row['id_auteur'];
        //initialisation
        $tab_grp=array();

        //calcul de tous les groupes direct auquel appartient l'auteur
        $result = spip_query("SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE id_auteur=$id_auteur ");
        while ($row = mysql_fetch_array($result)) {
            $tab_grp[]=$row['id_grpacces'];
            //calcul de tous les sous groupes ( indirect )
            $tab_grp=array_merge($tab_grp,recursivite_sousgroupe_acces_restreint($row['id_grpacces']));
        }

        $tab_rub=array();
        $result = spip_query("SELECT id_rubrique FROM spip_accesgroupes_acces WHERE id_grpacces in (".implode(",",$tab_grp).") ");
        while ($row = mysql_fetch_array($result)) {
            $tab_rub[]=$row['id_rubrique'];
        }

        naviguer_affiche_rubrique_ligne($tab_rub);

        fin_cadre_relief();
    }

Et voici les fonctions utilisées par ce bout de code :

function recursivite_sousgroupe_acces_restreint($id_groupe)
{
    //calcul de tous les sous groupes auquels l'auteur fait partie

    $result = spip_query("SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE id_ss_groupe=$id_groupe ");
        while ($row = mysql_fetch_array($result)) {
            $temp[]=$row['id_grpacces'];
            $temp=array_merge($temp,recursivite_sousgroupe_acces_restreint($row['id_grpacces']));
        }
    return $temp;

}

function naviguer_affiche_rubrique_ligne($tab_rub){
    foreach ($tab_rub as $id_rubrique){
        $row = spip_fetch_array(spip_query("SELECT id_rubrique,titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique "));
        ?><a href="?exec=naviguer&id_rubrique=<?=$id_rubrique;?>" title="<?=$row['titre'];?>"><?=$row['titre'];?></a><br/><?
    }
}

Yoann NOGUES a écrit :

Bonjour ,

je propose de rejouter ces quelques lignes qui dans mon cas ( spip 1.9.2b [9381] + plugin acces restreint groupes version 1.0.3 (spip192) ) fonctionne.

Cela permet d'avoir sur la page naviguer et uniquement sur la première page ( quand id_rubrique n'est pas rensignée dans l'url ) un cadre permettant d'avboir un lien vers les rubriques auxquelles l'utilisateur connecté a accés.
Dans mon cas, certains utilisateurs n'ont accés qu'a une rubrique au fin fond de l'arborescence du site... et si on leur ouvre le chemin jusqu'a cette rubrique alors ca ne colle pas au fonctionnement voulu : l'accés a une seule rubrique.
Evidemment ce code est perso et ne colle peut-être pas a l'esprit du dév de spip c'est pour cela que je le poste ici afin d'en discuter avant de commit éventuellement sur le plugin ( si ca interesse d'autres utilisateurs bien sur ).

les points a modifier : substr($_REQUEST['spip_admin'],1) pour avoir le login de l'utilisateur connecté ... je n'ai pas trouvé ca ailleurs ( si dans $_COOKIES mais je me suis dit que ca devait pas être super déjà que c'est pas terrible ... )

pour cela il faut rajouter dans le fichier exec/naviguer.php et dans la fonction exec_naviguer_dist() ce code
plutot a la fin de la fonction juste avant le fin_gauche() ; fin_page()

(si vous voulez des captures d'crans pour voir ce que ca donne n'hésitez pas a demander en privée ... je ne pense pas que ca interesse toute la liste :slight_smile: )

if(!$id_rubrique)
    {
        debut_cadre_relief();
             //texte a internationalisé
        echo "Voici la liste des rubriques auxquelles vous avez accés : <br/>";

        $row = spip_fetch_array(spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='".substr($_REQUEST['spip_admin'],1)."'"));
        $id_auteur=$row['id_auteur'];
        //initialisation
        $tab_grp=array();

        //calcul de tous les groupes direct auquel appartient l'auteur
        $result = spip_query("SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE id_auteur=$id_auteur ");
        while ($row = mysql_fetch_array($result)) {
            $tab_grp=$row['id_grpacces'];
            //calcul de tous les sous groupes ( indirect )
            $tab_grp=array_merge($tab_grp,recursivite_sousgroupe_acces_restreint($row['id_grpacces']));
        }

        $tab_rub=array();
        $result = spip_query("SELECT id_rubrique FROM spip_accesgroupes_acces WHERE id_grpacces in (".implode(",",$tab_grp).") ");
        while ($row = mysql_fetch_array($result)) {
            $tab_rub=$row['id_rubrique'];
        }

        naviguer_affiche_rubrique_ligne($tab_rub);

        fin_cadre_relief();
    }

Et voici les fonctions utilisées par ce bout de code :

function recursivite_sousgroupe_acces_restreint($id_groupe)
{
    //calcul de tous les sous groupes auquels l'auteur fait partie

    $result = spip_query("SELECT id_grpacces FROM spip_accesgroupes_auteurs WHERE id_ss_groupe=$id_groupe ");
        while ($row = mysql_fetch_array($result)) {
            $temp=$row['id_grpacces'];
            $temp=array_merge($temp,recursivite_sousgroupe_acces_restreint($row['id_grpacces']));
        }
    return $temp;

}

function naviguer_affiche_rubrique_ligne($tab_rub){
    foreach ($tab_rub as $id_rubrique){
        $row = spip_fetch_array(spip_query("SELECT id_rubrique,titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique "));
        ?><a href="?exec=naviguer&id_rubrique=<?=$id_rubrique;?>" title="<?=$row['titre'];?>"><?=$row['titre'];?></a><br/><?
    }
}

je suis en train d'essayer d' "ajaxiser" ce code pour le rendre un peu moins lourd ... et puis surtout parce que l'on en a pas toujours besoin(enfin toujours dans mon cas).

login de l'utilisateur connecté ... je n'ai pas trouvé ca ailleurs ( si
dans $_COOKIES mais je me suis dit que ca devait pas être super déjà que
c'est pas terrible ... )

Non c'est pas génial :slight_smile:

ce qu'il te faut c'est $GLOBALS['auteur_session']['id_auteur']

-- Fil