WorkMates invite BackBone.js à jouer dans #BuddyPress

Publié le

par

Crédits Photo : You’re invited by anetz, on Flickr

Voici un plugin expérimental qui se propose de prendre le relai du composant « Friend Connections » de BuddyPress, si toutefois ce dernier est désactivé, pour maintenir la disponibilité des fonctionnalités d’invitation à des groupes et d’autocompletion du champ destinataire du composant de messagerie privée.

Avez vous remarqué que, dans le monde « corporate », le terme « Ami » était quelque peu inapproprié ? On utilise plus volontiers des termes tels que « collègue », « collaborateur », « client interne », « partenaire », etc.. Mais dans ce monde, je ne crois pas qu’on puisse dire que l’amitié soit une relation encouragée et encore moins recherchée !

Ainsi, on peut être tenté, dans le cadre de communautés Intranet, de faire l’impasse sur le le composant « Friend Connections » de BuddyPress. Simplement, cette désactivation aura un impact sur d’autres fonctionnalités de ce plugin car il joue un rôle important dans le comportement de deux autres :

  • Les groupes utilisateurs
  • La messagerie privée

Pour le premier : il conditionne la disponibilité de la fonction d’invitation à rejoindre un groupe depuis l’écran « send-invites » d’un groupe.

L’interface native de BuddyPress pour gérer les invitations à rejoindre un groupe

Pour le second, il conditionne l’autocompletion du champ destinataire de l’écran de composition d’un message privé.

Autocompletion des destinataires d’un message privé

Alors, pour conserver ces fonctions importantes, on peut ruser et remplacer les occurrences du terme « Ami » par « Contact » dans le fichier de traduction du plugin. Et là on réfléchit deux secondes 😉 Dans une entreprise on est tous des contacts les uns des autres ! Du coup, dans cet environnement particulier, je préfère désormais me passer de ce composant.

Oui mais voilà! Une fois le composant « Friend Connections » désactivé, quid du comportement des deux composants évoqués plus haut.. But wait! for the « i’m not a french » readers, i’ve built this quite long (15 mins!!) screencast to explain why i’ve created this experimental plugin and also to demonstrate it 🙂

Le composant « Friend Connections » est donc désactivé. Si on s’amuse alors à créer un groupe « masqué », c’est à dire dont seul le créateur et les membres disposent du lien pour y accéder. La fonction d’invitation à rejoindre le groupe n’étant plus disponible, et du fait de son caractère « caché » le lien d’adhésion non plus, il y a un fort risque qu’on se sente éternellement très seul dans ce groupe !

Bien entendu, on peut constituer une liste d’utilisateurs à intégrer au groupe, puis envoyer un mail à l’administrateur de la communauté pour que depuis l’interface de gestion des groupes de l’administration WordPress, il les ajoute.. Ce qui me paraît un peu fastidieux..

Une autre solution est d’avoir recours à « invite anyone« , un plugin de l’excellent Boone qui permet comme son nom l’indique d’inviter potentiellement tout le monde à rejoindre le groupe ou le site de la communauté.

Mon propos du jour est donc d’ajouter une nouvelle alternative. Pour la bâtir, j’avais vraiment envie de soigner l’interface de sélection des membres, car il peut y en avoir potentiellement beaucoup !! Si vous « scrollez » vers le haut de cet article, lorsqu’il s’agit de lister les amis, on peut utiliser une série de cases à cocher.. Dans notre cas c’est plus problématique. Aussi, j’ai décidé d’inviter BackBone.js pour m’épauler dans la construction de cette partie du plugin. Voici une librairie qui retient tout particulièrement mon attention comme j’ai pu l’expliquer dans un article précédent. Ainsi, après avoir ausculté le mécanisme de BuddyPress et puisé de l’inspiration dans « invite anyone », j’ai conçu cette interface :

L’interface de sélection des « WorkMates » du plugin.

WorkMates en détail

Ce plugin expérimental « détourne » l’éditeur de media de WordPress (introduit depuis la version 3.5) afin de lister les membres de la communauté, de les sélectionner en cliquant sur leurs avatars pour remplir la liste de membres à inviter dans la partie basse de la fenêtre, laquelle joue le rôle d’un « panier » de membres qui est réinitialisable à tout moment en cliquant sur le lien « Clear » ou « Annuler » en français. Il est également possible d’utiliser le champ de recherche en haut à droite afin de trouver un membre en particulier. Si plus de 20 membres composent la communauté, la navigation au dessus des avatars s’active, et il est possible de passer d’une page à l’autre.

A l’origine conçue pour gérer et notamment uploader des media, l’éditeur WordPress inclut par défaut sa version « plupload » ce qui pour le cas présent n’était d’aucune utilité. Il a donc fallu ruser sévère pour garantir le fonctionnement de cet éditeur sans cette librairie spécifique 😉 Ensuite, j’ai créé mes propres modèles, collections et views BackBone en « extend »-ant ceux et celles de WordPress afin de manipuler des membres et non plus des fichiers ou des images.

