#summary Plan for Q3-Q4 '10
#labels Contents-Skeleton
= 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
    # List displayed when we visit the "Program create" page won't redirect to create program but redirects to create sponsor. This is the code wide problem, not just GHOP.    # Personal customization of subscriptions 
    # Similarly "Create organizations" list, displays programs but redirect fails.
    # Similarly "Accepted Organizations" list, displays the programs which is not correct but should list organizations that are accepted.
    # 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* ||
||Make GradingSurveyGroup available to Hosts||Add the GradingSurveyGroup pages to the menu structure and ensure that Hosts are able to view them correctly.||July 1, 2010||Medium||Lennard de Rijk||
||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|| ||