#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.


== 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.

== Student ==

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

== Public ==

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