#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 || 16 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 ||
||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. || TBD || High || TBD ||
|| 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. || TBD || High || TBD ||
|| 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. || TBD || High || TBD ||
|| 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 || TBD || High || TBD ||
||  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. || TBD || High || TBD ||
|| 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.|| TBD || High || TBD ||
||  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. || TBD || High || TBD ||
|| GHOP Testing period || Similar to the GSoC testing period we will run GHOP through its paces publicly during this time. || TBD || High || TBD ||
