#summary Plan for Q3-Q4 '10
#labels Contents-Review,Importance-Useful,Phase-Implementation
= 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.|| 19 July (Depends on design) ||Low|| Daniel Hans ||
||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* || *Status* || *Duration* || *Schelduled* || *Priority* || *Primary Contributors* ||
||~~ GHOP Organization Registration ~~|| Check/Fix/Implement the Organization registration for GHOP Organizations, including Org Admin and Mentor invitations. || Complete || 1 week || 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. || To be started || 2 weeks || 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. || Complete || 2 weeks || 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 || Complete || 1 week || 12 July || High || Madhusudan ||
||~~  GHOP Task workflow ~~ (Have tested it and fixed bugs as much as a single person can break, want more help. If anything else is reported will work on it)|| Run the current workflow from the point that a task is published till the completion of a Task. Includes, 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. || Complete || 2 weeks || 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. || Started || 1 week || 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.|| Not started || 2 weeks || 27 September || High || Madhusudan ||
|| ~~GHOP Notifications~~ || http://code.google.com/p/soc/issues/detail?id=921 || Complete || 1 week || 27 September || High || Madhusudan ||
|| GHOP Task work upload || Allowing uploads to be made as part of a WorkSubmission || Won't fix for GHOP 2010 || 3 weeks || 21 November || Medium || Madhusudan ||
|| GHOP User Manual - Issue 923 || There is a skeleton [http://code.google.com/p/soc/wiki/GHOPUserManual GHOP User Manual in the wiki]. This needs to include all the details and nuances about how to use GHOP module. || Started - Contributions needed || 2 weeks || 4 October || High || Madhusudan and others ||
|| GHOP Testing period || Similar to the GSoC testing period we will run GHOP through its paces publicly during this time. || Not started || 2 weeks || 11 October || High || All ||