#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.
    # Task create Page says: "Please use this form to *edit* the Task." which is a bug and must be fixed.
    # Fix the problem with InviteAcceptRedirect URLs. It doesn't redirect to correct URL.
    # Assign Task Quota limit is publicly viewable. Must be fixed for Program Admin only.

  * 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|| ||