Quantcast
Channel: imath
Viewing all 212 articles
Browse latest View live

Bienvenue sur imathi.eu

$
0
0

L’année twentythirteen a démarré depuis quelques jours, elle ouvre une nouvelle « ère » pour mes explorations WordPress et BuddyPress.

Je viens de laisser la dernière trace de mon passage dans les quartiers de la soucoupe qui m’avait accueilli chaleureusement depuis la fin novembre 2009. Je tiens une nouvelle fois à exprimer ma gratitude à toute l’équipe d’owni.fr.

Nouvelle « ère », mais pas un « restart from scratch » ! En effet, j’ai passé la période des fêtes de fin d’année à construire ce nouveau « chez moi » tout en veillant à migrer les contenus et commentaires de mon précédent blog.

Petit tour du propriétaire

A gauche, illustration du responsive, à droite du mode maintenance.

Bien entendu, les 2 rubriques qui structuraient le contenu de mon précédent site sont toujours là, le seul changement a concerné la catégorie WP que j’ai renommée en WordPress. Les 4 évolutions majeurs que j’ai introduites sont:

  1. l’adaptation de la navigation du site aux mobiles à l’aide de mécanismes « responsive »,
  2. l’intégration d’un shortcode « prettify » pour me permettre de gagner du temps dans la mise en forme de mes snippets,
  3. la création d’une catégorie pour archiver les différents morceaux de code que je dépose dans certaines de mes réponses à des forums WordPress ou BuddyPress,
  4. la mise en place d’interfaces avec la WordPress.org API et celle de github afin de garnir le contenu d’une nouvelle page que j’ai intitulée « mes créas ».

thaim, c’est le thème d’imath!

thaim, un anagramme d’imath

En réalité, ce qui m’a pris le plus de temps a été la conception de mon premier thème WordPress que j’ai baptisé « thaim », un anagramme de mon pseudo qui rime avec thème ;)
N’étant pas un concepteur de thème chevronné, je me suis fortement appuyé sur 3 thèmes pour sa réalisation:

Thaim contient également des fonctionnalités qui pour moi sont importantes. J’en ai déjà abordé 3 d’entre elles plus haut. D’abord j’utilise désormais prettify.js pour mettre en forme les codes sources qui agrémentent mes articles. Et ce, à la fois pour intégrer directement dans le contenu du post le snippet mais aussi pour interfacer mes gists ou fichiers de mes repos Github. Ainsi, un quicktag ajouté à l’éditeur de texte de WordPress (nb: thaim désactivant l’éditeur WYSIWYG) permet de lancer une fenêtre d’édition d’un shortcode que j’ai appelé thaim_code afin de paramétrer le type de code que je souhaite inclure.

Mise en forme des morceaux de code.

Dans la mesure où je ne souhaite pas surcharger toutes les pages de mon blog du style et du javascript de prettify, mais uniquement l’inclure si et seulement si mon article l’utilise, je teste la présence d’un postmeta ayant pour key ‘prettifyed’ et valeur 1, il convient donc de ne pas oublier d’ajouter ce champ personnalisé suite à l’insertion d’un thaim_code. En passant, cerise sur le gâteau, pour les scripts hébergés sur github, je me suis amusé à créer une fonction qui permet de n’afficher qu’une portion de ce dernier en stipulant le numéro de la ligne de début et de fin.

Ensuite, ayant créé un certain nombre de plugins BuddyPress et WordPress, finalement mon « portfolio » consiste à les lister. Pour ce faire, j’ai opté pour un interfaçage de la WordPress.org API et de la Github API afin de rapatrier les contenus sans avoir à y penser.

les options de thaim

Ces fonctionnalités ainsi que la possibilité de mettre le blog en maintenance sont paramétrables depuis les options de thaim qui sont disponibles depuis un sous menu de la rubrique Apparence de l’administration WordPress .

Enfin, j’utilise la classe de Raz Ohad pour ajouter des meta données aux catégories et aux tags en la modifiant à la marge pour l’adapter à mon besoin qui consiste à ajouter une bannière à l’aide d’une image distante (sur WordPress.org par exemple) ou une icône à gauche du nom de la catégorie ou du tag sur leurs templates dédiés.

Pour une démo de thaim, il vous suffit de naviguer dans mon blog, si vous êtes intéressé par ce thème ou que vous souhaitez vous en inspirer..

Télécharger depuis Github

Parcourir le code sur Github

Deux dernières choses!

J’ai l’immense honneur d’avoir été choisi pour faire une présentation de BuddyPress lors du prochain WordCamp de Paris qui se tiendra les 18 et 19 janvier. J’espère vous y croiser : inscrivez-vous !!

Chers lecteurs, membres de la communauté WordPress ou BuddyPress, je vous souhaite le meilleur pour twentythirteen ;)

Illustration de l’article : 2013. by Moeko Munaretto, on Flickr


#BuddyPress Important : le filtre groups_forbidden_names

$
0
0

Bonsoir les créateurs de plugins BuddyPress,

Ce dimanche, après avoir travaillé à ma conférence prévue pour le prochain WordCamp parisien et qui précisément traitera de notre plugin WordPress préféré, je me suis intéressé à un bug qui m’a été remonté au sujet d’un de mes plugins : BP Code Snippets.

En passant, lecteur, si tu utilises ce plugin et que tu veux m’aider à résoudre ce bug qui est apparu suite à la mise sur orbite de la superbe 3.5 de WordPress, tu peux t’amuser à tester le fix que je décris dans ce forum. Je ferai le maximum pour résoudre rapidement (j’ai été pas mal occupé ces derniers temps..).

Bref, alors, que je réalisais les tests de mon fix, j’ai créé un groupe du même nom que le slug de mon plugin, à savoir snippets. Rien d’extraordinaire me direz-vous.. Eh bien, figurez-vous que je venais de réveler un nouveau bug de mon plugin! Et ce juste en créant ce groupe !!

si le slug du groupe == le slug de notre plugin alors Dang :(

Ainsi, dans le cas où le slug du groupe est identique à celui du plugin, la navigation de l’utilisateur est ajoutée à celle du groupe. Comme vous pouvez le voir sur l’illustration on a bien les liens vers la page des snippets et des favoris qui sont normalement réservés à la zone de profil de l’utilisateur.

Il fallait donc que je trouve le moyen d’éviter qu’un utilisateur ne crée cette situation, et concrètement d’interdire l’utilisation du terme snippets pour le slug des groupes. Or BuddyPress contient un tableau qui est vérifié au moment de la création des slugs des groupes et le plus beau c’est que ce tableau est filtrable :)

Pour information, ce tableau est initialisé dans BP_Groups_Component::setup_globals() à la ligne 199 du script bp-groups/bp-groups-loader.php. Le nom du filtre est groups_forbidden_names. Il s’agit donc de l’intercepter pour l’enrichir du slug de notre plugin. Ci-dessous le filtre que j’utilise pour BP Code Snippets :

/* wouch ! let's avoid a conflict with user nav if the user 
	tries to choose snippets as the name of his group */
	
add_filter( 'groups_forbidden_names', 'bp_code_snippets_forbidden_names', 10, 1);

function bp_code_snippets_forbidden_names( $forbidden_names ) {
	$forbidden_names[] = 'snippets';
	
	return $forbidden_names;
}

Une fois, le filtre en place, lorsqu’un utilisateur créera un groupe en utilisant un nom équivalent au slug de notre plugin, BuddyPress se chargera d’ajouter un rand() au slug du groupe au moment de sa création : génial !

Wow, comment j’ai pu passer à côté de ça ??

Par curiosité, j’ai voulu benchmarker mes petits collègues créateurs d’extensions BuddyPress pour voir comment il gérait la chose. Et après quelques tests sur certains plugins, je me suis senti moins seul ! En effet j’ai pu reproduire ce bug sur 3 de mes tests. J’en ai déduit, peut-être un peu vite, que c’était un oubli fréquent chez nous ;) . En même temps, la probabilité de créer ce bug s’amenuise si on opte pour un slug de plugin compliqué du style ‘slug-demonsuperplugin’ !!

Toutefois, pour éviter tout risque, je vous invite à ne pas oublier ce filtre dans vos petits chefs d’oeuvre ..

A+

Illustration de l’article : Emergency Snake Forces Combine by Lomo-Cam, on Flickr

BP avatar suggestions, un avatar selon ton genre !

$
0
0

Woha !
Ce soir sur le forum de BP avatar suggestions, Andrés m’a demandé s’il serait possible d’afficher les avatars selon le genre de l’utilisateur connecté. En gros : afficher une liste d’avatars pour mesdames et une autre pour messieurs!

Alors, comme je suis en train de préparer une nouvelle version de ce plugin (si vous souhaitez mettre en place ce code, téléchargez la 1.1-beta2), j’ai simplement ajouté un filter sur le tableau contenant la liste des avatars. Si l’admin lors de sa constitution de la liste ajoute au nom de ses fichiers images ‘mec’ et ‘nana’ par exemple, alors, il lui suffit d’ajouter un xprofile BuddyPress de type radio (dans mon exemple de code ci-dessous, le nom de celui-ci est gender) et de fixer les valeurs des choix à ‘mec’ ou ‘nana’.

/* in the functions.php of your theme */
add_filter( 'bp_as_filter_avatar_list', 'filter_list_by_xprofile_gender', 10, 1 );

function filter_list_by_xprofile_gender( $avatar_list ) {
	$loggedin_user_id = bp_loggedin_user_id();
	
	$gender = xprofile_get_field_data( 'gender', $loggedin_user_id );
	
	if( !empty( $gender ) && is_array( $avatar_list ) ) {
		
		$new_list = array();
		
		foreach( $avatar_list as $avatar ) {
			/* when the admin uploads the avatars in the front end
			he musts insert the possible values for the xprofile field 'gender'
			for example avatar-for-girl-1.jpg, avatar-for-guy-1.jpg where
			'guy' or 'girl' are the possible values of the xprofil field (a radio).
			*/
			if ( strpos( $avatar, $gender ) )
				$new_list[] = $avatar;
		}
		
		/* if we found avatars for the gender */
		if( count( $new_list ) >= 1 )
			$avatar_list = $new_list;
	}
	
	/* finally we returns the filtered list */
	return $avatar_list;
}

Des topics de type support pour vos forums #bbPress et #BuddyPress

$
0
0

L’histoire de ce plugin démarre il y a 7 mois lorsque Dan, l’administrateur du site BP-fr.net me fait part de son besoin de disposer d’une fonctionnalité permettant d’identifier plus facilement les topics des forums de groupe BuddyPress qui nécessite un support.