Ce plugin, à la différence d’ »invite anyone », ne remplace pas l’action du composant « Friend Connections » de BuddyPress dans la gestion des invitations à rejoindre un groupe. D’ailleurs, comme je l’explique dans la vidéo de démonstration en « franglish » : si ce dernier est activé, WorkMates se met en mode « veille ». En revanche, il s’enclenche dés que le composant « Friend Connections » est désactivé, garantissant ainsi la disponibilité d’invitation à rejoindre des groupes et ce pour l’intégralité des inscrits à la communauté.

Ce n’est pas tout! Lorsque le composant « Friend Connections » est désactivé, on a vu précédemment que l’autocompletion des destinataires de la messagerie privée n’était plus disponible. Il s’agit alors de se rendre sur le champ de profil d’un membre pour cliquer sur le bouton « Private Message » pour pouvoir précisément lui en envoyer un. Or un des avantages de ce composant est de pouvoir discuter à plusieurs à l’abri des regards. Aussi WorkMates, s’accroche à la globale buddypress()->messages->autocomplete_all pour la définir à true et permettre ainsi de bénéficier de l’autocompletion pour tous les membres et ce indépendamment de l’activation du composant « Friend Connections ». Pour information, si vous recherchez uniquement ce comportement pour la messagerie privée, il vous suffit de définir la constante adéquate dans votre wp-config.php par exemple.

// Autocomplete sur tous les utilisateurs
define( 'BP_MESSAGES_AUTOCOMPLETE_ALL', true );

Enfin, dernier point : si toutefois le composant des profils étendus était désactivé, j’ai prévu un filtre pour permettre à cette autocompletion de s’effectuer malgré tout, en attendant la résolution de ce ticket 😉

Vous pouvez jouer avec le plugin en veillant à disposer de cette configuration minimale :

  1. WordPress 3.8 RC
  2. BuddyPress 1.9-beta2

Petite astuce en passant, j’anticipe une question qui risque de m’être posée ! Si vous souhaitez modifier le titre de l’onglet « Invite Workmates », il vous suffit depuis le functions.php du thème actif d’insérer ce code :

7 réponses à “WorkMates invite BackBone.js à jouer dans #BuddyPress”

  1. Avatar de Sylvain

    Salut Imath !

    J’utilise beaucoup de tes excellents plugins pour mon réseau social ! Merci pour tout le trvail que tu abats d’ailleurs ! C’est vraiment très chouette !

    Je suis venu te dire que Invite Workmates semble ne plus fonctionner correctement depuis le passage à BP 2.0 et WP 3.9…

    En effet, la liste des membres en popup affiche les premiers membres, mais impossible de charger les pages suivantes …
    Peut être as-tu déjà constaté la chose ?
    Peut être que je peux régler le souci moi-même si tu me guides un peu .. 😉

    Bien à toi !

    Sylvain

    1. Avatar de imath

      Merci pour le feedback Sylvain. Je vais regarder le souci asap.

    2. Avatar de imath

      Hello Sylvain,
      je viens de faire un commit sur le repo Github du plugin qui devrait résoudre la difficulté.
      A+

  2. Avatar de Sylvain

    Super ! Merci beaucoup Imath, ça fonctionne !

    Je te souhaite un très bonne soirée et à très bientôt ! 😉

    Sylvain

  3. Avatar de Sylvain

    Hello Imath !

    Encore moi héhé!

    Je me demandais comment est-ce que pouvais activer Workmates, même si le composant friends est activé ?
    J’utilise sur mon site le bp-follow, mais aussi le composant friend. Car il y a des etudiants et des enseignants, il serait mal placé de demander en ami un de ses enseignants. Donc les gens peuvent s’abonner à tout le monde.

    Mais les étudiants me réclament de pouvoir s’ajouter en ami quand même … Je cède devant la pression, d’où ma question.

    Bien à toi !

  4. Avatar de Sylvain

    je crois avoir trouvé :

    ligne 168 de workmates.php, j’enlève le point d’exclamation:

    if( bp_is_active( 'groups' ) && bp_is_active( 'friends' ) && self::buddypress_version_check() )
    require( $this->includes_dir . 'groups.php' );

    J’ai bon ? Mais alors j’aurais pu utiliser Invite Anyone … mais je préfère ton plugin 😉

    1. Avatar de imath

      Je pense qu’il faut peut être enlever && bp_is_active( ‘friends’ ) car si tu enlèves le point d’exclamation uniquement cela veut dire que le composant friends doit être actif. Sinon j’ai pas testé avec le composant friends actif…
      Invite anyone a l’avantage de permettre l’utilisation d’un email pour « recruter » un nouveau membre qui n’est pas encore inscrit.
      Merci pour ton intérêt pour ce plugin 😉