#summary Plan for Q3-Q4 '10
#labels Contents-Draft
= Main Improvements, Features and Fixes for Q3-Q4 '10 =

*Under Construction, just a copy of Q1-Q2*

This page lists the different tasks that Melange will focus on during the upcoming months. Note that this list is far from complete in terms of other improvements we might make and that not everything on this list (prio medium or lower) might make it into Melange before the next months are over.

To be added to the list, needs to be made more tangible:
  * Testing, Sverre suggesting getting more time for it. Chong Liu's work should help.

|| *Short Name* || *Description* || *Schelduled* || *Priority* || *Primary Contributors* ||
|| Design UI Prototypes || Design and prototype new UI designs for Melange || 31 August || High || Mario Ferraro ||
|| User Interface Discussion || Discussion and choosing of the new interface || 6 September || High || All ||
|| User Interface Implementation|| Implementation of the new user interface. || TBD || High || ||
||Internal User ID as a reference||Currently, we use email address as user ID, but then if that changes we don't have a correct reference to the user anymore and we have to fix things manually. This means to update current user models in the datastore and changing the current calls to getUserForCurrentAccount to work with the ID|| ||Medium||||
|| JavaScript Refactoring || Refactor Melange JavaScripts to their separate module. || TBD || Medium || Mario Ferraro ||
||Per Org URL for Applying||The current StudentApplication uses the student as scope. This gives non-shareable URL’s for organizations to apply on. Unless changing the datamodel to become based around Orgs becomes viable for GSoC10 (a lot of dependencies with access and accepting/rejecting applications), a good solution would also be to introduce a URL that is not user-dependent but Organization dependent.|| ||Low|| ||
||Use HTTPS protocol for certain pages||This means enabling HTTPS for a certain set of pages such as edit pages for roles. See also Issue 445.|| ||Low|| ||
||Enhance Notifications||This includes posting the complete notification in the email sent to the user and perhaps add the possibility to read them using an RSS feed (NewsFeed framework from James Levy)|| ||Low|| ||
||Add Surveys to the Statistics module||The Statistics modules seems like the perfect place to also handle the statistics that can be gathered from the Surveys collected within Melange.|| ||Low|| ||
||Internationalization||The text in Melange has now become quite stable and we do have a large user base within the Asian community. We should look into the possibility of adding and enabling translations. Research might be required into languages that read from right to left.|| ||Low|| ||
||Display changes in StudentProposals||A StudentProposal usually has multiple iterations. A request from the organizations was to make these changes more visible by somehow displaying the history of a proposal (diffs or complete histories are an idea)||GSoC 2010 ||Very Low|| ||

== GHOP ==
|| *Short Name* || *Description* || *Schelduled* || *Priority* || *Primary Contributors* ||
|| GHOP Organization Registration || Check/Fix/Implement the Organization registration for GHOP Organizations, including Org Admin and Mentor invitations. || 14 June || High || Madhusudan ||
|| GHOP Task Quota assignment || Create the page where Program Administrators can see/update the quota for each organization. Does not need to be Task API anymore because the current list can send along the keys, however it does need to scale. || 21 June || High || Madhusudan ||
|| GHOP Task creation by org admins || Allow GHOP Org Admins to create tasks for their own org which can be directly published or stored for later publishing. || 5 July || High || Madhusudan ||
|| GHOP Task suggestion by mentors, all can edit || Allow GHOP Mentors to suggest tasks for their organization and let the Org Admin accept/publish the task, both in bulk and on a per-task basis || 12 July || High || Madhusudan ||
||  GHOP Task workflow || Run the current workflow from the point that a task is published till the completion of a Task. Includes, allowing uploads to be made as part of a WorkSubmission, checking access to make sure that a mentor/org admin can't claim a task and someone who has claimed a task or is a Student can't become a Org Admin/Mentor. || 13 September || High || Madhusudan ||
||  GHOP Task pages || Besides the per-task page there are a few more important pages to be checked/fixed/implemented.  Namely the org home page with a lists of their tasks, a page with all tasks for a single program and a page for listing "My tasks" showing either the ones you have claimed or are mentoring. || 20 September|| High || Madhusudan ||
|| GHOP statistics || Page to gather GHOP Statistics, might make use of the work from Mario and Daniel. Most importantly we need to know who completed what amount of tasks on a overall and per-org basis.|| 27 September || High || Madhusudan ||
|| GHOP Testing period || Similar to the GSoC testing period we will run GHOP through its paces publicly during this time. || 11 October || High || All ||