Pour répondre à ce besoin, je commence à m’intéresser à bbPress qui est le plugin embarqué par BuddyPress pour motoriser ses forums de groupe.

Ayant suivi de près, l’évolution de BuddyPress depuis février 2010, je sais que la version de bbPress qui équipe mon plugin favori est la 1.2 et que de son côté bbPress a poursuivi son évolution avec une version 2 très prometteuse.

Aussi, comme à cette époque la plupart des forums de BuddyPress sont toujours motorisés par la 1.2, je commence par ausculter la bête de plus prêt et dépose sur github une première beta permettant d’ajouter cette fonction « support » aux topics créés dans les forums de groupe BuddyPress.

Et puis dernièrement, Dan publie ce topic sur BuddyPress.org afin de faire profiter au plus grand nombre de ce plugin tout en faisant de la pub pour ce blog :) .

Cette publication fait réagir @mercime et @djpaul qui se demandent si ce plugin fonctionne avec la dernière version de bbPress – ce qui n’était pas le cas :( . Toutefois, leurs intérêts me motivent à revêtir ma tenue de spéléo pour m’engouffrer dans bbPress 2.2.3 avec un challenge personnel consistant à essayer de faire en sorte que quelque soit l’équipement de l’utilisateur, il puisse bénéficier de cette fonctionnalité de support.

Après différents échanges dans le thread initié par Dan, ainsi que différentes nouvelles bêtas publiées sur github, je pense que le plugin est en mesure de fonctionner sur ces différentes configs :

  • BuddyPress 1.6.3 et bbPress 1.2 pour ses forums de groupe
  • BuddyPress 1.6.3 et bbPress 2.2.3 pour son sitewide forum
  • BuddyPress 1.6.3, bbPress 1.2 pour ses forums de groupe et bbPress 2.2.3 pour son sitewide forum
  • bbPress 2.2.3 sans BuddyPress
  • BuddyPress 1.7 avec bbPress 2.2.3 pour ses forums de groupe et les forums globaux

Comment ça marche ?

Une fois le plugin activé, une case à cochée intègre le fomulaire de création du topic. L’auteur qui veut signifier que ce topic est de type « support » active ce checkbox avant de publier son forum.

la case à cochée !

Ensuite, l’auteur, les modérateurs, les administrateurs du groupe ou du forum ainsi bien entendu que le super administrateur peuvent modifier le statut du topic grâce à la liste déroulante qui intègre les admin links du topic, comme illustré ci-dessous :

Topic résolu ?

Si vous utilisez bbPress 2.2.3, l’administrateur bénéficie en plus de la possibilité de modérer les topics depuis son administration WordPress. En accédant au menu « Topics », la liste des topics créés affiche désormais un nouvelle colonne qui informe si le topic est de type support

Une admin colonne qui indique l’état du topic

Enfin, toujours dans l’administration des topics, il est également possible de modifier le statut du topic en se rendant sur la page d’édition du topic.

Gestion du statut du support depuis la metabox du topic

Bonus

Pour les utilisateurs de bbPress 2.2.3, il est également possible de modifier l’apparence de la mention qui est affichée à côté du titre du topic et qui informe sur le statut de son support. Pour cela, il suffit d’éditer le style.css de votre thème pour ajouter ces quelques lignes :

/* for example ! */
.topic-not-resolved {
    color:red;
}

.topic-resolved {
    color:green;
}

Téléchargez le ;)

Télécharger depuis le WordPress repo


Update! version 1.0.1 publiée le 21/01/2013

  • fixe un bug rencontré avec certains thèmes qui forcent l’utilisation de leurs templates / à ceux de bbPress 2.2.3
  • Ajoute un filtre pour ajouter son style aux mentions des statuts des topics dans le cas des forums de groupe lorsque bbPress 1.2 les motorisent dans BuddyPress

Update! version 1.0.2 publiée le 22/01/2013

  • apporte plus de sécurité – mettez à jour !

Illustration de l’article : Please Help by futureshape, on Flickr

#wordcampparis : on a parlé de #BuddyPress et bien plus encore !

$
0
0

Hello!

Ces deux derniers jours (les 18 et 19/01/2013), j’ai eu la chance de participer et d’intervenir à l’édition 2013 du WordCamp de Paris. Avant d’aller plus loin, je tiens d’abord à remercier et féliciter WordPress-fr qui a admirablement organisé cet évènement! Enorme bravo à Xavier, Amaury, Benoît et le reste de la team.

Je tiens également à remercier tous les orateurs pour leurs présentations de qualité qui bien entendu ont fortement contribué à la réussite de cet évènement : Daniel, Fabrice, Fred et Bastien, Gilles, Julio, Rémi.

J’associe également tous les participants de vendredi et de samedi à cette réussite. J’ai beaucoup appris à votre contact. Comme, je n’ai pas retenu chacun de vos prénoms (so sorry).. Merci à vous tous(te)s pour votre accueil, votre écoute et nos échanges super intéressants :

La photo des participants de samedi Crédit Photo : @stdsingulier

Flashback : #wpcanard

Le resto de jeudi Crédit Photo : @UncatCrea

Tout a commencé le soir du jeudi 17 au nouveau village Tao Tao, restaurant dans lequel Benjamin (énorme merci à lui également pour nos échanges!!) avait réservé une table pour accueillir les orateurs. Vers 21h30, j’ai retrouvé Bastien et Nathanael, les premiers arrivés, et j’ai pu faire connaissance IRL et avoir mes premiers échanges super sympa avec chacun d’entre eux (sans oublier Aurélien qui était également du dîner). Je me souviens notamment d’une pause « truc qui n’est pas bon pour la santé » avec Fabrice qui avait tenté de me rassurer à l’approche de mon intervention. A ce moment de la partie : je n’en menais pas large !!

Quelques chinoiseries plus tard, je me retrouve, chez moi, devant mon MacBook, ma prez keynote ouverte.. Je ne l’ai pas quitté du reste de la nuit !! Je crois que j’ai dû répéter mon intervention au moins 15 fois dont 5 ou 6 fois cette nuit là. Ce qui est inquiétant dans ces cas là, c’est qu’on oublie toujours d’évoquer un des points qui nous paraît important. Bref, après quelques tonneaux de cafés, je retrouve Dan et Myriam (une collègue de taf venue me supporter) à la station de tram de la porte d’Ivry. Heureusement, qu’ils étaient là pour me soutenir et me diriger, sinon je crois que je serais toujours en train de chercher la salle !!

Mon intervention : #BuddyPress, l’utilisateur au coeur

Crédit Photo : Olivier Gobet GD6D

Il est 9h, j’allume mon MacBook à côté d’un personnage inquiétant : la fameuse girafe qui deviendra finalement la mascotte de cette édition ;) . Daniel vient de démarrer son intervention, j’admire son aisance et commence à frissonner, je ne sais pas si c’était le manque de sommeil, le stress ou le fait que la salle n’était pas encore réchauffée des 200 personnes qui écoutaient attentivement les conseils SEO de Daniel.

Vers 10h, c’est mon tour, je croise Daniel sur le petit escalier qui mène à la scène, il me glisse gentiment un petit mot d’encouragement (une nouvelle fois merci à lui :) ), j’arrive devant le pupitre et là je vois la scène, je ne sais plus ce que Xavier (merci) m’a dit sur le moment, mais en tout cas ça m’a rassuré et finalement je me suis senti super bien !! J’ai donc présenté BuddyPress, sans trop oublié de points que je tenais à partager avec la communauté WordPress française.

Une quarantaine d’heures de préparation (si, si, je vous assure!!) se sont donc concrétisées par 1 intense heure de partage sur mon plugin WordPress préféré. J’en profile pour remercier Andy Peatling, Boone B. Gorges, Paul Gibbs et John James Jacoby pour leurs présentations qui m’ont beaucoup inspirées pendant mes quarante heures de travaux préparatoires. Vous retrouverez notamment des crédits dans les notes de ma présentation.

Télécharger le PDF de ma prez et mes notes

Voir la prez sur Slideshare

imath’s burnt-out !

Suite à mon intervention, c’est Rémi qui a enchaîné avec sa présentation pour clôturer la matinée. Les organisateurs nous ont gentiment invité au restaurant du coin pour reprendre des forces pour l’après midi où 4 autres magnifiques présentations étaient prévues. De retour dans la salle, après quelques minutes alors que Gilles démystifiait le multisite, je me suis carrément écroulé! Et ça s’est remarqué !!

me, vraiment dans les choux! Crédit Photo : @UncatCrea

Alors, je tenais à m’excuser une nouvelle fois auprès de Gilles, Fabrice, Fred et Bastien ainsi que Julio de n’avoir pas pu résister, il m’a manqué quelques litres de café ! Je regrette vraiment car ces présentations étaient super intéressantes et j’attends avec impatience les vidéos de ces dernières pour pouvoir en profiter.

Samedi, ct BarCamp sous la neige!

Nous nous sommes donc retrouvés le samedi pour une journée communautaire, une nouvelle fois riche en échanges. On a démarré par des lightening talks intéressants comme par exemple la contribution au core de WordPress ou l’utilisation d’ACF. Pour ma part, j’ai poursuivi ensuite par un atelier orienté développeurs animé par Amaury. L’après-midi, j’ai profité d’un wifi pour publier un plugin bbPress/BuddyPress avant de poursuivre les différents échanges avec le reste de la communauté. En passant, je remercie Olivier qui m’a passé de superbes photos de mon intervention dont 2 d’entre elles illustrent cet article, génial !

Enfin, j’ai terminé par l’atelier animé par Julio au sujet de la sécurité dans les plugins, et là un seul mot : wow !! Ce fut impressionnant. Dés que j’ai un moment, je vais checker tous mes plugins pour vérifier que j’applique bien tous ses conseils.

Vivement la prochaine!

C’est certain, je ne manquerai pour rien au monde le prochain évènement de la communauté WordPress ! J’ai fait des rencontres super intéressantes, j’ai beaucoup appris à leur contact, j’ai nourrit mon inspiration au sujet de BuddyPress, et on s’est bien marré.

Alors, à la prochaine, et merci encore à tous pour tout !

Crédit featured image : Olivier Gobet GD6D

#BuddyPress #bbPress Support Topic, la version 1.1 : des stats !

$
0
0

Cette nouvelle version du plugin, qui propose de vous aider à « manager » vos sujets de forum nécessitant un support, introduit de nouvelles fonctionnalités essentiellement statistiques, si toutefois votre configuration intègre bbPress à partir de sa version 2.2.3.

