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

<wiki:toc max_depth="3" />

= Introduction =

  This document covers detailed explanation of how to use the Task-based work flow, GCI 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 GCI module of Melange, and is in no way a developer manual. If any of you are willing to contribute to GCI 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(PA) ==

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

  * Create/Edit Program Admin profile: TBD
  * Create the GCI program: TBD
  * Edit the GCI 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 GCI).
    * 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 (OA) ==

  An Organization Admin (OA henceforth) is one who creates and manages an Organization under the GCI Program that PA has created. An OA does not have all the rights of a Mentor.  To perform any of the operations mentioned below i.e. to become an OA or to apply as an organization, the basic minimum requirement is to login to http://socghop.appsot.com with your Google account and create a profile by clicking on the "Create profile" link on the sidebar.

  The workflow to apply as a an organization and hence to become an OA
  * Once the Organization application period opens as per the program timeline a link titled "Apply to become an Organization" appears on the sidebar under the Programs menu's specific program for which Organization applications are open.
  * Login to http://socghop.appspot.com with the Google account you previously used to create your profile.
  * Click on the "Apply to become an Organization" link which is mentioned above.
  * Fill up the application and submit. *Note:* This form asks to specify a backup admin for the Organization and this is mandatory. You must specify the Link ID of another person who would like to be the backup admin for your Organization. And to specify the Link ID here in the backup admin field he/she should have already created a profile on http://socghop.appspot.com and that Link ID must be used.
  * Similarly you can submit applications to as many organizations as you would like to be OA of.
  * You can view the list of all the applications you have submitted by clicking on "List My Organization Applications" link under the same program.
  * The PA reviews your application and accepts or rejects it.
  * If your organization is accepted you will get a notification regarding the same.
    * To read the notification click on the "Notifications" link on the sidebar under the Users menu.
    * In the notification message click on the link that leads to a form where you can fill in your Organization profile.
    * Upon that you and the backup admin you had specified when you submitted the application will get a notification which contains the invitation to become an OA for the organization you registered the Organization profile with.
    * Clicking on that link will lead you(same for backup admin as well) to a page where you can accept/reject the invitation to become an OA for that Organization. Upon acceptance you are redirected to a form where you can fill in your OA profile.
    * On the sidebar you will now see a new submenu with your Organization name under the GCI Organizations menu which you can use to manage your Organization's work.
    * You may invite other users to become OAs or Mentors as you
  * However if your application was rejected no notification will be sent to you. But you can anyways find this out by clicking on the "List of participating organizations" link that appears on the sidebar under the same program once the accepted organizations are announced.


== Mentor ==

  A Mentor is one who mentors one or more student for accomplishing GCI 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 GCI 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.


== Task ==

  A task is for students to complete during the program. The status of a task could be any of 'Unapproved', 'Unpublished', 'Open', 'Reopened', 'ClaimRequested', 'Claimed', 'ActionNeeded', 'Closed', 'AwaitingRegistration', 'NeedsWork', 'NeedsReview', 'Invalid'] with a default status of 'Unapproved'.

Following is a typic task flow.
  
  # A Program Admin(PA) of the program first creates Task Difficulty Tags and Task Type Tags to be used in the creation of tasks.
  # A Mentor of an organization suggests a new task/Edit an existing task and waits for approval ('Unapproved').
    # If an Organization Admin (OA) of the organization thinks that the task is not good enough, he/she will delete the task ('Invalid').
    # If an Organization Admin (OA) of the organization thinks that the task is good enough, he/she will approve and publishe the task ('Open').
  # A student claims the task and waits for approval ('ClaimRequested').
    # If an Organization Admin (OA) of the organization or a Mentor of the task thinks that the student is not good enough, he/she will disapproves the claim ('Open').
    # If an Organization Admin (OA) of the organization or a Mentor of the task thinks that the student is good enough, he/she will approves the claim ('Claimed').
  # The student works on the task.
    # If the deadline passes and the student has not submited his/her work, the deadline is automatically extended for another 24 hours ('ActionNeeded').
    # If the student still has not submited his/her work after the extended deadline, the task will be automatically re-opened ('Reopened'). Another iteration then starts from 3 (top flow) except that the same student cannot claim the task again.
    # On the other hand, if the student does submit his/her work before either the original or the extended deadline, it is ready for a mentor of the task to review ('NeedsReview').
  # A mentor of the task reviews the submitted work for the task.
    # If the menor thinks the work is not good enough and looks hopeless, he/she will re-opened the task ('Reopened'). Another iteration then starts from 3 (top flow) except that the same student cannot claim the task again.
    # If the menor thinks the work is not good enough but looks promising, he/she will ask the student to do more work ('NeedsWork'). The mentor changes the deadline of the task and another iteration then starts from 4 (top flow).
    # If the menor thinks the work is good enough, he/she will mark that the student has completed his/her work on this task ('AwaitingRegistration').
  # The student completes his/her Student registration and then task is marked closed ('Closed').