Touch the firehose of ds106, the most recent flow of content from all of the blogs syndicated into ds106. As of right now, there have been 92693 posts brought in here going back to December 2010. If you want to be part of the flow, first learn more about ds106. Then, if you are truly ready and up to the task of creating web art, sign up and start doing it.

#ocTEL- an open online course recipe using WordPress

Posted by
|

Having recently posted the ingredients card for ocTEL I thought I flesh out some of the details and give ā€˜mamaā€™s secret recipeā€™. Like most recipes itā€™s not perfect and I encourage you to try it yourself and refine where necessary. Also itā€™s worth remembering that even though the course is in progress the recipe is being continually refined so it might be worth tracking the code and developments announced here.

Look and feel (child theme)

Starting with the basics, ocTEL gets itā€™s appearance from the Responsive Theme. The advantage of this is it automatically gives us a mobile and desktop friendly interface. Because we were planning a number of customisations we created a child theme (more info. on child themes). Child themeing works well but one issue is as we have customised some of the templates we are now locked into an older version of the parent theme, version 1.8.9.3 (the parent theme is now version 1.9.3).

Course Reader

As previously mentioned weā€™ve developed a bespoke Course Reader into our child theme. This incorporates the functionality of a couple of other plugins (Jetpack for infinite scroll, WP Favourite Posts). The main new template files are archive.php and content.php. To give the Course Reader itā€™s own configurable sidebar widget additionally there is sidebar-archive.php which is registered in the child theme custom functions.

Registration

Within ocTEL my life is made a little harder because registration is entirely separate to the WordPress site. Ideally Iā€™d just use the Theme My Login and enable the ā€˜Enable User Moderationā€™ and ā€˜Enable Custom E-mailā€™ modules then moderate new users using admin approval. In Settings > General you would also need to set Membership to ā€˜Anyone can registerā€™ and ā€˜New User Default Roleā€™ as Subscriber). In the Theme My Login custom email options Iā€™d direct new users to complete their profile (within ocTEL we use bbPress (a forum plugin) which gives us a nice profile page ā€“ Iā€™ll detail how we customise this later).

Theme My LoginIn ocTEL we still use Theme My Login mainly for a front-end login screen and instead to create the accounts we use the Add Multiple Users (AMU) plugin. When creating usernames the rule of thumb we used was to use the personā€™s twitter username or combination of firstNameLastName. The reason for using the twitter handle is FeedWordPress (the aggregation plugin we use) tries to match authors to existing user accounts ā€œwith the same name as either (1) their login, (2) their display name, (3) their e-mail address (if given), or (4) one of the ā€œaliasesā€ listed in the userā€™s profileā€ [Ref].

By using a Twitter handle  gives FeedWordPress another dimension to match authors using the theory that your twitter handle may be your ā€˜nom de plumeā€™ for 3rd party services, hence trying to avoid the situation of users being ā€˜analytically cloakedā€™ (Suthers & Rosen, 2011). Logins and passwords generated by AMU were exported back to ALT to allow them to distribute via their mail merge system.

Some additional complication is in the original offsite registration form was that users were asked if they a) wanted to be publically listed, b) receive course related emails. To display course participants we use Author Avatar List which allows you to list users based on role.  So by using User Role Editor we duplicated the ā€˜Subscriberā€™ role as ā€˜Subscriber Unlistedā€™. As AMU lets you define the role for each new user the import data was reshaped in Excel to include this.

As part of the  course related emails we were keen where possible to automatically subscribe users to the ā€˜daily newsletterā€™. The newsletter is distributed using the MailPress plugin which does have a built-in add-on to synchronise its mailing list with the site users.  The problem is there is no easy way to batch subscribe a subset of users who opted for email correspondence, instead you have to dig into the guts of the SQL database (to get easy access to this we use Adminer) and do an import from there. If the course was configured so that the default was you got the daily newsletter but you could opt out on an individual basis this would have been a lot easier as there is a tickbox in the MailPress Settings for newsletter Subscriptions for default on.

Feed aggregation

imageLike many other similar courses we are using the FeedWordPress plugin to pull data from external feeds. Most of the setting are left as default.  Where we perhaps do something different is in the Categories & Tags settings weā€™ve switched of ā€˜Match feed categoriesā€™ for Categories and then assign the default custom Categories Reader and child category Blog posts.

imageThere are a couple of reasons for doing this. In the Course Reader is programmed to render any posts with the ā€™Readerā€™ parent category and when users self-register blogs we wanted them to automatically be assigned these categories.  When we register other data feeds like Delicious bookmarks we override the site settings and ā€˜fileā€™ the feed into a different child category of Reader.

imageThis provides an easy way to filter the course reader down to certain categories of feeds. So if I just want to I can see Bookmarks in the Reader of filter down further for just Mendeley Bookmarks.

There are a couple of extra FeedWordPress plugins we use to try and keep our feeds clean. After reading Anne-Marie Scott for #edcmooc weā€™ve installed FeedWordPress Duplicate Post Filter mainly to try and cope with duplicate bookmarks, but as youā€™ll see from the previous links it doesn’t always work.

We also use Ada FeedWordPress Keyword Filters which means we avoid the issues of finding participant feeds for particular tags or categories. Instead we instruct participants to include the course tag in their post content or title and then filter using OR ocTEL,octel,OCTEL (the filter is case-sensitive hence the variations)

  image

Profile

