#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.

  * Usability, Mario needs to work something out for that
    # Design Prototypes in cooperation with Google People (16 August, Mario and back-end backup from all)
    # Discussion on which one is best suited  (6 September, All)
    # Implement the user interface (must be made more detailed after the decision has been made)
  * Testing, Sverre suggesting getting more time for it. Chong Liu's work should help.
  * Javascript refactoring, most likely be assigned to Mario



|| *Short Name* || *Description* || *Schelduled* || *Priority* || *Primary Contributors* ||
||Improve the navigational structure||The current sidebar has grown over the last year to become a huge list. New (realistic) ideas are welcome on how to improve the navigational structure to accommodate for the large functionality we offer.||Discussion Topic||Medium||||
||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||||
||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|| ||