Une nouvelle section au sein du Dashboard Widget Aujourd’hui de bbPress

La section Support Topics du tableau de bord

Besoin de connaître à tout moment votre pourcentage de résolution des demandes de support, le nombre de sujets nécessitant un support ou encore ceux que vous avez résolu ?
Avec la 1.1, vous bénéficiez d’une nouvelle section « Support topics » au sein du widget bbPress de votre tableau de bord, afin de disposer de ces informations à tout moment. En cliquant sur les liens « Résolu » ou « A résoudre », vous êtes directement orienté vers l’administration des topics filtrés selon le statut désiré.

Une administration des topics « filtrable »

Une selectbox pour filtrer vos topics support

Une liste déroulante vous permettra de choisir le type de statut à garder dans l’affichage. Vous pouvez également croiser ce filtre avec celui réservé aux forums afin de, par exemple, lister tous les topics nécessitant un support sur l’intégralité des forums, ou sur un forum en particulier.

Arborer vos statistiques sur le front !

Le Sidebar Widget

Enfin, cette version ajoute un sidebar widget pour informer vos utilisateurs des mêmes statistiques que celles affichées dans le Dashboard Widget évoqué plus haut.
Globales, elles s’affinent dés que vous entrez dans un forum en particulier pour ne retenir que ses statistiques. Les deux statuts contiennent alors des liens qui permettent à vos utilisateurs de filtrer les topics pour ne garder que les demandes de support, par exemple.

Voir la Démo

Après 47 secondes de rappel au sujet des forums de groupe dans BuddyPress, vous découvrirez les différentes nouvelles fonctionnalités disponibles pour les forums utilisant la dernière version de bbPress.

Upgradez !

Si c’est votre première installation du plugin, vous pouvez l’activer dés téléchargement. Pour ceux qui utilisaient déjà ce plugin dans une précédente version, dans la mesure où suite à l’update, le plugin réalise une opération sur la base de données afin de renommer les meta keys de type support, je vous invite à faire un back up de votre base juste au cas où ;) .

Télécharger depuis le WordPress repo

Remerciements.

Je tiens à remercier ces « Buddies » pour l’aide qu’ils m’ont apporté dans la réalisation de cette version.


Illustration de l’article : Checkout Counter Calculator by DaveFayram, on Flickr

BP Checkins sera #BuddyPress 1.7 ready !

$
0
0

Hello !

BuddyPress a récemment publié la première Beta de sa prochaine version (1.7) et pour tout créateur de plugins BuddyPress, cela signifie qu’il devient important de vérifier qu’ils s’exécutent toujours bien dans cette nouvelle version.

Comme j’en ai écris un certain nombre, je vais donc démarrer une période de tests et de travaux d’adaptation que j’espère avoir terminés d’ici à la « 1.7 release » !.

BP Checkins will be 1.7 ready

A priori, ça serait déjà le cas selon un commentaire de wrkazi qui a testé la version actuelle avec la 1.7-beta1 de BuddyPress. Et effectivement, lorsque vous utilisez le thème BP Default qui est inclus dans BuddyPress, le plugin fonctionne.

BP Checkins dans BP Default

Simplement, cette nouvelle version de BuddyPress apporte quelque chose de magique et je me devais d’en profiter! Cette magie, c’est sa faculté à maximiser son adaptation à tout thème. Je le réécris : à tout thème !!

Aussi, dés que j’ai activé le thème twentytwelve, alors que j’avais pu constater plus tôt que les contenus BuddyPress s’affichaient de manière optimale, je me suis rendu compte que BP Checkins partait dans les choux !

BP Checkins 1.2 will use BP Theme Compat

Je profite ainsi du travail extraordinaire réalisé par l’équipe des core developers de BuddyPress pour permettre à ce plugin de pouvoir s’intégrer de manière optimale dans la plupart des thèmes WordPress. Et voici, le même contenu de l’image précédente dans twentytwelve :

BP Checkins dans twentytwelve (thks to BP Theme Compat)

Testez BP Checkins 1.2-beta1

J’ai besoin de vous ! Pour m’aider à écarter tout bug que je n’aurais pas identifié, j’adorerais que vous preniez quelques minutes de votre temps afin de tester cette prochaine version du plugin. J’ai vu les différentes demandes d’évolution que certains d’entre vous m’ont fait parvenir, au risque de vous décevoir, j’ai préféré me concentrer d’abord sur l’intégration de BP Theme Compat.

Si toutefois, vous trouvez un bug, merci de m’en faire part en commentant cet article ;) , vous trouverez ci-après les liens pour télécharger les bêtas de BuddyPress et BP Checkins. Bien entendu, il vous faudra la dernière version de WordPress également !

Télécharger la 1.7-beta de BuddyPress

Télécharger la 1.2-beta1 de BP Checkins

Une #BuddyPress 1.7 theme story

$
0
0

