I'm not entirely sure what this post is. I started writing it on the train down to altc2013 and think it lost its focus between York and Sheffield. Essentially I wanted to write this to highlight some of the benefits of using BuddyPress as a way to capture user activity streams but at the same time some of the challenges of achieving an integrated experience using WordPress … I'll let you decide it's value and please feel free to comment (the ‘dirty code’ post will be a lot better).
For the last couple of week I’ve been working on the altc2013 conference platform. In previous years the Association for Learning Technology (ALT) had used CrowdVine to create a conference environment which allowed delegates to connect and communicate. This worked well but had a number of data bottlenecks making administration difficult. This combined with the knowledge that ALT members already have very rich networks on other sites including their own blogs and social network sites like Twitter, it was decided to opted some of the connectivist principals used in the ocTEL. The result, hopefully, is a site that replicates the CrowdVine experience with several additional key features. These include:
- Conference Reader which permits the display and interaction of conference related content generated in other sites and networks; and
- Daily Conference Newsletter summarising user generated activity in an email to subscribers (also syndicated here in the conference Reader).
In this post I’ll outline the general recipe used in the altc2013 platform, how interoperability was achieved between some existing WordPress plugins (saving the code heavy post for a latter date).
Starting with a self-hosted version of the blogging platform WordPress four key plugins are the basis of the site:
- Conferencer – used to manage programme and session information
- BuddyPress – social networking platform
- FeedWordPress – used to pull delegate activity from 3rd party blogs and sites
- MailPress – for daily newsletter distribution and management
The common issue when you stray away from WordPress as a blog to WordPress as a ___ is maintaining interoperability between plugins. For example Conferencer was never designed to work with BuddyPress so interfacing these plugins is required on several levels. To illustrate this below is a general interface diagram for the altc2013 platform followed by more detail about each of the main challenges that had to be overcome:
Conferencer –> BuddyPress
In Conferencer the custom post type ‘session’ is used to enter and display session information. This post type is associated with further custom post types for rooms, timeslots, speakers, tracks and sponsors. BuddyPress on the other hand doesn’t use custom post types or taxonomies, instead extending the WordPress core functionality with it’s own custom APIs, functions and features. Out of the box BuddyPress uses Groups as a way for members to cluster and collaborate. Integration between BuddyPress and Conferencer is primarily achieved by renaming Groups to Sessions (a cheap trick but it works). Doing this means when a user tries to view a Conferencer session which automatically uses a /sessions/ in the url, they are redirected to the BuddyPress group. This is achieved by creating a new page with the slug ‘sessions’ and then using this with the BuddyPress Group component (essentially duplicating the same url endpoint but relying on BuddyPress to steal priority over how the page is displayed).
At this point all we have done is trick WordPress into displaying a BuddyPress Group page. Additional code is required to hook into Conferencer session creation to generate a group in BuddyPress and create a relationship between the custom post type and group (included in the Github code shared at the end of the post). Another aspect of the integration is the Conferencer generated programme view. This includes a ‘Follow Session’, renamed from ‘Join Group’. This is done by reusing some of the existing BuddyPress functions to render a group button within the Conferencer programme.
BuddyPress <–> FeedWordPress
The FeedWordPress plugin allows the automatic collection of posts made on 3rd party sites using RSS. FeedWordPress ingeniously uses the existing WordPress Links table to maintain a list of sites it collects data from. Meanwhile within BuudyPress members can edit their own profile using defined fields. In altc2013 we use this functionality to allow delegates to register their own blogs. An interface with FeedWordPress is achieved by associating a blog feed address with the WP Links table. The added benefit of allowing users to add their own blog feeds is that we can make an association between blog feed and author. This means when a post is collected by FeedWordPress it is associated with the delegate and consequently BuddyPress associates this with an activity stream entry.
Reader <–> BuddyPress
The Reader isn’t a plugin in it’s own right (but I should make it), instead it’s a theme customisation I originally developed for ocTEL. All the reader does is render data collected by FeedWordPress which are in turn are just categorised blog posts. The Reader integrates with BuddyPress by using it’s native activity favouriting and by using an addition BuddyPress compatible plugin (BP Likes) also displays and records ‘likes’. This is achieved is a similar way to adding ‘Follow Session’ buttons of the Conferencer generated programme.
BuddyPress <–> MailPress
MailPress is a plugin which manages the distribution of a daily newsletter of latest conference activity. The two interfaces with this and BuddyPress is the addition of link within the members notification settings to control their newsletter subscription. Given the way BuddyPress uses WordPress functionality to add additional information to various interfaces this was achieved by matching the WordPress/BuddyPress user id with a table of users maintained by MailPress. The second layer of integration was to include highlights of the BuddyPress activity stream in each newsletter. This was achieved by using existing BuddyPress functionality to render and display a custom activity summary (as used also on the homepage of the conference site.
Hopefully this post has given you some insight into what was required to create the altc2013 conference platform. Using existing open source plugins, we’ve interfaced them to create new functionality. Whilst the effectiveness of the new altc2013 conference platform is still to be evaluated we now have a basic platform to agilely respond to the needs of delegates.
A reminder that the code we’ve developed is on Github so feel free to peruse over and take in your own direction and comment on, if your an altc2013 platform user the feedback button is the best way to suggest improvements or highlight bugs, and if you are generally interested in this area the comments on this post are open