#summary Plan for Q1-Q2 '10
#labels Importance-Useful,Phase-Implementation,Contents-Complete
= 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|| ||