Salut,
Aujourd’hui, j’ai aidé un ami qui, sur mes conseils, démarre un projet à l’aide de BuddyPress 1.7-beta 1. Tout s’est bien déroulé pour lui jusqu’au moment où, après avoir investi dans un thème premium BuddyPress, il s’est dirigé vers le menu Apparence de son administration WordPress pour l’ajouter puis l’installer. Et là, patatra :( Passé le header du frontend de son blog : « white content of death ! » Une erreur fatale interrompait la poursuite de l’affichage de son blog.

Il m’a donc contacté pour m’expliquer ses difficultés avec ce thème. Il était super contrarié d’avoir payé un thème dédié à BuddyPress sur le papier et qui une fois installé ne fonctionnait pas. Je le comprends.

Découverte du premier bug


Update !! : 2012/02/25, Boone vient de publier un billet sur le blog de dev de BuddyPress informant les concepteurs de thèmes « standalone » BuddyPress de la démarche à suivre pour éviter que BP Theme compat ne charge son mécanisme AJAX et sa feuille de style. Pour cela il suffit d’ajouter dans le functions.php du thème un support de BuddyPress en hookant after_setup_theme avec une priorité inférieure à 100. Exemple :

function bp_standalone_theme_setup() {

	add_theme_support( 'buddypress' );

}

add_action( 'after_setup_theme', 'bp_standalone_theme_setup', 10 );


Update !! : 2012/02/22, Boone vient de publier un ticket sur le trac de BuddyPress afin de trouver la meilleure solution pour gérer la difficulté observée ci-dessous. Génial !


Alors, je me suis lancé dans l’exploration du problème, j’avais ma petite idée déjà sur ce qui pouvait ne pas fonctionner. En effet la version 1.7 de BuddyPress intégrant de nouvelles fonctionnalités (BP Theme Compat) pour maximiser sa compatibilité avec la plupart des thèmes WordPress, elle vérifie avant d’utiliser ce mécanisme deux choses :

  • le thème actif est-il le thème embarqué historiquement par BuddyPress à savoir BP Default ?
  • le thème actif est-il un thème enfant de BP Default ?

Simplement, dans le cas du thème premium BuddyPress en question, il n’est ni BP Default ni un child thème de celui-ci. Ainsi BP Theme Compat pensant qu’il s’agit d’un thème WordPress charge ses mécanismes AJAX / JS et son style. Or comme le thème en question charge lui aussi des mécanismes identiques pour fournir ses fonctionnalités BuddyPress, eh bien on se retrouve avec un bug. Concrètement, on peut observer son apparition simplement en postant une nouvelle activité car elle sera ajoutée en double exemplaire. Logique : deux mécanismes chargés de faire la même opération la font deux fois.

Alors, la première bêta de la 1.7 n’ayant été mise sur orbite que depuis la semaine dernière, j’imagine que le concepteur du thème n’a pas encore eu le temps de se pencher sur la question. En même temps, si vous démarrez votre projet BuddyPress avec cette bêta, je vous propose de poursuivre malgré tout vos développements en ajoutant le cas échéant pour ce type de thème ce morceau de code à son fichier functions.php :

function quick_fix_bp_theme_not_1_7_ready() {
	
	remove_action( 'bp_after_setup_theme', 'bp_load_theme_functions', 1 );

}

add_action( 'after_setup_theme', 'quick_fix_bp_theme_not_1_7_ready', 9 );

 

Une fois que c’est fait, BP Theme Compat ne chargera plus ses mécanismes AJAX / JS ni son style. Toutefois, le problème de mon ami n’était pas résolu, il avait toujours son « white content of death » sous son header.

Découverte du 2ème bug


Update !! : 2012/02/23, J’ai pensé qu’il était intéressant de publier une nouvelle page dans le BuddyPress Codex à propos de la fonction bp_is_active. J’ai illustré d’exemples avec la plupart des composants.


En fait, lorsqu’on installe pour la première fois BuddyPress et qu’on choisit la version 1.7, tous les composants ne sont pas activés d’entrée. Seuls les composants des profils étendus et des activités le sont. C’est selon moi une bonne chose car cela permet de bien comprendre que BuddyPress est un plugin qui regroupe des composants modulables et activables selon les besoins de l’administrateur.

Le problème du thème en question est qu’il ajoute des contenus BuddyPress comme par exemple les derniers topics des forums de groupe, ou le nombre de messages privés reçu par le membre connecté sans vérifier que les forums de groupe ou la messagerie privée sont activés. Résultat : erreur fatale :(
Le souci est en plus amplifié dans la mesure où dans la version 1.7, il sera possible de motoriser les forums de groupe avec bbPress 2.3 (la prochaine version de bbPress).

Les composants activés par défaut dans la 1.7

Ainsi, il devient important pour les concepteurs de thèmes et les créateurs de plugins (je m’inclus notamment pour Bowe Codes) de ne pas oublier de vérifier que les composants dont nous souhaitons manipuler le contenu sont bien activés. Pour cela il suffit de tester la fonction bp_is_active( ‘nom_du_composant’ ) avant de lancer l’exécution de notre code comme l’illustre l’image ci-dessus.

Pour terminer, je suis convaincu que comme moi (car j’ai besoin de tester/adapter tous mes plugins sur/pour la 1.7, BP Checkins est déjà prêt), les concepteurs de ces thèmes premium (ou pas d’ailleurs) BuddyPress auront fait le nécessaire pour que les utilisateurs puissent profiter au mieux de cette fabuleuse 1.7 lorsqu’elle sera « released » !


BP Code Snippets 2.1 : #BuddyPress 1.7 ready !

$
0
0

Hello !

Paul Gibbs a dernièrement annoncé la mise à disposition de la version 1.7-beta2 de BuddyPress en précisant notamment que le temps était venu pour les créateurs de thèmes et de plugins de tester leurs oeuvres dans cette nouvelle version du framework qui motorise les communautés hébergées sur un WordPress.

L’upgrade de mon plugin (2.1)

J’ai déjà commencé les travaux sur BP Checkins (dont vous pouvez tester la beta par ici ), j’ai poursuivi par BP Show Friends (je suis en attente de la réponse à un de mes tickets sur le trac de BuddyPress pour terminer), et j’accélère le mouvement pour les autres plugins. Et cette nuit, c’était le tour de BP Code Snippets.

Des snippets dans twentytwelve

En fait, suite à la réception d’un mail d’Ipstenu (WordPress.org) j’ai dû quelque peu bouleverser mon planning prévisionnel. En effet hier matin, un mail d’information de sa part m’informe que BP Code Snippets a été retiré momentanément du repository Officiel pour des raisons de sécurité. Le problème vient en fait de l’intégration d’un composant Flash d’une librairie jQuery que j’utilisais pour permettre de copier plus simplement les shortcodes et autres codes oembed générés par mon plugin.

Pour éviter toute nouvelle difficulté, et parce qu’on ne priorise jamais le confort sur la sécurité, j’ai décidé de ne plus l’utiliser dans mon plugin.

!important : je vous conseille donc d’upgrader vers cette nouvelle version en prenant, bien entendu, les précautions d’usage (sauvegarde db en particulier).

Au cours de cette nuit, très rythmée, je me suis dit :

Tant qu’à upgrader le plugin, autant anticiper et le préparer d’ores et déjà pour la prochaine 1.7 de BuddyPress !

NB : désormais, vous aurez besoin à minima de la version 1.6.4 de BuddyPress pour profiter de Code Snippets (je n’utilise plus un certain nombre de fonctions qui sont depuis dépréciées), mais l’avantage c’est que cette upgrade se comporte très bien dans la prochaine 1.7 en tirant notamment profit du nouveau mécanisme de maximisation de la compatibilité avec la plupart des thèmes WordPress.

1.7 Ready !

Etant donné, mon rush nocturne, si toutefois vous constatez une anomalie, je vous remercie de m’en faire part dans les commentaires ou depuis le forum de support du plugin sur WordPress. Je maintiens une surveillance particulière dessus le temps de terminer quelques tests supplémentaires.

Upgradez !

Ci-dessous, sur la droite le lien vers la page du plugin sur le repository de WordPress, au risque de me répéter : pensez bien à faire une sauvegarde de votre base de données par précaution. Pour les aventuriers de la 1.7, vous trouverez sur la partie gauche son lien de téléchargement. Vous pourrez ainsi également me faire des feedbacks du comportement de mon plugin dans cette prochaine version ;)
A+

Télécharger la 1.7-beta2 de BuddyPress

Télécharger la 2.1 de BP Code Snippets

BuddyDrive : partagez vos fichiers, « the #BuddyPress way! »

$
0
0

Le partage de fichier.. Voici un thème que j’ai souvent rencontré lorsque j’administrais une communauté intranet motorisée par BuddyPress…

Je suis toujours parvenu à éviter ce terrain jusqu’à présent, dans la mesure où je le trouve très glissant. Aussi, suite à une énième discussion sur le sujet, j’ai décidé de me faire violence et de me risquer à créer un plugin BuddyPress centré sur cette fonctionnalité.

Habituellement, j’arrive très vite devant mon éditeur de texte pour démarrer les premières lignes de ma future création.. Cette fois-ci, j’ai pris le temps de bien cogiter sur la question pour trouver ce qui selon moi est le meilleur angle d’attaque pour une extension de ce type.

On pense souvent à introduire cette fonctionnalité en s’appuyant sur le composant « Groupe Utilisateurs » de BuddyPress. C’est vrai qu’avec ses niveaux de visibilité (public, privé, masqué) il s’y prête plutôt bien. Ce n’est pas la direction que j’ai prise. Ma réflexion sur le sujet a débouché sur une forte conviction : un fichier a d’abord un propriétaire, le membre qu’il l’a uploadé, et donc le plugin doit d’abord et avant tout s’accrocher à l’utilisateur. Ensuite, bien entendu, il doit pouvoir choisir de partager son fichier auprès de différentes cibles au sein de la communauté, cibles dont fait partie le composant « Groupe Utilisateurs » de BuddyPress.

Côté Admin : la supervision de la BuddyDrive.

Une fois le cap tracé, j’ai ouvert mon éditeur de texte pour dans un premier temps observer la manière dont WordPress gère les « attachments » de ses articles ou de ses pages. Il m’est apparu essentiel pour la réussite de mon challenge personnel de m’appuyer sur des mécanismes qui ont fait leurs preuves tout en les adaptant, à la marge, à l’aide de quelques hooks à certains endroits stratégiques.

Avant de m’engouffrer dans la rédaction de ce plugin, j’ai également poser un regard différent sur l’outil de partage de fichiers que personnellement j’utilise beaucoup : DropBox. Et en particulier, je me suis pas mal attardé sur leur site internet. Cela m’a d’une part conduit à imaginer un moyen de partager une liste de fichiers grâce à la mise à disposition d’un objet que j’ai appelé « dossier ». D’autre part, cela a conforté le choix auquel j’avais pensé pour l’interface de mon plugin. Je devais la faire ressembler le plus possible à un explorateur de fichiers.

Côté Front : l’explorateur BuddyDrive

BuddyDrive est donc un plugin BuddyPress 1.7 qui profite des fonctionnalités coeur que WordPress utilise dans la gestion de ses « post attachments » en vue de proposer aux membres d’une communauté un système de partage de leurs fichiers ou dossiers.

L’accès à ces contenus peut être réservé, selon la configuration BuddyPress et le choix de l’utilisateur, à certaines populations :

  • le propriétaire seul (visibilité privée)
  • les personnes munis d’un mot de passe (visibilité protégée)
  • les amis du propriétaire du fichier (visibilité « entre amis »)
  • les membres d’un groupe d’utilisateurs (visibilité « 1 de mes groupes »)
  • tout le monde (visibilité publique)

J’ai construit cette extension sur WordPress 3.5.1 et BuddyPress 1.7 : c’est la configuration minimale pour pouvoir jouer avec. Je l’ai également testé sur la beta 1 de WordPress 3.6.

Vous pouvez télécharger BuddyDrive directement depuis le repository de WordPress.org :

Télécharger/Download BuddyDrive

*****

Pour conclure sur une note très personnelle, BuddyDrive est le plugin qui m’a pris le plus de temps et d’investissement à réaliser. Depuis bientôt 3 semaines, je suis obsédé par lui du lever au coucher et même en rêves ! D’ailleurs, cela a failli tourner au cauchemar dans la mesure où le nom que j’avais choisi pour ce plugin à l’origine s’est trouvé être commun avec un thème WordPress Premium. La difficulté est que je m’en suis aperçu une fois le plugin publié sur le repo :(

Aussi, je tiens à remercier chaleureusement @Boone et tout particulièrement @JJJ pour leurs conseils et leur soutien dans la résolution de cette difficulté. Si toutefois, vous avez téléchargé le plugin sous son ancien nom, supprimez le et si vous souhaitez migrer les premiers contenus créés, vous pouvez me contacter @imath ou laisser un commentaire sur ce billet.

Du coup, j’ai un peu délaissé mes autres plugins et il est fort probable qu’avec la récente publication de la version 1.7 de BuddyPress, certains d’entre eux ne se comportent pas idéalement avec BP Theme Compat (la maximisation de la compatibilité vis à vis de la plupart des thèmes WordPress). J’espère que vous ne m’en voudrez pas trop, dés que je reprends un peu du poil de la bête, je ferai le nécessaire. Pour l’heure, je suis vidé !

Voilà, je vous souhaite une bonne nuit, je vais me coucher pour une nuit de quelques jours ;)

Illustration de l’article : hard disk in b&w by daddo83, on Flickr

Activity Sticker : now u can stick 1 #BuddyPress activity !

$
0
0

Activity Sticker est un plugin BuddyPress 1.7 expérimental qui vous permettra de disposer d’une activité « sticky » : c’est à dire au dessus de la pile des autres activités ;)

L’idée de ce plugin vient de Dan, l’administrateur du site de la communauté BuddyPress francophone. Si vous avez suivi les dernières actualités de ce site, vous avez sans doute remarqué qu’il tire profit de la magnifique version 1.7 de BuddyPress avec un tout nouveau thème auquel j’ai eu l’occasion de participer à la conception.

L’éditeur d’une sticky update !

Ainsi, ce petit plugin a deux fonctionnalités :

  • Ajouter une nouvelle activité sticky directement depuis l’administration des activités
  • Modifier une activité de type « nouvel article de blog », une activité de type « Sujet de forum créé » (pour les forums globaux – site wide – motorisés par bbPress 2.3+) et bien entendu une activité classique, afin de la mettre en avant sur votre mur d’actus BuddyPress

Je vous propose de découvrir tout ça grâce à la démo ci-dessous

Voilà ! J’ai testé le plugin sur WordPress 3.5.1 / BuddyPress 1.7 / bbPress 2.3.1 ainsi que sur WordPress 3.6 beta 1. Vous pouvez récupérer le plugin sur github. A+

Télécharger le plugin (github)

Parcourir le code sur github

Bowe Codes 2.0

$
0
0

Avec la mise sur orbite de la version 1.7 de notre moteur de communautés préféré, je savais que certains de mes plugins devaient être revus, notamment en raison de la nouvelle fonctionnalité « BP Theme Compat ». J’ai donc fait le nécessaire pour BP Checkins, BP Code Snippets, et alors que j’allais m’occuper de BP My Home, je suis tombé sur une demande de support sur le forum WordPress.org de Bowe Codes. Rien de bien grave, (ouf!) mais en me replongeant dans le code de ce plugin, j’ai vraiment eu envie de le réécrire. En 2 ans, on acquiert un peu d’expérience, et il y a certaines choses qui selon moi devaient être optimisées d’urgence!

Voici donc la version 2.0 de ce plugin : au programme un peu de ménage de printemps (c’est la période!), un éditeur de shortcode rénové, des filtres un peu partout pour permettre de plus facilement le détourner et surtout un nouveau shortcode très attendu!

Boutons de lancement de l’éditeur Bowe Codes

Désormais, pour lancer l’éditeur de shortcodes, le bouton se trouve à la fois sur la toolbar de l’éditeur rich text de WordPress et au sein de la « quicktags bar », si comme moi, vous préférez utiliser l’éditeur de texte classique.

Le nouvel Editeur de Bowe Codes