Default wordpress profile pageA fortunate decision we made was to include a discussion space within the ocTEL site. For this we used the bbPress forum plugin. The benefit or using this was that we automatically had a template for participant profile pages, instead of the less user friendly default WordPress page (shown right). Originally we hoped to use the Theme My Login Redirection module to redirect users to their profile page on login but it didnā€™t seem 100% reliable.  Instead we added a custom filter to redirect to the profile page. We didnā€™t completely remove the backend admin for subscribers. Instead we opted to hide some of the extra clutter.

Listed/Unlisted

One of the early user requests we got was the ability to update whether they were listed on the public participant list. As there was already a hook to handle the profile updates it was possible to allow users to switch roles.

New fields

Your Profile - OCTELAs well as being able to view any profile (view profile template), users can also edit their details (edit profile template). For the profiles we remove some unwanted fields and add some of our own, which we hook into WordPress.

Registering a blog feed

As part of the profile page we also get users to register their a blog feed, if they have one. Iā€™ve cued up this video clip to show how the process works (you can watch for whole clip to see other profile features). Feed registration is notoriously difficult, feeds arenā€™t always visible, low general awareness of RSS etc. etc. The solution weā€™ve come up with is based on Martha Burtisā€™ Perfecting the Syndicated Blog Sign-Up. The process for doing this is in two parts. On the frontend we attach some jQuery/JavaScript to add some additional functionality to the form fields. When a blog url is entered and a button is clicked an ajax call is made to try auto-detect the RSS feed (the core stolen from Alan Levine). This creates a dropdown list of feed sources which is rendered in the profile edit page.  When the profile_update is triggered as well as updating the listed/unlisted status we add the blog rss feed url to the WordPress Links database (see FeedWordPress Basic Concepts). This is done using a modification of Marthaā€™s make_link function. The rough workflow is get the category for FeedWordPress links and build the link item. If a link hasnā€™t been submitted before (this is recorded in the userā€™s metadata) insert the link using the build in wp_insert_function (to avoid the stripslashes issue Martha talks about in her post this link is updated with a SQL call). If the user has already submitted a link we overwrite the existing one.

Newsletter management

Because we wanted users to be able to manage their newsletter subscription from their profiles and because MailPress handles this separately from user profile data we created a custom link populated by querying the MailPress database.

Individual Course Reader Submissions

Other open courses have employed a number of techniques for capturing thoughts, ideas, activity from off the rss beaten track (the ds106 assignment bank immediate springs to mind). Early on in ocTEL we got a request to add someoneā€™s Storyify to the Course Reader. As this had no RSS feed in the userā€™s profile page we created an individual item submission form.  The form uses the User Submitted Posts plugin. In the end it might have been quicker to code this from scratch because the plugin has a number of settings that have to be configured and custom hooks applied.

If this is something you want to use in your own course activate the plugin and in the settings show:

  • Post URL
  • Post Title
  • Post Content

Use the HTML5 form, donā€™t include JavaScript or targeted loading (we call the form building function in the template). Ignore the category selection for now – Iā€™ll got into how we structured our categories later. Donā€™t worry about the set assigned author. We chose to publish immediately but you might want to moderate new submissions. An important part is the ā€˜Use registered user infoā€™. Make sure you tick:

  • Use registered username for author
  • Use a hidden field for submitted category

In the category ID you need to find the ID of your chosen categories (you could use the Uncategorisedā€™ ID because as part of our custom processing hook we modify/add it)

Some custom processing is required so that posts submitted via this form behave in the same way as content collected by FeedWordPress. This requires adding the meta data used in the Course Reader and modify the behaviour so that the post redirects the user to the source url. For the first part we add an additional category (this is where you could add/remove more) and post meta then change how the permalink works for this post type.

Forums

As mentioned earlier we use the bbPress forum plugin in the course. Originally this was included to allow an alternative discussion space for people who were not big users of other social media channels. Beyond some new templates for profile pages the only other code customisation is the integration of a users WP Favorite Posts. Several bbPress specific add-ons are used to improve functionality listed in the ocTEL recipe card, denoted by bbPress or bbP (one additional plugin recently added is bbPress Pencil Unread). These plugins are mainly used to enable extra functionality for administration, navigation and notification. Within the forum settings (Settings > Forum)  with these plugins enabled gives you some extra control. For the next iteration of this one change weā€™d probably make is flip the threaded reply order to newest first.

MailPress custom theme

A big aspect of our course configuration is the daily newsletter summary of course activity. This is handled by the MailPress plugin. MailPress includes a number of additional add-ons which you can selectively enable (Plugins > MailPress Add-ons). The ones we have on are:

  • Batch_send Mails : Send them in batch mode
  • Bulk_import Users : import from mp users list
  • Connection_sendmail Connection : use Sendmail
  • Import Users : Import/Export mp users from/into files
  • Newsletter Newsletters : for posts
  • Sync_wordpress_user Users : synchronise with WordPress users
  • Tracking_ga Tracking : mails activity to your site with google analytics
  • View_logs Logs (view logs stored in tmp folder generated by MailPress in your browser)

MailPress allows you to theme your mailings in a similar way to WordPress themes. Our theme

octel newsletter [click to enlarge]The newsletter currently contains five sections (links highlight main sections of the code on Github):

  • Course information ā€“ displays any full post made by the course team tagged ā€˜course informationā€™.
  • Recent activity ā€“ is used to summaries new aggregated content from the course reader
  • Forum activity ā€“ currently configured to display the last 5 recent topics and recent replies
  • Participant blogs ā€“ excerpts from participant blogs
  • Bookmarks ā€“ a summary of bookmarks from delicious and diigo tagged ocTEL

So that’s a snapshot of work so far, stay tuned for more developments. If any aspect of this recipe is unclear or you have suggestions for improvements leave a comment ;)

Add a comment

ds106 in[SPIRE]