#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:
  * GHOP, Madhu + Lennie should work on making that more tangible (Task workflow works perfect, just needs some one do test all the possibilities. I am not sure how many of the following enhancements we need to complete in Q3-Q4 but all the bug fixes are must.)
    # Task Queue API implementation for task limit allocation *(Priority - High)*
    # Submission of work: GHOP must be able to accept work submissions from students working on Tasks. Google Appengine 1.3.0+ now supports files of sizes 50MiB. *(Priority - Medium)*
    # jQuery Auto completion to assign mentors for tasks *(Priority - High)*
    # Text editor changes based on Pavel's project for GHOP Task creation/editing page. *(Priority - High)*
    # Prize distribution system. Selection of winners, runners etc automatically. That is calculating the points gained by students etc. *(Priority - Medium)*
    # Bulk uploading of tasks preferably in a CSV file *(Priority - Medium)*
    # Statistics on individual tasks(not the Mario, Daniel type statistics) but stats like how many times a task was claimed, reopened etc *(Priority - Medium)*
    # Daniel and Mario type statistics also :D *(Priority - Medium)*
    # Personal customization of subscriptions *(Priority - Low)*
    # Update mails to mentors, students about a task like remainders about deadlines among other things *(Priority - Low)*
    # Repeatable tasks *(Priority - Low)*
    # Calendar APIs integration from Savitha's project. *(Priority - Low)*
  Bug fixes - *(Priority - High)* for all
    # Merge duplicate code in the getExtraMenus in the GHOP Program.
    # Merge the code of task_type_edit and difficulty_edit and its corresponding templates since there is a lot of duplicate code.
    # Fix the problem with InviteAcceptRedirect URLs. It doesn't redirect to correct URL.
  * 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|| ||