Ensuite, l’éditeur de « Bowe Codes » a légèrement changé, une première liste déroulante vous permet de choisir votre shortcode, le formulaire correspondant est alors chargé. L’image ci-dessus illustre par ailleurs, un nouveau « Bowe Codes » : [bc_activity]. Ce petit dernier permet d’afficher des activités selon le type que vous définissez depuis l’éditeur de shortcodes.

Dans la vidéo de démonstration, j’aborde notamment 2 autres modifications. D’abord, l’existence de nombreux filtres pour encore plus personnaliser le comportement du plugin. Je prends l’exemple de ce topic de son forum support, dans lequel il m’avait été demandé d’intégrer la possibilité d’ajouter du contenu dans le shortcode [bc_group] (en l’occurence le type de groupe et le nombre de membres). Vous trouverez ci-dessous le snippet à coller dans le functions.php de votre thème actif pour y parvenir ;)

function custom_show_type_and_nb_user( $output, $id, $slug, $permalink ) {
	
	if( $slug == 'bbpress' ) {
		
		$group = groups_get_group( array( 'group_id' => $id ) );
		
		$nb_members = sprintf( _n( '1 member', '%1$s members', bp_get_group_total_members( $group ) ),
			number_format_i18n( bp_get_group_total_members( $group ) ) );
		
		$output = '<p><em>'. bp_get_group_type( $group ) .' / '. $nb_members .'</em></p>';
	}
	
	return $output;
}

add_filter( 'bowe_codes_html_group_after_title', 'custom_show_type_and_nb_user', 10, 4 );

Enfin, je me suis dit qu’il pourrait être intéressant pour certains d’entre vous de créer de nouveaux shortcodes. Pour cela, il suffit de hooker ‘bowe_codes_ready’ et d’utiliser un morceau de code équivalent à celui qui suit pour par exemple ajouter un shortcode qui génère un formulaire de login avec un lien vers la page d’inscription.

/*
Building a new shortcode !!
*/

class Login_Shortcode{
	
	function __construct() {
		$this->setup_filters();
	}
	
	function setup_filters() {
		add_filter( 'bowe_codes_shortcodes', array( $this, 'register' ), 10, 1 );
		add_filter( 'bowe_codes_shortcodes_settings', array( $this, 'settings' ), 10, 1);
	}
	
	function register( $shortcodes = array() ) {
		$shortcodes['bc_login'] = array( $this, 'display_login_box' );
		
		return $shortcodes;
	}
	
	function display_login_box( $atts = '' ) {
		$divsignup = false;
		
		$defaults = array( 
			'echo'     => false,
			'signup'   => '',
			'redirect' => '',
		 	'remember' => false
		);
						
		$r = wp_parse_args( $atts, $defaults );
		
		$signup = $r['signup'];
		unset( $r['signup'] );
		
		if( ! empty( $signup ) && bp_get_signup_allowed() )
			$divsignup = '<div id="signup"><a href="'. bp_get_signup_page() .'" title="Join us">Create an account</a></div>';
		
		if( ! is_user_logged_in() )
			return $divsignup . wp_login_form( $r );
			
	}
	
	function settings( $settings = array() ) {
		
		 $settings['bc_login'] = array( 
				'attributes' => array(
					array( 
						'id'       => 'signup', 
						'type'     => 'boolean', 
						'default'  => 0, 
						'required' => false, 
						'caption'  => __( 'Link to registration page' ) 
					),
					array( 
						'id'       => 'redirect', 
						'type'     => 'string', 
						'default'  => '', 
						'required' => true, 
						'caption'  => __( 'Url to redirect to once loggedin' ) 
					),
					array( 
						'id'       => 'remember', 
						'type'     => 'boolean', 
						'default'  => 0, 
						'required' => false, 
						'caption'  => __( 'Display a checkbox to write a cookie for user' ) 
					)
				),
				'description' => __( 'Displays a login form', 'bowe-codes' )
		);
		
		return $settings;
	}
}

function login_shortcode() {
	return new Login_Shortcode();
}

add_action( 'bowe_codes_ready', 'login_shortcode' );

Voilà, il ne vous reste plus qu’à upgrader pour la version 2.0 :)

Télécharger/Download Bowe Codes

Illustration de l’article : Day 22: Coding by Still Burning, on Flickr

BP Bookmarklet 2.0 est prêt pour #BuddyPress 1.7

$
0
0

Hello!

Je poursuis ma campagne de réécriture de mes anciens plugins BuddyPress. Aujourd’hui, je vous annonce que BP Bookmarklet, une extension qui fournit un bookmarklet aux membres de votre communauté motorisée par BuddyPress afin de leur simplifier le partage de liens au sein des activités de profil ou de groupe, est enfin « BuddyPress 1.7 ready ». Je vous propose de découvrir cette nouvelle version en vidéo ;)

Vous avez remarqué, il est désormais possible d’attacher une des images contenue dans la page que nous souhaitons partager.

Voilà! Le plugin est disponible depuis le repository de WordPress.

Télécharger le plugin

NB : ce plugin requiert au moins la version 1.7 de BuddyPress.

BP My Home 2.0 : repensé, réécrit, reloaded !

$
0
0

Je suis heureux de vous présenter cette nouvelle version de BP My Home. C’était le dernier de mes plugins dont la compatibilité avec BuddyPress 1.7 était vraiment problématique. Etant donné que BuddyPress a déjà mis sur orbite la beta 1 de la prochaine 1.8.. Il était temps !

Page des widgets d’un membre

Lorsque j’ai commencé les travaux sur cette version, je me suis très vite rendu compte que ce plugin avait besoin d’un vrai lifting, du coup je l’ai complètement réécrit. J’ai également pensé que l’ancienne gestion des BPMH widgets était trop compliquée et devait refroidir pas mal d’administrateurs de communautés BuddyPress dans la création de leurs propres widgets.

Gestion des Widgets : la 2.0 utilise l’interface native de WordPress!

Du coup, j’ai tout cassé pour simplifier et me reposer sur l’interface de gestion des widgets native de WordPress, comme illustré ci-dessus. Cela présente l’avantage de simplifier l’ajout de widgets classiques – besoin qui m’avait été souvent remonté – dans la page des widgets du membre pour enrichir les 4 « BPMH widgets » qui sont inclus au plugin ;)
Par ailleurs, pour les développeurs de plugins, il est beaucoup plus aisé de tirer profit de la zone d’accueil individualisé de BP My Home pour éventuellement proposer des shortcuts vers leurs contenus. A ce sujet, à la fin de cet article, je propose un squelette de Widget « BPMH ».

D’autres nouveautés moins spectaculaires…

  • la possibilité de personnaliser les noms et slugs du plugin
  • la configuration d’un widget  dispose de sa propre page et n’est plus gérée en Ajax
  • le plugin n’utilise plus de template particulier et se repose uniquement sur BuddyPress (members/single/plugins.php)

 

Télécharger le plugin

 

Si Vous souhaitez aller plus loin et créer un widget qui comprend une page de configuration, je vous propose de vous inspirer du code ci après que vous pourrez même tester dans le functions.php de votre thème. Voici un petit descriptifs des étapes à respecter que vous retrouverez en commentaires dans le code. Vous verrez que j’utilise la class WP_Widget fourni par WordPress en l’enrichissant de 2 méthodes pour ajouter l’interface de configuration à disposition des membres ( user_settings() et save_user_settings() ).

  1. Extension de la classe WP_Widget :
    A noter : pour que votre widget se postionne dans la sidebar des BPMH widgets disponibles dans l’interface d’administration des widgets de WordPress, ils’agit veiller à préfixer le nom de la class par « BPMH_ » et l’option classname du widget par « bpmh- ». Dans le constructeur, je vous invite à utiliser le hook bpmh_actions afin de lancer la fonction de sauvegarde des réglages de l’utilisateur (save_user_settings())
  2. Pour diriger l’utilisateur vers la zone de configuration de votre widget, il sera nécessaire d’utiliser un code équivalent à ce que j’indique pour la création du « configure » link.
  3. Lorsque l’utilisateur cliquera sur ce lien de configuration, BP My Home recherchera la fonction user_settings() de votre widget, j’illustre à ce moment de la partie la création d’un formulaire de réglages utilisateur.
  4. Ensuite il s’agir de créer la fonction save_user_settings() qui est accrochée au hook bpmh_actions, afin de gérer l’enregistrement des préférences de l’utilisateur.
  5. Enfin, il ne restera plus qu’à référencer le widget dans la liste des widgets disponible de WordPress tout en veillant à utiliser le hook bpmh_widgets_init pour accrocher la classe principale.
<?php
/**
 * 1- Extending WP_Widget
 *
 * Make sure to prefix your class with BPMH_ 
 * and to add a classname prefixed by bpmh-
 *
 */
class BPMH_Widget_Custom extends WP_Widget {

	function __construct() {
		$widget_ops = array('classname' => 'bpmh-widget_custom', 'description' => __( 'Custom BPMH widget') );
		parent::__construct( false, _x( '(BPMH) Custom', 'widget name', 'bp-my-home' ), $widget_ops );
		
		/** 
		* Hooking bpmh_actions to save user settings
		*/
		add_action( 'bpmh_actions', array( $this, 'save_user_settings' ) );
	}
	
	function widget( $args, $instance ) {
		extract( $args );

		$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Example' ) : $instance['title'], $instance, $this->id_base);

		echo $before_widget;
		
		/** 
		* 2- Configure link
		* 
		* if you need your widget to have a configuration area,
		* this is the way you need to build your configure link
		*/
		$widget_hash = trailingslashit( base64_encode( get_class( $this ) ) );
		
		$config_link = trailingslashit( bp_my_home_get_user_settings_link() . 'widget' ) . $widget_hash;
		
		if ( $title )
			echo $before_title .'<span class="configure" ><a href="'.$config_link.'">'.__('Configure', 'bp-my-home') .'</a></span>' . $title . $after_title;
		
		if( !is_admin() && !is_network_admin() )
			$this->user_content( $instance );
			
		else
			echo '<p>' . __( 'Content is only available in user&#39;s page', 'bp-my-home' ) . '</p>';
		
		echo $after_widget;
	}

	function update( $new_instance, $old_instance ) {
		$instance = $old_instance;
		$instance['title'] = strip_tags($new_instance['title']);

		return $instance;
	}
	
	/**
	 * Let Admin customize the title of the widget
	 *
	 * @param array $instance 
	 * @return string html of the form
	 */
	function form( $instance ) {
		$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
		$title = esc_attr( $instance['title'] );
	?>
		<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p>
<?php
	}
	
