#summary Plan for Q1-Q2 '10
#labels Featured,Importance-Useful,Phase-Implementation,Contents-Review
= Main Improvements, Features and Fixes for Q1-Q2 '10 =

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.


|| *Short Name* || *Description* || *Schelduled* || *Priority* || *Primary Contributors* ||
|| ~~Complete the Module Overhaul~~ ||The new module system requires significant changes to our datamodels. These changes need to be rolled out using the GAE Task API on the live socghop server.||December 15, 2009||Very High||Sverre Rabbelier and Lennard de Rijk||
||~~Putting Old Programs in Freeze mode~~||Although currently the inactive state is available for a program it does not yet put everything that has to do with the program into a state where the data can no longer be changed. Thought needs to go out to making sure the data is still available but not editable.||December 28, 2009||Very High||Daniel Hans and Lennard de Rijk||
||~~New Organization Application Format~~||Extending the current Survey implementation with a new type of Survey to handle Organization Applications.||January 18, 2010||Very High||Lennard de Rijk||
||~~~Issue 201~~~||Implementing a searchable list that allows the user to fetch more then 1000 entities and sort on any column. Also this list should allow post operations on certain rows of the table.||January 18, 2010||High||Sverre Rabbelier and Mario Ferraro||
||~~Taggable Organizations~~||Add tags to Organizations. At least two different tags are needed, programming language tags and arbitrary tags. The programming language tags might have to be preset or have some form of autocompletion to ensure that organizations fall under the same tag wether they use C++ or c++ as spelling. This also includes adding a page on which the organizations are grouped under their tags.||February 15, 2010||Medium||Daniel Hans||
||~~Finding duplicate accepted proposals using the Task API~~||Currently duplicate finding happens using async HTTP requests, this can now be done using the GAE Task API. This also makes it possible to automatically schedule the duplicate finding task to happen and semi-live update the lists for organizations. So that they can have more direct feedback on their students. (Note that this latter needs to be checked with LH).||February 15, 2009||High||Madhusudan C.S.||
||~~Org Application Processing using Task API~~||The current OrgApplication processing happens using async HTTP requests. Thanks to the introduction of the GAE Task API this can now be done more user friendly :).||February 22, 2010||High||Lennard de Rijk||
||~~Slot Assignment using Task API~~|| The current slot assignment algorithm does not use the GAE Task API, this needs to be rewritten. The slot assignment algorithm helps to determine the amount of slots each organization will get. ||February 22, 2010||High||Sverre Rabbelier||
|| ~~Project Acceptance using Task API~~ || Accepting proposals and turning them into projects required use of the remote API. The Task API will allow us to get rid of using the remote API and allow this to happen with a press of a single button. ||February 22, 2010||High||Sverre Rabbelier||
|| ~~GSoC Testing Period~~ ||As requested by the Organizations we will run the complete GSoC in 2 weeks to gather feedback and see if the system is ready.||February 22, 2010||Very High||Sverre Rabbelier and Lennard de Rijk||
||~~StudentProposal Scoring Improvements~~||Allow the Org admins to lock out mentors from scoring proposals and add a way to directly influence the rank of a StudentProposal on the page that lists all these applications instead of only on the per-proposal page. This last might be achieved by using up/down arrows.||February 22, 2010||Medium||Daniel Hans ||
||~~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||||
||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|| ||
||~~Statistics Module Integration~~||Integrate the statistics module backend to work with the new module system. Also includes integrating the frontends for the hosts and users.|| ||Low||Daniel Hans ||
||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|| ||