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