	/**
	 * We could have done this in the widget() function
	 * but as this is never loaded in widget administration
	 * it avoids to run some un-necessary function in this part
	 * to only do it in user's home page
	 *
	 * @param array $instance
	 * @uses  bp_loggedin_user_id() to get current user's id
	 * @uses  get_user_meta() to get previously stored user meta
	 * @uses  esc_html() to sanitize output
	 * @return string html private content for the user
	 */
	function user_content( $instance = array() ) {
		$user_id = bp_loggedin_user_id();
		
		$bpmh_example_text = get_user_meta( $user_id, 'bpmh_custom_settings', true );
		
		if( !empty( $bpmh_example_text ) )
			echo '<p>'. esc_html( $bpmh_example_text ).'</p>';
	}
	
	/**
	 * 3- Displays the user settings form
	 *
	 * On the click of the configure link, BP My Home will call this function
	 * to display the user settings form for your widget.
	 *
	 * @param array $args 
	 * @param array $instance 
	 * @uses  bp_loggedin_user_id() to get current user's id
	 * @uses  get_user_meta() to get previously stored user meta
	 * @uses  wp_nonce_field() for security check
	 * @return string html form for user settings
	 */
	function user_settings( $args, $instance ) {
		extract( $args );
		
		$user_id = bp_loggedin_user_id();
		$bpmh_custom_text = get_user_meta( $user_id, 'bpmh_custom_settings', true );
		
		$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Example' ) : $instance['title'], $instance, $this->id_base);
		
		echo $before_widget;

		if ( $title)
			echo $before_title . sprintf( __('Settings for %s', 'bp-my-home' ), $title ) . $after_title;
		?>
		<form action="" method="post" class="standard-form">
			<label for="custom-id"><?php _e( 'Insert a random text', 'bp-my-home' )?></label>
			<input type="text" name="_bpmh_custom[input]" value="<?php echo esc_attr( $bpmh_custom_text );?>" id="custom-id"/>
			<?php wp_nonce_field( 'bpmh_custom_options', '_wpnonce_widget_options_' . $this->id_base ); ?>
			<p><input type="submit" name="_bpmh_custom[save]" value="Save"></p>
		</form>
		<?php
			echo $after_widget;
	}
	
	/**
	 * 4- Saves the user settings
	 *
	 * This function is hooked to bpmh_actions
	 * it first checks we're on the widget's settings area
	 * then stores the user's data to finally safely redirect the user to it
	 *
	 * @uses  bp_my_home_current_is_widget_settings() to check we're on a single widget settings area
	 * @uses  bp_action_variable() to check it's the settings area of the current widget
	 * @uses  check_admin_referer() for security check
	 * @uses  bp_loggedin_user_id() to get current user's id
	 * @uses  get_user_meta() to get previously stored user meta
	 * @uses  update_user_meta() to save the user meta in db
	 * @uses  delete_user_meta() to eventually delete user's data
	 * @uses  bp_my_home_get_user_settings_link() to build the redirection link
	 * @uses  bp_core_add_message() to inform the user data were processed
	 * @uses  bp_core_redirect() to redirect user to the widget settings page and avoid refreshing the posted vars
	 * @return string html form for user settings
	 */
	function save_user_settings() {
		if( bp_my_home_current_is_widget_settings() && base64_decode( bp_action_variable( 1 ) ) == get_class( $this ) ) {
			
			if( empty( $_POST['_bpmh_custom']['save'] ) )
				return;
			
			check_admin_referer( 'bpmh_custom_options', '_wpnonce_widget_options_' . $this->id_base );
			
			$user_id = bp_loggedin_user_id();

			if( !empty( $_POST['_bpmh_custom']['input'] ) )
				update_user_meta( $user_id, 'bpmh_custom_settings', sanitize_text_field( $_POST['_bpmh_custom']['input'] ) );
			else
				delete_user_meta( $user_id, 'bpmh_custom_settings' );
				
			// let's finally redirect to avoid double posting
			$widget_hash = trailingslashit( base64_encode( get_class( $this ) ) );
			$redirect = trailingslashit( bp_my_home_get_user_settings_link() . 'widget' ) . $widget_hash;
			
			bp_core_add_message( __( 'Widget settings saved successfully', 'bp-my-home' ) );
			bp_core_redirect( $redirect );
		}
	}

}

/**
 * 5- Finally let's register the widget for BP My Home
 *
 * @since BP My Home 2.0
 */
function bpmh_custom_register_widget() {
	/** 
	* 5-2 then we hook to bpmh_widgets_init to make sure BP My Home is up and running! 
	*/
	add_action( 'bpmh_widgets_init', create_function('', 'return register_widget("BPMH_Widget_Custom");' ) );
}

/**
 * 5-1 We first hook to widgets_init
 */
add_action( 'widgets_init', 'bpmh_custom_register_widget' );

Voir ce code sur github

Illustration de l’article : My Home :) by im4th, on Flickr, il s’agit en fait de la cabane que mon Papa et mes grands parents m’ont construite peu après ma naissance dans le massif Ardennais!

Bowe Codes 2.1 : naissance du Bowe Widget!

$
0
0

Il est désormais plus simple d’ajouter des widgets pour afficher des Bowe Codes dans votre sidebar ! La version 2.1 de ce plugin BuddyPress intègre désormais un widget paramétrable que vous n’avez plus qu’à déposer dans la sidebar de votre choix. Ensuite, après avoir choisi votre shortcode, le formulaire pour régler ses options s’affichera. Pratique non ?

Widget UI : drag – drop -personnaliser votre Bowe Code ;)

Voilà, il ne vous reste plus qu’à upgrader pour la version 2.1 et profiter de ce petit widget :)

Télécharger/Download Bowe Codes

Illustration de l’article : 31/365 – Widget’s Year – 24.03.09 by The Bunny Maker, on Flickr


#bbPress Avatar : ajoutez un système de gestion interne des Avatars à votre outil de forum préféré

$
0
0

Voici mon tout premier plugin 100% bbPress. Il y a un certain temps, je vous avais proposé un plugin pour ajouter un système de topics support, mais je l’avais construit dans le cadre du composant des forums de BuddyPress.

Je m’intéresse de plus en plus à bbPress, c’est pour moi une magnifique source d’inspiration. Je conseille à toute personne désireuse de se lancer dans la conception de plugins WordPress de plonger dans les sources de bbPress, vous en apprendrez beaucoup sur le sujet.

Le profil bbPress (front-end)

S’il est vrai qu’il existe pas mal de plugins sur le repository officiel de WordPress qui proposent des fonctionnalités équivalentes à mon plugin, je n’ai pas trouvé la fonctionnalité dont mon projet professionnel avait besoin. Il s’agit d’un projet Intranet, et dans cet environnement, il n’est pas forcément habituel pour les collaborateurs de disposer d’un fichier image destiné à les représenter. Du coup on m’a demandé de prévoir un système de suggestion d’avatars. Autre point lié à l’intranet et qui a été le point de démarrage de la conception de ce plugin, c’est que bien souvent les appels à Gravatar sont neutralisés :(

Suggestions d’avatars depuis la media library

Une autre chose qui me tenait à coeur était d’utiliser le nouveau media uploader de WordPress côté front, et d’ailleurs d’éviter de ramener l’utilisateur dans le back office pour gérer son profil et donc son avatar. L’avantage avec bbPress, c’est que tout participant au forum dispose d’un profil du côté front qui liste ses différents topics, réponses, favoris et souscriptions au forum. Un éditeur de profil est également disponible à partir duquel le participant peut modifier les éléments de son compte. C’est dans cette zone que mon plugin a établit son périmètre d’action.

Ensuite, j’ai noté que la WP Admin Bar du blog contenait un lien vers le profil utilisateur au sein de l’administration de WordPress. Avant toute chose, j’ai donc ajouter un filtre au sein de mon plugin qui vérifie si on se situe côté front ou admin. En fonction des réglages bbPress de l’administrateur du blog, côté front, le lien pointera vers le profil bbPress, côté admin, il pointe vers le profil WordPress.

L’aperçu de l’avatar, une fois téléchargé.

Ainsi, bbPress Avatar propose un bouton pour lancer le media uploader afin de permettre à l’utilisateur de télécharger son image et disposer d’un contrôle totale sur cette dernière pour éventuellement l’éditer ou la supprimer. Si toutefois il n’a pas d’image sous la main, il peut lister les suggestions d’avatars en cliquant sur le lien de la bibliothèque de média de l’uploader. Rassurez-vous toutes les images du blog n’apparaîtront pas à ce moment de la partie. Les seules qui apparaîtront seront les suggestions qui seront attachés à un article en particulier.

En effet, lors de sa première installation, le plugin crée un article brouillon pour servir de parent à tous les avatars qui seront téléchargés. Cette technique me permet de faire en sorte que l’auteur (en l’occurrence, celui qui a activé le plugin, donc l’administrateur) de cet article parent, puisse lui attacher les fameuses suggestions d’avatar, tout en neutralisant l’éventuel avatar que lui même aurait téléchargé pour le représenter. Vous me suivez ? Lorsque le participant listera les avatars depuis l’uploader, il recevra l’éventuel avatar dont il est propriétaire et les suggestions d’avatar. Il ne verra donc pas les avatars des autres utilisateurs.

Enfin, j’ai souhaité que ce plugin s’intègre un maximum à bbPress, il attend donc que bbPress soit prêt et complètement chargé avant de démarrer son exécution. Les réglages du plugin sont disponibles au sein d’une section dédiée des réglages de bbPress et du côté programmation, il s’accroche à l’argument extend de l’instance bbpress().

Etant donné le nombre conséquent de plugins du même type sur le repository, j’hésite à l’y faire héberger. Si vous pensez qu’il pourrait y remplir un rôle, n’hésitez pas à m’en faire part en commentaire (si au moins 10 commentaires le demandent, alors je soumettrai mon plugin à WordPress). En attendant, je vous propose de jouer avec la beta1 de ce plugin depuis mon repository Github.

Télécharger le plugin (github)

Parcourir le code sur github

NB : je me suis rendu compte que lorsqu’on éditait son profil du côté front, cela désactivait systématiquement la WP Admin Bar pour l’utilisateur. C’est un bug que j’ai fait remonter sur le trac de bbPress via ce ticket. Vous pouvez donc vous inspirer des patchs que j’ai déposé pour résoudre ce comportement qui peut agacer à la longue certains utilisateurs ;)

 

Illustration de l’article : Etsy avatars by jared, on Flickr

BuddyDrive 1.1

$
0
0

Il y a presque deux semaines, le matin avant de prendre le train pour la côte d’Azur, je spoilais au sujet de cette nouvelle version de BuddyDrive :

