#summary Starter Manual for using GHOP module.
#labels Importance-Useful,Phase-Support,Contents-Draft

<wiki:toc max_depth="3" />

= Introduction =

  This document covers detailed explanation of how to use the Task-based work flow, GHOP module of Melange. These features are available for you to try out at the demo instance running at [http://melange-madhusudancs.appspot.com http://melange-madhusudancs.appspot.com]. It will soon be made available through [http://melange-demo.appspot.com http://melange-demo.appspot.com]


= Details =

  This document is exclusively written for users of the GHOP module of Melange, and is in no way a developer manual. If any of you are willing to contribute to GHOP module in particular, please ping any one of the developers on our IRC channel: #melange @ irc.freenode.net or on our developer mailing list.

  The following document is divided into 5 separate sections, one for each role of Melange.

== Program Admin ==

  A Program Admin(PA henceforth) is one who creates and manages a GHOP Program. He/She has all the rights of an Org Admin and a Mentor.

  * Create/Edit Program Admin profile: TBD
  * Create the GHOP program: TBD
  * Edit the GHOP Program: The PA will have a link on the sidebar under the <Program Name> menu to edit the Program profile. The following are the list of things that PA can set from the Program profile page:
    * Org Admin, Mentor, Student Agreement document link ids.
    * Home page link id
    * Minimum age of the participating student to be enforced and the date as of which this requirement must be met.
    * She can also set the maximum number of tasks that a student can claim simultaneously (1 for GHOP).
    * She can also set Winners and Runners-up per organization.

=== Timeline ===

A PA must set:

  * All the program specific timeline in the edit program timeline link available from the sidebar
  * Org App and all other survey timeline in the *Survey Create/Edit page*. Note Org Admins will not be able to apply as organizations just by setting the Org signup start and end dates in timeline but also be made sure that it is set in the Org App survey.


== Organization Admin ==

  An Organization Admin (OA henceforth) is one who creates and manages an Organization under the GHOP Program that PA has created. An OA does not have all the rights of a Mentor.

== Mentor ==

  A Mentor is one who mentors one or more student for accomplishing GHOP Tasks.

  * Suggest a new task/Edit the task: The deadline for the task cannot exceed 30 days i.e in terms of hours it cannot exceed 720 hours.

== Student ==

  A student is one who can claim a task, work on it, submit his work and win prizes.

  * If student submits no work and the initial deadline passes, the deadline is automatically extended for another 24 hours. This shoots a mail to all the subscribers to the task notifying about the deadline extension. The task of the status is set to ActionNeeded. If the student fails to submit any work in that extended deadline of 24 hours also, the task is automatically re-opened. To learn how to subscribe to the task read the Rules of subscription below.

== Public ==

  Any user. Every such user is differentiated as a logged-in or non-logged-in user.

= General =
== Subscription ==

  * A user is subscribed to a GHOP Task if the star button on the top of the Task public page preceding the task title is a glowing icon and is not subscribed otherwise.
  * He/She can subscribe to the task by clicking on the non-glowing star icon
  * And unsubscribe by clicking on the glowing icon.

Rules of the subscription game:
  * A mentor is automatically subscribed to the task the moment he suggests the task. Assigned mentors are *not* automatically subscribed to the task.
  * An Org Admin is automatically subscribed to the task the moment he creates the task.
  * A student is automatically subscribed to the task the moment he *Requests* to claim the task.
  * All other users must manually subscribe to the task by clicking on the star button.
  * No user is automatically unsubscribed from the task. All the users irrespective of a student who has claimed the task, Org Admin who created the task and mentor who suggested the task should unsubscribe from the task manually.