atutor.no

Here be links.

Actions, messages and subscriptions in ATutor

Vegard A. Johansen's picture

We get a lot of feedback from our users, and a very clear pattern is that the users wish to be notified of different things that happens in the platform that is of relevance to them.

For instance they love the ability to subscribe to forums, announcements, and messages / inbox (allthough they seldom find out how to subscribe to the last one).

They most often say that they want an e-mail when this and that happens, which would be fine, but I don't think that sending all these e-mails is the best solution, neither the one that scales the best.

An activity / notification feed for ATutor

This has led me to think that we need some kind of activity feed or notification feed in ATutor, as popularized by Facebook and their notifications (you need to be logged in to Facebook to see this page), and Basecamps dashboard or project overview.

Here's a recent screenshot of my latest Facebook notifications:

The "items" (like photo / status / user) and "actions" (comments / likes) would be different in ATutor, and that leads to my questions to Atutor users and developers:

  • What are the items and actions in Atutor that should be included in such a stream?
  • How could we technically and design-wise implement this in ATutor?

We are hiring again, and will thus have two developers available to work on ATutor in the not-so-distant future, and this is one of the things we wish to prioritize. We're willing to do all of this work, get it into core and maintain it, given that we and ATRC agree on how it should be done. And yes, we know that this is a massive task!

Here's my initial thoughts on the two points above, please add your comments in the comment field!

Items and actions in ATutor

First, there are different items and actions depending on your status. Regular students need to see some things, while assistants needs to see other things, depending on their priviledge. The colored things in brackets are links and / or generic terms, comments in italic.

For normal students:

For the communication tools

  • You got a [new message] from [user] (inbox)
  • [User] wrote [new post title] in [forum name]
  • [User] replied to [post title] in [forum title]
  • [announcement title] was posted in [course name]
  • [user] wrote [blog post title] in [blog title]
  • [user] commented on [blog post title] in [blog title]
  • [user] uploaded [file name] in file storage.
  • [user] uploaded a revision of [file name] in file storage
  • [user] commented on [file name] in file storage

For tests and assignments

  • test [test name] is now available.
  • test [test name] closes in 3 (?) days
  • assignment [assignment name] closes in 3 (?) days
  • [certificate name] is ready for download (our module, not yet released)

For content

  • [content title] is now available (given that a release date is set)
  • [forum title] was added (when creating a brand new forum)
  • new [poll name] is relased
  • [FAQ] is updated with [FAQ question]
  • [Links] are updated with [link title]
  • [Reading list] is updated with [resource name]

For courses

  • [course name] is available (given release date is set)
  • [course name] closes in 7 days (given end date is set)

In addition we will need some feed items that are specific for instructors or assistants with a given privilege, like:

  • [user] requested enrollment in [course name]
  • [user] answered [test title]
  • [user] submittet [assignment title]

I have probably forgotten some as well.

How to implement it technically and design-wise

This is the hard part, and I basically have no idea what the best way to start would be. Initially I'm thinking that each module or core function that needs to feed into this notification stream should publish it's own customized RSS file, and that the notification stream function should read and process / sort these after some rules. Some things most of the RSS feeds would need are:

  • Date (always needed for sorting)
  • Item (announcement title, blog post title, forum title, forum post title etc.)
  • Item link (the URL to the item)
  • User name (if needed in the stream)
  • Action type (like "commented" or "posted" / "wrote" or "submitted" or "requested" or "uploaded" etc)
  • Course name
  • More?

The placement is pretty much a given I think, this fits perfectly on a slightly redesigned user start page. Not in it's own sub page though, as I want it up front! We may want to add a feature for admins to turn this off and on.

I also belive the items should be sorted by date, with the most recent items on top. Alternatively it could be sorted by course name, then date.

And I believe we should have a cap on it, so you would at the most see the 20 / 30 / 50 (?) latest items.

Another important thing to think about is how we create the translation terms, as there are many different ways to write messages like this in different languages.

New modules would have to be able to use this so we would need to describe how they can. This should be a part of the module documentation.

How it fits in with the original user feedback

As I started with, our users crave notifications, and they also want them by e-mail. I don't think we should remove the e-mail notifications that are allready in place in ATutor, but you should also be able to get the notification stream in e-mail, I think LinkedIn does this really well:

The user would need the ability to set when this should be sent, like for instance:

  • Daily
  • Weekly
  • Biweekly

Random other thoughts

First of all, ATutor just implemented the Open Social framework as a module. As far as I know it's also the first open source application that has done this - kudos for that!