Pendant ces vacances, j’ai pu profiter de la mer, (le thumbnail de ce post est une des photos que j’ai prises lors de mon séjour), du soleil, de la compagnie des moustiques (mes jambes sont ravagées !!).. Bref j’ai rechargé les batteries !

Et pendant que ma petite famille faisait la sieste, j’en profitais pour peaufiner cette version de BuddyDrive. Durant ces vacances, il y a eu un jour particulier pour moi : le 16 juillet. Il y a 39 ans, je naissais dans la région parisienne… Et, pour cet anniversaire, les tweets envoyés par la communauté BuddyPress et certains potes WordPressiens m’ont vraiment émus, aussi je tenais une nouvelle fois à les remercier. Merci donc à (par ordre de réception) :
@cree1site, @benkenobi07, @slaFFik, @thierrypigot, @karmatosed, @buddypressdev, @JJJ, @modemlooper, @mercime_one, @sbrajesh, @BoweFrankema, @seluvega.

Il y a même un tweet que je garde précieusement car c’est mon plus beau cadeau de cette journée :

Riche période dans la mesure où le lendemain, la version 1.8 « Di Fara » de BuddyPress était released, alors que je dégustais une pizza dans un restaurant bordant le port de San Nari ;) . Bref, Après ce petit propos introductif, entrons dans le vif du sujet!

So, what’s new in 1.1 ?

La première version du plugin (dont la publication dans le repo fut un moment compliqué pour moi, merci encore @boone et @JJJ pour leurs aides précieuses), a reçu un accueil super positif et ça m’a fait super plaisir étant donné l’investissement que j’y avais consacré. D’ailleurs, juste après sa publication, je me confiais @Dan dans ces termes : « cette extension m’a fatigué, j’ai besoin d’un break et d’une bonne période pour l’oublier avant d’y retoucher! ».

Cette période estivale a donc été le moment que j’ai choisi pour m’y replonger. Alors, j’ai étudié les différents topics déposés dans le forum support du plugin et cette version répond à la majorité des « feature requests ». Je repousse à plus tard l’une d’entre elles qui consiste à interfacer les API Google Drive / Dropbox et autre AWS (sur ce dernier point, il existe sur le repository un fork de BuddyDrive, que je n’ai malheureusement pas eu le temps de tester…).

Un contrôle plus fin des quotas BuddyDrive des utilisateurs

A chaque rôle son quota BuddyDrive !

Jusqu’à présent tous les utilisateurs (y compris l’Administrateur) étaient logés à la même enseigne, avec cette version, il devient possible d’affecter des quotas différents par rôle (en réponse à ce topic).

Tant qu’on y est, personnalisons le quota par utilisateur!

Cette nouveauté est intéressante pour affecter des quotas différents à une liste d’utilisateurs, mais j’ai pensé que HansRuedi avait raison et que permettre d’affecter un quota différent par utilisateur pouvait vous intéresser. Ainsi en réponse à son topic, depuis la page d’administration du profil de l’utilisateur (ou dans celle de la network administration en cas de multisite), il est possible de spécifier un quota particulier pour l’utilisateur désiré.

Alors comme les deux dispositifs cohabitent, si vous modifiez le rôle d’un utilisateur, c’est le quota du rôle qui lui est affecté par défaut. Si toutefois, il y a besoin de spécifier un quota différent une fois le changement de rôle effectué, il conviendra de modifier ce quota une nouvelle fois depuis l’administration du profil utilisateur.

Qui a consommé quoi ?

Enfin pour terminer sur cette partie dédié à l’espace de stockage disponible pour chaque utilisateur, j’ai pensé qu’une nouvelle colonne dans la liste des utilisateurs (Network Administration des utilisateurs en cas de multisite) affichant le quota consommé serait une information également intéressante.

BuddyDrive et les groupes

Au risque de paraître entêté, je persiste, malgré les différentes demandes consistant à rendre possible l’upload / l’attachement de fichiers depuis les groupes, dans ma première idée : BuddyDrive est avant tout un outil dirigé vers les membres de la communauté. Les fichiers sont donc attachés à ces membres qui en sont propriétaires. Il est donc naturel que l’uploader soit dans le profil du membre. En revanche, le groupe dans sa fonction de regroupement d’utilisateurs est très intéressant pour BuddyDrive en tant qu’option de partage du contenu par son propriétaire.

Ceci étant dit, j’ai réécris la partie Groupe de BuddyDrive pour profiter des évolutions introduites dans ce domaine par la version 1.8 de BuddyPress. En réponse à ce topic, j’ai également corrigé un « bug » (en fait un oubli de ma part) qui empêchait de partager des fichiers ou dossiers dans des groupes masqués. Enfin, depuis la page de settings de BuddyDrive il est désormais possible d’automatiser l’activation de BuddyDrive pour les nouveaux groupes créés (j’intègre donc ce trick à BuddyDrive).

Cocher la case pour automatiser l’activation de BuddyDrive pour les nouveaux groupes…

Personnalisation des slugs et noms du plugin

L’illustration ci-dessus commence à dévoiler cette possibilité de personnalisation des éléments de navigation de BuddyDrive. Il est donc possible de modifier la sous navigation principale et celle des fichiers ou dossiers partagés par les amis et ce jusqu’à la terminaison d’url (slug). L’illustration ci-après démontre l’impact d’un changement de nom/slug sur la navigation de BuddyDrive.

Personnalisation de la sous navigation utilisateur

S’agissant de la navigation BuddyDrive, étant donné que ce plugin dispose d’une « directory page » (qui est masqué des wp_list_pages() ou autres menus), il s’agira d’éditer le titre de cette page afin de modifier le nom de la navigation principale et par la même occasion de la page qui est affiché en cas de fichier protégé par un mot de passe.

Changement du titre de la page BuddyDrive et…

!important : j’aurai pu me contenter d’en rester là s’agissant de la personnalisation du plugin et indiquer de ne pas modifier le slug du plugin (dans l’illustration ci-dessus le champ « permalink ») étant donné les impacts potentiels sur les fichiers et dossiers. Mais je me suis rappeler de la loi de Murphy! Alors, j’ai pris le temps de prévoir ce cas de figure.

Quoiqu’il arrive, si vous avez peur de mettre les mains dans le cambouis, je vous déconseille de changer le slug principal du plugin dans le cas d’un upgrade du plugin. Car que se passera-t-il dans ce cas ?

  1. Le code wpembed du plugin sera cassé dans les activités, messages, etc.. et il ne restera plus que des liens obsolètes vers les fichiers ou dossiers qui ont été partagés avant le changement de slug.
  2. Si des liens ont été transmis par email ou tout autre moyen externe au blog, ils seront obsolètes

S’agissant des liens devenus obsolètes, j’ai prévu un système qui vérifiera le slug original du plugin pour éventuellement rediriger vers le slug personnalisé et éviter une 404. Attention cependant car cela ne marchera qu’une fois ! Si vous changez de slug 2 fois de suite, les activités / messages partagés avec le slug du premier changement ne seront plus récupérables. S’agissant des wpembed codes éparpillés dans les activités ou les messages, il est possible de les réparer en réalisant des requêtes SQL comme illustré ci-dessous.

/* Cas des activités (remplacer wp_ par votre prefix) */
UPDATE wp_bp_activity SET content = REPLACE( content, 'http://site.url/buddydrive/', 'http://site.url/new-slug/' );

/* Cas des messages (remplacer wp_ par votre prefix) */
UPDATE wp_bp_messages_messages SET message = REPLACE( message, 'http://site.url/buddydrive/', 'http://site.url/new-slug/' );

Voilà qui répondra à ces topics (#1, #2), et qui semblait être une vraie attente pour les administrateurs.

Tada!

Voilà, il ne vous reste plus qu’à upgrader ou découvrir cette nouvelle version depuis le repository WordPress

Télécharger/Download BuddyDrive

 

Illustration de l’article : port-d-alon by im4th, on Flickr

WP Manual : un manuel dans votre WordPress

$
0
0

Le téléphone sonne pour la quinzième fois de la journée.. Encore un nième utilisateur qui m’appelle car il est perdu dans l’application que j’ai développée…

Allo ? Oui, bonjour, euh comment qu’on fait pour archiver un questionnaire quand on a un message d’avertissement nous indiquant que l’archive ne peut se faire car le questionnaire n’est pas terminé ? Je ne comprends pas, j’ai pourtant répondu à toutes les questions ??? L’application indique 97% de taux de réponse. Je suis coincé là, vous pouvez m’aider ?? Vraiment pas bien fichu ce truc.

Et là, vous ne retenez que la fin du discours de notre utilisateur « Vraiment pas bien fichu ce truc » ! Car c’est vous qui l’avez conçu ce truc ;) La fatigue de la fin de journée, vous avez déjà eu 14 appels du même tonneau, et vous savez que la réponse est dans le manuel utilisateur… Vous savez même précisément où : page 47, chapitre A, sous chapitre A.1, point A.1.56, 3ème ligne du premier paragraphe. C’est pourtant simple!
Donc vous rêvez, de simplement dire avant de raccrocher d’un geste vengeur :

RTFM !!!

Intérêt d’un manuel en ligne

Une page créée via WP Manual. A droite un widget « Table des matières » et un autre pour la recherche.

Restons calmes :) Pour rédiger les manuels de mes applications, j’utilisais un bon vieux traitement de texte de la compagnie de Redmond.. Depuis mon plugin WP Manual : out le manuel qui se télécharge, qui s’imprime et qui est déjà obsolète !!

La fille de l’illustration de cet article a raison, si on veut que le « put… » de manuel soit lu, il faut qu’il soit mieux conçu. Je me suis donc posé pas mal de questions sur le sujet étant donné que je m’apprête à me lancer dans la rédaction d’un manuel pour un prototype d’application WordPress de ma conception. Alors, j’ai réfléchi aux manuels que je consultais régulièrement à savoir les codex WordPress et BuddyPress et leur point commun est qu’ils sont en ligne (en plus conçus collaborativement) et il devient alors simple de lancer une recherche sur la fonction qui m’intéresse, de mettre certaines pages en favoris, etc…

Alors mon prototype est un peu particulier puisqu’il s’agit d’un plugin WordPress qui le transforme pour créer un environnement collaboratif pour concevoir un référentiel d’entreprise. Et je me suis dit : autant tirer profit du fait que WordPress sait faire beaucoup de chose pour tout mettre au même endroit (un forum support grâce à bbPress, un fil d’information sur le prototype grâce aux fonctions blogging natives de WordPress et mon fameux manuel). L’avantage de cette organisation est qu’il est alors très simple d’ajouter dans l’application des liens vers les chapitres du manuel en relation et un lien vers le forum support.

