[résolu] Organic Groups : Afficher un bloc seulement si l'utilisateur est membre et limiter l'affichage à une page donnée

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Avant de soumettre ce bout de code comme "astuce" dans le wiki, je voudrai m'assurer - même si le code fonctionne - que celui-ci est correct.

Ce code n'est bien sûr pas nécessaire pour gérer la visibilité des blocs créés par le module Organic Groups (qui contrôle bien si un utilisateur est membre avant d'afficher) ou via Views (on passe un argument dans la vue qui contrôle au passage si l'utilisateur est membre).

Pour certains cas on doit utiliser dans les paramètres de visibilité des blocs l'option "Afficher si le code PHP suivant retourne TRUE (mode PHP, experts seulement)."

Dans mon cas pour l'insertion d'un bloc créé par NodeBlock qui insère un noeud de type Directory Listing (cf le module filebrowser) dans un bloc que je souhaite afficher sur la page d'accueil du groupe.

J'ai donc regardé un peu du côté du module Organic Groups comment on teste l'appartenance d'un utilisateur à un groupe :

return og_is_group_member($gid, $include_admins = TRUE, $uid = NULL)

Le code fonctionne, on peut changer les options bien sûr comme indiqué ici : http://api.freestylesystems.co.uk/api/function/og_is_group_member

Maintenant, je veux afficher ce bloc seulement sur la page d'accueil de mon groupe. Mon premier réflex a été de me dire, il faut que je récupère l'ID du noeud courant et que je vérifie qu'il est égal à l'ID de mon noeud de groupe et hop le tour est joué. En fait, ça n'a pas l'air si simple et de ce que j'ai lu ici et là, mieux vaut passer par les arguments.

J'abouti donc au code suivant pour la visibilité de mon bloc :

<?php
  
if (arg(1) == '59' && arg(2) == NULL) {
  return
og_is_group_member($gid, $include_admins = TRUE, $uid = NULL);
}
?>

L'ID de mon noeud de groupe dans l'exemple est 59. Pourquoi je passe aussi arg(2) == NULL ? Réponse pour éviter que le bloc soit visible sur toutes les pages de groupe.

C'est un peu du bricolage et je ne suis pas totalement satisfait, ça marche dans mon contexte à moi mais comment rendre ce code plus "générique" / propre ?

Note : Je ne suis pas codeur, je n'ai que des rudiments de PHP alors ne soyez pas trop dur :P

Version de Drupal : 

Bon la méthode ci-dessus marchait mais maintenant elle ne marche plus et je n'arrive pas à comprendre pourquoi... j'ai mis à jour OG en 2.0 RC3 mais je ne crois pas que og_is_group_member ai changé...

Je suis en train d'essayer une autre méthode :

<?php
$match
= FALSE;
$url = request_uri();
$member = return og_is_group_member($gid, $include_admins = TRUE, $uid = NULL);
if (
strpos($url, "extranet/developpement-lecture") && $member==TRUE) {
 
$match = TRUE;
}
return
$match;
?>

mais sans succès pour l'instant... idée ?