What Is The Best Way To Achieve This - Experts Needed

Hi, i am looking for some feedback on my user set up / method below… i am not looking for any help on coding, just some knowledge / wisdom on how you would tackle / approach this function / task:

I am creating an e-learning website that allows people to buy Education Courses for other people (college friends etc…). Receivers of these Courses have to sign into the website to complete various tutorials each day. A live activity feed is on the home page of the site and it shows the following events:

  • $buyer has bought a $course_name for $receiver
  • $receiver has just completed tutorial 1 of $course_name
  • $receiver has just completed $course_name
  • etc

That is the main function of my site and how it will operate… i know some of you probably think it is a crazy idea, however please do not let that influence your help on the below

For Your Information

  • a buyer is a person who buys a Course for another user
  • a receiver is a person who receives a Course from another user
  • many people can buy one specific person (receiver) many different Courses - hence a receiver might have many Courses to complete
  • one specific person (buyer) can buy many Courses for many people - hence a buyer might have bought many Courses
  • a buyer might also be a receiver on the system as they might have bought a course for someone and someone else might have bought a course for them

Here my method… i greatly appreciate any help / feedback you might be able to give me on the below, thanks…

User Accounts

The site will visualise and treat both Buyers and Receivers the same… as just a general “user”, regardless of their role (buying, receiving or both), so:

1 - you must create an account and log in, in order to buy a course for a receiver
2 - you must create an account and log in, in order to complete a course
3 - when a user creates an account, they must activate their account by clicking an activation link that will be emailed to them once they complete the new user form
4 - when a user (buyer or receiver) logs in they will land on the “My Courses” page… which will have 2 tabs, Received Courses and Purchased Courses
5 - a user has 4 different statuses (WAITING, PENDING, ACTIVE, CLOSED) - i’ll explain these in just a moment

When the buyer logs in and buys a course for a receiver, the system checks to see if the account (receiver emai)l exists in the database and the status of that user.

When a buyer buys a course for a receiver, and the receiver account (email) does not exist, the receivers account will actually be created at this stage but the status will be set to WAITING. An email will be automatically sent to the receiver notifying them that a course was purchased for them, and to click on the following link to create their account… they will be brought to the new account page and their email address will be automatically in the email field. As soon as they complete the form, their status will change to PENDING and an activation link will be emailed to them… as soon as they click the activation link, their status will change to ACTIVE, where at this stage they will be able to log in and access their account.

So, their is 2 ways that an account can be created:
1 - using the create account form
2 - when a buyer buys a course for a receiver (and an email is sent to the receiver to complete their account)

The system checks to see if the account (email) already exists and the account status on both of the above processes and determines the course of action to take based on the status

WAITING: user account was created because a buyer bought a receiver a mission and the receiver didn’t already have an account
PENDING: user has created an account (1 – to buy a project for someone… 2 – to complete a project that was bought for them) but has not activated their account
ACTIVE: user has activated their account by clicking on the activation link which was emailed to them
CLOSED: user has closed their account (unlikely, but required for privacy and terms and conditions purposes)

Thanks for reading all of the above… can anyone see any flaws in the above method…

Two states you should consider:
EXPIRED: The receiver never completed the form.
REJECTED: The received didn’t want the course.

Both should create a refund to the buyer, in one form or another.

Also, you should remember to make it possible for the buyer to buy a course for himself. Even if this is fairly unlikely (depending on your business model), it should be very easy to implement, and there’s no reason to miss a sale.

Thanks for your feedback… i had both of those statuses but then i moved them to the actual course status… as these belong to the course and not the user… as the user might have 2 or more courses, so if one expires or is rejected, this only affects the status of that actual course and not the user… the user can buy for himself… they will be buying for a user that has an ACTIVE status as they must be an active user to log in and buy a task in the first place… thanks again for your input… can you see any flaws in my method…

I suggest you use an existing content management system to do this rather than try to develop it all from scratch. Drupal would be ideal for a community website like. You can customize the page that the user sees once he logs in to your drupal site. The ecommerce bits can be added using existing shopping cart modules, of which there are many, or by creating your own custom module. Because you already have a well tested and secure membership system built into the drupal core and a lot of the rest can be accomplished via existing modules, your workload will be reduced.

Another option is wordpress but you’ll have less flexibility with it. The upside is that its more user friendly.

There are also opensource e-learning CMS like moodle available. Checkout opensourcecms.com for demos.

Hi, thanks for your feedback… i have to develop it from the start as there is a lot of other functionality within the site that cannot be accomplished with an off the shelf package… so i need to develop it from scratch