Essayez de faire un lien vers la « page 47, chapitre A, sous chapitre A.1, point A.1.56, 3ème ligne du premier paragraphe » de notre manuel qui se télécharge, qui s’imprime, qui est déjà obsolète et qui n’est surtout là que pour se rassurer car jamais lu !!

Un seul manuel pour tous !

En plus, il est assez fréquent que nous devions rédiger plusieurs versions de notre manuel : une par profil utilisateur. Du coup dans les liens de téléchargement, l’utilisateur peut se demander : « purée c’est quoi mon profil déjà ?? ». Pour mon plugin (je me suis d’abord fait plaisir en le concevant), j’ai voulu un seul manuel quelque soit le profil (en même temps y a que les profils utilisateur et administrateur qui seront utilisés dans mon proto !!). Ainsi pour les pages réservées aux administrateurs, je me suis appuyé sur la fonction de visibilité « Privée » de WordPress. Les utilisateurs classiques ne voyant même pas la page dans la table des matières du manuel. Tant que j’y étais, j’ai également tiré profit de la visibilité « Protégée » de WordPress pour éventuellement protéger les pages par un mot de passe.

Tant que le mot de passe n’est pas fourni, la page n’est pas visible, ni le détail des chapitres dans la table des matières

Enfin, pour terminer sur l’intérêt d’utiliser un manuel conçu en ligne (et avec WordPress), c’est qu’on peut se partager la tâche et le concevoir collaborativement. Pour le cas de WP Manual, seuls les administrateurs et éditeurs sont en capacité d’éditer des pages de manuel.

L’interface des révisions depuis la 3.6 est vraiment sympa !

Du coup, je n’ai pas résisté à l’envie de faire profiter à mon custom post type « manual » de la nouvelle interface de gestion des révisions introduite avec la version 3.6 de WordPress.

Tour d’horizon des fonctionnalités de WP Manual

  • Création automatisée de la table des matières de votre manuel,
  • chaque page de manuel est une entrée de cette table des matières,
  • chaque « heading » ou tag de titre est interprété comme un sous élément de la page de manuel,
  • intégration automatique de liens pour revenir en haut de page,
  • intégration automatisée de « thickbox » pour appliquer un effet de zoom sur vos images,
  • les pages de manuel sont administrées dans une zone dédiée du back-end WordPress,
  • un widget permet de reprendre la table des matières complète du manuel en détaillant les chapitres de la page en cours de lecture,
  • un widget permet d’ajouter un formulaire de recherche pour votre manuel
  • une navigation en bas de page permet de lire le manuel un peu comme si on « tournait les pages »

Prise en main rapide du plugin

Une fois le plugin activé, une page WordPress ayant pour titre « Manuel » sera créée. Cette page est la page de référence du plugin. Son éventuel contenu n’est pas utilisé, car à la place, la table des matières principale est affichée. Vous pouvez modifier le titre et le permalien de cette page par ce que vous voulez.

Les réglages de WP Manual

Vous retrouverez l’administration des pages de manuel au sein du menu « Pages de manuel » juste en dessous le menu des pages classiques de WordPress. Si vous le souhaitez, depuis le sous menu « Réglages Manuel » du menu « Réglages » de l’administration WordPress, vous pouvez neutraliser certains tags de titre, désactiver l’ajout des liens pour revenir en haut ainsi que l’utilisation de « thickbox » pour zoomer les images.

Les widgets WP Manual

Enfin, les widgets de WP Manual ne s’afficheront que sur des pages WP Manual. Le widget table des matières lui ne s’affichera que si vous êtes sur une page de manuel. Je vous conseille donc de les mettre au top de votre zone de widget.

WP Manual requiert WordPress 3.5.2 et a été testé jusqu’à la 3.6. Si vous aussi, vous pensez que vos utilisateurs méritent un manuel dont ils se serviront, téléchargez WP Manual ;)

Télécharger le plugin (github)

Parcourir le code sur github

 

Illustration de l’article : 20071105-_IGP5144 by Rerun van Pelt, on Flickr

#BuddyPress #bbPress Support Topic : la 2.0 en ligne de mire !

$
0
0

Ces derniers temps, j’ai travaillé à l’enrichissement de ce plugin qui, je vous le rappelle, se propose d’ajouter une fonctionnalité de support aux forums motorisés par bbPress.

Aussi, avant de publier sauvagement une nouvelle version majeure sur son WordPress.org repository, je vous propose de m’aider à la bêta-tester pour à la fois découvrir les nouvelles fonctionnalités introduites, vérifier qu’elles fonctionnent bien, s’assurer qu’elles n’ont pas d’impact sur les autres… et également préparer les utilisateurs actuels de l’extension à un changement de taille !

D’abord, j’ai complètement réécris le plugin, ensuite cette prochaine version marquera l’interruption du support de la version de bbPress qui est incluse par défaut dans BuddyPress pour motoriser les forums de groupe (bbPress 1.x). En d’autres termes, pour profiter des évolutions de la version 2.0 de Buddy-bbPress Support Topic, vous aurez impérativement besoin de bbPress 2.3.2. Ceci étant dit, je vous propose de prendre connaissance de ce que je vous ai réservé pour la 2.0 :)

Plus de maîtrise sur la fonctionnalité support.

L’administration du Forum depuis le backend WordPress

Auparavant, la fonctionnalité support était active par défaut et il n’était pas possible de la personnaliser par forum.
Aujourd’hui, depuis l’administration du forum, vous êtes en mesure de gérer la fonctionnalité support pour le forum en cours d’édition, en choisissant de maintenir le comportement par défaut, de désactiver la fonctionnalité support ou encore de dédier ce forum au support.

Notifications email pour les modérateurs

Réglages des notifications email

Si vous avez opté pour la fonctionnalité support pour votre forum, l’administrateur du forum peut activer les notifications email lors de l’ajout d’un nouveau sujet de type support.
Depuis l’administration du forum, vous trouverez la liste des modérateurs bbPress qui peuvent être sélectionnés pour ces notifications.
Cochez simplement les cases correspondants aux modérateurs de votre choix et ils recevront une alerte accélèrant ainsi la résolution de vos sujets de type support !

BuddyPress : un nouvel onglet pour administrer le support

Administration du support depuis un groupe BuddyPress

Si BuddyPress version 1.8+ est activé, un nouvel onglet apparaîtra dans l’administration (front-end) du groupe. Ainsi, les administrateurs seront en mesure de personnaliser la fonction support de leur forum
Ils peuvent choisir de désactiver cette dernière, l’utiliser ou la systématiser.
Si la fonction support est disponible pour leur forum, ils peuvent souscrire à la notification email lors de l’ajout d’un nouveau topic de type support. Ils peuvent aussi activer cette alerte pour les modérateurs du groupe.

Modifier vos sujets de support en masse !

« Bulk Edit » des sujets de support

Les administrateurs de forums sont en mesure de modifier le statut support de plusieurs topics en une seule manipulation.
Après avoir activé les cases à cocher des sujets à modifier depuis la liste des sujets de l’administration des topics, il s’agit de sélectionner l’action de masse modifier et de cliquer sur le bouton appliquer.
Vous pouvez alors utiliser la liste déroulante pour mettre à jour le statut de support des sujets sélectionnés

Un widget pour aider les utilisateurs à poser leurs questions de support

Nouveau widget !

L’administrateur peut utiliser ce nouveau widget pour créer un bouton qui dirigera l’utilisateur vers le formulaire de dépôt d’un sujet de type support dans le forum dédié au support sélectionné dans les réglages du widget.
Si votre WordPress est utilisé comme une application, il peut être intéressant de connaître l’url de provenance du demandeur, ça tombe bien c’est une option du widget :) .
Une fois posté, les administrateurs et modérateurs du forum verront cette url de provenance ce qui leur fera gagner du temps dans la résolution du sujet de support.

Utilisation avancée : créer de nouveaux statuts de support

Créer vos propres statuts de support :)

Introduction d’un filtre pour ajouter des statuts de support personnalisés. Ce nouveau statut sera complètement intégré aux différentes fonctionnalités du plugin (notamment les statisiques).
Un exemple d’utilisation est démontré plus bas, utilisez ce code dans votre plugin ou dans le script functions.php de votre thème actif.

function functionprefix_custom_status( $allstatus = array() ) {
  $allstatus['topic-working-on-it'] = array(
    'sb-caption' => __( 'Working on it', 'buddy-bbpress-support-topic' ),
    'value' => 3,
    'prefix-title' => __( '[Working on it] ', 'buddy-bbpress-support-topic' ),
    'admin_class' => 'waiting'
  );

  return $allstatus;
}

add_filter( 'bpbbpst_get_support_status', 'functionprefix_custom_status', 10, 1 );

 

J’ai testé ces nouvelles fonctionnalités sur ces configs :

  1. WordPress 3.6 et bbPress 2.3.2
  2. WordPress 3.6, bbPress 2.3.2 et BuddyPress 1.8.1
  3. WordPress 3.6 et bbPress 2.4 RC1
  4. WordPress 3.6, bbPress 2.4 RC1 et BuddyPress 1.8.1

Vous pouvez télécharger la première bêta de la version 2.0 depuis le repository github du plugin.

Télécharger le plugin (github)

Parcourir le code sur github

 

Illustration de l’article : deBUG by Franz & P, on Flickr

BP Sticky Groups

$
0
0

L’équipe de développement de BuddyPress est en train de nous concocter une magnifique 1.9, et ces derniers temps, j’ai pas mal fréquenté le « trac » de ce fabuleux plugin.

J’ai donc humblement suggéré quelques patches à l’équipe et sur l’un d’entre eux, nous ne sommes pas certains que la fonctionnalité doive être intégrée au coeur de BuddyPress.

Il s’agit de la mise en avant des groupes ou « Sticky Groups ». Pour en savoir plus sur ce ticket, vous pouvez vous rendre sur le trac de BuddyPress.

Aussi, @boone m’a suggéré de concevoir un plugin qui embarque cette fonctionnalité pour vérifier si cette attente était vraiment partagée par beaucoup d’utilisateurs de BuddyPress. Quelques heures plus tard, je l’ai soumis à WordPress.org et donc si vous avez toujours rêvé de pouvoir mettre en avant un ou plusieurs groupes, c’est désormais possible avec ce plugin ;)

Télécharger/Download BP Sticky Groups

Illustration de l’article : my to do list by heliosphan, on Flickr

Viewing all 212 articles
Browse latest View live




Latest Images