I don't know the Open Social specs very well, but if this specification can be used to create the other feeds we need that would be really nice! Also, the ATutor Social module allready has an activity feed, and this is a feed I typically would like to include in a more general and site-wide feed.

So, comments are open! What would it take to implement this? What is a realistic time range to get it implemented? What have I missed? Or am I on the wrong track alltogether? :)

Comments

harris's picture

Personally, I think this

Personally, I think this would be an awesome feature for ATutor since it has been asked several times from our users. In OpenSocial, they do have the message interface which is described here: http://code.google.com/apis/opensocial/docs/0.8/reference/#opensocial.Me...

In the current OpenSocial Module, the Activity class handles most of the messages, but it is not generalized enough for you to include all the other messages at the moment (annoucement message, forum messages, test messages, etc).

Oh, and the messages also need to take care of the i18n issue. That's all I can think of now...

Håvard Pedersen's picture

Structuring it

I think this needs to be implemented as at least two layers in order to be as flexible as possible. Described from bottom up:

Notification system

This is really just an event hook that let modules and core publish events. A typical event could consist of:

  • Timestamp.
  • Originating module (or some special sources prefixed with _ like "_core" and "_system").
  • Event type. This is a string identifier, like "newpost" or "submitted".
  • User id (some events might not be connected to a user and would have NULL here)
  • Course id (some events might not be connected to a course and would have NULL here)
  • Other id (test id, certificate id, forum thread id, so on). I think a simple explode()/implode() in PHP should be sufficient, and the module+eventtype would determine what kind of id's are present.
  • URL to the item

This would also allow modules to subscribe to events. So our certification module could subscribe to events identified by module=test and event=submitted in order to update its internal progress reports for involved certificates.

The notification system itself would not need to store the events at all (but I can see where this might be wanted, so it's open for discussion).

Activity notifications

The activity notifications are the visible part of the functionality, and will need to log the events to a database (if the Notification system doesn't). It would basically be a "wildcard subscription" to the notification system and let the user/admin decide for each type of event:

  • Show in user home page (yes/no)
  • Show in public user profile (yes/no)
  • Email immediately (yes/no)
  • Email in weekly summary (yes/no)

"Reply in a thread I've participated in" might be one event, while "Reply in a thread I've SUBSCRIBED to" might be a completely separate event. I think it might be nice if the admin could hide some event, and the users select from the events the admin decides to allow.

The activity notifications part of the code would also be the code responsible for generating internationalized text representations of the event.

It will also be necessary to ignore quite a lot of the events. An event like "student opens up a content page" might be necessary for some module interaction, but it would never (as far as my imagination goes) need to be exposed in the "activity notifications" screens.

harris's picture

Do you have any control

Do you have any control system planned for this as well? So that the users would have control on what to be logged?
Is the notification system served as an interface?

Håvard Pedersen's picture

Control system

My initial thought is a two-level control system. The admin can control some events from the "Activity notifications level" (force a given setting, or let the activity be user-controllable), and those parts left user-controllable can in turn be controlled by the user. This would probably need a quite large administration interface.

But the Notification system needs to be full-on enabled all the time to allow events for modules. Which is why it might be best to not log events on that level, just listen for them and control actions based on them.

Vegard A. Johansen's picture

Re: Do you have any control

Sorry the late reply, we've been out travelling :)

My thoughts on this are that the notification system does not have any interface in itself, as it's mostly the system (with modules) that makes or doesn't make use of it. It needs documentation on how developers can use it, but not an interface.

I'm also thinking that the activity notifications should not have many settings either, atleast not in the first phase. I believe an admin possibility to turn it completely on / off on the start page on an installation is sufficient to start with, fine tuning can come at a later stage if needed.

As for control system, no. We are allready logging test tries, results, which content pages have been seen, and for how long, last logins etc etc. The goal for this feed would not be to log more information about the users, just make the information that is allready there easier available for the user himself!

Also, in order to make this doable within reasonable time we need to prioritize what do first. My goal is to have large parts of this done and implemented in the 1.6.4 release. For that to happen we need a functional, usable and "value adding" feed that can be enabled or disabled by admins for an install, and some initial activity to feed into it.

I'm thinking first forum activity, then test activity, then announcement and message activities. And for our part the certificate activities will also be included.

We also need to have it bug tested for some time, and documented for developers.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

More information about formatting options

Hi, this is the atutor.no blog, where the community can blog about things related to use, development or thoughts concerning the open source LCMS ATutor!

Register or log in to start blogging, or get in touch for any reason!

Recent comments