diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
index 0000000..fb593c8
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,1859 @@
+# Changelog for 0-7-20100404
+
+  * Allow name attributes (Gilles Bedel)
+  * Disable converting html/xml quotes elements to their real equivalent (Matthew Wilkes)
+  * Add testcase for issue 838 (on Google Code) (Matthew Wilkes)
+  * Add failing test for preserving anchors (Sverre Rabbelier)
+  * HtmlCleaner: add test for XSS attack (Sverre Rabbelier)
+
+# Changelog for 0-7-20100402
+
+  * Patch up the Html Sanitizer some more (Matthew Wilkes)
+  * Add failing test case for cleaner (Sverre Rabbelier)
+  * Fix tests since new getSidebar in core (Sverre Rabbelier)
+  * Pre-load stats.py with GSoC classes (Sverre Rabbelier)
+  * Spelling error fixed in student proposal model. (Daniel Hans)
+  * Fixed wrong redirect in "New review" message for StudentProposals. (Lennard de Rijk)
+  * On creation of a student entity make sure its status is active. (Lennard de Rijk)
+
+# Changelog for 0-7-20100331
+
+  * Add disable\_tinymce preference (Sverre Rabbelier)
+  * Edited the student role management page to be more verbose. (Lennard de Rijk)
+  * Actually refresh list data from server when requested. (Mario Ferraro)
+
+# Changelog for 0-7-20100330
+
+  * Fix html cleaning bugs (Matthew Wilkes)
+  * Do not use jLinq to sort if there is no data in list. (Mario Ferraro)
+
+# Changelog for 0-7-20100329
+
+  * Removed wrap string from the paranoid filters to fix doubling of line endings. (Lennard)
+  * Trigger reload grid after fetch of each batch of data. (Mario Ferraro)
+  * Fixed the "I am willing to mentor this student" button on the review page. (Lennard de Rijk)
+  * Simplified if statement for showing Register as student link. (Lennard de Rijk)
+  * Register as a student link now showing if you are not signed in. (Lennard de Rijk)
+
+# Changelog for 0-7-20100328
+
+  * Pretty-print request status (Sverre Rabbelier)
+  * Refactoring of list code. (Mario Ferraro)
+  * Move contributor template to the bottom of the org public page (Sverre Rabbelier)
+  * Edited help text for link id on edit User Profile page. (Lennard de Rijk)
+
+# Changelog for 0-7-20100322
+
+  * Properly render safe urls (Sverre Rabbelier)
+
+# Changelog for 0-7-20100321
+
+  * fix list of list using the wrong params (Sverre Rabbelier)
+  * profiler: data being removed from memcache is not an error (Sverre Rabbelier)
+  * Group menu now includes short name of scope if applicable. (Lennard de Rijk)
+  * Updated ListProposals page name to include program short name. (Lennard de Rijk)
+  * Now properly 404'ing on a role's manage page when no role is found. (Lennard de Rijk)
+  * Inactive group menus are now collapsed by default. (Lennard de Rijk)
+  * The process request page now has some additional help information. (Lennard de Rijk)
+  * Orgs that have not completed their profile yet are shown at the bottom. (Lennard)
+
+# Changelog for 0-7-20100317
+
+  * On student proposal review form mentor is preselected in admin options. (Daniel Hans)
+  * Updated the Accepted Organization message for GSoC2010. (Lennard de Rijk)
+  * Adds a stubout for select method in View (Madhusudan.C.S)
+  * Merged with Madhusudan. (Daniel Hans)
+  * Fix the access type for suggest task to suggest\_task. (Madhusudan.C.S)
+  * Change the dates in fixtures for tests to be set from today's date. (Madhusudan.C.S)
+  * Summary of scores does not display zero scores. (Daniel Hans)
+  * Group model now also contains two lines for street addresses. (Lennard de Rijk)
+  * Added recipient name and one extra line for addresses to roles. (Lennard de Rijk)
+  * Don't escape fields with no data, to prevent shown "None" in lists. (Lennard)
+  * Add version and timestamp to ProfileData (Sverre Rabbelier)
+  * Make ProfileData key based (Sverre Rabbelier)
+  * Pass filter to base.list in assignSlots (Sverre Rabbelier)
+  * Remove debug logging from profiling.storage (Sverre Rabbelier)
+  * Repeat the task only before the accepted student projects are announced. (Madhusudan.C.S)
+  * Fix typo which passed wrong parameters to redirect\_fun. (Madhusudan.C.S)
+  * The accepted org app lists on the participating orgs now hides itself. (Lennard)
+  * Max bucket size is 20 (Sverre Rabbelier)
+
+# Changelog for 0-7-20100313
+
+  * Move view related code to viewer module and persist profiles (Sverre Rabbelier)
+  * Add license and authors to ppstats module (Sverre Rabbelier)
+  * Add a storage class for ProfileData (Sverre Rabbelier)
+  * Add a new queue for the profiler (Sverre Rabbelier)
+  * Fix has\_profiler method and add missing parens (Sverre Rabbelier)
+  * Integerate app\_profiler with Melange (Sverre Rabbelier)
+  * Fix sidebar caching (Sverre Rabbelier)
+  * Add check for &#34; which is another numerical entity for ". (Mario Ferraro)
+  * Fix handling of " and &quot; on CSV exports. (Mario Ferraro)
+
+# Changelog for 0-7-20100312
+
+  * Extend the overview list for OrgApps to include the questions and answers. (Lennard)
+  * Add temporary placeholder text before list creation. (Mario Ferraro)
+  * Placeholder text for lists if Javascript is disabled. (Mario Ferraro)
+  * Fix SurveyRecord forms not showing questions but question ID's. (Lennard de Rijk)
+  * The search menu is now only shown when a search key is defined. (Lennard de Rijk)
+  * Changed soc.models.logic.site import to a shorter input. (Lennard de Rijk)
+  * Added Leon Palm to AUTHORS. (Leon Palm)
+  * Added CSE search to Melange. (Leon Palm)
+  * Fixed ProjectSurvey Access check to allow for inactive roles. (Lennard de Rijk)
+  * Add antlr and coverage to the pythonpath used by buildout. (Matthew Wilkes)
+  * Add public\_conf\_min\_num option (Sverre Rabbelier)
+  * Fix urlize (Sverre Rabbelier)
+  * Now logging if a selected notification is not found. (Lennard de Rijk)
+  * Removed the Possible mentors field from the list. (Lennard de Rijk)
+  * Updated StudentProposal mail for GSoC2010. (Lennard de Rijk)
+  * Fix prefetchField to not die on unset reference (Sverre Rabbelier)
+  * Fixed missing error message in GSoC access module. (Lennard de Rijk)
+
+# Changelog for 0-7-20100308
+
+  * Raise default entity fetch limit to 150 (Sverre Rabbelier)
+  * Prefetch all fields accessed in public\_field\_extra (Sverre Rabbelier)
+  * Convert list field prefetchign to the new list system (Sverre Rabbelier)
+  * Split getListConfiguration off from getListData (Sverre Rabbelier)
+  * Fetch only duplicates that are known to have duplicate proposals. (Madhusudan.C.S)
+  * Fix the url for student proposals in duplicates list. (Madhusudan.C.S)
+  * Fix confirmation dialogs on the StudentProposal Review page. (Mario Ferraro)
+  * Moved prefix code to own helper module and use it for Documents as well. (Lennard)
+  * Removed the add argument for adjustPossibleMentors. (Lennard de Rijk)
+  * Marking a StudentProposal as ineligble is now a POST operation. (Lennard de Rijk)
+  * The "want to mentor buttons" on the StudentProposal page are now POST. (Lennard)
+  * Change the subscription button to work on a POST request basis. (Lennard de Rijk)
+  * Subscribe button on StudentProposal page is now a single button. (Lennard de Rijk)
+  * Removed several unused entries from the GSoCTimeline model. (Lennard de Rijk)
+  * Removed reviewAfterDeadline from StudentProposal. (Lennard)
+  * Show tooltips when hovering over a checkbox. (Mario Ferraro)
+  * Middle click and CTRL+Left click now opens list items in a new tab. (Mario Ferraro)
+  * Generalize enable/disable buttons logic to make it work onSelectAll. (Mario Ferraro)
+  * Fixes the selection list not showing a cickable ideas URL and tags. (Lennard)
+
+# Changelog for 0-7-20100307
+
+  * Fixed wrong redirect being shown on the ProjectSurvey list on Manage page. (Lennard)
+  * Fixed the amount of slots not being shown on the listProposals page. (Lennard de Rijk)
+  * Reduce the query limit so we perform more but smaller ones. (Lennard de Rijk)
+
+# Changelog for 0-7-20100306
+
+  * Removed unused list\_heading and list\_row entries for Core and GSoC modules. (Lennard)
+  * Survey Results view now uses the right list model to display the Records. (Lennard)
+  * Fixed redirects for reminder emails to work with module system. (Lennard de Rijk)
+  * Survey list view now passes along the correct filter and any other kwargs. (Lennard)
+  * Fix the Survey viewResults view to properly filter on records. (Lennard de Rijk)
+  * Changed Survey View list to not ignore filter keyarg when it is given. (Lennard)
+  * Close of the Survey Results view since the new lists have made it borked. (Lennard)
+  * Fix imports for several tasks related to surveys. (Lennard de Rijk)
+  * ?_field\_hidden now hides the fields defined in ?_field\_keys by default. (Lennard)
+  * Pass on the fields to self.list (Sverre Rabbelier)
+  * Give the right entity to getTakeProjectSurveyRedirect (Sverre Rabbelier)
+  * Don't crash if there are no records yet (Sverre Rabbelier)
+  * Use document prefix to query for surveys to be shown in a Program menu. (Lennard)
+  * Add hidden fields back to student proposals (Sverre Rabbelier)
+  * Add public\_field\_hidden to make it easy to add hidden fields (Sverre Rabbelier)
+  * Optionally turn off closure by passing -c to build.sh (Sverre Rabbelier)
+  * Fixed the Home link not showing up for all groups in their menu. (Lennard de Rijk)
+  * Fixed Student listProjects view to pass the access check properly. (Lennard de Rijk)
+  * Teach gen\_app\_yaml a --override-version argument (Sverre Rabbelier)
+  * (Proposal)Reviews no longer display that a score of 0 has been given. (Lennard)
+  * More style fixes to accept\_proposals (Sverre Rabbelier)
+  * Transitions new proposal to pending when a mentor is assigned . (Lennard de Rijk)
+  * Add an non-optional program argument to accept\_proposals (Sverre Rabbelier)
+  * Project Acceptance using Task API (John Westbrook)
+  * Remove the "willing to mentor button" when someone is the assigned mentor. (Lennard)
+  * Fix notifcations sent for new Requests to properly display the information. (Lennard)
+  * The list of Request now shows a verbose name instead of an internal one. (Lennard)
+  * Move list of requests for a user to user\_self to match how Roles does it. (Lennard)
+  * Fix access check for StudentProposal Review and Comment views. (Lennard de Rijk)
+  * Change access\_type to allow where necessary. (Lennard de Rijk)
+  * Added the Task to the URL patterns in the duplicates view. (Madhusudan.C.S)
+  * Added task to calculate all the duplicates within one GSoCProgram. (Madhusudan.C.S)
+  * Fixed reference to non-existing variable in PDS Logic. (Madhusudan.C.S)
+  * Make the recalculate button not show up when task is running. (Madhusudan.C.S)
+  * Added method to delete all ProposalsDuplicates for a program. (Lennard de Rijk)
+  * Added property to check if a PD entity really has duplicates. (Madhusudan.C.S)
+  * Fixed access\_type for list\_orgs in StudentProposal. (Lennard de Rijk)
+  * Check for check role property Request View. (Lennard de Rijk)
+  * Fixed list\_requests view throwing access errors. (Lennard de Rijk)
+  * Clarified help text for link\_id to say alphanumeric characters. (Lennard de Rijk)
+  * Syntax error in access control helper that prevented student signup. (Matthew Wilkes)
+  * Escape all list data (except excluded fields) (Sverre Rabbelier)
+  * Make lists.urlize return a (appropriately escaped) safe link (Sverre Rabbelier)
+  * Add dicts.cleanDict function (Sverre Rabbelier)
+  * Remove no-longer used list\_key\_order (Sverre Rabbelier)
+  * Added list\_participants view to Program. (Lennard de Rijk)
+  * Added allow access type that always allows access. (Lennard de Rijk)
+  * Per default unspecified access checks should bounce. (Lennard de Rijk)
+  * Show list of proposals you are mentoring only if you are a Mentor. (Lennard de Rijk)
+  * Proposal's /review view cannot be accessed after deadline. (Daniel Hans)
+  * Use checkTimelineCondition in retrieveKeyNameFromPath to get KeyName. (Daniel Hans)
+  * retrieveKeyNameFromPath function added to base logic. (Daniel Hans)
+  * CheckIsBeforeEvent function added. (Daniel Hans)
+  * Rows of list of proposals redirect to /comment view after the deadline. (Daniel Hans)
+  * getProposalCommentRedirect added. (Daniel Hans)
+  * Move is\_publicly\_visible field between additional\_info and mentor. (Daniel Hans)
+  * verbose\_name added for is\_publicly\_visible field. (Daniel Hans)
+  * reviews\_dispabled field renamed to scoring\_disabled. (Daniel Hans)
+  * Proposal review form does not show scoring option if it is disabled. (Lennard)
+  * Disable pagination in accepted{Orgs,Projects} lists (Sverre Rabbelier)
+  * Remove old list code from helper.lists (Sverre Rabbelier)
+  * Fix Roles to notify upon new request for module versions of the Mentor role. (Lennard)
+  * Fix typos in Role model help text and clarified the help for phone number. (Lennard)
+  * New boolean field (reviews\_disabled) added to GSoCOrganization model. (Daniel Hans)
+  * Merged with Lennard. (Daniel Hans)
+  * Developers may access /public views for all proposals. (Daniel Hans)
+  * Students may access /public view for their own proposals. (Daniel Hans)
+  * Access chcking for proposal's /public view added. (Daniel Hans)
+  * Access cheking function for proposal's public view added. (Daniel Hans)
+  * Fix Particiaption agreement not appearing for Mentors and Students. (Lennard de Rijk)
+  * New field (is\_publicly\_visible) added to StudentProposal model. (Daniel Hans)
+  * Fix notification list using load instead of loads to load the JSON string. (Lennard)
+  * Fix whitespace in GSoCOrganization view. (Lennard de Rijk)
+  * Fix the Student Proposals list page for Orgs. (Lennard de Rijk)
+  * Remove unused index for slot assignment. (Lennard de Rijk)
+  * Clean up the code to set a proposal to a certain rank. (Lennard de Rijk)
+  * Edited showDuplicates View to work with the new models. (Madhusudan.C.S)
+  * Added as\_proposal\_duplicates template tag for displaying duplicates. (Madhusudan.C.S)
+  * Added Logic for the ProposalDuplicatesStatus model. (Lennard de Rijk)
+  * Added Logic for ProposalDuplicates model. (Madhusudan.C.S)
+  * Added/Edited models for the new duplicates finding system. (Madhusudan.C.S)
+  * Chang index for Organization to GSoCOrganization to match new design. (Madhusudan.C.S)
+  * Fix call to AccessViolation constructor getting the wrong keyarg in Access. (Lennard)
+  * Changed call to simplejson.read() to simplejson.load(). (Lennard de Rijk)
+  * Add example text to link\_id to clarify its purpose. (Lennard de Rijk)
+  * Add tags as a column to the GSoCOrganization public list. (Lennard de Rijk)
+  * Ideas page and home page links now state Click Here. (Lennard de Rijk)
+  * Fix the list\_requests page to only show uncompleted requests. (Lennard)
+  * Fix URL Pattern for process\_request for roles which only have invites. (Lennard)
+  * Fixed organization home page to properly render if no project list is set. (Lennard)
+  * Fix home page document field to properly work for Organizations. (Lennard)
+  * Edit mail templates for OrgAppSurveys to state which org it is for. (Lennard)
+  * Fix roles showing up under the wrong list in user\_self. (Lennard)
+  * Remove forgotten string used for debug. (Mario Ferraro)
+  * /share view removed; its role taken up by /public. (Daniel Hans)
+  * Access checking added for /comment view. (Daniel Hans)
+  * /comment view matched with an URL pattern. (Daniel Hans)
+  * /comment view is able to handle public comments POST request. (Daniel Hans)
+  * Context related to proposal scores is updated by updateScoresContext. (Daniel Hans)
+  * Context related to proposal reviews is updated by updateReviewsContext. (Daniel Hans)
+  * Proper template set for /comment view. (Daniel Hans)
+  * Initial version of updateCommentContext function. (Daniel Hans)
+  * form param moved from function arguments to its body. Also, typo fix. (Daniel Hans)
+  * Template binded with /comment view. (Daniel Hans)
+  * Very initial version of functions which will handle /comment view. (Daniel Hans)
+  * Initial version of /comment template for student proposals added. (Daniel Hans)
+  * Convert cell value to String before operations for CSV exporting. (Mario Ferraro)
+  * edit\_params replaced with take\_params for survey and org\_app\_survey. (Daniel Hans)
+  * save\_message key changed to successful\_take\_message for surveys. (Daniel Hans)
+  * Items on list of proposals for a student have redirect to /private view. (Daniel Hans)
+  * User is notified after submitting org application survey. (Daniel Hans)
+  * Switch from JQuery Growfield plugin to TextAreaExpander plugin. (Mario Ferraro)
+  * Display a "hand" cursor when hovering if row action is present. (Mario Ferraro)
+  * Set correct row index to update cells. (Mario Ferraro)
+  * Comma separator fix. (Daniel Hans)
+  * Add explicit GPLv2 and LGPLv2 option to the licenses (Sverre Rabbelier)
+  * Fix html encoding in surveys (Sverre Rabbelier)
+  * Switch slot allocation JS logic to the new lists. (Mario Ferraro)
+  * Test if row parameter is an empty object before iterating through it. (Mario Ferraro)
+  * Use the proper org\_logic in modules.gsoc.views.models.program (Sverre Rabbelier)
+  * Add link\_id as hidden row (Sverre Rabbelier)
+  * Disable slot assignment row actions (Sverre Rabbelier)
+  * Add index required for slot assignment (Sverre Rabbelier)
+  * Compatibility with lists with pagination disabled. (Mario Ferraro)
+  * Trigger an event when list is loaded. (Mario Ferraro)
+  * Turn off pagination for assignSlots (Sverre Rabbelier)
+  * Convert assignSlots to the new list system (Sverre Rabbelier)
+  * Added license question to the OrgApplication. (Lennard de Rijk)
+  * Fallback to empty array if no row is selected in lists. (Mario Ferraro)
+  * Use multiselect in notification.list (Sverre Rabbelier)
+  * Allow overriding configuration options (Sverre Rabbelier)
+  * Fixed Org App Review Overview page to properly redirect to the Review page. (Lennard)
+  * Fixed redirect on the OrgAppSurvey listSelf page to now work. (Lennard de Rijk)
+  * do not open a new window by default when clicking on an item in a list. (Lennard)
+  * Create CSV respecting the actual order of jQGrid colModel. (Mario Ferraro)
+  * Fix View.select to use the proper params and view (Sverre Rabbelier)
+  * Redirect inactive students to public page on student.listProjects (Sverre Rabbelier)
+  * Get current row data from row number instead from selected row. (Mario Ferraro)
+  * Check if there is a button event for per-entity ops before binding. (Mario Ferraro)
+  * Format of /private page header fixed. (Daniel Hans)
+  * private.html template added. (Daniel Hans)
+  * Comment form is not sent in context in /share view for student proposal. (Daniel Hans)
+  * /public view renamed to /private for student proposals. (Daniel Hans)
+  * Convert organization.home to the new list system (Sverre Rabbelier)
+  * Convert showEditRecordList to the new list system (Sverre Rabbelier)
+  * Remove obsolete method from program (Sverre Rabbelier)
+  * Remove broken function call in ghop and replace with todo (Sverre Rabbelier)
+  * Convert program.acceptedOrgs to the new list system (Sverre Rabbelier)
+  * Tags are cleaned by cleanTagsList. (Daniel Hans)
+  * Org Application Form now shows link to printable Org Admin Agreement. (Lennard)
+  * Make proper use of the show\_in\_roles\_overview setting in Role Views. (Lennard)
+  * Added empty cron.yaml file to indicate we are not running any Cron Jobs. (Lennard)
+  * Autocompletion works for multiple tags in a single input line. (Daniel Hans)
+  * Make the autocomplete script accept additional options. (Mario Ferraro)
+  * Fallback to POST to current url if not specified by the backend. (Mario Ferraro)
+  * Removed usage of a local variable before assignment. (Daniel Hans)
+  * 'share' view for student proposal to displays only its content. (Daniel Hans)
+  * Org admins may post comments and scores to student proposals. (Daniel Hans)
+  * Tags autocompletion works on organization applicant page. (Daniel Hans)
+  * Fix Review OrgaPP entry for Programs to redirect to the correct page. (Lennard)
+  * Tags may be added on organization applicant page. (Daniel Hans)
+  * The buttons on the notifcations page are now moved to the new list. (Lennard de Rijk)
+  * Now properly merging params in Organization View. (Lennard de Rijk)
+  * Tags may be added on create organization page. (Daniel Hans)
+  * scope\_path added as a hidden input on organization create page. (Daniel Hans)
+  * Tags are removed, when an organization is deleted. (Daniel Hans)
+  * Tags, which are not predefined, are auto deleted if there are not used. (Daniel Hans)
+  * Changes made on Tags input field are handled by organization view. (Daniel Hans)
+  * Tags input field on organization edit page. (Daniel Hans)
+  * pickSuggestedTags function binded with org\_tags/pick url. (Daniel Hans)
+  * A list of suggested tags may be sent to a browser in a JSON format. (Daniel Hans)
+  * Update tag list when an organization is updated. (Daniel Hans)
+  * Don't trigger row actions on clicks on checkboxes in multisel tables. (Mario Ferraro)
+  * Redid part of the Accepted Orgs page to at least perform the right query. (Lennard)
+  * Enable global button in org\_app\_survey.reviewOverview (Sverre Rabbelier)
+  * Enable global buttons in the new list system (Sverre Rabbelier)
+  * Convert grading\_survey\_group.viewRecords to the new list system (Sverre Rabbelier)
+  * GHOP Org App Survey Take View now uses checkIsSurveyTakeable check. (Lennard de Rijk)
+  * Fix OrgAdmin view to properly display admin agreement when already accepted. (Lennard)
+  * Fix missing space in OrgAppSurvey Completed message. (Lennard de Rijk)
+  * Fix notification page showing Notifications of all users. (Lennard de Rijk)
+  * Temporarily fixed checkIsSurveyTakable to work with the program prefixes. (Lennard)
+  * Role requests for new groups are now working properly again. (Lennard de Rijk)
+  * Added org\_app\_logic argument to checkOrgAppRecordIfPresent. (Lennard de Rijk)
+  * Finished bulk processing of OrgApplicationRecords from the Overview page. (Lennard)
+  * Make buttons disabled by default if lower bound is >0. (Mario Ferraro)
+  * Rename CSS to today date to reflect recent changes. (Mario Ferraro)
+  * Apply a different color to disabled buttons. (Mario Ferraro)
+  * Send list index along with POST data. (Mario Ferraro)
+  * Send button operation id of the protocol instead of DOM id. (Mario Ferraro)
+  * Use /usr/bin/env python2.5 to support local installs of python (Sverre Rabbelier)
+  * Remove unnecessary brs in template. (Mario Ferraro)
+  * Simple workaround to fix "triple-tooltip" bug. (Mario Ferraro)
+  * Add a simple tag to output a proper JSON string from a Py dict. (Mario Ferraro)
+  * Send id of the button who triggered the action along with POST data. (Mario Ferraro)
+  * Make POST function work with real button bounds. (Mario Ferraro)
+  * Fix adding predefined tags when a new program is created. (Daniel Hans)
+  * onCreate and onUpdate functions may be passed additional attributes. (Daniel Hans)
+  * Student proposals may be reviewed even when the program is frozen. (Daniel Hans)
+  * Corrected the role names used for the Organization sidebar. (Lennard de Rijk)
+  * Fix epic copy/paste fail in org\_admin (Sverre Rabbelier)
+  * Now properly passing along role\_name in Mentor/OrgAdmin logic. (Lennard de Rijk)
+  * Add XSRF token automatically in POST operations for lists buttons. (Mario Ferraro)
+  * Switch autocomplete and tooltip code to external JS files. (Mario Ferraro)
+  * Make autocomplete and tooltip JS packages loadable from base template. (Mario Ferraro)
+  * Externalize tooltip code to a JS package. (Mario Ferraro)
+  * Externalize autocomplete code to a JS package. (Mario Ferraro)
+  * Change null values to empty string when exporting CSV from lists. (Mario Ferraro)
+  * Fixed StudentProject Manage page to query for the proper surveys. (Lennard de Rijk)
+  * Removed OrgApplication models from SeedDB. (Lennard de Rijk)
+  * Redone checkCanReviewGroupApp to work with Organization Applications. (Lennard)
+  * Removed the old Group Application system. (Lennard de Rijk)
+  * Implemented first version of the Org Application overview page for Hosts. (Lennard)
+  * GSoC Program View now uses document\_prefix for Survey menu items. (Lennard de Rijk)
+  * Convert student\_project.manage to the new list system (Sverre Rabbelier)
+  * Improve helper.lists.urlize (Sverre Rabbelier)
+  * Remove duplicate survey fields (Sverre Rabbelier)
+  * Remove leftovers from the old list system (Sverre Rabbelier)
+  * Fix whitespace damadge in notification.html (Sverre Rabbelier)
+  * Remove leftovers from the old list system (Sverre Rabbelier)
+  * Use the new list helper tags where appropriate (Sverre Rabbelier)
+  * Add templatetags.list\_helpers module (Sverre Rabbelier)
+  * Restore custom list description to user\_self.roles (Sverre Rabbelier)
+  * Sort notifications by -created\_on (Sverre Rabbelier)
+  * Make it easy to only show notifications that are (Not) Read (Sverre Rabbelier)
+  * Render 'unread' field as (Not) Read in the notifications list (Sverre Rabbelier)
+  * Redirect to the public page for notifications (Sverre Rabbelier)
+  * Pass the 'order' attribute to getListData in base.list (Sverre Rabbelier)
+  * Add support for per-field properties in the new list system (Sverre Rabbelier)
+  * Cleaned up base.list in the Base View. (Lennard de Rijk)
+  * Finish implementing the new list for the listSelf page in OrgAppSurvey View. (Lennard)
+  * Move toDict to dict Logic so that expando\_base can make use of it too. (Lennard)
+  * Add and enable access check for the Organziation Applicant View. (Lennard de Rijk)
+  * Base url check in lists not to conflict with current query string. (Mario Ferraro)
+  * Enabled the sending of mail when OrgAppRecord is accepted/rejected. (Lennard de Rijk)
+  * Fix call to completeApplication in the OrgApp helper to match new signature. (Lennard)
+  * getApplicantRedirect now uses the new URL scheme. (Lennard de Rijk)
+  * Removed now unused mailing template. (Lennard de Rijk)
+  * Redid the notifications and added mail for accepted/rejected applications. (Lennard)
+  * Added mailing templates for OrgAppSurveys. (Lennard de Rijk)
+  * Fixed access check in OrgAppSurvey view that was missing. (Lennard de Rijk)
+  * Added OrgAppRecord Logic instances that are modules specfic. (Lennard de Rijk)
+  * Organziation applicant view now initializes more form values. (Lennard de Rijk)
+  * On creation of an Org by an applicant, Admin invites are now sent out. (Lennard)
+  * Removed sentMail method from OrgAppRecord logic. (Lennard de Rijk)
+  * OrgAdmin Logic now uses right Organization Logic in onCreate. (Lennard de Rijk)
+  * Remove sending of invites when a new Organization is created. (Lennard de Rijk)
+  * editContext in OrgAdmin View now works with the new OrgApplications. (Lennard)
+  * Removed applicant view from the Group View. (Lennard de Rijk)
+  * Removed now unused access check for the old Group Applications. (Lennard de Rijk)
+  * Create Applicant view for the new OrgAppRecords. (Lennard de Rijk)
+  * Fixed too long lines in Notification view. (Lennard de Rijk)
+  * Fixed imports in Organization logic. (Lennard de Rijk)
+  * Fixed docstring for onCreate in the Organization logic. (Lennard de Rijk)
+  * Removed GroupApp argument from validate\_new\_group in the cleaning module. (Lennard)
+  * RankerRoot entities are now only created for GSoCOrganizations. (Lennard de Rijk)
+  * Disable refresh button in lists. (Mario Ferraro)
+  * Increase timeout for async list fetchings. (Mario Ferraro)
+  * Change null values to strings when exporting CSV from lists. (Mario Ferraro)
+  * Adds a testing framework for GHOP module in Melange. (Madhusudan.C.S)
+  * Convert org\_app-survey to the new list system (Sverre Rabbelier)
+  * out\_of\_band.Error responses are handled in the middleware (Sverre Rabbelier)
+  * Rename list\_self method to listSelf (Sverre Rabbelier)
+  * Removed GHOP Search view because it will be redone using the new lists. (Lennard)
+  * Added review page for OrgAppSurveyRecords. (Lennard de Rijk)
+  * Add TODO's for unconverted lists (Sverre Rabbelier)
+  * Remove leftovers of the old list system (Sverre Rabbelier)
+  * Convert all list\_action redirects to use public\_row\_extra (Sverre Rabbelier)
+  * Convert project\_survey to the new list system (Sverre Rabbelier)
+  * Convert notifications to the new list system (Sverre Rabbelier)
+  * Convert grading\_record to new list system (Sverre Rabbelier)
+  * Convert user\_self to use the new list system (Sverre Rabbelier)
+  * Convert student\_project.manageOverview to the new list system (Sverre Rabbelier)
+  * Convert student\_proposal.listSelf to the new list system (Sverre Rabbelier)
+  * Convert student\_project.withdraw to the new list system (Sverre Rabbelier)
+  * Convert project\_survey.selectProjects to the new list system (Sverre Rabbelier)
+  * Convert showEditRecordList to the new list system (Sverre Rabbelier)
+  * Convert survey.viewResults to the new list system (Sverre Rabbelier)
+  * Convert organization.listPublic to the new list system (Sverre Rabbelier)
+  * Convert group.listRoles to the new list system (Sverre Rabbelier)
+  * Convert group.listRequest to the new list system (Sverre Rabbelier)
+  * Convert views.base.select to the new list system (Sverre Rabbelier)
+  * Convert organization.listProposals to the new list system (Sverre Rabbelier)
+  * Convert student\_proposal.listOrgs to the new list system (Sverre Rabbelier)
+  * Convert organization.applyMentor to the new list system (Sverre Rabbelier)
+  * Convert request.listSelf to the new list system (Sverre Rabbelier)
+  * Convert surveys to the new list system (Sverre Rabbelier)
+  * Convert ghop student\_proposal to the new list system (Sverre Rabbelier)
+  * Convert ghop tasks to the new list system (Sverre Rabbelier)
+  * Convert ghop programs to the new list system (Sverre Rabbelier)
+  * Convert ghop organizations to the new list system (Sverre Rabbelier)
+  * Convert student\_project to the new list system (Sverre Rabbelier)
+  * Convert group applications to the new list system (Sverre Rabbelier)
+  * Convert grading\_project\_survey to the new list system (Sverre Rabbelier)
+  * Convert club\_member to the new list system (Sverre Rabbelier)
+  * Convert club to the new list system (Sverre Rabbelier)
+  * Convert club\_admin to the new list system (Sverre Rabbelier)
+  * Convert site to the new list system (Sverre Rabbelier)
+  * Convert requests to the new list system (Sverre Rabbelier)
+  * Convert program to the new list system (Sverre Rabbelier)
+  * Convert priority groups to the new list system (Sverre Rabbelier)
+  * Convert presence to the new list system (Sverre Rabbelier)
+  * Convert organization to the new list system (Sverre Rabbelier)
+  * Convert job to the new list system (Sverre Rabbelier)
+  * Convert org\_admin to the new list system (Sverre Rabbelier)
+  * Convert groups to the new list system (Sverre Rabbelier)
+  * Convert grading survey group list to the new system (Sverre Rabbelier)
+  * Convert user list to new system (Sverre Rabbelier)
+  * Convert student list to new system (Sverre Rabbelier)
+  * Convert mentor list to new system (Sverre Rabbelier)
+  * Convert host list to new system (Sverre Rabbelier)
+  * Convert document list to new system (Sverre Rabbelier)
+  * Convert datetime fields to strs in toDict (Sverre Rabbelier)
+  * Pass on 'context' argument in base.list (Sverre Rabbelier)
+  * Convert base.list to use the new list system (Sverre Rabbelier)
+  * Change the default edit redirect to the new list system (Sverre Rabbelier)
+  * Add views.helper.lists.urlize (Sverre Rabbelier)
+  * Add getListData and getListGenerator to helper.lists (Sverre Rabbelier)
+  * ease debugging of json responses by setting &plain=1 (Sverre Rabbelier)
+  * Added json(Error)Response to helper.responses (Sverre Rabbelier)
+  * Switch all lists to the new code (Mario Ferraro)
+  * Enable jq\_grid, jlinq, and melangeList js files (Mario Ferraro)
+  * Add jlinq to the build script (Mario Ferraro)
+  * Add the jlinq directory to app.yaml.template (Mario Ferraro)
+  * Add the new melange javascript list code (Mario Ferraro)
+  * Update the JQuery css file (Mario Ferraro)
+  * Add the jqgrid ui images (Mario Ferraro)
+  * Add the jqgrid css files (Mario Ferraro)
+  * Add the jlinq library (Mario Ferraro)
+  * Add the jquery 'jqgrid' plugin (Mario Ferraro)
+
+# Changelog for 0-6-20100201
+
+  * Update text for the agreement field to also say "Printable Page" (Lennard de Rijk)
+  * Remove edits that do not belong in r7cda75. (Lennard de Rijk)
+  * Added missing license statement to two templates. (Lennard de Rijk)
+  * Started with implementation of the bulk processing task for OrgApps. (Lennard de Rijk)
+  * Displays list of accepted organizations when a program is frozen. (Daniel Hans)
+  * Add TODO's to convert student\_project.withdraw to use POST (Sverre Rabbelier)
+  * Fix error that occurs in combination with the xsrf layer. (Lennard de Rijk)
+  * Set default charset to UTF-8. (Lennard de Rijk)
+
+# Changelog for 0-6-20100130
+
+  * Generate proper gsoc\_program survey links (Sverre Rabbelier)
+  * Site home page link now shows for every user by default. (Lennard de Rijk)
+  * Style fix due to comments on ra68b457f37. (Lennard de Rijk)
+  * Make the build script run closure script when running. (Mario Ferraro)
+  * Add Closure running script. (Mario Ferraro)
+  * Add Closure compiler to repository. (Mario Ferraro)
+  * Remove shrinksafe script from repository. (Mario Ferraro)
+  * Remove Shrinksafe binaries from repository. (Mario Ferraro)
+  * Remove Shrinksafe calling in build script. (Mario Ferraro)
+  * Ensure that status is present in dictionary when used in Task Logic. (Lennard de Rijk)
+  * Uncommented lines to hide Group menus. (Lennard de Rijk)
+  * Edited several menu items to stay visible when your role is inactive. (Lennard de Rijk)
+  * Group's menus now collapse by default when the Group is inactive. (Lennard de Rijk)
+  * POST Requests made by AppEngine's Task/CronJob do not need a token. (Lennard de Rijk)
+  * Clarified the use of the index for GSoCMentors. (Lennard de Rijk)
+  * Fix import in GSoC Program Menu to import its own logic. (Lennard de Rijk)
+  * Fix missing import in GHOP Program View. (Marcelo de Sena Lacerda)
+  * Fix attempt to load wrong Access module in OrgAppSurveys. (Lennard de Rijk)
+  * Fix student\_proposal.review when there are no reviews (Sverre Rabbelier)
+  * Add required index (Sverre Rabbelier)
+
+# Changelog for 0-6-20100117
+
+  * Do not show li class=... in the sidebar when there is no heading (Sverre Rabbelier)
+  * don't send out emails in non-local debug mode (Sverre Rabbelier)
+  * Catch OverQuotaErrors in mail\_dispatcher.sendEmail (Sverre Rabbelier)
+  * Generate proper key field pattern for id based entities (Sverre Rabbelier)
+  * Add logic.isIdBased() (Sverre Rabbelier)
+  * Security fixes (adds XSRF protection) (Doug Coker)
+  * Added missing logic property to OrgAppSurvey Logic module. (Lennard de Rijk)
+  * Removed the Club Applications. (Lennard de Rijk)
+  * Enabled the new Organization Application Surveys. (Lennard de Rijk)
+  * Disabled old Organization Application View. (Lennard de Rijk)
+  * Added entry to create/edit OrgAppSurvey in the Program menu. (Lennard de Rijk)
+  * Include OrgAppSurvey entries for GHOP and GSoC programs. (Lennard de Rijk)
+  * Added OrgAppSurvey View to the GSoC and GHOP module. (Lennard de Rijk)
+  * Added OrgApplicationSurvey Logic to the GHOP and GSoC module. (Lennard de Rijk)
+  * Added base view for OrgAppSurveys. (Lennard de Rijk)
+  * Added access checks related to the new OrgApplications. (Lennard de Rijk)
+  * Added OrgAppSurvey redirects. (Lennard de Rijk)
+  * Added templates for OrgApplicationSurveys. (Lennard de Rijk)
+  * Added has\_post boolean to SurveyTakeForm. (Lennard de Rijk)
+  * Added logic methods for OrgApplications. (Lennard de Rijk)
+  * Added new OrgApplication models. (Lennard de Rijk)
+  * Remove not needed get\_by\_scope class method from OrgTag model. (Pawel Solyga)
+  * Only show Developer menu to developers (Sverre Rabbelier)
+  * Google JSApi included only once in base template now. (Mario Ferraro)
+  * Merged with Pawel. (Daniel Hans)
+  * Admin chooses a mentor to a proposal from a drop-down list. (Daniel Hans)
+  * Add get\_by\_scope class method to OrgTag model. (Pawel Solyga)
+  * Remove unused imports and fix style issues. (Pawel Solyga)
+  * Remove unused imports from soc.tasks.updates modules. (Pawel Solyga)
+  * Remove unused imports in mentor and org\_admin soc.views.models modules. (Pawel Solyga)
+  * Rmove unused import in soc.tasks.responses module. (Pawel Solyga)
+  * Fix style issues in soc.models.survey module. (Pawel Solyga)
+  * Merged with Sverre. (Daniel Hans)
+  * Remove unused imports from soc.middleware. (Pawel Solyga)
+  * Fix imports in soc.logic.models.mentor module. (Pawel Solyga)
+  * Review proposal page: added summary to, subscores instead of total score. (Daniel Hans)
+  * Remove unused imports and fix style issues in soc.views.helper.surveys. (Pawel Solyga)
+  * Fix too long lines in soc.views.models.document module. (Pawel Solyga)
+  * Style fixes in soc.views.models.role module. (Pawel Solyga)
+  * Style fixes in soc.views.models.notification module. (Pawel Solyga)
+  * Style fixes in soc.views.models.organization module. (Pawel Solyga)
+  * Fix too long lines in soc.views.models.student\_project module. (Pawel Solyga)
+  * Remove unused imports and fix some style issues in survey modules. (Pawel Solyga)
+  * add logic.base.getFromKeyNameOrID (Sverre Rabbelier)
+  * Fix wrong imports in tasks.grading\_survey\_group (Sverre Rabbelier)
+  * Create and use the Developer menu (Sverre Rabbelier)
+  * Add getDevmenu to sitemap.sidebar (Sverre Rabbelier)
+  * Factor out getItemsFromDefaults (Sverre Rabbelier)
+  * squash with prior (Sverre Rabbelier)
+  * Collapse the 'Developer' menu by default (Sverre Rabbelier)
+  * Add priority\_group and job to the sidebar (Sverre Rabbelier)
+  * Allow grouping under one grouper (Sverre Rabbelier)
+  * Program settings now properly validates the reference fields again. (Lennard de Rijk)
+  * Fixed SurveyRecord property not being passed along to the redirect. (Lennard de Rijk)
+  * Added a method that returns the redirect for submitting a Survey. (Lennard de Rijk)
+  * Descriptions of student proposals scores removed. (Daniel Hans)
+  * Merged with Lennard. (Daniel Hans)
+  * Admin options for proposals separated from 'Score and Review' section. (Daniel Hans)
+  * Added survey argument to SurveyTakeForm. (Lennard de Rijk)
+  * word regexp pattern changed to \w. (Daniel Hans)
+  * Tags entered with capital letters are normalized to lower case. (Daniel Hans)
+  * Added cleaning functions for gsoc module. (Daniel Hans)
+  * Data validation for tag values added. (Daniel Hans)
+  * Predefined tags may be both added or removed. (Daniel Hans)
+  * 'Upload organization tags' -> 'Predefined organization tags'. (Daniel Hans)
+  * Save organization tags defined in program edit view to the datastore. (Daniel Hans)
+  * taggable-mixin directory removed from the repository. (Daniel Hans)
+  * Program edit view contains a widget to upload predefined org tags. (Daniel Hans)
+  * Tag property added to GSoCOrganization model. (Daniel Hans)
+  * New get\_or\_create function added to Tag class. (Daniel Hans)
+  * get\_or\_create function moved to TaskTag class. (Daniel Hans)
+  * str2set cleaning function can have a custom separator. (Daniel Hans)
+  * Fixed several imports regarding scope view and scope logic. (Lennard de Rijk)
+  * Fixed wrong URL mapping in GradingSuveyGroup. (Lennard de Rijk)
+  * Excise jslint. (Dan Bentley)
+  * applyMentor redirect uses new mentor\_url\_name param. (Daniel Hans)
+  * Merged with Lennie. (Daniel Hans)
+  * mentor\_role\_name changed to 'gsoc/mentor' to match the modulus design. (Daniel Hans)
+  * Fixed import in StudentProject Logic. (Lennard de Rijk)
+  * Fixed import for StudentProjects to refer to GSoCOrganization. (Lennard de Rijk)
+  * Fixed missing timeline helper import in GSoC module access method. (Lennard de Rijk)
+  * Fixed StudentProposal imports for Logic and Views. (Lennard de Rijk)
+  * Fixed imports for validate\_student\_proposal in the cleaner. (Lennard de Rijk)
+  * Fixed bug in core Access where the wrong Program Logic was used. (Lennard de Rijk)
+  * Fixed bug in Program View getExtraMenus where wrong Logic was used. (Lennard de Rijk)
+  * Remove unused imports from soc.views.models.request module. (Pawel Solyga)
+
+# Changelog for 0-6-20091214
+
+  * Fixed docstrings for Tasks Repsonses. (Lennard de Rijk)
+  * Some missing gsoc prefixes added to redirect calls for GSoC Surveys. (Daniel Hans)
+  * GSoC specific survey record models moved to gsoc module. (Daniel Hans)
+  * Survey model moved back to the core module. (Daniel Hans)
+  * New survey model files actually added to repository. (Daniel Hans)
+  * Survey models moved to gsoc module. (Daniel Hans)
+  * Move (Grading)Project(Survey)Logic to GSoC module (Sverre Rabbelier)
+  * GradingSurveyGroup model moved to gsoc module (Daniel Hans)
+  * Review model moved to gsoc module (Daniel Hans)
+  * getRankerFor in gsoc student\_proposal logic imports ranker\_root logic. (Daniel Hans)
+  * RankerRoot model moved to gsoc module (Daniel Hans)
+  * ProposalDuplicates model moved to gsoc module (Daniel Hans)
+  * ReviewFollower model moved to gsoc module (Daniel Hans)
+  * Follower model moved to gsoc module (Daniel Hans)
+  * StudentProposal model moved to gsoc module (Daniel Hans)
+  * StudentProject module moved to gsoc module. (Daniel Hans)
+  * Fix for "invalid Maps API key" when showing both map and blog feeds. (Mario Ferraro)
+  * Move grading survey group logic to gsoc module (Sverre Rabbelier)
+  * Move review logic to gsoc module (Sverre Rabbelier)
+  * Move ranker root logic to gsoc module (Sverre Rabbelier)
+  * Move proposal duplicates logic to gsoc module (Sverre Rabbelier)
+  * Move grading record logic to gsoc module (Sverre Rabbelier)
+  * Move review follower logic to gsoc module (Sverre Rabbelier)
+  * Move the follower logic to the gsoc module (Sverre Rabbelier)
+  * Move student proposal logic to gsoc module (Sverre Rabbelier)
+  * Move student project logic to gsoc module (Sverre Rabbelier)
+
+# Changelog for 0-6-20091207
+
+  * Style fix due to comments on rf8ecabdc70. (Lennard de Rijk)
+  * Missing slashes added in program redirects. (Daniel Hans)
+  * getExtraMenuItems for organization moved to gsoc organization view. (Daniel Hans)
+  * Some missing 'gsoc/' prefixes added to GSoC redirects. (Daniel Hans)
+  * Entries common for gsoc and ghop students collected in program view. (Daniel Hans)
+  * getStudentEntries function moved to gsoc program view. (Daniel Hans)
+  * getExtraMenus function in program view refactored. (Daniel Hans)
+  * Two missing imports added to student view in gsoc module. (Daniel Hans)
+  * Legacy request for list\_projects removed from student view. (Daniel Hans)
+  * URL pattern for student projects moved to student view in gsoc module. (Daniel Hans)
+  * listProjects moved to GSoC Student view. (Daniel Hans)
+  * Index to order Organizations by name removed from index.yaml (Daniel Hans)
+  * GSoCOrganization index moved and described in index.yaml (Daniel Hans)
+  * Merged with Lennard. (Daniel Hans)
+  * Capital letters in 'List all Student Projects' link. (Daniel Hans)
+  * Message displayed with list of accepted projects moved to GSOCProgram. (Daniel Hans)
+  * acceptedProjects function moved to GSoCProgram view. (Daniel Hans)
+  * Missing ugettext import added to GSoCProgram view. (Daniel Hans)
+  * Typo fixed in DEF\_PARTICIPATING\_ORGS\_MSG\_FMT message. (Daniel Hans)
+  * GSoC specific messages moved to GSoCProgram view. (Daniel Hans)
+  * List of accepted organization works for gsoc module. (Daniel Hans)
+  * Fixed typo in StudentProposal View getDefaultReviewContext. (Lennard de Rijk)
+
+# Changelog for 0-6-20091205p4
+
+  * Empty content for getTimeDependentEntries in program view. (Daniel Hans)
+  * Fixed missing GSoCMentor logic import for StudentProjects. (Lennard de Rijk)
+  * Removed Student Proposal as a legacy redirect. (Lennard de Rijk)
+  * Updated import in Organization to the new GSoC module. (Lennard de Rijk)
+  * Fixed incorrect mapping of URL to methods in the new GSoC module. (Lennard de Rijk)
+
+# Changelog for 0-6-20091205p3
+
+  * Copy getTimelineEntries to GSoCProgram view use proper logics. (Daniel Hans)
+  * Fixed list project page to no longer require login. (Lennard de Rijk)
+
+# Changelog for 0-6-20091205p2
+
+  * GSoC Program Logic now uses the GSoCTimeline logic as argument. (Lennard de Rijk)
+  * Corrected scope property for timeline in module conversion updater. (Lennard de Rijk)
+  * Removed sidebar entries related to ProjectSurveys. (Lennard de Rijk)
+
+# Changelog for 0-6-20091205p1
+
+  * Add missing imports and use ugettext instead of the lazy variant. (Lennard de Rijk)
+  * Removed the app/gsoc folder. (Lennard de Rijk)
+  * Program Logic now doesn't use any Timeline as default. (Lennard de Rijk)
+  * Timeline view now uses base Timeline. (Lennard de Rijk)
+  * Moved GSoC timeline entries to the correct model. (Lennard de Rijk)
+  * Removed sidebar entries for timeline. (Lennard de Rijk)
+
+# Changelog for 0-6-20091205
+
+  * Move GSoC specific access checks to GSoCAccess (Sverre Rabbelier)
+  * Removed unused import from Core access module. (Lennard de Rijk)
+  * StudentProposal now imports Logic from the GSoC module. (Lennard de Rijk)
+  * Removed Reviewer property from Review model. (Lennard de Rijk)
+  * Moved three access checks related to StudentProjects. (Lennard de Rijk)
+  * Added Program Logic argument to checkIsHostForProgramInScope. (Lennard de Rijk)
+  * Moved two Survey related access checks to the GSoCChecker. (Lennard de Rijk)
+  * Set the default prefix for ProjectSurveys to gsoc\_program. (Lennard de Rijk)
+  * The new Views in the GSoC module now use the GSoCChecker. (Lennard de Rijk)
+  * Added Program and Org specific menu entries to the GSoC module. (Lennard de Rijk)
+  * Removed unneeded menu entries from the SoC Core. (Lennard de Rijk)
+  * Enable the GSoC module (Sverre Rabbelier)
+  * Use new surveys in program.py (Sverre Rabbelier)
+  * Delete old survey views (Sverre Rabbelier)
+  * Disable old survey views (Sverre Rabbelier)
+  * Turn old student project and proposals into redirects (Sverre Rabbelier)
+  * Enable new GSoC views (Sverre Rabbelier)
+  * Add new GSoC views (Sverre Rabbelier)
+  * Replace legacy views with redirects (Sverre Rabbelier)
+  * Merge with Lennard (Sverre Rabbelier)
+  * Add logging.debug(post\_dict) to task decorators (Sverre Rabbelier)
+  * Let the GSoC Views use the new GSoCChecker. (Lennard de Rijk)
+  * Added GSoCChecker module. (Lennard de Rijk)
+  * Fixed wrongly addressed Logic being used in the GSoCProgram View. (Lennard de Rijk)
+
+# Changelog for 0-5-20091205
+
+  * Update Google App Engine from 1.2.7 to 1.2.8 in thirdparty folder. (Sverre Rabbelier)
+  * The StudentProject and StudentProposal update should put Key back. (Lennard de Rijk)
+  * Allow cron jobs and tasks to work in maintenance mode (Sverre Rabbelier)
+  * Hooked up the module\_conversion updates to the start\_update module. (Lennard de Rijk)
+  * Minor typo fixes and whitespace fixes in cleaning module. (Daniel Hans)
+  * Input form values are properly cleared when school\_type is changed. (Daniel Hans)
+  * Fixed issue for cleaning student fields on server side. (Daniel Hans)
+  * Minor typo errors fixed in help texts for Student role. (Daniel Hans)
+  * runGradingSurveyGroupUpdate update includes setting new survey. (Daniel Hans)
+  * Module conversion update for survey models. (Daniel Hans)
+  * Only active students may edit their student projects. (Daniel Hans)
+  * iterative\_task uses pickle module instead of simplejson. (Daniel Hans)
+  * Fixed bug in process\_exception function in soc.middleware module. (Daniel Hans)
+  * Fixed bug in base editGet where suffix must be a String. (Lennard de Rijk)
+  * Fixed typo in access module introduced in rf70ce. (Lennard de Rijk)
+  * Merged checkCanCreateFromRequest and checkIsMyGroupAcceptedRequest. (Lennard de Rijk)
+  * Removed unsused Model properties from Document, Survey and User. (Lennard de Rijk)
+  * Code fixes in GHOP view modules based on pylint output. (Daniel Hans)
+  * Code fixes in GHOP models based on pylint output. (Daniel Hans)
+  * Code fixes in GHOP logic modules based on pylint output. (Daniel Hans)
+  * When a new role is created, fields are populated from previous roles. (Daniel Hans)
+  * Default accepted text will not be shown if one is set by the Program. (Lennard de Rijk)
+  * Switched T-shirt questions order. (Lennard de Rijk)
+  * Adds buttons to notifications list. (Madhusudan.C.S)
+  * Edited version tag to match right format. (Lennard de Rijk)
+
+# Changelog for 0-5-20091121
+
+  * Url pattern fix for tasks handler in app.yaml.template. (Daniel Hans)
+  * Forgotten simplejson import added. (Daniel Hans)
+  * The Document conversion now creates documents with new prefixes. (Lennard de Rijk)
+  * Added gsoc\_program and gsoc\_org prefixes to the Document Model. (Lennard de Rijk)
+  * Added missing Document Prefix to the GSoC Program module. (Lennard de Rijk)
+  * Fixed missing document\_prefix for the GHOP Program module. (Lennard de Rijk)
+  * Added gsoc\_org and gsoc\_program to the Document Rights system. (Lennard de Rijk)
+  * Fixed typo in GHOP core registerRights documentation. (Lennard de Rijk)
+  * Use the proper prefix in 'Create new Document' entry for programs. (Lennard de Rijk)
+  * Added general description of the jslint.sh script. (Mario Ferraro)
+  * Added general description of the shrinksafe.sh script. (Mario Ferraro)
+  * Added general description of the jsdoctoolkit.sh script. (Mario Ferraro)
+  * Bug on GHOP task public view fixed. (Daniel Hans)
+  * Show register link only when a user has AwaitingRegistration task. (Daniel Hans)
+  * Mentors list cleaning optimization. (Daniel Hans)
+  * A person without User profile cannot pass checkStatusForTask checker. (Daniel Hans)
+  * Whitespace fixes in GHOP program view. (Daniel Hans)
+  * Status is not filtered when checking if a user can see his tasks. (Daniel Hans)
+  * GHOP Timeline fixes. (Pawel Solyga)
+  * GMaps related JS changed to use new google namespace. (Mario Ferraro)
+  * Changes in tags are saved to the data store. (Daniel Hans)
+  * Tasks may be deleted by pressing 'Delete' button on the edit view. (Daniel Hans)
+  * Minor fix in tags module. (Daniel Hans)
+  * tags.py module, which contains helper class for tags, is added. (Daniel Hans)
+  * Users who claim or work on tasks may list them without a student role. (Daniel Hans)
+  * Minor linguistic changes to NOTICE file for the taggable module. (Daniel Hans)
+  * NOTICE file added to the taggable module. (Daniel Hans)
+  * Move some functions from TaskTag to Task model. (Daniel Hans)
+  * Docstring fix for delete\_tag function. (Daniel Hans)
+  * 'scope' field moved from TaskTag to the parent class. (Daniel Hans)
+  * TaskArbritraryTag now has auto\_delete set to True by default. (Daniel Hans)
+  * Adds a new property to taggable which automatically deletes an empty tag. (Daniel Hans)
+  * Fixed an error with the task\_history not being loaded. (Lennard de Rijk)
+  * Fixed 'Register as a student' link problem for GHOP program. (Daniel Hans)
+  * Lists of student tasks view does not use pagination. (Daniel Hans)
+  * Accidental module change in settings.py fixed. (Daniel Hans)
+  * List view of all tasks for a GHOP student. (Daniel Hans)
+  * getListContentForData function added to lists helper. (Daniel Hans)
+  * HtmlSanitizer becomes Python 2.6 compatible. (Daniel Hans)
+  * Convert gen\_app\_yaml.py to optparse (Sverre Rabbelier)
+
+# Changelog for 0-5-20091102
+
+  * Minor (mostly stylish and whitespace) fixes in GHOP access.py module. (Daniel Hans)
+  * Multiple choice nonrequired questions now accept empty answers. (Daniel Hans)
+  * checkIsHostForProgram fixes: logic argument has default value. (Daniel Hans)
+  * checkIsHostForProgram function takes a new 'logic' argument. (Daniel Hans)
+  * If checkCanOrgAdminOrMentorEdit does not find a task, redirect to 404. (Daniel Hans)
+  * Script to run JSLint over JS files to check JS code quality. (Mario Ferraro)
+  * JSON2 utilities now loaded by default. (Mario Ferraro)
+  * Module Conversion also changes the RankerRoots. (Lennard de Rijk)
+  * Now showing the message contained in Requests on the correct pages. (Lennard de Rijk)
+  * Process invite page now shows the right Role name in the page name. (Lennard de Rijk)
+  * Request lists now show display name as well as the link id. (Lennard de Rijk)
+  * The work\_submission model's update now reflected in views and logic. (Madhusudan.C.S)
+  * Whitespace fix in settings.py and added missing authors. (Lennard de Rijk)
+  * Changed the access checks in the GSoC module to match the new checks. (Lennard de Rijk)
+  * Removed the now obsolete Request helper module. (Lennard de Rijk)
+  * Edited the necessary access checks for all the Role views. (Lennard de Rijk)
+  * Facilitate the use of the ID-based Requests. (Lennard de Rijk)
+  * Redone the access checks to work with the new Request model. (Lennard de Rijk)
+  * Removed now unused method from Role Logic. (Lennard de Rijk)
+  * Redone the notifications to work with the new Request model. (Lennard de Rijk)
+  * Reworked the redirects to work with the new Request model. (Lennard de Rijk)
+  * Redone the request View to work with the new model. (Lennard de Rijk)
+  * Redone the request templates to work with the new ID-based request. (Lennard de Rijk)
+  * Made Request Logic ID-based and added some helper methods. (Lennard de Rijk)
+  * Redone the Request object to contain a message property. (Lennard de Rijk)
+  * Add a redirectLegacyRequest response (Sverre Rabbelier)
+  * fix typo in reponses.py (Sverre Rabbelier)
+  * GSoC Views (Sverre Rabbelier)
+  * Script to run JSDocToolkit over our JS files. (Mario Ferraro)
+  * JSDocToolkit 2.3.0 added to create documentation for JS files. (Mario Ferraro)
+  * Integration of general Melange JS utilities in base template. (Mario Ferraro)
+  * General JavaScript utilities for melange. (Mario Ferraro)
+  * Once a task has been approved it can no longer be unapproved. (Madhusudan.C.S)
+  * Fixes issue 697 (on Google Code). (Daniel Hans)
+  * Use skipFields method in the expando base logic. (Lennard de Rijk)
+  * Minor typographical errors fixed. (Daniel Hans)
+  * Whitespaces fixed in task view. (Daniel Hans)
+  * When a task is edited, 'modified\_by' field is not cleared any more. (Daniel Hans)
+  * Changed checkCanMakeRequestToGroup to use Logic instance. (Lennard de Rijk)
+  * Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder. (Sverre Rabbelier)
+  * Disabled GHOP module. (Lennard de Rijk)
+  * Added logic paramters to two access checks. (Lennard de Rijk)
+  * Set the Mentors list to the user that is suggesting a Task. (Lennard de Rijk)
+  * Fixed access check and seed for Task Suggest page. (Madhusudan.C.S)
+  * Removed query wether or not the current user was ever an org admin. (Lennard de Rijk)
+  * Fixed the TimelineConversionUpdate to also update the GSoCProgram. (Lennard de Rijk)
+  * Use scope\_path for updating Documents. (Lennard de Rijk)
+  * Renamed runGradingProjectSurveyRecordsUpdate to match style. (Lennard de Rijk)
+  * Fixed error in the runDocumentUpdate. (Lennard de Rijk)
+  * Added GradingSurveyGroup update to the Module Conversion. (Lennard de Rijk)
+  * Fixed bug in StudentProposal update. (Lennard de Rijk)
+  * Fixed module conversion imports. (Lennard de Rijk)
+  * Fix typographical error and changes in status messages for Tasks. (Matthew Wilkes)
+  * Separated the publish and approve button on the Task list page. (Madhusudan.C.S)
+  * Add function for CSV export of survey records for a given survey. (Pawel Solyga)
+  * Add functions for CSV export of organizations and roles. (Pawel Solyga)
+  * Add StudentProposal conversion update (Sverre Rabbelier)
+
+# Changelog for 0-5-20091004
+
+  * Add Timeline conversion update (Sverre Rabbelier)
+  * Add update for Documents (Sverre Rabbelier)
+  * Added update for SurveyRecords (Sverre Rabbelier)
+  * Added update for Surveys, ProjectSurveys and ProjectGradingSurveys. (Lennard de Rijk)
+  * Added StudentProject update to the Module Conversion updates. (Lennard de Rijk)
+  * Added Review module conversion update. (Lennard de Rijk)
+  * Removed obsolete value to unpack in the updateGHOPTask Task. (Lennard de Rijk)
+  * Also pass along the args when running an update. (Lennard de Rijk)
+  * GHOP Comments do not need to be created by a User. (Lennard de Rijk)
+  * Fix the deadline counter to start after Task claim is accepted. (Madhusudan.C.S)
+  * Only set new properties outside the "properties" loop. (Lennard de Rijk)
+  * Add the Student to GSoCStudent conversion. (Lennard de Rijk)
+  * Only store all the entities once in the ModuleConversion. (Lennard de Rijk)
+  * Add OrgAdmin and Mentor to GSoCOrgadmin and GSoCMentor updates. (Lennard de Rijk)
+  * Added the Organization to GSoCOrganzation update. (Lennard de Rijk)
+  * Use the iterative task iterator for the ProgramConversion update. (Lennard de Rijk)
+  * Changed the working of the iterative\_task decorator. (Lennard de Rijk)
+  * Removed order property in the getBatchOfData. (Lennard de Rijk)
+  * Removed the debug logging line from the Task decorator. (Lennard de Rijk)
+  * Made getBatchOfData use start\_key instead of next\_key. (Lennard de Rijk)
+  * Fixed use of wrong dictionary key in Task Decorators. (Lennard de Rijk)
+  * Moved the Tasks decorators to their own module. (Lennard de Rijk)
+  * Make batch size a param to getBatchOfData (Sverre Rabbelier)
+
+# Changelog for 0-5-20090928
+
+  * Merging test back in (Sverre Rabbelier)
+  * Fixed whitespace in base model. (Lennard de Rijk)
+  * Move soc.logic.tasks to soc.tasks.responses (Sverre Rabbelier)
+  * Add task and iterative\_task decorator (Daniel Hans)
+  * Fixed Task public view to always call the update method. (Lennard de Rijk)
+  * Add task and iterative\_task decorator (Daniel Hans)
+  * Fixed GHOP Task Logic's updateEntityProperties. (Lennard de Rijk)
+  * Fixes the problem of GHOP Task editing after it is created. (Madhusudan.C.S)
+  * Style fix in soc.views.models.request module. (Pawel Solyga)
+  * Add missing blank line in soc.modules.gsoc.logic.models.student module. (Pawel Solyga)
+  * Add missing blank line in soc.models.survey\_record module. (Pawel Solyga)
+  * Fix whitespace in pylint disable-msg comment. (Pawel Solyga)
+  * Added first version of the 1st step in the module conversion process. (Lennard de Rijk)
+  * Style fixes in seed\_db module. (Pawel Solyga)
+  * Style fix in soc.views.helper.redirects module. (Pawel Solyga)
+  * Fix indentions in student\_project view module. (Pawel Solyga)
+  * Corrected an import in the student\_school\_type update module. (Lennard de Rijk)
+  * Prevent modification of key fields (Sverre Rabbelier)
+  * Add a script to generate a kml file with all active GSoC participants (Daniel Hans)
+
+# Changelog for 0-5-20090922
+
+  * Renamed timeline entry in GHOP Timeline. (Lennard de Rijk)
+  * Fixed a typo in getRightsChecker docstring (Sverre Rabbelier)
+  * Throw an exception when registering an already registered right (Sverre Rabbelier)
+  * Convert cleaning module to use the new checker in core (Sverre Rabbelier)
+  * Use ',' instead of ':' in function call (Sverre Rabbelier)
+  * Remove ghop related liens from soc\_core callback (Sverre Rabbelier)
+  * Fixed unknown variable in GHOP Access checker. (Lennard de Rijk)
+  * Enable document system for GHOP (Madhusudan.C.S)
+  * Use the new rights code in core (Sverre Rabbelier)
+  * Add document rights registration to core (Sverre Rabbelier)
+  * Move around Core methods into more relevant sections (Sverre Rabbelier)
+  * Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View. (Lennard de Rijk)
+  * Added getOrCreateTaskSubscriptionForTask to TaskSubscription Logic. (Lennard de Rijk)
+  * Added listing of all Accepted GHOPOrganizations to the Program View. (Lennard de Rijk)
+  * Add ret\_list keyword argument to tags\_strings method. (Madhusudan.C.S)
+  * Added index to sort GHOPOrganizations per program by their name. (Madhusudan.C.S)
+  * Added a templatetag for table field to show date in ordinal fashion. (Madhusudan.C.S)
+  * Added missing argument to org\_app View access check. (Lennard de Rijk)
+  * Added GHOP views helper to INSTALLED\_APPS in django settings.py. (Madhusudan.C.S)
+  * Added apply\_mentor view to GHOPOrganization view. (Lennard de Rijk)
+  * Added 2 missing views to the GHOPOrganization View. (Lennard de Rijk)
+  * Fixed error in mentor field cleaning. (Lennard de Rijk)
+  * Removed undefined order argument in GHOP Task View. (Lennard de Rijk)
+  * Bron paper bag fix, should have been part of ref809d10aa. (Lennard de Rijk)
+  * Fixed error occuring when tags list was empty in GHOPProgram edit. (Lennard de Rijk)
+  * Map JS renamed because of latest changes. (Mario Ferraro)
+  * Shrinksafe complains during compression of map JS fixed. (Mario Ferraro)
+  * Shrinksafe script fixed to workaround Linux vs BSD stat packages. (Mario Ferraro)
+  * Added program\_logic parameter to checkCanEditTimeline access check. (Madhusudan.C.S)
+  * Removed slots and apps\_tasks\_limit from extra\_dynaexclude in params. (Madhusudan.C.S)
+  * Added all indexes required for GHOP specific queries. (Madhusudan.C.S)
+  * Added all GHOP specific css properties. (Madhusudan.C.S)
+  * Fixed the Student update to properly find its own URL. (Lennard de Rijk)
+  * Enabled the Student School type updater. (Lennard de Rijk)
+  * Added updater to update the existing Student models. (Madhusudan.C.S)
+  * Moved the Student cleaner to the create form. (Lennard de Rijk)
+  * Changed the TaskRunner to start and run update tasks. (Lennard de Rijk)
+  * Changed the cleaner to deal with the new Student properties. (Madhusudan.C.S)
+  * Added school\_type and grade property to Student model. (Madhusudan.C.S)
+  * Moved the updater to its own module. (Lennard de Rijk)
+  * Added Student create/edit/apply template. (Madhusudan.C.S)
+  * Enabled the GHOPStudent view in the GHOP module. (Lennard de Rijk)
+  * Added GHOPStudent view and access checks. (Madhusudan.C.S)
+
+# Changelog for 0-5-20090914
+
+  * Using the new checkIsMyActiveRole check where necessary. (Lennard de Rijk)
+  * Added checkIsMyActiveRole check to the access module. (Lennard de Rijk)
+  * Make coverage conditional on run.py flag (Sverre Rabbelier)
+  * Manually call start and end in test\_sidebar (Sverre Rabbelier)
+  * Use request.start and end (Sverre Rabbelier)
+  * Add a start and end method to MockRequest (Sverre Rabbelier)
+
+# Changelog for 0-5-20090913
+
+  * Changed the conversion starter system to an update starter system. (Lennard de Rijk)
+  * Use the new optional argument to endRequest in the middleware (Sverre Rabbelier)
+  * Add optional argument to endRequest (Sverre Rabbelier)
+  * Document value store methods (Sverre Rabbelier)
+  * Remove memcache setup from interactive.py script (Sverre Rabbelier)
+  * Add docstring to middleware hooks (Sverre Rabbelier)
+  * Fix copy/paste fail in maintenance middleware docstring (Sverre Rabbelier)
+  * Enable the new middleware and empty the view decorator (Sverre Rabbelier)
+  * Add ValueStoreMiddleware (Sverre Rabbelier)
+  * Add MaintenanceMiddleware (Sverre Rabbelier)
+  * Add ExceptionHandlerMiddleware (Sverre Rabbelier)
+  * Add Middleware directory (Sverre Rabbelier)
+  * Fix broken maintenance mode (Sverre Rabbelier)
+  * Fix 500 when saving /site/edit without email (Sverre Rabbelier)
+  * Remove melange\_queries logging (Sverre Rabbelier)
+  * Moved enabling GHOP to settings.py. (Lennard de Rijk)
+  * Added the GHOP modules to the callback. (Lennard de Rijk)
+  * Use available Rights Checker when rights are already defined. (Madhusudan.C.S)
+  * Several style and import fixes regarding the GHOP module. (Madhusudan.C.S)
+  * Added jquery in-place-edit. (Madhusudan.C.S)
+  * Added GHOP Program View. (Madhusudan.C.S)
+  * Added GHOP Timeline View. (Madhusudan.C.S)
+  * Added GHOP Task Subscription View. (Madhusudan.C.S)
+  * Added GHOP Organization View. (Madhusudan.C.S)
+  * Added GHOP Org Admin View. (Madhusudan.C.S)
+  * Added GHOP Mentor View. (Madhusudan.C.S)
+  * Added GHOP Task View. (Madhusudan.C.S)
+  * Renamed method in GHOP Cleaning to match style guide. (Lennard de Rijk)
+  * Hook up the conversion tasks (Sverre Rabbelier)
+  * Add a view to start conversion tasks (Sverre Rabbelier)
+  * Add templates for conversion task starter (Sverre Rabbelier)
+  * Fix import sort order (Sverre Rabbelier)
+  * Fix miscaching of homepage (Sverre Rabbelier)
+  * Use system.getHostname() everywhere (Sverre Rabbelier)
+  * Add a getHostname to system (Sverre Rabbelier)
+  * Enable local memcache api in interactive console (Sverre Rabbelier)
+  * Scripts to run Shrinksafe during build. (Mario Ferraro)
+  * Added Shrinksafe code to shrink JS files before deploy. (Mario Ferraro)
+
+# Changelog for 0-5-20090906
+
+  * Remove some left overs from recent Google App Engine 1.2.5 update. (Pawel Solyga)
+  * Update Google App Engine from 1.2.3 to 1.2.5 in thirdparty folder. (Pawel Solyga)
+  * Fixed Ivory Coast rename that was introduced in r74f0972f52. (Lennard de Rijk)
+  * Fixed GHOP Cleaning clean\_mentors\_list method. (Lennard de Rijk)
+  * Added cleaning method to validate a list of mentor's link\_ids. (Madhusudan.C.S)
+  * Added cleaning method to convert a list of csv strings into a set. (Madhusudan.C.S)
+  * Added additional methods for TaskTag model. (Madhusudan.C.S)
+  * Updated to r11 (on Google Code) of app\_profiler (Sverre Rabbelier)
+  * Prefetch referenced fields in project listing (Sverre Rabbelier)
+  * Hook up prefetching in the view (helper) (Sverre Rabbelier)
+  * Add support for prefetching fields (Sverre Rabbelier)
+  * only store queries in debug mode (Sverre Rabbelier)
+  * fix typo in memcache.get in base logic (Sverre Rabbelier)
+  * Store queries in memcache (Sverre Rabbelier)
+  * Do not store core in Checker (Sverre Rabbelier)
+  * Add self.in\_request to Core and verify correct state (Sverre Rabbelier)
+  * Convert profiler/start page to html (Sverre Rabbelier)
+  * Use profiler.py to prevent import failures (Sverre Rabbelier)
+  * Set expiration date of static dirs to 1d (Sverre Rabbelier)
+  * GHOPWorkSubmission model is made id\_based and inherits from base. (Madhusudan.C.S)
+  * Added missing blank line to GHOP redirects helper. (Lennard de Rijk)
+  * Added init file to the GHOP views module. (Madhusudan.C.S)
+  * Added list\_info method for use in the GHOP module. (Madhusudan.C.S)
+  * Updated the docstrings for GHOP access methods. (Madhusudan.C.S)
+  * Added access checks for GHOP Module. (Madhusudan.C.S)
+  * Added redirects module for GHOP. (Madhusudan.C.S)
+  * Added templatetag and filter libraries for GHOP. (Madhusudan.C.S)
+  * Set profiler/ to admin only (Sverre Rabbelier)
+  * Use per-request store to store access rights (Sverre Rabbelier)
+  * Use the per-request store to store the context (Sverre Rabbelier)
+  * Hook up the new per-request value storage (Sverre Rabbelier)
+  * Add a new per-request value store to Core (Sverre Rabbelier)
+  * Profiling patch (Sverre Rabbelier)
+  * STATE\_TRANSITIONS dictionary values are changed to strings. (Madhusudan.C.S)
+  * Added templatetags for use in the GHOP module. (Madhusudan.C.S)
+  * Bulk added templates for GHOPOrganization views. (Madhusudan.C.S)
+  * Bulk add templates regarding GHOPProgram Views. (Madhusudan.C.S)
+  * Bulk add templates regarding Task Views. (Madhusudan.C.S)
+  * Added Task for sending out emails to subscribed users about a Comment. (Madhusudan.C.S)
+  * Added method to send out mail about a Task update. (Madhusudan.C.S)
+  * Added template for mails regarding Task updates. (Madhusudan.C.S)
+  * Added several methods to the Task Logic module. (Madhusudan.C.S)
+  * Removed scope and scope\_path properties from GHOPComment. (Madhusudan.C.S)
+  * Added reference to GHOPProgram entity for Work Submissions. (Madhusudan.C.S)
+  * Added GHOP Form cleaning module. (Madhusudan.C.S)
+  * Added GHOPTaskSubscription Logic module. (Madhusudan.C.S)
+  * Added GHOP Student Logic. (Madhusudan.C.S)
+  * Added GAE tasks that are related to updating GHOP Tasks. (Madhusudan.C.S)
+  * Added GHOP Logic helper package. (Madhusudan.C.S)
+  * Added ghop-update queue for dealing with GHOP Task updates. (Madhusudan.C.S)
+  * Added GHOP task package for holding GAE Task related modules. (Madhusudan.C.S)
+  * Removed workflow property from Program model. (Lennard de Rijk)
+  * Moved createTimelineForType to Program Logic. (Madhusudan.C.S)
+  * Added timeline\_logic keyword argument to Program logic. (Lennard de Rijk)
+  * Make the timeline View work directly on the GSoC timeline. (Lennard de Rijk)
+  * Make Sponsor the scope\_logic for the GSoC timeline model. (Lennard de Rijk)
+  * Take the safe way when trying to delete a Sponsor. (Lennard de Rijk)
+  * GHOPComment Logic is made to inherit from base Logic. (Madhusudan.C.S)
+  * Added role\_name params to OA and Mentor Logic. (Madhusudan.C.S)
+  * Added model to keep track subscriptions for GHOPTasks. (Madhusudan.C.S)
+  * JSLint comment moved because of new uncompressed JSLint complains. (Mario Ferraro)
+  * JSLint script file renamed because of better file name style. (Mario Ferraro)
+  * JSLint updated to uncompressed version. (Mario Ferraro)
+  * Renamed all JS files affected by former commit. (Mario Ferraro)
+  * Made all JS code JSLint compliant. (Mario Ferraro)
+  * JSLint added to verify Javascript code quality against guidelines. (Mario Ferraro)
+  * Added SurveyRecordForm for viewing a SurveyRecord. (James Levy)
+  * Make sure the PlainTextWidget converts linebreaks to proper HTML. (Lennard de Rijk)
+
+# Changelog for 0-5-20090825
+
+  * Only create GradingRecords for succeful/failed projects with Surveys. (Lennard de Rijk)
+  * Set default taking access for GradingProjectSurvey to org. (Lennard de Rijk)
+  * Added org taking access to Surveys. (Lennard de Rijk)
+  * Removed reference to GHOPTask and GHOPProgram. (Madhusudan.C.S)
+  * Added GHOPStudent model which inherits from core Student model. (Madhusudan.C.S)
+  * Changed GHOPComment model to inherit from base model. (Madhusudan.C.S)
+  * Changed all status to start with Uppercase letters, made 3 properties required. (Madhusudan.C.S)
+  * Reverting last 4 patches containing GHOP related views. (Madhusudan.C.S)
+  * Added extra menu items per GHOPOrganization. (Madhusudan.C.S)
+  * Added Organization View for GHOP. (Madhusudan.C.S)
+  * Added timeline view for GHOP. (Madhusudan.C.S)
+  * Extended program configuration create/edit views to support GHOP. (Madhusudan C.S)
+  * Change dotted path to the views in URL patterns to a params parameter. (Madhusudan.C.S)
+  * program\_logic is passed as a parameter to three checkers. (Madhusudan.C.S)
+  * Whitespace fix in Base view. (Daniel Hans)
+  * Argument to\_json added to json function in Base view. (Daniel Hans)
+  * Whitespace fix in Program view. (Daniel Hans)
+  * Added redirect for use to manage statistics. (Daniel Hans)
+
+# Changelog for 0-5-20090814p1
+
+  * Fixed call to get QueryForFields due to changes in r0548101922 (on Google Code). (Lennard de Rijk)
+
+# Changelog for 0-5-20090814
+
+  * checkIsAfterEvent takes logic as argument. (Madhusudan.C.S)
+  * Redone the acceptedStudentsExport functionality. (Lennard de Rijk)
+  * Added export for Org Admins and Mentors, but only one per User. (Lennard de Rijk)
+  * Added methods that give the shipping information for a role entity. (Lennard de Rijk)
+  * Changed to\_dict to call all callable values. (Lennard de Rijk)
+  * Fixed Survey Take page which was erroring on undefined variables. (Lennard de Rijk)
+  * Removed unused import from GradingProjectSurvey view. (Lennard de Rijk)
+  * Cleaned up Survey Logic. (Lennard de Rijk)
+  * Added base Model for Expando models. (Lennard de Rijk)
+  * Added intial GSoC logic modules. (Lennard de Rijk)
+  * Added basic GSoC module models. (Lennard de Rijk)
+  * Added inital GSoC module package structure. (Lennard de Rijk)
+  * Set ASCII-only cleaner for first and last name. (Lennard de Rijk)
+  * Changed the parameter from ancestor to ancestors. (Madhusudan.C.S)
+  * updateOrCreateFromFields is made to call updateOrCreateFromKeyName. (Madhusudan C.S.)
+  * Added ancestors property to getQueryForFields. (Madhusudan C.S.)
+  * Completed the proper filter for the GradingProjectSurvey results. (Lennard de Rijk)
+  * Project Survey results view now doesn't list all for plain users. (Lennard de Rijk)
+  * Set the proper filters for the ProjectSurvey results view. (Lennard de Rijk)
+  * Fix copy/paste fail in Survey results view regarding allowed\_to\_read. (Lennard de Rijk)
+  * getResultsViewRecordFields does not need fields argument anymore. (Lennard de Rijk)
+  * Open up the Survey Results view for users. (Lennard de Rijk)
+  * Upgrade jQuery UI to version 1.7. (Mario Ferraro)
+  * Updated several page titles to contain more information. (Lennard de Rijk)
+  * Added hook for the edit view. (Lennard de Rijk)
+  * Redirect to the manage page for projects. (Lennard de Rijk)
+  * Made the specific SurveyTakeForm used in a View part of params. (Lennard de Rijk)
+  * Removed the grade\_choices keyword argument from GradeSurveyTakeForm. (Lennard de Rijk)
+  * Enable the project management page to be visited for projects. (Lennard de Rijk)
+
+# Changelog for 0-5-20090809
+
+  * Added project title and student name to the ProjectSurvey take page. (Lennard de Rijk)
+  * Added capability to update a single GradingRecord on the edit page. (Lennard de Rijk)
+  * Upgrade to jQuery library to 1.3.2 version. (Mario Ferraro)
+  * List of countries is actually alphabetically sorted. (Daniel Hans)
+  * Argument store added to updateEntityProperties. (Daniel Hans)
+  * Assign each country its continent. (Daniel Hans)
+  * Added and enabled new access check for viewing ProjectSurvey records. (Lennard de Rijk)
+  * Added and enabled access check for viewing SurveyRecords. (Lennard de Rijk)
+  * Enabled Org Admins to take Surveys on behalf of their Mentors. (Lennard de Rijk)
+  * The Survey Results view now only list Records of interest. (Lennard de Rijk)
+  * Redone the list\_info function for the Project's manage page. (Lennard de Rijk)
+  * Added redirect to the StudentProject manage page. (Lennard de Rijk)
+  * Whitespace fix in User model. (Lennard de Rijk)
+  * ViewResults for Surveys is now showing all SurveyRecords. (Lennard de Rijk)
+  * Added redirect for viewing SurveyRecords and enabled links. (Lennard de Rijk)
+  * Removed TODO from ProjectSurvey and GradingProjectSurvey views. (Lennard de Rijk)
+  * Added templates for listing SurveyRecords. (James Levy)
+  * The Survey public view now uses the proper page name. (Lennard de Rijk)
+  * Added view for showing Survey Records. (Lennard de Rijk)
+  * Added template for viewing Survey Records. (James Levy)
+  * Use proper id for survey\_description div. (Lennard de Rijk)
+  * Added link for students to resign their profile to the Program menu. (Lennard de Rijk)
+  * Fixed access check for Student Manage/Resign page. (Lennard de Rijk)
+  * Fixed typo in access module comment. (Lennard de Rijk)
+  * Added minimum age property to Program model. (Madhusudan C.S.)
+  * Added some helpful text to the Student Project Withdraw view. (Lennard de Rijk)
+  * Fixed Org home view map to show iff projects have been announced. (Lennard de Rijk)
+
+# Changelog for 0-5-20090802
+
+  * addressed comments by Lennard (Sverre Rabbelier)
+  * add checkIsHostForStudentProject checker (Sverre Rabbelier)
+  * Add parent parameter to accommodate entity groups. (Madhusudan.C.S)
+  * accept constructor parameters in Notification logic. (Madhusudan.C.S)
+  * Fix for copy/paste fail (Sverre Rabbelier)
+  * Add link to withdraw student project page (Sverre Rabbelier)
+  * Allow hosts to withdraw student projects (Sverre Rabbelier)
+  * Add three new redirects (Sverre Rabbelier)
+  * Style fixes in the ghop task model module. (Madhusudan.C.S)
+  * Added optional filters property to deepFetch. (Pawel Solyga)
+  * Organization home page map dimensions now fit the world. (Mario Ferraro)
+  * Role name for mentors now correctly shown in map's infoWindows. (Mario Ferraro)
+  * Enable the map of the connections between mentors and students. (Lennard de Rijk)
+  * Edited the role form to clarify the intention of the checkbox+marker. (Lennard de Rijk)
+  * Renamed main CSS and map JS file due to recent changes. (Lennard de Rijk)
+  * Moved the student to mentor map on the org home page below the list. (Mario Ferraro)
+  * Redone the student to mentor map JS to reflect recent changes. (Mario Ferraro)
+  * Redone the gathering of data for the student to mentor map. (Lennard de Rijk)
+  * Style fixes in StudentProject View. (Lennard de Rijk)
+  * Factored out the "No Record Available" message. (Lennard de Rijk)
+  * Pre-storing the information for setStudentProjectSurveyInfo. (Lennard de Rijk)
+  * Added project information to the Project manage page. (Lennard de Rijk)
+  * Renamed hasAtLeastOneRecord to hasRecord. (Lennard de Rijk)
+  * Added list of Surveys to the Project's manage page. (Lennard de Rijk)
+  * Added getProjectSurveyInfoForProject to list\_info helper. (Lennard de Rijk)
+  * Added new table templates for showing Suryves on the manage page. (Lennard de Rijk)
+  * Added columns to the manage page showing the amount of evaluations. (Lennard de Rijk)
+  * Added hasAtLeastOneRecord method to Survey Logic. (Lennard de Rijk)
+  * Two style fixes. (Lennard de Rijk)
+
+# Changelog for 0-5-20090727
+
+  * Every radio button is now properly shown on a new line. (Lennard de Rijk)
+  * Adds to Melange a tags framework based on taggable-mixin. (Madhusudan C.S)
+  * Send out a Notification upon creation of a new Request entity. (Lennard de Rijk)
+  * Use proper in-line import in Request helper. (Lennard de Rijk)
+  * Added sendNewRequestNotification to the Notifications helper. (Lennard de Rijk)
+  * Added template for a notification upon arrival of a new Request. (Lennard de Rijk)
+  * Tables listing Requests now show the name of the Group. (Lennard de Rijk)
+  * Added missing role\_name to org\_admin Logic. (Lennard de Rijk)
+  * Added getRoleLogicsToNotifyUponNewRequest for use with notifications. (Lennard de Rijk)
+  * Use proper in-line imports in the Notifications helper. (Lennard de Rijk)
+  * fix for issue 653 (on Google Code) by adding wrap=hard attr to textareas for surveys (James Levy)
+  * seed\_db now creates fixture student project entities (James Levy)
+  * Use role\_name where needed for creating/handling requests. (Lennard de Rijk)
+  * Use role\_name to register the Role with the Group View. (Lennard de Rijk)
+  * Use role\_name as key to store the different Role Views. (Lennard de Rijk)
+  * Style fixes in Group View. (Lennard de Rijk)
+  * Added registerRole to Role Logic where all roles are registered. (Lennard de Rijk)
+  * update Sidebar tests to use getCore (Sverre Rabbelier)
+  * register a core for the test modules to use (Sverre Rabbelier)
+  * Fixed line length. (Mario Ferraro)
+  * Another batch of style fixes for Surveys. (Lennard de Rijk)
+  * More style fixes due to code reviews for Surveys. (Lennard de Rijk)
+  * Several style fixes and code cleaning for surveys. (Lennard de Rijk)
+  * Fixed wrong js being referenced by the public Survey template. (James Levy)
+  * Added validation to email fields where needed. (Lennard de Rijk)
+  * Slow down mail tasks some more to ensure they actually complete. (Lennard de Rijk)
+
+# Changelog for 0-5-20090711
+
+  * Fixed typo in ProjectSurvey reminder mail. (Lennard de Rijk)
+  * Fixed the redirect for Survey reminder emails. (Lennard de Rijk)
+  * Fixed typo in GradingProjectSurvey reminder email. (Lennard de Rijk)
+  * Add queue.yaml to build scripts. (Pawel Solyga)
+  * Changed URL pattern for starting sending out survey reminders. (Lennard de Rijk)
+  * Added the Surveys Tasks to the registered URL patterns. (Lennard de Rijk)
+  * Added a view to start sending out a reminder. (Lennard de Rijk)
+  * Added Surveys Tasks module to send reminders. (Lennard de Rijk)
+  * Added empty Tasks package and queue.yaml. (Lennard de Rijk)
+  * Edited help text to be more clear when a Survey has been submitted. (Lennard de Rijk)
+  * Add setOrganizationInSurveyRecords function to stats.py script. (Pawel Solyga)
+  * Add Organization reference property to ProjectSurveyRecord. (Pawel Solyga)
+  * Fix indention and add missing dot in docstring in survey models. (Pawel Solyga)
+  * GradingSurveyGroup now uses DynaForm for its forms. (Lennard de Rijk)
+  * Indention fixes and adding "reference\_class=" in ReferenceProperty. (Pawel Solyga)
+  * Start using buildout to bring in external dependencies. (Augie Fackler)
+  * Added GradingSurveyGroup to the sitemap and sidebar. (Lennard de Rijk)
+  * Completed the Create and Edit view for GradingSurveyGroup. (Daniel Diniz)
+  * Fixed GradingRecord and GradingSurveyRecord Logic. (Lennard de Rijk)
+  * Added denySidebar to several access checks. (Lennard de Rijk)
+  * Added Surveys to sidebar menu. (Lennard de Rijk)
+  * Changed title entry in GradingSurveyGroup's public template to name. (Lennard de Rijk)
+  * Added skeleton view and templates for GradingSurveyGroup. (Lennard de Rijk)
+  * Added name property to GradingSurveyGroup. (Lennard de Rijk)
+  * Added missing blank line to GradingSurveyGroup logic. (Lennard de Rijk)
+  * Added logic for GradingRecord and GradingSurveyGroup. (Lennard de Rijk)
+  * Removed results list from Survey edit. (Daniel Diniz)
+  * Extended tooltip timeout to 10 seconds for all fields. (Mario Ferraro)
+  * Minor stylefix to StudentProject model. (Lennard de Rijk)
+  * Handle a dynamic amount of GradeRecords in StudentProject model. (Lennard de Rijk)
+  * Renamed several files due to recent changes. (Lennard de Rijk)
+  * Style fixing in GradeRecord model (Lennard de Rijk)
+  * Several Survey UI fixes. (Daniel Diniz)
+  * Fixed base template URL to tagged version of the deployed code. (Madhusudan C.S.)
+  * Fixed imports for Survey logic. (Lennard de Rijk)
+  * Added skeleton models for GradingSurveyGroup and Records. (Lennard de Rijk)
+
+# Changelog for 0-5-20090706
+
+  * Ensure that the Grade field data stays in clean\_data. (Lennard de Rijk)
+  * Add missing import to Project Survey view. (Daniel Diniz)
+  * Renamed several files due to recent changes. (Lennard de Rijk)
+  * Now properly escaping JS and converting new lines into br for Tooltips. (Mario Ferraro)
+  * Added ability to add custom tooltips and UI improvements. (Daniel Diniz)
+  * Public Survey template now resembles the take template more closely. (Lennard de Rijk)
+  * Added the possiblitity to add a description to the top of the Survey. (Lennard de Rijk)
+  * Use CSS instead of JS for Survey layout. (James Levy)
+  * Remove the custom propmpt inside textareas and input fields. (Daniel Diniz)
+  * Fix HtmlSanitizer to return cleaned string in proper encoding. (Pawel Solyga)
+  * Added clear:right property to submit button in Survey take form. (James Levy)
+  * Fix button layout on Safari 4.0 for Survey take page. (Mario Ferraro)
+  * Fix comment indention in survey-take javascript file. (Pawel Solyga)
+  * Renamed survey-take-090627.js to survey-take-090705.js. (Lennard de Rijk)
+  * Increased bottom margin on comments for better grouping. (James Levy)
+  * Changed the filter for getting a SurveyRecord for a ProjectSurvey (Lennard de Rijk)
+
+# Changelog for 0-5-20090705p1
+
+  * Ensure that accessViolations for Survey menu items get captured. (Lennard de Rijk)
+
+# Changelog for 0-5-20090705
+
+  * Added Menu items for all three kinds of Surveys to the program menu. (James Levy)
+  * POST data always overwrites survey\_record data. (Daniel Diniz)
+  * Fixes bug when option name contains double quotes. (Mario Ferraro)
+  * Several style fixes due to code reviews. (Lennard de Rijk)
+  * Ensure that long questions and comments are stored as db.Text. (Daniel Diniz)
+  * Style fix in access module. (Lennard de Rijk)
+  * Returned ProjectSurvey create to checkIsUser. (Lennard de Rijk)
+  * Added access checks for taking a Project(Grading)Survey. (Lennard de Rijk)
+  * Brown paper bag fix for using non-existing logic. (Lennard de Rijk)
+  * Fixed basic Survey access check. (Lennard de Rijk)
+  * Fixed broken selection questions from refactoring SurveyForm. (Daniel Diniz)
+  * Fixed showing the correct list of projects. (Lennard de Rijk)
+  * Refactored filter construction. (Lennard de Rijk)
+  * Make sure that radio button questions validate correctly. (Lennard de Rijk)
+  * Added Daniel Diniz and Zachary Voase to the AUTHORS file. (Lennard de Rijk)
+  * Added Daniel Diniz to authors for Grading Project Survey View. (Lennard de Rijk)
+  * Add a grade field to the Grading Project Survey form. (Daniel Diniz)
+  * Survey editing/taking Javascript and CSS fixes. (James Levy)
+  * Remove public role type from SURVEY\_TAKING\_ACCESS in Survey model. (Pawel Solyga)
+  * try to fix the surveys-have-no-scope issue (Sverre Rabbelier)
+  * addressed comments to previous version (Sverre Rabbelier)
+  * return found entity for activity checks (Sverre Rabbelier)
+  * survey access: stylefix and remove public role type (Sverre Rabbelier)
+  * Style fixes in Survey helper. (Lennard de Rijk)
+  * Added getSurveyTakeForm to the Survey view. (Lennard de Rijk)
+  * Only initialize a SurveyTakeForm in take. (Lennard de Rijk)
+  * Split SurveyForm into SurveyTakeForm and SurveyEditForm. (Daniel Diniz)
+  * Do not call takeGet when SurveyForm ValidationError occurs. (Lennard de Rijk)
+  * Several stylefixes due to received reviews. (Lennard de Rijk)
+  * Style fixes in Access module. (Lennard de Rijk)
+  * Style fixes to the GradingProjectSurvey View module. (Lennard de Rijk)
+  * Sub\_merge params for GradingProjectSurvey View. (Lennard de Rijk)
+  * Added rudimentary grade field to GradingProjectSurvey take View. (James Levy)
+  * Ensure that the params from subclasses get merged. (Lennard de Rijk)
+  * Corrected the links to Grading Project Surveys in Program menu. (Lennard de Rijk)
+  * Added missing import to ProjectSurvey View. (Lennard de Rijk)
+  * Fix pick\_multi only returning one answer as maximum. (Daniel Diniz)
+  * Removed getSurveyResponseFromPost from Surveys helper. (Lennard de Rijk)
+  * Renamed survey-edit-090627.js due to recent changes. (Lennard de Rijk)
+  * Form errors when taking a Survey now have the correct context. (Lennard de Rijk)
+  * Fixed Survey Form error giving 505. (Lennard de Rijk)
+  * Surveys can now have required questions. (Daniel Diniz)
+  * Added Survey From Field validation. (Daniel Diniz)
+  * Style fixes and a forgotten parameter in Survey(Record) logic. (Daniel Diniz)
+  * Removed unnecessary variable in ProjectSurvey take method. (Lennard de Rijk)
+  * Overwrite _getSurveyRecordFor in ProjectSurvey view. (Lennard de Rijk)
+  * Added_getSurveyRecordFor method to Survey View. (Lennard de Rijk)
+  * Added default Survey list templates. (Lennard de Rijk)
+  * Enable the ProjectSurvey and GradingProjectSurvey views in the core. (Daniel Diniz)
+  * Implemented taking ProjectSurveys. (Lennard de Rijk)
+  * Edit SurveyRecord model to not make use of different Survey. (Lennard de Rijk)
+  * Made the CSV exporter not rely on the BackReferenceProperty. (Lennard de Rijk)
+  * Added getTakeProjectSurveyRedirect. (Lennard de Rijk)
+  * Added the possibility to change the action Survey take page. (Lennard de Rijk)
+  * Small style fix in Surveys helper. (Lennard de Rijk)
+  * Set required is True for StudentProject reference. (Lennard de Rijk)
+  * Removed obsolete if tag form take template. (Lennard de Rijk)
+  * Added hook methods to takeGet and takePost. (Lennard de Rijk)
+  * Fixed typo in title of Survey Take page. (Lennard de Rijk)
+  * Add a base implementation of takePost. (Lennard de Rijk)
+  * Added getSurveyResponseFromPost method to Surveys Helper. (Lennard de Rijk)
+  * Added updateOrCreateFromFields method to SurveyRecordLogic. (Lennard de Rijk)
+  * Added base class logic for Expando based models. (Lennard de Rijk)
+  * Removed two obsolete/outdated methods in Survey Logic. (Lennard de Rijk)
+  * Removed obsolote method call in Program View. (Lennard de Rijk)
+  * Clean up and other fixes for Survey modules. (Daniel Diniz)
+  * Implemented the takeGet view for Surveys. (Lennard de Rijk)
+  * Fixed multiple typos in Survey tooltips strings. (Lennard de Rijk)
+  * Added skeleton for the take view and its template. (Lennard de Rijk)
+  * Move getMenusForScope to the end of the View class. (Lennard de Rijk)
+  * Changed the Survey public view to give a preview of the Survey. (Lennard de Rijk)
+  * Removed activate grade URL pattern from Survey View. (Lennard de Rijk)
+  * Brown paper bag "without tea" morning typo fix in Survey View. (Lennard de Rijk)
+  * Style fix in Survey views helper. (Lennard de Rijk)
+  * Returned access checks in Survey View to the right state. (Lennard de Rijk)
+  * Fixed too long line in Surveys helper. (Lennard de Rijk)
+  * Solved some merging problems and use the getRecordLogic where needed. (Lennard de Rijk)
+  * Reverted some changes in SurveyLogic. (Lennard de Rijk)
+  * Use an existing logic for showing Survey Results. (Lennard de Rijk)
+  * Merge params from inheriting Survey views. (Lennard de Rijk)
+  * Add more flexibility to the Survey helper. (Lennard de Rijk)
+  * Added getRecordLogic method to SurveyLogic. (Lennard de Rijk)
+  * Removed setting of the scope in the ProjectSurvey init. (Lennard de Rijk)
+  * Added getSurveyForContent method to SurveyLogic. (Lennard de Rijk)
+  * Calling the correct super in Project and Grading Survey Logic. (Lennard de Rijk)
+  * fixed critical errors related to survey subclassing (James Levy)
+  * Add paver script that will replace our current build.sh. (Zachary Voase)
+  * Add checkHasSurveyAccess access check (Sverre Rabbelier)
+  * Removed survey\_kind from Survey model. (Lennard de Rijk)
+  * Set the correct base\_model and scope\_logic for extended Survey logic. (Lennard de Rijk)
+  * Added two missing imports to the Project and Grading Surveys views. (Lennard de Rijk)
+  * Added SurveyContentSchema to improve readability for the survey helper. (Daniel Diniz)
+
+# Changelog for 0-5-20090629
+
+  * Added skeleton view for ProjectSurvey and GradingProjectSurvey. (Lennard de Rijk)
+  * Prepared Survey access controls to deal with multiple logics. (Lennard de Rijk)
+  * Extracted the ProjectSurvey and ProjectGradingSurvey records. (Lennard de Rijk)
+  * Removed unused import from Survey model. (Lennard de Rijk)
+  * Separated two survey types out of the main survey model. (Lennard de Rijk)
+  * Seperated Logic for ProjectSurvey and GradingProject surveys. (Lennard de Rijk)
+  * Start on adding ProjectSurvey and GradingProjectSurvey. (Daniel Diniz)
+  * Added .settings to hgignore. (Lennard de Rijk)
+  * Renamed opening to survey\_start and deadline to survey\_end. (Lennard de Rijk)
+  * Put ResultsLogic in its own Logic module named survey\_record. (Lennard de Rijk)
+  * Removed non-existing import in Survey Logic. (Lennard de Rijk)
+  * Added Survey menu items to the Program menu. (Daniel Diniz)
+  * Added Surveys to the sitemap. (Daniel Diniz)
+  * Added View for Surveys. (James Levy)
+  * Added redirect for use in Surveys. (Daniel Diniz)
+  * Added Access checks for Surveys. (Daniel Diniz)
+  * Added Survey Views Helper for rendering several widgets. (James Levy)
+  * Added logic for Survey and SurveyRecord. (James Levy)
+  * Added SurveyRecordGroup for the use in evaluation surveys. (James Levy)
+  * Added SurveyRecordModel. (James Levy)
+  * Added Survey and SurveyContent model. (James Levy)
+  * Fixed docstring in Document Logic. (Lennard de Rijk)
+  * Renamed css due to previous changes in previous commit. (Lennard de Rijk)
+  * Edited stylesheet for use in Surveys. (Daniel Diniz)
+  * Renamed JavaScript files in templates to match the correct files. (Lennard de Rijk)
+  * Adding JS files for use in Surveys. (Daniel Diniz)
+  * Added templates considering Surveys. (Daniel Diniz)
+  * Renamed jquery.growfield.js to jquery-growfield.js. (Daniel Diniz)
+  * Patch that adds the JS and CSS files for surveys. (Daniel Diniz)
+  * Patch that touches 'upstream' templates, for use in surveys. (Daniel Diniz)
+  * Fixes an issue where the organization home page. (Lennard de Rijk)
+
+# Changelog for 0-5-20090621
+
+  * jQuery Spin plugin updated to version 1.1.1 (Mario Ferraro)
+  * Use build-in django 1.0.x on deployed version of Melange. (Pawel Solyga)
+  * Update GAE to 1.2.3 in thirdparty folder. (Pawel Solyga)
+
+# Changelog for 0-5-20090604
+
+  * Display caught errors on the page itself (Sverre Rabbelier)
+  * Make the maintenance page a hardcoded response (Sverre Rabbelier)
+  * Merge with Pawel's tip. (Lennard de Rijk)
+  * Small indentation fix. (Lennard de Rijk)
+  * Fixed an issue where some access checks would fail. (Lennard de Rijk)
+  * Now showing link to edit the home page document on the home page. (Lennard de Rijk)
+  * Partial fix for displaying mentors and students. (Pawel Solyga)
+  * Comment out GMaps support in Organization home page template. (Pawel Solyga)
+  * Add missing if statement in organization list row template. (Pawel Solyga)
+  * Added link to edit the Document on the Document's public page. (Lennard de Rijk)
+  * Clarified docstring for document read/write access check. (Lennard de Rijk)
+  * Added a link to the website the welcome email. (Lennard de Rijk)
+  * Introduced 'module\_package' key in params dict (Madhusudan.C.S)
+  * Temporary turn off GMaps support until it's fixed. (Pawel Solyga)
+  * Rename soc-090421.css and update base.html template. (Pawel Solyga)
+  * Small changes in #extra\_left, #extra\_right tags in css file. (Pawel Solyga)
+  * Add taggable-mixin and gviz to build script. (Pawel Solyga)
+  * Extend taggable-mixin to support different Tag models. (Pawel Solyga)
+  * Make taggable-mixin tests working by updating GAE path. (Pawel Solyga)
+  * Merge with Pawel's head. (Pawel Solyga)
+  * Add google-visualization-python project to Melange repository. (Pawel Solyga)
+  * Removed unecessary use of %. (Lennard de Rijk)
+  * Changed expected graduation date to be a dynamic dropdown. (Lennard de Rijk)
+  * Added GHOP specific Mentor and Org Admin Models. (Lennard de Rijk)
+  * Add missing init.py file in taggable-mixin module. (Pawel Solyga)
+  * Add taggable-mixin to Melange repository. (Pawel Solyga)
+  * Add some missing docstrings to Seeder classes in seed\_db.py (Pawel Solyga)
+  * Style fixes and pylint: disable-msg comments in different modules. (Pawel Solyga)
+  * Add pylint: disable-msg= where needed in Melange modules. (Pawel Solyga)
+  * Rename bathSize variable to batch\_size in soc.logic.models.base module. (Pawel Solyga)
+  * Style fixes and wrong function call fix. (Pawel Solyga)
+  * Remove unused variable from soc.view.models.cron module. (Pawel Solyga)
+  * Some more pylint fixes in different Melange modules. (Pawel Solyga)
+  * Style and pylint fixes in Melange modules. (Pawel Solyga)
+  * Style and variable names fixes in soc.modules.core module. (Pawel Solyga)
+  * Remove unused imports in Melange modules. (Pawel Solyga)
+  * Remove unused imports from main.py. (Pawel Solyga)
+  * Some small fixes to unique\_user\_id\_adder module. (Pawel Solyga)
+  * Fixed typo in org\_prize\_assignment model. (Lennard de Rijk)
+  * remove accidental head (Sverre Rabbelier)
+  * Use key\_name instead of link\_id (Sverre Rabbelier)
+  * Fixed the notification list to show a properly formatted date. (Lennard de Rijk)
+  * Link id and key name fixes for Organization And OrgApplication. (Pawel Solyga)
+  * Add Organization Application seeding. (Dan Bentley)
+  * Make user\_id property in User model not required. (Pawel Solyga)
+  * Merged with Sverre (Sverre Rabbelier)
+  * Fixed model name and comment typo's in task model. (Lennard de Rijk)
+  * Added several models related to the GHOP workflow. (Madhusudan C.S.)
+  * Do not die on NeedIndexErrors (Sverre Rabbelier)
+  * Add helper functions, model update and jobs for unique user ids. (Pawel Solyga)
+  * Add missing django.template import to shell.py. (Pawel Solyga)
+  * Revert "Add a supplemantal block to the edit form" (Sverre Rabbelier)
+  * Revert "Add an EditForm id to the edit form" (Sverre Rabbelier)
+  * Add a supplemantal block to the edit form (James Levy)
+  * Add an EditForm id to the edit form (James Levy)
+  * Remove executable bit from datatimepicker (Sverre Rabbelier)
+  * Added GHOP Task model. (Madhusudan C.S.)
+  * Added init.py to ghop folder. (Lennard de Rijk)
+  * Merge with Sverre's recent module architecture commit. (Pawel Solyga)
+  * Add web based python shell to Melange. (Pawel Solyga)
+  * First step in the module design (Sverre Rabbelier)
+  * Comment style fix in soc.views.models.organization module. (Pawel Solyga)
+  * Add comment regarding Student Project sorting on Organization home page. (Pawel Solyga)
+  * Add sorting of student projects on organization home page. (Pawel Solyga)
+  * Now clicking cancel button returns user to previous page. (Pawel Solyga)
+  * Add comment to clean\_html\_content function and update authors. (Pawel Solyga)
+  * Invoke pylint from build script. (Pawel Solyga)
+  * Replace usage of feedparser for sanitizing html with new HtmlSanitizer. (Pawel Solyga)
+  * Add htmlsanitizer folder to build script. (Pawel Solyga)
+  * Add missing init.py file to htmlsanitizer folder. (Pawel Solyga)
+  * Add HtmlSanitizer python module to Melange repository. (Pawel Solyga)
+  * Add BeautifulSoup Python HTML/XML parser to Melange repository. (Pawel Solyga)
+  * Add acceptedStudentsCSVExport function to stats.py script. (Pawel Solyga)
+  * Remove accidentaly committed file. (Pawel Solyga)
+  * Merge with Sverre's accidental head. (Pawel Solyga)
+  * Do not rely on notifiction module being imported (Sverre Rabbelier)
+  * Style fixes in test\_functional.py. (Pawel Solyga)
+  * Add some example function tests that use gaeftest (Matthew Wilkes)
+  * Include required antl3 library and check if datastore is available (Matthew Wilkes)
+  * Revert not finished 1000 limitation fix commit (ef7222d484). (Pawel Solyga)
+  * added foo (Sverre Rabbelier)
+  * Add vcs-load-dirs project to thirdparty directory. (Pawel Solyga)
+  * Add .DS\_Store Mac OS X specific files to .hgignore. (Pawel Solyga)
+  * Update Google App Engine to 1.2.2 in thirdparty folder. (Pawel Solyga)
+  * Fix ordering of names in AUTHORS file. (Pawel Solyga)
+  * Add .gitignore to .hgignore (Sverre Rabbelier)
+  * Add .git to the .hgignore file (Sverre Rabbelier)
+  * Remove init.py from project root as well (Sverre Rabbelier)
+  * [PATCH](PATCH.md) Remove init.py from app, as app is not a module (Sverre Rabbelier)
+  * Renamed duplicate slots because of recent changes. (Lennard de Rijk)
+  * Fixes Duplicate calculation hang if no assigned slots where available. (Mario Ferraro)
+  * Fixed multiple Purr boxes would show when using calendar widget. (Mario Ferraro)
+  * Add Marcelo to AUTHORS file and fix typo (Sverre Rabbelier)
+  * Add coverage support to the test suite (Marcelo de Sena Lacerda)
+  * Added coverage output files to .hgignore (Sverre Rabbelier)
+  * Fixed typo in docstring as to comments on r3012 (on Google Code) (svn repo). (Lennard de Rijk)
+  * Replace BeautyTips tooltips with purr info box. (Mario Ferraro)
+  * Use python2.5 in our unit tests (Sverre Rabbelier)
+  * Ignore .project and .pydevproject files (Sverre Rabbelier)
+  * Add full list of accepted students (Sverre Rabbelier)
+  * Ignore backup files (~) (Sverre Rabbelier)
+  * Ignore zip files and build directory (Sverre Rabbelier)
+  * Merged revert (Sverre Rabbelier)
+  * Backed out changeset 571f2de51138 (Sverre Rabbelier)
+  * Make dev\_appserver error out when python version >2.5 is used (Sverre Rabbelier)
+  * Added file 'foo.txt' (Sverre Rabbelier)
+  * Fixed StudentProposal apply view that broke during split of Create/Edit view. (Lennard de Rijk)
+  * Fix Issue 389 (on Google Code) (Clicking list entry will not open new tab/window). (Daniel Hans)
+  * Fix too long line in soc.view.models.organization module. (Pawel Solyga)
+  * Remove E1103 and E1101 errors from ignore list in pylintrc file. (Pawel Solyga)
+  * Style fixes in app.soc.views.models.student\_project module. (Pawel Solyga)
+  * Show all Co-Mentors on the Student Project public page. (Lennard de Rijk)
+  * Changed Additional Mentors to Co-Mentors in the manage view. (Lennard de Rijk)
+  * Added functionality to set additional mentors for a Student Project. (Lennard de Rijk)
+  * Fixed missing value in context. (Lennard de Rijk)
+  * Fix broken tests by renaming default app id from "test-app-run". (Pawel Solyga)
+  * Add .hgignore to repository and ignore all .pyc files and app.yaml file. (Pawel Solyga)
+  * Add getStudentsProjects to context in stats.py script. (Pawel Solyga)
+  * Update to AppEngine 1.2.1. (Pawel Solyga)
+  * Renamed .css file due to recent changes. (Lennard de Rijk)
+  * Added map of accepted student proposals to mentors. (Lennard de Rijk)
+  * Fix missing dot in stats.py docstring. (Pawel Solyga)
+  * Fixing the build now that emails have been tested. (Sverre Rabbelier)
+  * Intentionally breaking the build (Sverre Rabbelier)
+  * Fixing the build now that emails have been tested. (Augie Fackler)
+  * Intentionally breaking the build. (Augie Fackler)
+  * Added reviveJobs and deidleJobs to stats.py (Sverre Rabbelier)
+  * Email address is actually private, not public, make this obvios (Sverre Rabbelier)
+  * Set the last\_modified\_on date to last change (Sverre Rabbelier)
+  * Set batch size to 10 (Sverre Rabbelier)
+  * Added index needed to convert proposals (Sverre Rabbelier)
+  * Some minor style fixes. (Lennard de Rijk)
+  * Accepted and rejected list to redirect to the review page. (Lennard de Rijk)
+  * Allowing review page in read-only mode after the deadline has passed. (Lennard de Rijk)
+  * Fixed typo in access module naming. (Lennard de Rijk)
+  * Use offset\_linkid instead of offset to scan >1000 entities. (Daniel Bentley)
+
+# Changelog for 0-5-20090420
+
+  * Some minor style fixes. (Lennard de Rijk)
+  * Added listing of accepted and rejected proposals. (Madhusudan C.S)
+  * Added org\_home\_gmap function to the map JS. (Madhusudan C.S, Merio Ferraro)
+  * Added mentor-marker.png to content/images. (Madhusudan C.S)
+  * Renamed map JS to facilitate upcoming changes. (Lennard de Rijk)
+  * Added the gathering of data required to display a map. (Madhusudan C.S)
+  * Added ccTld property to role to retrieve the ccTld for a role entity. (Madhusudan C.S)
+  * Added dictionary mapping to CCTLD in countries model. (Madhusudan C.S)
+  * Don't run in a transaction if not needed (Sverre Rabbelier)
+  * Tweak the 'load balancing' algorithm (Sverre Rabbelier)
+  * Added deleteEntities methods to stats.py (Sverre Rabbelier)
+  * Fixed typo in cron.job module's timeOutJob docstring. (Lennard de Rijk)
+  * Use status codes in job.py (Sverre Rabbelier)
+  * getDefaultMailSender now handles logged in but not registered. (Lennard de Rijk)
+  * Allow anyone to see student projects (Sverre Rabbelier)
+  * Make no valid sender could be found a fatal error (Lennard de Rijk)
+  * Students can not list their own projects before the announced. (Lennard de Rijk)
+  * Student Proposal Mailer is now sending out real emails. (Lennard de Rijk)
+  * Fixed a comment typo and possible bug in mail\_dispatcher. (Lennard de Rijk)
+  * Added email templates for accepted and rejected students. (Lennard de Rijk)
+  * Major brown paper bag fix (Sverre Rabbelier)
+  * Add a startSpam method to stats (Sverre Rabbelier)
+  * Add job to the index (Sverre Rabbelier)
+  * Add a random chance to ignore a job to reduce contention (Sverre Rabbelier)
+  * Do not fetch all jobs with each poke (Sverre Rabbelier)
+  * Add entityIterator to base Logic (Sverre Rabbelier)
+  * Store how many times a job has timed out and abort if needed (Sverre Rabbelier)
+  * Wrong usage of twoline\_table\_row caused weird layout in project (Sverre Rabbelier)
+  * Add cron.yaml to the build script (Sverre Rabbelier)
+  * Instead of text\_data use key\_data property to check for uniqueness. (Lennard de Rijk)
+  * Style fix in Job model. (Lennard de Rijk)
+  * Hook up the Student Proposal Mailer in the cron/jobs module. (Lennard de Rijk)
+  * Added Student Proposal Mailer module (Lennard de Rijk)
+  * Various improvements to convertProposals (Sverre Rabbelier)
+  * Add a silent option to updateOrCreateFromFields (Sverre Rabbelier)
+  * Fixed wrong import for list proposals view. (Lennard de Rijk)
+  * Fixed typo and added myself to authors in the cron/job module. (Lennard de Rijk)
+  * Add a script to convert proposals. (Sverre Rabbelier)
+  * Added FatalJobError to the cron/job module. (Lennard de Rijk)
+  * Fixed typo in documentation of the Job Model. (Lennard de Rijk)
+  * Changed the response message in the cron poke view. (Lennard de Rijk)
+  * Remove debug url too (Sverre Rabbelier)
+  * Remove testing method and update docstring for cron system (Sverre Rabbelier)
+  * Removed unneeded imports and variables (Sverre Rabbelier)
+  * Add cron, the core of the job system (Sverre Rabbelier)
+  * Add priority groups and jobs to the sitemap (Sverre Rabbelier)
+  * Add jobs (model, logic, and view) (Sverre Rabbelier)
+  * Add priority groups (model, logic, and view) (Sverre Rabbelier)
+  * Listing of accepted projects is now timeline dependent. (Lennard de Rijk)
+  * White space fix in list\_info module. (Lennard de Rijk)
+  * Fix user\_self calling editGet with a wrong parameter (Sverre Rabbelier)
+  * Split edit and create into different methods (Sverre Rabbelier)
+  * Add support for ID based entities (Sverre Rabbelier)
+  * Use proposal key instead of raw proposal (Sverre Rabbelier)
+  * Show in green the proposals that would be accepted (Sverre Rabbelier)
+  * Add Student entities and StudentProposal entities to seed\_db module. (Pawel Solyga)
+  * Rename that should have been part of r2953 (on Google Code). (Lennard de Rijk)
+  * Renamed stepsize to step\_size in Student Proposal Logic. (Lennard de Rijk)
+  * Moved the code to retrieve all Proposal to the Logic module. (Lennard de Rijk)
+  * Style fixes in soc.views.helper.lists module. (Pawel Solyga)
+  * Style fixes in soc.views.models.organization module. (Pawel Solyga)
+  * Fix too long line in soc.views.models.program module. (Pawel Solyga)
+  * Comment out unused variables in soc.views.models.base module. (Pawel Solyga)
+  * Fix too long line in templatetags.forms\_helpers module. (Pawel Solyga)
+  * Proposal CSV export for students. (Pawel Solyga)
+  * Readability fix in base logic (Sverre Rabbelier)
+  * Remove redundant if check (Sverre Rabbelier)
+  * Comment out unused variables in soc.logic.allocations module. (Pawel Solyga)
+  * Fix too long line in soc.cache.logic module. (Pawel Solyga)
+  * Add missing responses import and in soc.views.models.student module. (Pawel Solyga)
+  * Fix too long line and in soc.views.models.student\_proposal module. (Pawel Solyga)
+  * Step 2 of moving to new seeding model. (Daniel Bentley)
+  * Added additional\_mentors property to StudentProject. (Lennard de Rijk)
+  * Whitespace fix in sponsor model. (Lennard de Rijk)
+  * Place the getSingleton call in view decorator in the try (Sverre Rabbelier)
+  * Fix a bug in duplicate detection (Sverre Rabbelier)
+  * Undid superfluas replacement of .name() with .name\_or\_id() (Sverre Rabbelier)
+  * Fixes access check for manage view. (Lennard de Rijk)
+  * Do not rely on dicts.merge to change target (Sverre Rabbelier)
+  * Use key().id\_or\_name() instead of key().name() (Sverre Rabbelier)
+  * Fix a bug in seed\_db (Sverre Rabbelier)
+  * Added a warning message that reviews are not editable. (Lennard de Rijk)
+  * Added overview of private reviews. (Lennard de Rijk)
+  * Update to the latest GAE release (Pawel Solyga)
+  * Do not rely on a backup\_admin being set (Sverre Rabbelier)
+  * Send out notifications and emails to admin and backup admin (Sverre Rabbelier)
+  * Allow the backup\_admin to fill in the org application (Sverre Rabbelier)
+  * Use offset\_linkid instead of offset to scan >1000 entities. (Daniel Bentley)
+  * Respond to comments on r2769 (on Google Code). (Daniel Bentley)
+  * Last step of refactoring before adding support for > 1000 entities. (Daniel Bentley)
+  * Add (better) help\_text to publish\_location and school\_name (Sverre Rabbelier)
+  * Brown paper bag fix (Sverre Rabbelier)
+  * Added Joel Sherrill to the AUTHORS file (Sverre Rabbelier)
+  * Lower ASCII fix (Sverre Rabbelier)
+  * Remove getKeySuffix and it's usage (Sverre Rabbelier)
+  * Use key().id\_or\_name() instead of key().name() (Sverre Rabbelier)
+  * Use key.id\_or\_name in templates rather than key.name (Sverre Rabbelier)
+  * Indentation fixes. (Lennard de Rijk)
+  * Added two menu items to the program menu. (Lennard de Rijk)
+  * Removed obsolete white line. (Lennard de Rijk)
+  * Added listing of Student Projects for Students themselves. (Lennard de Rijk)
+  * Added three new redirect methods. (Lennard de Rijk)
+  * Brown paper bag fix for Student Project Manage and Edit access check. (Lennard de Rijk)
+  * Style fix in function names in stats.py (Sverre Rabbelier)
+  * When ranking, put them at or above the given rank (Sverre Rabbelier)
+  * Remove slots\_allocation from program view (Sverre Rabbelier)
+  * Make it possible to save any value with saveValues (Sverre Rabbelier)
+  * Allow loading a previously saved slot allocation (Sverre Rabbelier)
+  * Added Manage Student Projects item to the organization menu. (Lennard de Rijk)
+  * Fixed typo in checkStudentProjectHasStatus docstring. (Lennard de Rijk)
+  * Removed TODO that has been completed in r2876 (on Google Code). (Lennard de Rijk)
+  * Fix bug exposed in previous commit (Sverre Rabbelier)
+  * Add a test case to demonstrate a bug in the allocator (Sverre Rabbelier)
+
+# Changelog for 0-5-20090410
+
+  * Add a new allocation algorithm and use it (Sverre Rabbelier)
+  * Change iterative to algorithm in slot allocator (Sverre Rabbelier)
+  * Store min and max slots in the program model (Sverre Rabbelier)
+  * If nothing is assigned, return no assignments (Sverre Rabbelier)
+  * Add a submit method and button to slots view (Sverre Rabbelier)
+  * Make "Private Comment" default on Student Proposal review page. (Pawel Solyga)
+  * Add auto-completion for mentor field (Kai Blin)
+  * Make mentor pickable (Kai Blin)
+  * Make it possible to specify the key\_order for pick (Kai Blin)
+  * Add a temporary hack to allow filtering on org.key().name() (Kai Blin)
+  * Drop the 'adjustement' part of slots allocation (Sverre Rabbelier)
+  * Use slots allocated instead of adjustment in slots view (Sverre Rabbelier)
+  * Use the new self._getAcceptedOrgsList in slots view (Sverre Rabbelier)
+  * Factor out_getAcceptedOrgsList from acceptedOrgs (Sverre Rabbelier)
+  * Public page for StudentProjects now displays public info. (Lennard de Rijk)
+  * Added public info as TinyMCE to the edit pages. (Lennard de Rijk)
+  * Added public\_info property to StudentProject model. (Lennard de Rijk)
+  * Student Project public page now shows feed entries. (Madhusudan C.S)
+  * Added feed\_url to StudentProject. (Lennard de Rijk)
+  * Added list of projects to the organization home page. (Madhusudan C.S)
+  * Changed StudentProposal list to show the amount of pending mentors (Lennard de Rijk)
+  * Brown paper bag fix (Sverre Rabbelier)
+
+# Changelog for 0-5-20090407
+
+  * Cleanups in in soc.views.models.student\_project module. (Pawel Solyga)
+  * Add pylint: disable-msg=W0706 to soc.views.helper.access module. (Pawel Solyga)
+  * Major update to the views concerning StudentProjects. (Lennard de Rijk)
+  * Added new redirect method to be used for StudentProjects. (Lennard de Rijk)
+  * Added two new templates for use in StudentProject views. (Lennard de Rijk)
+  * Added 2 new access checks to deal with StudentProjects. (Lennard de Rijk)
+  * Student Project listing now includes mentor column. (Lennard de Rijk)
+  * Change the dropdown menu to state Comment Visible to Student. (Lennard de Rijk)
+  * Only show mentor name in the detailed list. (Lennard de Rijk)
+  * Properly handle exports when there are multiple lists (Sverre Rabbelier)
+  * Make slots view available to hosts (Sverre Rabbelier)
+  * Use the new nr\_applications and nr\_mentors (Sverre Rabbelier)
+  * Add the amount of proposals and mentors to slots view (Sverre Rabbelier)
+  * Added Matthew Wilkes to the AUTHORS file (Sverre Rabbelier)
+  * Added key\_order to student proposal to enable csv export (Sverre Rabbelier)
+  * Fixed wrong usage of twoline\_field in proposal view (Sverre Rabbelier)
+  * Fixed bug introduced by fixing a pylint error (Sverre Rabbelier)
+  * Added name column to all role lists. (Lennard de Rijk)
+  * Added Mentor name column to StudentProposals list. (Lennard de Rijk)
+  * Fix too long line in soc.views.models.student\_proposal module. (Pawel Solyga)
+  * Added simple listing for Student Proposals you are a mentor for. (Lennard de Rijk)
+  * Changed label and help\_text for public review button. (Lennard de Rijk)
+  * Replace current favicon with the cleaned up one (smudges). (ajatsu)
+  * Allow students to see and comment on withdrawn and ineligible proposals. (Pawel Solyga)
+  * Indention fix in soc.views.models.organization module. (Pawel Solyga)
+  * When Student withdras a proposal a comment is added. (Pawel Solyga)
+  * Make "Mark as Ineligible" reversable. (Pawel Solyga)
+  * Add a script to subscribe someone to all updates (Sverre Rabbelier)
+  * Add the entities to the context too (Sverre Rabbelier)
+  * Fix posting public comments as private. (Pawel Solyga)
+  * Brown paper bag fix, sort by last name in AUTHORS (Sverre Rabbelier)
+  * Added Dmitri to the AUTHORS file (Sverre Rabbelier)
+  * Use different colors for public/private comment widget (Dmitri Gaskin)
+  * Fixed a missing variable declaration (Sverre Rabbelier)
+  * Disable E1002 pylint error in soc.views.helper.dynaform module. (Pawel Solyga)
+  * Fixed a 'stylefix' in DynaField that wasn't a style issue (Sverre Rabbelier)
+  * Fix bug in soc.views.models.base after recent cleanup. (Pawel Solyga)
+  * Also show 'List my student proposals' after signup closes (Sverre Rabbelier)
+  * Minor tweaks to orgStats (Sverre Rabbelier)
+  * Fix calling of super class init method in out\_of\_band Error class. (Pawel Solyga)
+  * Cleanups in soc.views.helper. (Pawel Solyga)
+  * Style fixes and removal of unused imports in soc.views.models. (Pawel Solyga)
+  * Cleanups in soc.views.out\_of\_band module Error class. (Pawel Solyga)
+  * Cleanups soc.models modules. (Pawel Solyga)
+  * Style fixes and removal of unused imports in soc.logic modules. (Pawel Solyga)
+  * Style fixes and removal of unused imports in soc.logic.models modules. (Pawel Solyga)
+  * Disable some messages in pylintrc of do\_pylint.sh. (Pawel Solyga)
+  * Cleanups in soc.cache.base and in soc.views.sitemap. (Pawel Solyga)
+  * Remove unused imports in soc.views.sitemap modules. (Pawel Solyga)
+  * Style fixes and removal of unused imports in soc.logic.helper modules. (Pawel Solyga)
+  * Add missing docstring url.py. (Pawel Solyga)
+  * Add missing docstrings to main.py and settings.py. (Pawel Solyga)
+  * Add license file and docstring to init.py files. (Pawel Solyga)
+  * Returning a JSON response on successfully storing duplicates. (Lennard de Rijk)
+  * Fixed a typo in stats.py (Sverre Rabbelier)
+  * Refactor getProps to use dateFetch (Sverre Rabbelier)
+  * Style fixes (Sverre Rabbelier)
+  * Add and use a getEntities method (Sverre Rabbelier)
+  * Make it possible to retrieve all properties in toDict (Sverre Rabbelier)
+  * Add dateFetch (Sverre Rabbelier)
+  * Make stats.py executable (Sverre Rabbelier)
+  * Print how many entities have been retrieved (Sverre Rabbelier)
+  * Enable storing of the duplicate calculation results. (Lennard de Rijk)
+  * Added ProposalDuplicates model and logic. (Lennard de Rijk)
+  * Replace "Founded by" with "Registered by" in soc.models.group module. (Pawel Solyga)
+  * Add some additional functions for stats to stats.py script. (Pawel Solyga)
+  * Make the mentor and admin submission nicer. (Tim Ansell, Pawel Solyga)
+  * "Where did you hear about this program" is now always editable. (Lennard de Rijk)
+  * Some fixes to lists helper to reduce mutation. (David Bentley)
+  * A new model to easily seed many entities. (David Bentley)
+  * Added a stats module to scripts (Sverre Rabbelier)
+  * Factor out the setup() method in interactive (Sverre Rabbelier)
+  * Fixed a typo in seed\_db.html (Sverre Rabbelier)
+  * Now using GET request for getting the data. (Lennard de Rijk)
+  * Missing template change from r2750 (on Google Code). (Lennard de Rijk)
+  * Renamed duplicate-slots.js to prepare for changes. (Lennard de Rijk)
+  * Make invalid Student Proposals accessible. (Pawel Solyga)
+  * Added example text to birth\_date. (Lennard de Rijk)
+  * Fix docstring in interactive.py script. (Pawel Solyga)
+
+# Changelog for 0-5-20090331
+
+  * Added nr\_applications and nr\_mentors (Sverre Rabbelier)
+  * Use ugettext and shorter variable names for inellegible list (Sverre Rabbelier)
+  * Add listing of ineligible Student Proposals (Pawel Solyga)
+  * Fixed the duplicate slots view. (Merio Ferraro, Lennard de Rijk)
+  * Renamed duplicate-slots.js to prepare for changes. (Lennard de Rijk)
+  * Added missing return to manage access check. (Lennard de Rijk)
+  * Enforce the 500 character limit for abstracts. (Lennard de Rijk)
+  * Fixed typo in docstring for logic/models/base.py (Lennard de Rijk)
+  * Added cleaner to clean content of a specific size. (Lennard de Rijk)
+  * Add confirmation to "Mark as Ineligible" on Student Proposal (Tim Ansell)
+  * Add mentor for one gsoc org and an admin for a gsoc org (Tim Ansell)
+  * Set fields to 100% width again (Tim Ansell)
+  * Remove two trailing comma's (Sverre Rabbelier)
+  * Add a script to start an interactive shell with remote api (Sverre Rabbelier)
+  * Enabled remote\_api for admins only (Sverre Rabbelier)
+  * Fix  Issue 381 (on Google Code)  and  Issue 207 (on Google Code)  (Date selector Widget) (Daniel Hans)
+  * Fixed some typo in app/soc/views/models/base.py (Chen Lunpeng)
+  * Changed edit access checks for role views. (Lennard de Rijk)
+  * Fixed access check in club\_member view. (Lennard de Rijk)
+  * Added missing access checks to various roles. (Lennard de Rijk)
+  * Added document\_name alias for use on award certificates. (Lennard de Rijk)
+  * Disabled CSV export for roles. (Lennard de Rijk)
+  * Name alias now does not use the name\_on\_documents. (Lennard de Rijk)
+  * Add missing utf decode in html cleaner in soc.logic.cleaning module. (Pawel Solyga)
+  * Use minified tiny\_mce.js which saves 100kB (Pawel Solyga)
+  * Student Proposal Review template now has the right header\_title. (Lennard de Rijk)
+  * Added title and student name to Student Proposal Review title. (Lennard de Rijk)
+  * Separate submit button on Student Proposal review page. (Lennard de Rijk)
+
+# Changelog for 0-5-20090325
+
+  * Public review now also triggers the status change to pending. (Lennard de Rijk)
+  * Show additional info link on Student Proposal pages. (Lennard de Rijk)
+  * Added cleaning to student proposal content and its reviews. (Lennard de Rijk)
+  * Removed leftover URL in duplicate-slots.js (Lennard de Rijk)
+  * Added JS to the duplicate proposals page. (Lennard de Rijk)
+  * Fixed error occurring when mentor or student posts a comment. (Lennard de Rijk)
+  * Fix csv export of properties that are not string (like datetime.time) (Pawel Solyga)
+
+# Changelog for 0-5-20090324
+
+  * Add csv export support for Roles (Pawel Solyga)
+  * Now showing student name in list proposal views. (Lennard de Rijk)
+  * Fixed a typo in proposal listing (Sverre Rabbelier)
+  * Enable resizing in the TinyMCE widget (Sverre Rabbelier)
+  * Add "Edit my Student Profile" link to program menu. (Lennard de Rijk)
+  * Added check to prevent students from submitting too many proposals. (Lennard de Rijk)
+  * Fixed a typo in Organization model. (Lennard de Rijk)
+
+# Changelog for 0-5-20090322
+
+  * Redirect to show if there is no home document (Sverre Rabbelier)
+  * Make public return True iff public page should be shown (Sverre Rabbelier)
+  * Automagically convert '+' to '00' in phone numbers (Sverre Rabbelier)
+  * Added a 'Can we contact you' property (Sverre Rabbelier)
+  * Make sure the user has restricted rights to create a new document (Sverre Rabbelier)
+  * Add example text on t-shirt sizes (Sverre Rabbelier)
+  * Ensure that the link\_id entered is the user's in edit\_self (Sverre Rabbelier)
+  * Optionally return link\_id in clean\_user\_is\_current (Sverre Rabbelier)
+  * Use getFromKeyFields instead of getForFields where possible (Sverre Rabbelier)
+  * Student proposal list shows date, regular list shows the org name. (Lennard de Rijk)
+  * Removes the Mentor from 'willing to mentor' lists when resigning. (Lennard de Rijk)
+  * Factor out input and file utils into io.py. (David Anderson)
+  * Added fields requested in Issue 392 (on Google Code) to Student Model. (Lennard de Rijk)
+  * Push agreements to group 99 for Role forms. (Lennard de Rijk)
+  * Use the new as\_email tag for user profile (Sverre Rabbelier)
+  * Added an as\_email template tag (Sverre Rabbelier)
+  * Fixed typo in variable name. (Lennard de Rijk)
+  * Fix broken list\_msg, do not to display list\_msg if it is None. (Pawel Solyga)
+
+# Changelog for 0-5-20090321
+
+  * Add school name and school country properties to Student Role (Pawel Solyga)
+  * Mentors cant resign when mentoring a project/proposal. (Lennard de Rijk)
+  * Only show 'Register as student' link student has a user profile (Sverre Rabbelier)
+  * Explain better what a link\_id should look like (Sverre Rabbelier)
+  * Typo and thinko fix in accepted\_orgs\_msg (Sverre Rabbelier)
+  * Show the accepted\_orgs\_msg for the accepted orgs page (Sverre Rabbelier)
+  * Allow for a message to be displayed above the list view (Sverre Rabbelier)
+  * Add an non-required accepted\_orgs\_msg property to program profile (Sverre Rabbelier)
+  * Requests now link to a user's profile (Sverre Rabbelier)
+  * Added an as\_user template tag (Sverre Rabbelier)
+  * Clean phone numbers to be numeric only (Sverre Rabbelier)
+  * Added a numeric\_only cleaner (Sverre Rabbelier)
+  * Added example text to the phone number fields (Sverre Rabbelier)
+  * Removed formatting from TinyMCE that use the style tag (Sverre Rabbelier)
+  * Show all orgs in accepted org list view (Sverre Rabbelier)
+  * Made getPickData more generic by supporting ordening (Sverre Rabbelier)
+  * Added a new index for accepted orgs listing (Sverre Rabbelier)
+  * Fixed docstring for canResign method. (Lennard de Rijk)
+  * Moved canResign check to role logic so subclasses can override. (Lennard de Rijk)
+  * Minor style fix. (Lennard de Rijk)
+  * Add date postfix to slot-allocator.js file. (Pawel Solyga)
+  * Don't call updateFromJSON function if no data in slot allocation. (Mario Ferraro)
+  * Fixed copy/paste fail in docstring. (Lennard de Rijk)
+  * Only show valid roles on user roles page. (Lennard de Rijk)
+  * Added "How did you hear about this program?" to Student Profile. (Lennard de Rijk)
+  * Fixed double sending of notifications on creating a new invite. (Lennard de Rijk)
+  * Fixed redirect after creating/rejecting a request/invite. (Lennard de Rijk)
\ No newline at end of file
diff --git a/ChangeLog.wiki b/ChangeLog.wiki
deleted file mode 100644
index 83f07af..0000000
--- a/ChangeLog.wiki
+++ /dev/null
@@ -1,1862 +0,0 @@
-#summary This page contains Change Logs for Melange.
-#labels Importance-Featured,Featured
-
-= Changelog for 0-7-20100404 =
-
- * Allow name attributes (Gilles Bedel)
- * Disable converting html/xml quotes elements to their real equivalent (Matthew Wilkes)
- * Add testcase for issue 838 (Matthew Wilkes)
- * Add failing test for preserving anchors (Sverre Rabbelier)
- * HtmlCleaner: add test for XSS attack (Sverre Rabbelier)
-
-= Changelog for 0-7-20100402 =
-
- * Patch up the Html Sanitizer some more (Matthew Wilkes)
- * Add failing test case for cleaner (Sverre Rabbelier)
- * Fix tests since new getSidebar in core (Sverre Rabbelier)
- * Pre-load stats.py with GSoC classes (Sverre Rabbelier)
- * Spelling error fixed in student proposal model. (Daniel Hans)
- * Fixed wrong redirect in "New review" message for StudentProposals. (Lennard de Rijk)
- * On creation of a student entity make sure its status is active. (Lennard de Rijk)
-
-= Changelog for 0-7-20100331 =
-
- * Add disable_tinymce preference (Sverre Rabbelier)
- * Edited the student role management page to be more verbose. (Lennard de Rijk)
- * Actually refresh list data from server when requested. (Mario Ferraro)
-
-= Changelog for 0-7-20100330 =
-
- * Fix html cleaning bugs (Matthew Wilkes)
- * Do not use jLinq to sort if there is no data in list. (Mario Ferraro)
-
-= Changelog for 0-7-20100329 =
-
- * Removed wrap string from the paranoid filters to fix doubling of line endings. (Lennard)
- * Trigger reload grid after fetch of each batch of data. (Mario Ferraro)
- * Fixed the "I am willing to mentor this student" button on the review page. (Lennard de Rijk)
- * Simplified if statement for showing Register as student link. (Lennard de Rijk)
- * Register as a student link now showing if you are not signed in. (Lennard de Rijk)
-
-= Changelog for 0-7-20100328 =
-
- * Pretty-print request status (Sverre Rabbelier)
- * Refactoring of list code. (Mario Ferraro)
- * Move contributor template to the bottom of the org public page (Sverre Rabbelier)
- * Edited help text for link id on edit User Profile page. (Lennard de Rijk)
-
-= Changelog for 0-7-20100322 =
-
- * Properly render safe urls (Sverre Rabbelier)
-
-= Changelog for 0-7-20100321 =
-
- * fix list of list using the wrong params (Sverre Rabbelier)
- * profiler: data being removed from memcache is not an error (Sverre Rabbelier)
- * Group menu now includes short name of scope if applicable. (Lennard de Rijk)
- * Updated ListProposals page name to include program short name. (Lennard de Rijk)
- * Now properly 404'ing on a role's manage page when no role is found. (Lennard de Rijk)
- * Inactive group menus are now collapsed by default. (Lennard de Rijk)
- * The process request page now has some additional help information. (Lennard de Rijk)
- * Orgs that have not completed their profile yet are shown at the bottom. (Lennard)
-
-= Changelog for 0-7-20100317 =
-
- * On student proposal review form mentor is preselected in admin options. (Daniel Hans)
- * Updated the Accepted Organization message for GSoC2010. (Lennard de Rijk)
- * Adds a stubout for select method in View (Madhusudan.C.S)
- * Merged with Madhusudan. (Daniel Hans)
- * Fix the access type for suggest task to suggest_task. (Madhusudan.C.S)
- * Change the dates in fixtures for tests to be set from today's date. (Madhusudan.C.S)
- * Summary of scores does not display zero scores. (Daniel Hans)
- * Group model now also contains two lines for street addresses. (Lennard de Rijk)
- * Added recipient name and one extra line for addresses to roles. (Lennard de Rijk)
- * Don't escape fields with no data, to prevent shown "None" in lists. (Lennard)
- * Add version and timestamp to ProfileData (Sverre Rabbelier)
- * Make ProfileData key based (Sverre Rabbelier)
- * Pass filter to base.list in assignSlots (Sverre Rabbelier)
- * Remove debug logging from profiling.storage (Sverre Rabbelier)
- * Repeat the task only before the accepted student projects are announced. (Madhusudan.C.S)
- * Fix typo which passed wrong parameters to redirect_fun. (Madhusudan.C.S)
- * The accepted org app lists on the participating orgs now hides itself. (Lennard)
- * Max bucket size is 20 (Sverre Rabbelier)
-
-= Changelog for 0-7-20100313 =
-
- * Move view related code to viewer module and persist profiles (Sverre Rabbelier)
- * Add license and authors to ppstats module (Sverre Rabbelier)
- * Add a storage class for ProfileData (Sverre Rabbelier)
- * Add a new queue for the profiler (Sverre Rabbelier)
- * Fix has_profiler method and add missing parens (Sverre Rabbelier)
- * Integerate app_profiler with Melange (Sverre Rabbelier)
- * Fix sidebar caching (Sverre Rabbelier)
- * Add check for &#34; which is another numerical entity for ". (Mario Ferraro)
- * Fix handling of " and &quot; on CSV exports. (Mario Ferraro)
-
-= Changelog for 0-7-20100312 =
-
- * Extend the overview list for OrgApps to include the questions and answers. (Lennard)
- * Add temporary placeholder text before list creation. (Mario Ferraro)
- * Placeholder text for lists if Javascript is disabled. (Mario Ferraro)
- * Fix SurveyRecord forms not showing questions but question ID's. (Lennard de Rijk)
- * The search menu is now only shown when a search key is defined. (Lennard de Rijk)
- * Changed soc.models.logic.site import to a shorter input. (Lennard de Rijk)
- * Added Leon Palm to AUTHORS. (Leon Palm)
- * Added CSE search to Melange. (Leon Palm)
- * Fixed ProjectSurvey Access check to allow for inactive roles. (Lennard de Rijk)
- * Add antlr and coverage to the pythonpath used by buildout. (Matthew Wilkes)
- * Add public_conf_min_num option (Sverre Rabbelier)
- * Fix urlize (Sverre Rabbelier)
- * Now logging if a selected notification is not found. (Lennard de Rijk)
- * Removed the Possible mentors field from the list. (Lennard de Rijk)
- * Updated StudentProposal mail for GSoC2010. (Lennard de Rijk)
- * Fix prefetchField to not die on unset reference (Sverre Rabbelier)
- * Fixed missing error message in GSoC access module. (Lennard de Rijk)
-
-= Changelog for 0-7-20100308 =
-
- * Raise default entity fetch limit to 150 (Sverre Rabbelier)
- * Prefetch all fields accessed in public_field_extra (Sverre Rabbelier)
- * Convert list field prefetchign to the new list system (Sverre Rabbelier)
- * Split getListConfiguration off from getListData (Sverre Rabbelier)
- * Fetch only duplicates that are known to have duplicate proposals. (Madhusudan.C.S)
- * Fix the url for student proposals in duplicates list. (Madhusudan.C.S)
- * Fix confirmation dialogs on the StudentProposal Review page. (Mario Ferraro)
- * Moved prefix code to own helper module and use it for Documents as well. (Lennard)
- * Removed the add argument for adjustPossibleMentors. (Lennard de Rijk)
- * Marking a StudentProposal as ineligble is now a POST operation. (Lennard de Rijk)
- * The "want to mentor buttons" on the StudentProposal page are now POST. (Lennard)
- * Change the subscription button to work on a POST request basis. (Lennard de Rijk)
- * Subscribe button on StudentProposal page is now a single button. (Lennard de Rijk)
- * Removed several unused entries from the GSoCTimeline model. (Lennard de Rijk)
- * Removed reviewAfterDeadline from StudentProposal. (Lennard)
- * Show tooltips when hovering over a checkbox. (Mario Ferraro)
- * Middle click and CTRL+Left click now opens list items in a new tab. (Mario Ferraro)
- * Generalize enable/disable buttons logic to make it work onSelectAll. (Mario Ferraro)
- * Fixes the selection list not showing a cickable ideas URL and tags. (Lennard)
-
-= Changelog for 0-7-20100307 =
-
- * Fixed wrong redirect being shown on the ProjectSurvey list on Manage page. (Lennard)
- * Fixed the amount of slots not being shown on the listProposals page. (Lennard de Rijk)
- * Reduce the query limit so we perform more but smaller ones. (Lennard de Rijk)
-
-= Changelog for 0-7-20100306 =
-
- * Removed unused list_heading and list_row entries for Core and GSoC modules. (Lennard)
- * Survey Results view now uses the right list model to display the Records. (Lennard)
- * Fixed redirects for reminder emails to work with module system. (Lennard de Rijk)
- * Survey list view now passes along the correct filter and any other kwargs. (Lennard)
- * Fix the Survey viewResults view to properly filter on records. (Lennard de Rijk)
- * Changed Survey View list to not ignore filter keyarg when it is given. (Lennard)
- * Close of the Survey Results view since the new lists have made it borked. (Lennard)
- * Fix imports for several tasks related to surveys. (Lennard de Rijk)
- * ?_field_hidden now hides the fields defined in ?_field_keys by default. (Lennard)
- * Pass on the fields to self.list (Sverre Rabbelier)
- * Give the right entity to getTakeProjectSurveyRedirect (Sverre Rabbelier)
- * Don't crash if there are no records yet (Sverre Rabbelier)
- * Use document prefix to query for surveys to be shown in a Program menu. (Lennard)
- * Add hidden fields back to student proposals (Sverre Rabbelier)
- * Add public_field_hidden to make it easy to add hidden fields (Sverre Rabbelier)
- * Optionally turn off closure by passing -c to build.sh (Sverre Rabbelier)
- * Fixed the Home link not showing up for all groups in their menu. (Lennard de Rijk)
- * Fixed Student listProjects view to pass the access check properly. (Lennard de Rijk)
- * Teach gen_app_yaml a --override-version argument (Sverre Rabbelier)
- * (Proposal)Reviews no longer display that a score of 0 has been given. (Lennard)
- * More style fixes to accept_proposals (Sverre Rabbelier)
- * Transitions new proposal to pending when a mentor is assigned . (Lennard de Rijk)
- * Add an non-optional program argument to accept_proposals (Sverre Rabbelier)
- * Project Acceptance using Task API (John Westbrook)
- * Remove the "willing to mentor button" when someone is the assigned mentor. (Lennard)
- * Fix notifcations sent for new Requests to properly display the information. (Lennard)
- * The list of Request now shows a verbose name instead of an internal one. (Lennard)
- * Move list of requests for a user to user_self to match how Roles does it. (Lennard)
- * Fix access check for StudentProposal Review and Comment views. (Lennard de Rijk)
- * Change access_type to allow where necessary. (Lennard de Rijk)
- * Added the Task to the URL patterns in the duplicates view. (Madhusudan.C.S)
- * Added task to calculate all the duplicates within one GSoCProgram. (Madhusudan.C.S)
- * Fixed reference to non-existing variable in PDS Logic. (Madhusudan.C.S)
- * Make the recalculate button not show up when task is running. (Madhusudan.C.S)
- * Added method to delete all ProposalsDuplicates for a program. (Lennard de Rijk)
- * Added property to check if a PD entity really has duplicates. (Madhusudan.C.S)
- * Fixed access_type for list_orgs in StudentProposal. (Lennard de Rijk)
- * Check for check role property Request View. (Lennard de Rijk)
- * Fixed list_requests view throwing access errors. (Lennard de Rijk)
- * Clarified help text for link_id to say alphanumeric characters. (Lennard de Rijk)
- * Syntax error in access control helper that prevented student signup. (Matthew Wilkes)
- * Escape all list data (except excluded fields) (Sverre Rabbelier)
- * Make lists.urlize return a (appropriately escaped) safe link (Sverre Rabbelier)
- * Add dicts.cleanDict function (Sverre Rabbelier)
- * Remove no-longer used list_key_order (Sverre Rabbelier)
- * Added list_participants view to Program. (Lennard de Rijk)
- * Added allow access type that always allows access. (Lennard de Rijk)
- * Per default unspecified access checks should bounce. (Lennard de Rijk)
- * Show list of proposals you are mentoring only if you are a Mentor. (Lennard de Rijk)
- * Proposal's /review view cannot be accessed after deadline. (Daniel Hans)
- * Use checkTimelineCondition in retrieveKeyNameFromPath to get KeyName. (Daniel Hans)
- * retrieveKeyNameFromPath function added to base logic. (Daniel Hans)
- * CheckIsBeforeEvent function added. (Daniel Hans)
- * Rows of list of proposals redirect to /comment view after the deadline. (Daniel Hans)
- * getProposalCommentRedirect added. (Daniel Hans)
- * Move is_publicly_visible field between additional_info and mentor. (Daniel Hans)
- * verbose_name added for is_publicly_visible field. (Daniel Hans)
- * reviews_dispabled field renamed to scoring_disabled. (Daniel Hans)
- * Proposal review form does not show scoring option if it is disabled. (Lennard)
- * Disable pagination in accepted{Orgs,Projects} lists (Sverre Rabbelier)
- * Remove old list code from helper.lists (Sverre Rabbelier)
- * Fix Roles to notify upon new request for module versions of the Mentor role. (Lennard)
- * Fix typos in Role model help text and clarified the help for phone number. (Lennard)
- * New boolean field (reviews_disabled) added to GSoCOrganization model. (Daniel Hans)
- * Merged with Lennard. (Daniel Hans)
- * Developers may access /public views for all proposals. (Daniel Hans)
- * Students may access /public view for their own proposals. (Daniel Hans)
- * Access chcking for proposal's /public view added. (Daniel Hans)
- * Access cheking function for proposal's public view added. (Daniel Hans)
- * Fix Particiaption agreement not appearing for Mentors and Students. (Lennard de Rijk)
- * New field (is_publicly_visible) added to StudentProposal model. (Daniel Hans)
- * Fix notification list using load instead of loads to load the JSON string. (Lennard)
- * Fix whitespace in GSoCOrganization view. (Lennard de Rijk)
- * Fix the Student Proposals list page for Orgs. (Lennard de Rijk)
- * Remove unused index for slot assignment. (Lennard de Rijk)
- * Clean up the code to set a proposal to a certain rank. (Lennard de Rijk)
- * Edited showDuplicates View to work with the new models. (Madhusudan.C.S)
- * Added as_proposal_duplicates template tag for displaying duplicates. (Madhusudan.C.S)
- * Added Logic for the ProposalDuplicatesStatus model. (Lennard de Rijk)
- * Added Logic for ProposalDuplicates model. (Madhusudan.C.S)
- * Added/Edited models for the new duplicates finding system. (Madhusudan.C.S)
- * Chang index for Organization to GSoCOrganization to match new design. (Madhusudan.C.S)
- * Fix call to AccessViolation constructor getting the wrong keyarg in Access. (Lennard)
- * Changed call to simplejson.read() to simplejson.load(). (Lennard de Rijk)
- * Add example text to link_id to clarify its purpose. (Lennard de Rijk)
- * Add tags as a column to the GSoCOrganization public list. (Lennard de Rijk)
- * Ideas page and home page links now state Click Here. (Lennard de Rijk)
- * Fix the list_requests page to only show uncompleted requests. (Lennard)
- * Fix URL Pattern for process_request for roles which only have invites. (Lennard)
- * Fixed organization home page to properly render if no project list is set. (Lennard)
- * Fix home page document field to properly work for Organizations. (Lennard)
- * Edit mail templates for OrgAppSurveys to state which org it is for. (Lennard)
- * Fix roles showing up under the wrong list in user_self. (Lennard)
- * Remove forgotten string used for debug. (Mario Ferraro)
- * /share view removed; its role taken up by /public. (Daniel Hans)
- * Access checking added for /comment view. (Daniel Hans)
- * /comment view matched with an URL pattern. (Daniel Hans)
- * /comment view is able to handle public comments POST request. (Daniel Hans)
- * Context related to proposal scores is updated by updateScoresContext. (Daniel Hans)
- * Context related to proposal reviews is updated by updateReviewsContext. (Daniel Hans)
- * Proper template set for /comment view. (Daniel Hans)
- * Initial version of updateCommentContext function. (Daniel Hans)
- * form param moved from function arguments to its body. Also, typo fix. (Daniel Hans)
- * Template binded with /comment view. (Daniel Hans)
- * Very initial version of functions which will handle /comment view. (Daniel Hans)
- * Initial version of /comment template for student proposals added. (Daniel Hans)
- * Convert cell value to String before operations for CSV exporting. (Mario Ferraro)
- * edit_params replaced with take_params for survey and org_app_survey. (Daniel Hans)
- * save_message key changed to successful_take_message for surveys. (Daniel Hans)
- * Items on list of proposals for a student have redirect to /private view. (Daniel Hans)
- * User is notified after submitting org application survey. (Daniel Hans)
- * Switch from JQuery Growfield plugin to TextAreaExpander plugin. (Mario Ferraro)
- * Display a "hand" cursor when hovering if row action is present. (Mario Ferraro)
- * Set correct row index to update cells. (Mario Ferraro)
- * Comma separator fix. (Daniel Hans)
- * Add explicit GPLv2 and LGPLv2 option to the licenses (Sverre Rabbelier)
- * Fix html encoding in surveys (Sverre Rabbelier)
- * Switch slot allocation JS logic to the new lists. (Mario Ferraro)
- * Test if row parameter is an empty object before iterating through it. (Mario Ferraro)
- * Use the proper org_logic in modules.gsoc.views.models.program (Sverre Rabbelier)
- * Add link_id as hidden row (Sverre Rabbelier)
- * Disable slot assignment row actions (Sverre Rabbelier)
- * Add index required for slot assignment (Sverre Rabbelier)
- * Compatibility with lists with pagination disabled. (Mario Ferraro)
- * Trigger an event when list is loaded. (Mario Ferraro)
- * Turn off pagination for assignSlots (Sverre Rabbelier)
- * Convert assignSlots to the new list system (Sverre Rabbelier)
- * Added license question to the OrgApplication. (Lennard de Rijk)
- * Fallback to empty array if no row is selected in lists. (Mario Ferraro)
- * Use multiselect in notification.list (Sverre Rabbelier)
- * Allow overriding configuration options (Sverre Rabbelier)
- * Fixed Org App Review Overview page to properly redirect to the Review page. (Lennard)
- * Fixed redirect on the OrgAppSurvey listSelf page to now work. (Lennard de Rijk)
- * do not open a new window by default when clicking on an item in a list. (Lennard)
- * Create CSV respecting the actual order of jQGrid colModel. (Mario Ferraro)
- * Fix View.select to use the proper params and view (Sverre Rabbelier)
- * Redirect inactive students to public page on student.listProjects (Sverre Rabbelier)
- * Get current row data from row number instead from selected row. (Mario Ferraro)
- * Check if there is a button event for per-entity ops before binding. (Mario Ferraro)
- * Format of /private page header fixed. (Daniel Hans)
- * private.html template added. (Daniel Hans)
- * Comment form is not sent in context in /share view for student proposal. (Daniel Hans)
- * /public view renamed to /private for student proposals. (Daniel Hans)
- * Convert organization.home to the new list system (Sverre Rabbelier)
- * Convert showEditRecordList to the new list system (Sverre Rabbelier)
- * Remove obsolete method from program (Sverre Rabbelier)
- * Remove broken function call in ghop and replace with todo (Sverre Rabbelier)
- * Convert program.acceptedOrgs to the new list system (Sverre Rabbelier)
- * Tags are cleaned by cleanTagsList. (Daniel Hans)
- * Org Application Form now shows link to printable Org Admin Agreement. (Lennard)
- * Make proper use of the show_in_roles_overview setting in Role Views. (Lennard)
- * Added empty cron.yaml file to indicate we are not running any Cron Jobs. (Lennard)
- * Autocompletion works for multiple tags in a single input line. (Daniel Hans)
- * Make the autocomplete script accept additional options. (Mario Ferraro)
- * Fallback to POST to current url if not specified by the backend. (Mario Ferraro)
- * Removed usage of a local variable before assignment. (Daniel Hans)
- * 'share' view for student proposal to displays only its content. (Daniel Hans)
- * Org admins may post comments and scores to student proposals. (Daniel Hans)
- * Tags autocompletion works on organization applicant page. (Daniel Hans)
- * Fix Review OrgaPP entry for Programs to redirect to the correct page. (Lennard)
- * Tags may be added on organization applicant page. (Daniel Hans)
- * The buttons on the notifcations page are now moved to the new list. (Lennard de Rijk)
- * Now properly merging params in Organization View. (Lennard de Rijk)
- * Tags may be added on create organization page. (Daniel Hans)
- * scope_path added as a hidden input on organization create page. (Daniel Hans)
- * Tags are removed, when an organization is deleted. (Daniel Hans)
- * Tags, which are not predefined, are auto deleted if there are not used. (Daniel Hans)
- * Changes made on Tags input field are handled by organization view. (Daniel Hans)
- * Tags input field on organization edit page. (Daniel Hans)
- * pickSuggestedTags function binded with org_tags/pick url. (Daniel Hans)
- * A list of suggested tags may be sent to a browser in a JSON format. (Daniel Hans)
- * Update tag list when an organization is updated. (Daniel Hans)
- * Don't trigger row actions on clicks on checkboxes in multisel tables. (Mario Ferraro)
- * Redid part of the Accepted Orgs page to at least perform the right query. (Lennard)
- * Enable global button in org_app_survey.reviewOverview (Sverre Rabbelier)
- * Enable global buttons in the new list system (Sverre Rabbelier)
- * Convert grading_survey_group.viewRecords to the new list system (Sverre Rabbelier)
- * GHOP Org App Survey Take View now uses checkIsSurveyTakeable check. (Lennard de Rijk)
- * Fix OrgAdmin view to properly display admin agreement when already accepted. (Lennard)
- * Fix missing space in OrgAppSurvey Completed message. (Lennard de Rijk)
- * Fix notification page showing Notifications of all users. (Lennard de Rijk)
- * Temporarily fixed checkIsSurveyTakable to work with the program prefixes. (Lennard)
- * Role requests for new groups are now working properly again. (Lennard de Rijk)
- * Added org_app_logic argument to checkOrgAppRecordIfPresent. (Lennard de Rijk)
- * Finished bulk processing of OrgApplicationRecords from the Overview page. (Lennard)
- * Make buttons disabled by default if lower bound is >0. (Mario Ferraro)
- * Rename CSS to today date to reflect recent changes. (Mario Ferraro)
- * Apply a different color to disabled buttons. (Mario Ferraro)
- * Send list index along with POST data. (Mario Ferraro)
- * Send button operation id of the protocol instead of DOM id. (Mario Ferraro)
- * Use /usr/bin/env python2.5 to support local installs of python (Sverre Rabbelier)
- * Remove unnecessary brs in template. (Mario Ferraro)
- * Simple workaround to fix "triple-tooltip" bug. (Mario Ferraro)
- * Add a simple tag to output a proper JSON string from a Py dict. (Mario Ferraro)
- * Send id of the button who triggered the action along with POST data. (Mario Ferraro)
- * Make POST function work with real button bounds. (Mario Ferraro)
- * Fix adding predefined tags when a new program is created. (Daniel Hans)
- * onCreate and onUpdate functions may be passed additional attributes. (Daniel Hans)
- * Student proposals may be reviewed even when the program is frozen. (Daniel Hans)
- * Corrected the role names used for the Organization sidebar. (Lennard de Rijk)
- * Fix epic copy/paste fail in org_admin (Sverre Rabbelier)
- * Now properly passing along role_name in Mentor/OrgAdmin logic. (Lennard de Rijk)
- * Add XSRF token automatically in POST operations for lists buttons. (Mario Ferraro)
- * Switch autocomplete and tooltip code to external JS files. (Mario Ferraro)
- * Make autocomplete and tooltip JS packages loadable from base template. (Mario Ferraro)
- * Externalize tooltip code to a JS package. (Mario Ferraro)
- * Externalize autocomplete code to a JS package. (Mario Ferraro)
- * Change null values to empty string when exporting CSV from lists. (Mario Ferraro)
- * Fixed StudentProject Manage page to query for the proper surveys. (Lennard de Rijk)
- * Removed OrgApplication models from SeedDB. (Lennard de Rijk)
- * Redone checkCanReviewGroupApp to work with Organization Applications. (Lennard)
- * Removed the old Group Application system. (Lennard de Rijk)
- * Implemented first version of the Org Application overview page for Hosts. (Lennard)
- * GSoC Program View now uses document_prefix for Survey menu items. (Lennard de Rijk)
- * Convert student_project.manage to the new list system (Sverre Rabbelier)
- * Improve helper.lists.urlize (Sverre Rabbelier)
- * Remove duplicate survey fields (Sverre Rabbelier)
- * Remove leftovers from the old list system (Sverre Rabbelier)
- * Fix whitespace damadge in notification.html (Sverre Rabbelier)
- * Remove leftovers from the old list system (Sverre Rabbelier)
- * Use the new list helper tags where appropriate (Sverre Rabbelier)
- * Add templatetags.list_helpers module (Sverre Rabbelier)
- * Restore custom list description to user_self.roles (Sverre Rabbelier)
- * Sort notifications by -created_on (Sverre Rabbelier)
- * Make it easy to only show notifications that are (Not) Read (Sverre Rabbelier)
- * Render 'unread' field as (Not) Read in the notifications list (Sverre Rabbelier)
- * Redirect to the public page for notifications (Sverre Rabbelier)
- * Pass the 'order' attribute to getListData in base.list (Sverre Rabbelier)
- * Add support for per-field properties in the new list system (Sverre Rabbelier)
- * Cleaned up base.list in the Base View. (Lennard de Rijk)
- * Finish implementing the new list for the listSelf page in OrgAppSurvey View. (Lennard)
- * Move toDict to dict Logic so that expando_base can make use of it too. (Lennard)
- * Add and enable access check for the Organziation Applicant View. (Lennard de Rijk)
- * Base url check in lists not to conflict with current query string. (Mario Ferraro)
- * Enabled the sending of mail when OrgAppRecord is accepted/rejected. (Lennard de Rijk)
- * Fix call to completeApplication in the OrgApp helper to match new signature. (Lennard)
- * getApplicantRedirect now uses the new URL scheme. (Lennard de Rijk)
- * Removed now unused mailing template. (Lennard de Rijk)
- * Redid the notifications and added mail for accepted/rejected applications. (Lennard)
- * Added mailing templates for OrgAppSurveys. (Lennard de Rijk)
- * Fixed access check in OrgAppSurvey view that was missing. (Lennard de Rijk)
- * Added OrgAppRecord Logic instances that are modules specfic. (Lennard de Rijk)
- * Organziation applicant view now initializes more form values. (Lennard de Rijk)
- * On creation of an Org by an applicant, Admin invites are now sent out. (Lennard)
- * Removed sentMail method from OrgAppRecord logic. (Lennard de Rijk)
- * OrgAdmin Logic now uses right Organization Logic in onCreate. (Lennard de Rijk)
- * Remove sending of invites when a new Organization is created. (Lennard de Rijk)
- * editContext in OrgAdmin View now works with the new OrgApplications. (Lennard)
- * Removed applicant view from the Group View. (Lennard de Rijk)
- * Removed now unused access check for the old Group Applications. (Lennard de Rijk)
- * Create Applicant view for the new OrgAppRecords. (Lennard de Rijk)
- * Fixed too long lines in Notification view. (Lennard de Rijk)
- * Fixed imports in Organization logic. (Lennard de Rijk)
- * Fixed docstring for onCreate in the Organization logic. (Lennard de Rijk)
- * Removed GroupApp argument from validate_new_group in the cleaning module. (Lennard)
- * RankerRoot entities are now only created for GSoCOrganizations. (Lennard de Rijk)
- * Disable refresh button in lists. (Mario Ferraro)
- * Increase timeout for async list fetchings. (Mario Ferraro)
- * Change null values to strings when exporting CSV from lists. (Mario Ferraro)
- * Adds a testing framework for GHOP module in Melange. (Madhusudan.C.S)
- * Convert org_app-survey to the new list system (Sverre Rabbelier)
- * out_of_band.Error responses are handled in the middleware (Sverre Rabbelier)
- * Rename list_self method to listSelf (Sverre Rabbelier)
- * Removed GHOP Search view because it will be redone using the new lists. (Lennard)
- * Added review page for OrgAppSurveyRecords. (Lennard de Rijk)
- * Add TODO's for unconverted lists (Sverre Rabbelier)
- * Remove leftovers of the old list system (Sverre Rabbelier)
- * Convert all list_action redirects to use public_row_extra (Sverre Rabbelier)
- * Convert project_survey to the new list system (Sverre Rabbelier)
- * Convert notifications to the new list system (Sverre Rabbelier)
- * Convert grading_record to new list system (Sverre Rabbelier)
- * Convert user_self to use the new list system (Sverre Rabbelier)
- * Convert student_project.manageOverview to the new list system (Sverre Rabbelier)
- * Convert student_proposal.listSelf to the new list system (Sverre Rabbelier)
- * Convert student_project.withdraw to the new list system (Sverre Rabbelier)
- * Convert project_survey.selectProjects to the new list system (Sverre Rabbelier)
- * Convert showEditRecordList to the new list system (Sverre Rabbelier)
- * Convert survey.viewResults to the new list system (Sverre Rabbelier)
- * Convert organization.listPublic to the new list system (Sverre Rabbelier)
- * Convert group.listRoles to the new list system (Sverre Rabbelier)
- * Convert group.listRequest to the new list system (Sverre Rabbelier)
- * Convert views.base.select to the new list system (Sverre Rabbelier)
- * Convert organization.listProposals to the new list system (Sverre Rabbelier)
- * Convert student_proposal.listOrgs to the new list system (Sverre Rabbelier)
- * Convert organization.applyMentor to the new list system (Sverre Rabbelier)
- * Convert request.listSelf to the new list system (Sverre Rabbelier)
- * Convert surveys to the new list system (Sverre Rabbelier)
- * Convert ghop student_proposal to the new list system (Sverre Rabbelier)
- * Convert ghop tasks to the new list system (Sverre Rabbelier)
- * Convert ghop programs to the new list system (Sverre Rabbelier)
- * Convert ghop organizations to the new list system (Sverre Rabbelier)
- * Convert student_project to the new list system (Sverre Rabbelier)
- * Convert group applications to the new list system (Sverre Rabbelier)
- * Convert grading_project_survey to the new list system (Sverre Rabbelier)
- * Convert club_member to the new list system (Sverre Rabbelier)
- * Convert club to the new list system (Sverre Rabbelier)
- * Convert club_admin to the new list system (Sverre Rabbelier)
- * Convert site to the new list system (Sverre Rabbelier)
- * Convert requests to the new list system (Sverre Rabbelier)
- * Convert program to the new list system (Sverre Rabbelier)
- * Convert priority groups to the new list system (Sverre Rabbelier)
- * Convert presence to the new list system (Sverre Rabbelier)
- * Convert organization to the new list system (Sverre Rabbelier)
- * Convert job to the new list system (Sverre Rabbelier)
- * Convert org_admin to the new list system (Sverre Rabbelier)
- * Convert groups to the new list system (Sverre Rabbelier)
- * Convert grading survey group list to the new system (Sverre Rabbelier)
- * Convert user list to new system (Sverre Rabbelier)
- * Convert student list to new system (Sverre Rabbelier)
- * Convert mentor list to new system (Sverre Rabbelier)
- * Convert host list to new system (Sverre Rabbelier)
- * Convert document list to new system (Sverre Rabbelier)
- * Convert datetime fields to strs in toDict (Sverre Rabbelier)
- * Pass on 'context' argument in base.list (Sverre Rabbelier)
- * Convert base.list to use the new list system (Sverre Rabbelier)
- * Change the default edit redirect to the new list system (Sverre Rabbelier)
- * Add views.helper.lists.urlize (Sverre Rabbelier)
- * Add getListData and getListGenerator to helper.lists (Sverre Rabbelier)
- * ease debugging of json responses by setting &plain=1 (Sverre Rabbelier)
- * Added json(Error)Response to helper.responses (Sverre Rabbelier)
- * Switch all lists to the new code (Mario Ferraro)
- * Enable jq_grid, jlinq, and melangeList js files (Mario Ferraro)
- * Add jlinq to the build script (Mario Ferraro)
- * Add the jlinq directory to app.yaml.template (Mario Ferraro)
- * Add the new melange javascript list code (Mario Ferraro)
- * Update the JQuery css file (Mario Ferraro)
- * Add the jqgrid ui images (Mario Ferraro)
- * Add the jqgrid css files (Mario Ferraro)
- * Add the jlinq library (Mario Ferraro)
- * Add the jquery 'jqgrid' plugin (Mario Ferraro)
-
-= Changelog for 0-6-20100201 =
-
- * Update text for the agreement field to also say "Printable Page" (Lennard de Rijk)
- * Remove edits that do not belong in r7cda75. (Lennard de Rijk)
- * Added missing license statement to two templates. (Lennard de Rijk)
- * Started with implementation of the bulk processing task for OrgApps. (Lennard de Rijk)
- * Displays list of accepted organizations when a program is frozen. (Daniel Hans)
- * Add TODO's to convert student_project.withdraw to use POST (Sverre Rabbelier)
- * Fix error that occurs in combination with the xsrf layer. (Lennard de Rijk)
- * Set default charset to UTF-8. (Lennard de Rijk)
-
-= Changelog for 0-6-20100130 =
-
- * Generate proper gsoc_program survey links (Sverre Rabbelier)
- * Site home page link now shows for every user by default. (Lennard de Rijk)
- * Style fix due to comments on ra68b457f37. (Lennard de Rijk)
- * Make the build script run closure script when running. (Mario Ferraro)
- * Add Closure running script. (Mario Ferraro)
- * Add Closure compiler to repository. (Mario Ferraro)
- * Remove shrinksafe script from repository. (Mario Ferraro)
- * Remove Shrinksafe binaries from repository. (Mario Ferraro)
- * Remove Shrinksafe calling in build script. (Mario Ferraro)
- * Ensure that status is present in dictionary when used in Task Logic. (Lennard de Rijk)
- * Uncommented lines to hide Group menus. (Lennard de Rijk)
- * Edited several menu items to stay visible when your role is inactive. (Lennard de Rijk)
- * Group's menus now collapse by default when the Group is inactive. (Lennard de Rijk)
- * POST Requests made by AppEngine's Task/CronJob do not need a token. (Lennard de Rijk)
- * Clarified the use of the index for GSoCMentors. (Lennard de Rijk)
- * Fix import in GSoC Program Menu to import its own logic. (Lennard de Rijk)
- * Fix missing import in GHOP Program View. (Marcelo de Sena Lacerda)
- * Fix attempt to load wrong Access module in OrgAppSurveys. (Lennard de Rijk)
- * Fix student_proposal.review when there are no reviews (Sverre Rabbelier)
- * Add required index (Sverre Rabbelier)
-
-= Changelog for 0-6-20100117 =
-
- * Do not show li class=... in the sidebar when there is no heading (Sverre Rabbelier)
- * don't send out emails in non-local debug mode (Sverre Rabbelier)
- * Catch OverQuotaErrors in mail_dispatcher.sendEmail (Sverre Rabbelier)
- * Generate proper key field pattern for id based entities (Sverre Rabbelier)
- * Add logic.isIdBased() (Sverre Rabbelier)
- * Security fixes (adds XSRF protection) (Doug Coker)
- * Added missing logic property to OrgAppSurvey Logic module. (Lennard de Rijk)
- * Removed the Club Applications. (Lennard de Rijk)
- * Enabled the new Organization Application Surveys. (Lennard de Rijk)
- * Disabled old Organization Application View. (Lennard de Rijk)
- * Added entry to create/edit OrgAppSurvey in the Program menu. (Lennard de Rijk)
- * Include OrgAppSurvey entries for GHOP and GSoC programs. (Lennard de Rijk)
- * Added OrgAppSurvey View to the GSoC and GHOP module. (Lennard de Rijk)
- * Added OrgApplicationSurvey Logic to the GHOP and GSoC module. (Lennard de Rijk)
- * Added base view for OrgAppSurveys. (Lennard de Rijk)
- * Added access checks related to the new OrgApplications. (Lennard de Rijk)
- * Added OrgAppSurvey redirects. (Lennard de Rijk)
- * Added templates for OrgApplicationSurveys. (Lennard de Rijk)
- * Added has_post boolean to SurveyTakeForm. (Lennard de Rijk)
- * Added logic methods for OrgApplications. (Lennard de Rijk)
- * Added new OrgApplication models. (Lennard de Rijk)
- * Remove not needed get_by_scope class method from OrgTag model. (Pawel Solyga)
- * Only show Developer menu to developers (Sverre Rabbelier)
- * Google JSApi included only once in base template now. (Mario Ferraro)
- * Merged with Pawel. (Daniel Hans)
- * Admin chooses a mentor to a proposal from a drop-down list. (Daniel Hans)
- * Add get_by_scope class method to OrgTag model. (Pawel Solyga)
- * Remove unused imports and fix style issues. (Pawel Solyga)
- * Remove unused imports from soc.tasks.updates modules. (Pawel Solyga)
- * Remove unused imports in mentor and org_admin soc.views.models modules. (Pawel Solyga)
- * Rmove unused import in soc.tasks.responses module. (Pawel Solyga)
- * Fix style issues in soc.models.survey module. (Pawel Solyga)
- * Merged with Sverre. (Daniel Hans)
- * Remove unused imports from soc.middleware. (Pawel Solyga)
- * Fix imports in soc.logic.models.mentor module. (Pawel Solyga)
- * Review proposal page: added summary to, subscores instead of total score. (Daniel Hans)
- * Remove unused imports and fix style issues in soc.views.helper.surveys. (Pawel Solyga)
- * Fix too long lines in soc.views.models.document module. (Pawel Solyga)
- * Style fixes in soc.views.models.role module. (Pawel Solyga)
- * Style fixes in soc.views.models.notification module. (Pawel Solyga)
- * Style fixes in soc.views.models.organization module. (Pawel Solyga)
- * Fix too long lines in soc.views.models.student_project module. (Pawel Solyga)
- * Remove unused imports and fix some style issues in survey modules. (Pawel Solyga)
- * add logic.base.getFromKeyNameOrID (Sverre Rabbelier)
- * Fix wrong imports in tasks.grading_survey_group (Sverre Rabbelier)
- * Create and use the Developer menu (Sverre Rabbelier)
- * Add getDevmenu to sitemap.sidebar (Sverre Rabbelier)
- * Factor out getItemsFromDefaults (Sverre Rabbelier)
- * squash with prior (Sverre Rabbelier)
- * Collapse the 'Developer' menu by default (Sverre Rabbelier)
- * Add priority_group and job to the sidebar (Sverre Rabbelier)
- * Allow grouping under one grouper (Sverre Rabbelier)
- * Program settings now properly validates the reference fields again. (Lennard de Rijk)
- * Fixed SurveyRecord property not being passed along to the redirect. (Lennard de Rijk)
- * Added a method that returns the redirect for submitting a Survey. (Lennard de Rijk)
- * Descriptions of student proposals scores removed. (Daniel Hans)
- * Merged with Lennard. (Daniel Hans)
- * Admin options for proposals separated from 'Score and Review' section. (Daniel Hans)
- * Added survey argument to SurveyTakeForm. (Lennard de Rijk)
- * word regexp pattern changed to \w. (Daniel Hans)
- * Tags entered with capital letters are normalized to lower case. (Daniel Hans)
- * Added cleaning functions for gsoc module. (Daniel Hans)
- * Data validation for tag values added. (Daniel Hans)
- * Predefined tags may be both added or removed. (Daniel Hans)
- * 'Upload organization tags' -> 'Predefined organization tags'. (Daniel Hans)
- * Save organization tags defined in program edit view to the datastore. (Daniel Hans)
- * taggable-mixin directory removed from the repository. (Daniel Hans)
- * Program edit view contains a widget to upload predefined org tags. (Daniel Hans)
- * Tag property added to GSoCOrganization model. (Daniel Hans)
- * New get_or_create function added to Tag class. (Daniel Hans)
- * get_or_create function moved to TaskTag class. (Daniel Hans)
- * str2set cleaning function can have a custom separator. (Daniel Hans)
- * Fixed several imports regarding scope view and scope logic. (Lennard de Rijk)
- * Fixed wrong URL mapping in GradingSuveyGroup. (Lennard de Rijk)
- * Excise jslint. (Dan Bentley)
- * applyMentor redirect uses new mentor_url_name param. (Daniel Hans)
- * Merged with Lennie. (Daniel Hans)
- * mentor_role_name changed to 'gsoc/mentor' to match the modulus design. (Daniel Hans)
- * Fixed import in StudentProject Logic. (Lennard de Rijk)
- * Fixed import for StudentProjects to refer to GSoCOrganization. (Lennard de Rijk)
- * Fixed missing timeline helper import in GSoC module access method. (Lennard de Rijk)
- * Fixed StudentProposal imports for Logic and Views. (Lennard de Rijk)
- * Fixed imports for validate_student_proposal in the cleaner. (Lennard de Rijk)
- * Fixed bug in core Access where the wrong Program Logic was used. (Lennard de Rijk)
- * Fixed bug in Program View getExtraMenus where wrong Logic was used. (Lennard de Rijk)
- * Remove unused imports from soc.views.models.request module. (Pawel Solyga)
-
-= Changelog for 0-6-20091214 =
-
- * Fixed docstrings for Tasks Repsonses. (Lennard de Rijk)
- * Some missing gsoc prefixes added to redirect calls for GSoC Surveys. (Daniel Hans)
- * GSoC specific survey record models moved to gsoc module. (Daniel Hans)
- * Survey model moved back to the core module. (Daniel Hans)
- * New survey model files actually added to repository. (Daniel Hans)
- * Survey models moved to gsoc module. (Daniel Hans)
- * Move (Grading)Project(Survey)Logic to GSoC module (Sverre Rabbelier)
- * GradingSurveyGroup model moved to gsoc module (Daniel Hans)
- * Review model moved to gsoc module (Daniel Hans)
- * getRankerFor in gsoc student_proposal logic imports ranker_root logic. (Daniel Hans)
- * RankerRoot model moved to gsoc module (Daniel Hans)
- * ProposalDuplicates model moved to gsoc module (Daniel Hans)
- * ReviewFollower model moved to gsoc module (Daniel Hans)
- * Follower model moved to gsoc module (Daniel Hans)
- * StudentProposal model moved to gsoc module (Daniel Hans)
- * StudentProject module moved to gsoc module. (Daniel Hans)
- * Fix for "invalid Maps API key" when showing both map and blog feeds. (Mario Ferraro)
- * Move grading survey group logic to gsoc module (Sverre Rabbelier)
- * Move review logic to gsoc module (Sverre Rabbelier)
- * Move ranker root logic to gsoc module (Sverre Rabbelier)
- * Move proposal duplicates logic to gsoc module (Sverre Rabbelier)
- * Move grading record logic to gsoc module (Sverre Rabbelier)
- * Move review follower logic to gsoc module (Sverre Rabbelier)
- * Move the follower logic to the gsoc module (Sverre Rabbelier)
- * Move student proposal logic to gsoc module (Sverre Rabbelier)
- * Move student project logic to gsoc module (Sverre Rabbelier)
-
-= Changelog for 0-6-20091207 =
-
- * Style fix due to comments on rf8ecabdc70. (Lennard de Rijk)
- * Missing slashes added in program redirects. (Daniel Hans)
- * getExtraMenuItems for organization moved to gsoc organization view. (Daniel Hans)
- * Some missing 'gsoc/' prefixes added to GSoC redirects. (Daniel Hans)
- * Entries common for gsoc and ghop students collected in program view. (Daniel Hans)
- * getStudentEntries function moved to gsoc program view. (Daniel Hans)
- * getExtraMenus function in program view refactored. (Daniel Hans)
- * Two missing imports added to student view in gsoc module. (Daniel Hans)
- * Legacy request for list_projects removed from student view. (Daniel Hans)
- * URL pattern for student projects moved to student view in gsoc module. (Daniel Hans)
- * listProjects moved to GSoC Student view. (Daniel Hans)
- * Index to order Organizations by name removed from index.yaml (Daniel Hans)
- * GSoCOrganization index moved and described in index.yaml (Daniel Hans)
- * Merged with Lennard. (Daniel Hans)
- * Capital letters in 'List all Student Projects' link. (Daniel Hans)
- * Message displayed with list of accepted projects moved to GSOCProgram. (Daniel Hans)
- * acceptedProjects function moved to GSoCProgram view. (Daniel Hans)
- * Missing ugettext import added to GSoCProgram view. (Daniel Hans)
- * Typo fixed in DEF_PARTICIPATING_ORGS_MSG_FMT message. (Daniel Hans)
- * GSoC specific messages moved to GSoCProgram view. (Daniel Hans)
- * List of accepted organization works for gsoc module. (Daniel Hans)
- * Fixed typo in StudentProposal View getDefaultReviewContext. (Lennard de Rijk)
-
-= Changelog for 0-6-20091205p4 =
-
- * Empty content for getTimeDependentEntries in program view. (Daniel Hans)
- * Fixed missing GSoCMentor logic import for StudentProjects. (Lennard de Rijk)
- * Removed Student Proposal as a legacy redirect. (Lennard de Rijk)
- * Updated import in Organization to the new GSoC module. (Lennard de Rijk)
- * Fixed incorrect mapping of URL to methods in the new GSoC module. (Lennard de Rijk)
-
-= Changelog for 0-6-20091205p3 =
-
- * Copy getTimelineEntries to GSoCProgram view use proper logics. (Daniel Hans)
- * Fixed list project page to no longer require login. (Lennard de Rijk)
-
-= Changelog for 0-6-20091205p2 =
-
- * GSoC Program Logic now uses the GSoCTimeline logic as argument. (Lennard de Rijk)
- * Corrected scope property for timeline in module conversion updater. (Lennard de Rijk)
- * Removed sidebar entries related to ProjectSurveys. (Lennard de Rijk)
-
-= Changelog for 0-6-20091205p1 =
-
- * Add missing imports and use ugettext instead of the lazy variant. (Lennard de Rijk)
- * Removed the app/gsoc folder. (Lennard de Rijk)
- * Program Logic now doesn't use any Timeline as default. (Lennard de Rijk)
- * Timeline view now uses base Timeline. (Lennard de Rijk)
- * Moved GSoC timeline entries to the correct model. (Lennard de Rijk)
- * Removed sidebar entries for timeline. (Lennard de Rijk)
-
-= Changelog for 0-6-20091205 =
-
- * Move GSoC specific access checks to GSoCAccess (Sverre Rabbelier)
- * Removed unused import from Core access module. (Lennard de Rijk)
- * StudentProposal now imports Logic from the GSoC module. (Lennard de Rijk)
- * Removed Reviewer property from Review model. (Lennard de Rijk)
- * Moved three access checks related to StudentProjects. (Lennard de Rijk)
- * Added Program Logic argument to checkIsHostForProgramInScope. (Lennard de Rijk)
- * Moved two Survey related access checks to the GSoCChecker. (Lennard de Rijk)
- * Set the default prefix for ProjectSurveys to gsoc_program. (Lennard de Rijk)
- * The new Views in the GSoC module now use the GSoCChecker. (Lennard de Rijk)
- * Added Program and Org specific menu entries to the GSoC module. (Lennard de Rijk)
- * Removed unneeded menu entries from the SoC Core. (Lennard de Rijk)
- * Enable the GSoC module (Sverre Rabbelier)
- * Use new surveys in program.py (Sverre Rabbelier)
- * Delete old survey views (Sverre Rabbelier)
- * Disable old survey views (Sverre Rabbelier)
- * Turn old student project and proposals into redirects (Sverre Rabbelier)
- * Enable new GSoC views (Sverre Rabbelier)
- * Add new GSoC views (Sverre Rabbelier)
- * Replace legacy views with redirects (Sverre Rabbelier)
- * Merge with Lennard (Sverre Rabbelier)
- * Add logging.debug(post_dict) to task decorators (Sverre Rabbelier)
- * Let the GSoC Views use the new GSoCChecker. (Lennard de Rijk)
- * Added GSoCChecker module. (Lennard de Rijk)
- * Fixed wrongly addressed Logic being used in the GSoCProgram View. (Lennard de Rijk)
-
-= Changelog for 0-5-20091205 =
-
- * Update Google App Engine from 1.2.7 to 1.2.8 in thirdparty folder. (Sverre Rabbelier)
- * The StudentProject and StudentProposal update should put Key back. (Lennard de Rijk)
- * Allow cron jobs and tasks to work in maintenance mode (Sverre Rabbelier)
- * Hooked up the module_conversion updates to the start_update module. (Lennard de Rijk)
- * Minor typo fixes and whitespace fixes in cleaning module. (Daniel Hans)
- * Input form values are properly cleared when school_type is changed. (Daniel Hans)
- * Fixed issue for cleaning student fields on server side. (Daniel Hans)
- * Minor typo errors fixed in help texts for Student role. (Daniel Hans)
- * runGradingSurveyGroupUpdate update includes setting new survey. (Daniel Hans)
- * Module conversion update for survey models. (Daniel Hans)
- * Only active students may edit their student projects. (Daniel Hans)
- * iterative_task uses pickle module instead of simplejson. (Daniel Hans)
- * Fixed bug in process_exception function in soc.middleware module. (Daniel Hans)
- * Fixed bug in base editGet where suffix must be a String. (Lennard de Rijk)
- * Fixed typo in access module introduced in rf70ce. (Lennard de Rijk)
- * Merged checkCanCreateFromRequest and checkIsMyGroupAcceptedRequest. (Lennard de Rijk)
- * Removed unsused Model properties from Document, Survey and User. (Lennard de Rijk)
- * Code fixes in GHOP view modules based on pylint output. (Daniel Hans)
- * Code fixes in GHOP models based on pylint output. (Daniel Hans)
- * Code fixes in GHOP logic modules based on pylint output. (Daniel Hans)
- * When a new role is created, fields are populated from previous roles. (Daniel Hans)
- * Default accepted text will not be shown if one is set by the Program. (Lennard de Rijk)
- * Switched T-shirt questions order. (Lennard de Rijk)
- * Adds buttons to notifications list. (Madhusudan.C.S)
- * Edited version tag to match right format. (Lennard de Rijk)
-
-= Changelog for 0-5-20091121 =
-
- * Url pattern fix for tasks handler in app.yaml.template. (Daniel Hans)
- * Forgotten simplejson import added. (Daniel Hans)
- * The Document conversion now creates documents with new prefixes. (Lennard de Rijk)
- * Added gsoc_program and gsoc_org prefixes to the Document Model. (Lennard de Rijk)
- * Added missing Document Prefix to the GSoC Program module. (Lennard de Rijk)
- * Fixed missing document_prefix for the GHOP Program module. (Lennard de Rijk)
- * Added gsoc_org and gsoc_program to the Document Rights system. (Lennard de Rijk)
- * Fixed typo in GHOP core registerRights documentation. (Lennard de Rijk)
- * Use the proper prefix in 'Create new Document' entry for programs. (Lennard de Rijk)
- * Added general description of the jslint.sh script. (Mario Ferraro)
- * Added general description of the shrinksafe.sh script. (Mario Ferraro)
- * Added general description of the jsdoctoolkit.sh script. (Mario Ferraro)
- * Bug on GHOP task public view fixed. (Daniel Hans)
- * Show register link only when a user has AwaitingRegistration task. (Daniel Hans)
- * Mentors list cleaning optimization. (Daniel Hans)
- * A person without User profile cannot pass checkStatusForTask checker. (Daniel Hans)
- * Whitespace fixes in GHOP program view. (Daniel Hans)
- * Status is not filtered when checking if a user can see his tasks. (Daniel Hans)
- * GHOP Timeline fixes. (Pawel Solyga)
- * GMaps related JS changed to use new google namespace. (Mario Ferraro)
- * Changes in tags are saved to the data store. (Daniel Hans)
- * Tasks may be deleted by pressing 'Delete' button on the edit view. (Daniel Hans)
- * Minor fix in tags module. (Daniel Hans)
- * tags.py module, which contains helper class for tags, is added. (Daniel Hans)
- * Users who claim or work on tasks may list them without a student role. (Daniel Hans)
- * Minor linguistic changes to NOTICE file for the taggable module. (Daniel Hans)
- * NOTICE file added to the taggable module. (Daniel Hans)
- * Move some functions from TaskTag to Task model. (Daniel Hans)
- * Docstring fix for delete_tag function. (Daniel Hans)
- * 'scope' field moved from TaskTag to the parent class. (Daniel Hans)
- * TaskArbritraryTag now has auto_delete set to True by default. (Daniel Hans)
- * Adds a new property to taggable which automatically deletes an empty tag. (Daniel Hans)
- * Fixed an error with the task_history not being loaded. (Lennard de Rijk)
- * Fixed 'Register as a student' link problem for GHOP program. (Daniel Hans)
- * Lists of student tasks view does not use pagination. (Daniel Hans)
- * Accidental module change in settings.py fixed. (Daniel Hans)
- * List view of all tasks for a GHOP student. (Daniel Hans)
- * getListContentForData function added to lists helper. (Daniel Hans)
- * HtmlSanitizer becomes Python 2.6 compatible. (Daniel Hans)
- * Convert gen_app_yaml.py to optparse (Sverre Rabbelier)
-
-= Changelog for 0-5-20091102 =
-
- * Minor (mostly stylish and whitespace) fixes in GHOP access.py module. (Daniel Hans)
- * Multiple choice nonrequired questions now accept empty answers. (Daniel Hans)
- * checkIsHostForProgram fixes: logic argument has default value. (Daniel Hans)
- * checkIsHostForProgram function takes a new 'logic' argument. (Daniel Hans)
- * If checkCanOrgAdminOrMentorEdit does not find a task, redirect to 404. (Daniel Hans)
- * Script to run JSLint over JS files to check JS code quality. (Mario Ferraro)
- * JSON2 utilities now loaded by default. (Mario Ferraro)
- * Module Conversion also changes the RankerRoots. (Lennard de Rijk)
- * Now showing the message contained in Requests on the correct pages. (Lennard de Rijk)
- * Process invite page now shows the right Role name in the page name. (Lennard de Rijk)
- * Request lists now show display name as well as the link id. (Lennard de Rijk)
- * The work_submission model's update now reflected in views and logic. (Madhusudan.C.S)
- * Whitespace fix in settings.py and added missing authors. (Lennard de Rijk)
- * Changed the access checks in the GSoC module to match the new checks. (Lennard de Rijk)
- * Removed the now obsolete Request helper module. (Lennard de Rijk)
- * Edited the necessary access checks for all the Role views. (Lennard de Rijk)
- * Facilitate the use of the ID-based Requests. (Lennard de Rijk)
- * Redone the access checks to work with the new Request model. (Lennard de Rijk)
- * Removed now unused method from Role Logic. (Lennard de Rijk)
- * Redone the notifications to work with the new Request model. (Lennard de Rijk)
- * Reworked the redirects to work with the new Request model. (Lennard de Rijk)
- * Redone the request View to work with the new model. (Lennard de Rijk)
- * Redone the request templates to work with the new ID-based request. (Lennard de Rijk)
- * Made Request Logic ID-based and added some helper methods. (Lennard de Rijk)
- * Redone the Request object to contain a message property. (Lennard de Rijk)
- * Add a redirectLegacyRequest response (Sverre Rabbelier)
- * fix typo in reponses.py (Sverre Rabbelier)
- * GSoC Views (Sverre Rabbelier)
- * Script to run JSDocToolkit over our JS files. (Mario Ferraro)
- * JSDocToolkit 2.3.0 added to create documentation for JS files. (Mario Ferraro)
- * Integration of general Melange JS utilities in base template. (Mario Ferraro)
- * General JavaScript utilities for melange. (Mario Ferraro)
- * Once a task has been approved it can no longer be unapproved. (Madhusudan.C.S)
- * Fixes issue 697. (Daniel Hans)
- * Use skipFields method in the expando base logic. (Lennard de Rijk)
- * Minor typographical errors fixed. (Daniel Hans)
- * Whitespaces fixed in task view. (Daniel Hans)
- * When a task is edited, 'modified_by' field is not cleared any more. (Daniel Hans)
- * Changed checkCanMakeRequestToGroup to use Logic instance. (Lennard de Rijk)
- * Update Google App Engine from 1.2.5 to 1.2.7 in thirdparty folder. (Sverre Rabbelier)
- * Disabled GHOP module. (Lennard de Rijk)
- * Added logic paramters to two access checks. (Lennard de Rijk)
- * Set the Mentors list to the user that is suggesting a Task. (Lennard de Rijk)
- * Fixed access check and seed for Task Suggest page. (Madhusudan.C.S)
- * Removed query wether or not the current user was ever an org admin. (Lennard de Rijk)
- * Fixed the TimelineConversionUpdate to also update the GSoCProgram. (Lennard de Rijk)
- * Use scope_path for updating Documents. (Lennard de Rijk)
- * Renamed runGradingProjectSurveyRecordsUpdate to match style. (Lennard de Rijk)
- * Fixed error in the runDocumentUpdate. (Lennard de Rijk)
- * Added GradingSurveyGroup update to the Module Conversion. (Lennard de Rijk)
- * Fixed bug in StudentProposal update. (Lennard de Rijk)
- * Fixed module conversion imports. (Lennard de Rijk)
- * Fix typographical error and changes in status messages for Tasks. (Matthew Wilkes)
- * Separated the publish and approve button on the Task list page. (Madhusudan.C.S)
- * Add function for CSV export of survey records for a given survey. (Pawel Solyga)
- * Add functions for CSV export of organizations and roles. (Pawel Solyga)
- * Add StudentProposal conversion update (Sverre Rabbelier)
-
-= Changelog for 0-5-20091004 =
-
- * Add Timeline conversion update (Sverre Rabbelier)
- * Add update for Documents (Sverre Rabbelier)
- * Added update for SurveyRecords (Sverre Rabbelier)
- * Added update for Surveys, ProjectSurveys and ProjectGradingSurveys. (Lennard de Rijk)
- * Added StudentProject update to the Module Conversion updates. (Lennard de Rijk)
- * Added Review module conversion update. (Lennard de Rijk)
- * Removed obsolete value to unpack in the updateGHOPTask Task. (Lennard de Rijk)
- * Also pass along the args when running an update. (Lennard de Rijk)
- * GHOP Comments do not need to be created by a User. (Lennard de Rijk)
- * Fix the deadline counter to start after Task claim is accepted. (Madhusudan.C.S)
- * Only set new properties outside the "properties" loop. (Lennard de Rijk)
- * Add the Student to GSoCStudent conversion. (Lennard de Rijk)
- * Only store all the entities once in the ModuleConversion. (Lennard de Rijk)
- * Add OrgAdmin and Mentor to GSoCOrgadmin and GSoCMentor updates. (Lennard de Rijk)
- * Added the Organization to GSoCOrganzation update. (Lennard de Rijk)
- * Use the iterative task iterator for the ProgramConversion update. (Lennard de Rijk)
- * Changed the working of the iterative_task decorator. (Lennard de Rijk)
- * Removed order property in the getBatchOfData. (Lennard de Rijk)
- * Removed the debug logging line from the Task decorator. (Lennard de Rijk)
- * Made getBatchOfData use start_key instead of next_key. (Lennard de Rijk)
- * Fixed use of wrong dictionary key in Task Decorators. (Lennard de Rijk)
- * Moved the Tasks decorators to their own module. (Lennard de Rijk)
- * Make batch size a param to getBatchOfData (Sverre Rabbelier)
-
-= Changelog for 0-5-20090928 =
-
- * Merging test back in (Sverre Rabbelier)
- * Fixed whitespace in base model. (Lennard de Rijk)
- * Move soc.logic.tasks to soc.tasks.responses (Sverre Rabbelier)
- * Add task and iterative_task decorator (Daniel Hans)
- * Fixed Task public view to always call the update method. (Lennard de Rijk)
- * Add task and iterative_task decorator (Daniel Hans)
- * Fixed GHOP Task Logic's updateEntityProperties. (Lennard de Rijk)
- * Fixes the problem of GHOP Task editing after it is created. (Madhusudan.C.S)
- * Style fix in soc.views.models.request module. (Pawel Solyga)
- * Add missing blank line in soc.modules.gsoc.logic.models.student module. (Pawel Solyga)
- * Add missing blank line in soc.models.survey_record module. (Pawel Solyga)
- * Fix whitespace in pylint disable-msg comment. (Pawel Solyga)
- * Added first version of the 1st step in the module conversion process. (Lennard de Rijk)
- * Style fixes in seed_db module. (Pawel Solyga)
- * Style fix in soc.views.helper.redirects module. (Pawel Solyga)
- * Fix indentions in student_project view module. (Pawel Solyga)
- * Corrected an import in the student_school_type update module. (Lennard de Rijk)
- * Prevent modification of key fields (Sverre Rabbelier)
- * Add a script to generate a kml file with all active GSoC participants (Daniel Hans)
-
-= Changelog for 0-5-20090922 =
-
- * Renamed timeline entry in GHOP Timeline. (Lennard de Rijk)
- * Fixed a typo in getRightsChecker docstring (Sverre Rabbelier)
- * Throw an exception when registering an already registered right (Sverre Rabbelier)
- * Convert cleaning module to use the new checker in core (Sverre Rabbelier)
- * Use ',' instead of ':' in function call (Sverre Rabbelier)
- * Remove ghop related liens from soc_core callback (Sverre Rabbelier)
- * Fixed unknown variable in GHOP Access checker. (Lennard de Rijk)
- * Enable document system for GHOP (Madhusudan.C.S)
- * Use the new rights code in core (Sverre Rabbelier)
- * Add document rights registration to core (Sverre Rabbelier)
- * Move around Core methods into more relevant sections (Sverre Rabbelier)
- * Use getOrCreateTaskSubscriptionForTask in the TaskSubscription View. (Lennard de Rijk)
- * Added getOrCreateTaskSubscriptionForTask to TaskSubscription Logic. (Lennard de Rijk)
- * Added listing of all Accepted GHOPOrganizations to the Program View. (Lennard de Rijk)
- * Add ret_list keyword argument to tags_strings method. (Madhusudan.C.S)
- * Added index to sort GHOPOrganizations per program by their name. (Madhusudan.C.S)
- * Added a templatetag for table field to show date in ordinal fashion. (Madhusudan.C.S)
- * Added missing argument to org_app View access check. (Lennard de Rijk)
- * Added GHOP views helper to INSTALLED_APPS in django settings.py. (Madhusudan.C.S)
- * Added apply_mentor view to GHOPOrganization view. (Lennard de Rijk)
- * Added 2 missing views to the GHOPOrganization View. (Lennard de Rijk)
- * Fixed error in mentor field cleaning. (Lennard de Rijk)
- * Removed undefined order argument in GHOP Task View. (Lennard de Rijk)
- * Bron paper bag fix, should have been part of ref809d10aa. (Lennard de Rijk)
- * Fixed error occuring when tags list was empty in GHOPProgram edit. (Lennard de Rijk)
- * Map JS renamed because of latest changes. (Mario Ferraro)
- * Shrinksafe complains during compression of map JS fixed. (Mario Ferraro)
- * Shrinksafe script fixed to workaround Linux vs BSD stat packages. (Mario Ferraro)
- * Added program_logic parameter to checkCanEditTimeline access check. (Madhusudan.C.S)
- * Removed slots and apps_tasks_limit from extra_dynaexclude in params. (Madhusudan.C.S)
- * Added all indexes required for GHOP specific queries. (Madhusudan.C.S)
- * Added all GHOP specific css properties. (Madhusudan.C.S)
- * Fixed the Student update to properly find its own URL. (Lennard de Rijk)
- * Enabled the Student School type updater. (Lennard de Rijk)
- * Added updater to update the existing Student models. (Madhusudan.C.S)
- * Moved the Student cleaner to the create form. (Lennard de Rijk)
- * Changed the TaskRunner to start and run update tasks. (Lennard de Rijk)
- * Changed the cleaner to deal with the new Student properties. (Madhusudan.C.S)
- * Added school_type and grade property to Student model. (Madhusudan.C.S)
- * Moved the updater to its own module. (Lennard de Rijk)
- * Added Student create/edit/apply template. (Madhusudan.C.S)
- * Enabled the GHOPStudent view in the GHOP module. (Lennard de Rijk)
- * Added GHOPStudent view and access checks. (Madhusudan.C.S)
-
-= Changelog for 0-5-20090914 =
-
- * Using the new checkIsMyActiveRole check where necessary. (Lennard de Rijk)
- * Added checkIsMyActiveRole check to the access module. (Lennard de Rijk)
- * Make coverage conditional on run.py flag (Sverre Rabbelier)
- * Manually call start and end in test_sidebar (Sverre Rabbelier)
- * Use request.start and end (Sverre Rabbelier)
- * Add a start and end method to MockRequest (Sverre Rabbelier)
-
-= Changelog for 0-5-20090913 =
-
- * Changed the conversion starter system to an update starter system. (Lennard de Rijk)
- * Use the new optional argument to endRequest in the middleware (Sverre Rabbelier)
- * Add optional argument to endRequest (Sverre Rabbelier)
- * Document value store methods (Sverre Rabbelier)
- * Remove memcache setup from interactive.py script (Sverre Rabbelier)
- * Add docstring to middleware hooks (Sverre Rabbelier)
- * Fix copy/paste fail in maintenance middleware docstring (Sverre Rabbelier)
- * Enable the new middleware and empty the view decorator (Sverre Rabbelier)
- * Add ValueStoreMiddleware (Sverre Rabbelier)
- * Add MaintenanceMiddleware (Sverre Rabbelier)
- * Add ExceptionHandlerMiddleware (Sverre Rabbelier)
- * Add Middleware directory (Sverre Rabbelier)
- * Fix broken maintenance mode (Sverre Rabbelier)
- * Fix 500 when saving /site/edit without email (Sverre Rabbelier)
- * Remove __melange_queries logging (Sverre Rabbelier)
- * Moved enabling GHOP to settings.py. (Lennard de Rijk)
- * Added the GHOP modules to the callback. (Lennard de Rijk)
- * Use available Rights Checker when rights are already defined. (Madhusudan.C.S)
- * Several style and import fixes regarding the GHOP module. (Madhusudan.C.S)
- * Added jquery in-place-edit. (Madhusudan.C.S)
- * Added GHOP Program View. (Madhusudan.C.S)
- * Added GHOP Timeline View. (Madhusudan.C.S)
- * Added GHOP Task Subscription View. (Madhusudan.C.S)
- * Added GHOP Organization View. (Madhusudan.C.S)
- * Added GHOP Org Admin View. (Madhusudan.C.S)
- * Added GHOP Mentor View. (Madhusudan.C.S)
- * Added GHOP Task View. (Madhusudan.C.S)
- * Renamed method in GHOP Cleaning to match style guide. (Lennard de Rijk)
- * Hook up the conversion tasks (Sverre Rabbelier)
- * Add a view to start conversion tasks (Sverre Rabbelier)
- * Add templates for conversion task starter (Sverre Rabbelier)
- * Fix import sort order (Sverre Rabbelier)
- * Fix miscaching of homepage (Sverre Rabbelier)
- * Use system.getHostname() everywhere (Sverre Rabbelier)
- * Add a getHostname to system (Sverre Rabbelier)
- * Enable local memcache api in interactive console (Sverre Rabbelier)
- * Scripts to run Shrinksafe during build. (Mario Ferraro)
- * Added Shrinksafe code to shrink JS files before deploy. (Mario Ferraro)
-
-= Changelog for 0-5-20090906 =
-
- * Remove some left overs from recent Google App Engine 1.2.5 update. (Pawel Solyga)
- * Update Google App Engine from 1.2.3 to 1.2.5 in thirdparty folder. (Pawel Solyga)
- * Fixed Ivory Coast rename that was introduced in r74f0972f52. (Lennard de Rijk)
- * Fixed GHOP Cleaning clean_mentors_list method. (Lennard de Rijk)
- * Added cleaning method to validate a list of mentor's link_ids. (Madhusudan.C.S)
- * Added cleaning method to convert a list of csv strings into a set. (Madhusudan.C.S)
- * Added additional methods for TaskTag model. (Madhusudan.C.S)
- * Updated to r11 of app_profiler (Sverre Rabbelier)
- * Prefetch referenced fields in project listing (Sverre Rabbelier)
- * Hook up prefetching in the view (helper) (Sverre Rabbelier)
- * Add support for prefetching fields (Sverre Rabbelier)
- * only store queries in debug mode (Sverre Rabbelier)
- * fix typo in memcache.get in base logic (Sverre Rabbelier)
- * Store queries in memcache (Sverre Rabbelier)
- * Do not store core in Checker (Sverre Rabbelier)
- * Add self.in_request to Core and verify correct state (Sverre Rabbelier)
- * Convert profiler/start page to html (Sverre Rabbelier)
- * Use profiler.py to prevent import failures (Sverre Rabbelier)
- * Set expiration date of static dirs to 1d (Sverre Rabbelier)
- * GHOPWorkSubmission model is made id_based and inherits from base. (Madhusudan.C.S)
- * Added missing blank line to GHOP redirects helper. (Lennard de Rijk)
- * Added __init__ file to the GHOP views module. (Madhusudan.C.S)
- * Added list_info method for use in the GHOP module. (Madhusudan.C.S)
- * Updated the docstrings for GHOP access methods. (Madhusudan.C.S)
- * Added access checks for GHOP Module. (Madhusudan.C.S)
- * Added redirects module for GHOP. (Madhusudan.C.S)
- * Added templatetag and filter libraries for GHOP. (Madhusudan.C.S)
- * Set profiler/ to admin only (Sverre Rabbelier)
- * Use per-request store to store access rights (Sverre Rabbelier)
- * Use the per-request store to store the context (Sverre Rabbelier)
- * Hook up the new per-request value storage (Sverre Rabbelier)
- * Add a new per-request value store to Core (Sverre Rabbelier)
- * Profiling patch (Sverre Rabbelier)
- * STATE_TRANSITIONS dictionary values are changed to strings. (Madhusudan.C.S)
- * Added templatetags for use in the GHOP module. (Madhusudan.C.S)
- * Bulk added templates for GHOPOrganization views. (Madhusudan.C.S)
- * Bulk add templates regarding GHOPProgram Views. (Madhusudan.C.S)
- * Bulk add templates regarding Task Views. (Madhusudan.C.S)
- * Added Task for sending out emails to subscribed users about a Comment. (Madhusudan.C.S)
- * Added method to send out mail about a Task update. (Madhusudan.C.S)
- * Added template for mails regarding Task updates. (Madhusudan.C.S)
- * Added several methods to the Task Logic module. (Madhusudan.C.S)
- * Removed scope and scope_path properties from GHOPComment. (Madhusudan.C.S)
- * Added reference to GHOPProgram entity for Work Submissions. (Madhusudan.C.S)
- * Added GHOP Form cleaning module. (Madhusudan.C.S)
- * Added GHOPTaskSubscription Logic module. (Madhusudan.C.S)
- * Added GHOP Student Logic. (Madhusudan.C.S)
- * Added GAE tasks that are related to updating GHOP Tasks. (Madhusudan.C.S)
- * Added GHOP Logic helper package. (Madhusudan.C.S)
- * Added ghop-update queue for dealing with GHOP Task updates. (Madhusudan.C.S)
- * Added GHOP task package for holding GAE Task related modules. (Madhusudan.C.S)
- * Removed workflow property from Program model. (Lennard de Rijk)
- * Moved createTimelineForType to Program Logic. (Madhusudan.C.S)
- * Added timeline_logic keyword argument to Program logic. (Lennard de Rijk)
- * Make the timeline View work directly on the GSoC timeline. (Lennard de Rijk)
- * Make Sponsor the scope_logic for the GSoC timeline model. (Lennard de Rijk)
- * Take the safe way when trying to delete a Sponsor. (Lennard de Rijk)
- * GHOPComment Logic is made to inherit from base Logic. (Madhusudan.C.S)
- * Added role_name params to OA and Mentor Logic. (Madhusudan.C.S)
- * Added model to keep track subscriptions for GHOPTasks. (Madhusudan.C.S)
- * JSLint comment moved because of new uncompressed JSLint complains. (Mario Ferraro)
- * JSLint script file renamed because of better file name style. (Mario Ferraro)
- * JSLint updated to uncompressed version. (Mario Ferraro)
- * Renamed all JS files affected by former commit. (Mario Ferraro)
- * Made all JS code JSLint compliant. (Mario Ferraro)
- * JSLint added to verify Javascript code quality against guidelines. (Mario Ferraro)
- * Added SurveyRecordForm for viewing a SurveyRecord. (James Levy)
- * Make sure the PlainTextWidget converts linebreaks to proper HTML. (Lennard de Rijk)
-
-= Changelog for 0-5-20090825 =
-
- * Only create GradingRecords for succeful/failed projects with Surveys. (Lennard de Rijk)
- * Set default taking access for GradingProjectSurvey to org. (Lennard de Rijk)
- * Added org taking access to Surveys. (Lennard de Rijk)
- * Removed reference to GHOPTask and GHOPProgram. (Madhusudan.C.S)
- * Added GHOPStudent model which inherits from core Student model. (Madhusudan.C.S)
- * Changed GHOPComment model to inherit from base model. (Madhusudan.C.S)
- * Changed all status to start with Uppercase letters, made 3 properties required. (Madhusudan.C.S)
- * Reverting last 4 patches containing GHOP related views. (Madhusudan.C.S)
- * Added extra menu items per GHOPOrganization. (Madhusudan.C.S)
- * Added Organization View for GHOP. (Madhusudan.C.S)
- * Added timeline view for GHOP. (Madhusudan.C.S)
- * Extended program configuration create/edit views to support GHOP. (Madhusudan C.S)
- * Change dotted path to the views in URL patterns to a params parameter. (Madhusudan.C.S)
- * program_logic is passed as a parameter to three checkers. (Madhusudan.C.S)
- * Whitespace fix in Base view. (Daniel Hans)
- * Argument to_json added to json function in Base view. (Daniel Hans)
- * Whitespace fix in Program view. (Daniel Hans)
- * Added redirect for use to manage statistics. (Daniel Hans)
-
-= Changelog for 0-5-20090814p1 =
-
- * Fixed call to get QueryForFields due to changes in r0548101922. (Lennard de Rijk)
-
-= Changelog for 0-5-20090814 =
-
- * checkIsAfterEvent takes logic as argument. (Madhusudan.C.S)
- * Redone the acceptedStudentsExport functionality. (Lennard de Rijk)
- * Added export for Org Admins and Mentors, but only one per User. (Lennard de Rijk)
- * Added methods that give the shipping information for a role entity. (Lennard de Rijk)
- * Changed to_dict to call all callable values. (Lennard de Rijk)
- * Fixed Survey Take page which was erroring on undefined variables. (Lennard de Rijk)
- * Removed unused import from GradingProjectSurvey view. (Lennard de Rijk)
- * Cleaned up Survey Logic. (Lennard de Rijk)
- * Added base Model for Expando models. (Lennard de Rijk)
- * Added intial GSoC logic modules. (Lennard de Rijk)
- * Added basic GSoC module models. (Lennard de Rijk)
- * Added inital GSoC module package structure. (Lennard de Rijk)
- * Set ASCII-only cleaner for first and last name. (Lennard de Rijk)
- * Changed the parameter from ancestor to ancestors. (Madhusudan.C.S)
- * updateOrCreateFromFields is made to call updateOrCreateFromKeyName. (Madhusudan C.S.)
- * Added ancestors property to getQueryForFields. (Madhusudan C.S.)
- * Completed the proper filter for the GradingProjectSurvey results. (Lennard de Rijk)
- * Project Survey results view now doesn't list all for plain users. (Lennard de Rijk)
- * Set the proper filters for the ProjectSurvey results view. (Lennard de Rijk)
- * Fix copy/paste fail in Survey results view regarding allowed_to_read. (Lennard de Rijk)
- * getResultsViewRecordFields does not need fields argument anymore. (Lennard de Rijk)
- * Open up the Survey Results view for users. (Lennard de Rijk)
- * Upgrade jQuery UI to version 1.7. (Mario Ferraro)
- * Updated several page titles to contain more information. (Lennard de Rijk)
- * Added hook for the edit view. (Lennard de Rijk)
- * Redirect to the manage page for projects. (Lennard de Rijk)
- * Made the specific SurveyTakeForm used in a View part of params. (Lennard de Rijk)
- * Removed the grade_choices keyword argument from GradeSurveyTakeForm. (Lennard de Rijk)
- * Enable the project management page to be visited for projects. (Lennard de Rijk)
-
-= Changelog for 0-5-20090809 =
-
- * Added project title and student name to the ProjectSurvey take page. (Lennard de Rijk)
- * Added capability to update a single GradingRecord on the edit page. (Lennard de Rijk)
- * Upgrade to jQuery library to 1.3.2 version. (Mario Ferraro)
- * List of countries is actually alphabetically sorted. (Daniel Hans)
- * Argument store added to updateEntityProperties. (Daniel Hans)
- * Assign each country its continent. (Daniel Hans)
- * Added and enabled new access check for viewing ProjectSurvey records. (Lennard de Rijk)
- * Added and enabled access check for viewing SurveyRecords. (Lennard de Rijk)
- * Enabled Org Admins to take Surveys on behalf of their Mentors. (Lennard de Rijk)
- * The Survey Results view now only list Records of interest. (Lennard de Rijk)
- * Redone the list_info function for the Project's manage page. (Lennard de Rijk)
- * Added redirect to the StudentProject manage page. (Lennard de Rijk)
- * Whitespace fix in User model. (Lennard de Rijk)
- * ViewResults for Surveys is now showing all SurveyRecords. (Lennard de Rijk)
- * Added redirect for viewing SurveyRecords and enabled links. (Lennard de Rijk)
- * Removed TODO from ProjectSurvey and GradingProjectSurvey views. (Lennard de Rijk)
- * Added templates for listing SurveyRecords. (James Levy)
- * The Survey public view now uses the proper page name. (Lennard de Rijk)
- * Added view for showing Survey Records. (Lennard de Rijk)
- * Added template for viewing Survey Records. (James Levy)
- * Use proper id for survey_description div. (Lennard de Rijk)
- * Added link for students to resign their profile to the Program menu. (Lennard de Rijk)
- * Fixed access check for Student Manage/Resign page. (Lennard de Rijk)
- * Fixed typo in access module comment. (Lennard de Rijk)
- * Added minimum age property to Program model. (Madhusudan C.S.)
- * Added some helpful text to the Student Project Withdraw view. (Lennard de Rijk)
- * Fixed Org home view map to show iff projects have been announced. (Lennard de Rijk)
-
-= Changelog for 0-5-20090802 =
-
- * addressed comments by Lennard (Sverre Rabbelier)
- * add checkIsHostForStudentProject checker (Sverre Rabbelier)
- * Add parent parameter to accommodate entity groups. (Madhusudan.C.S)
- * accept constructor parameters in Notification logic. (Madhusudan.C.S)
- * Fix for copy/paste fail (Sverre Rabbelier)
- * Add link to withdraw student project page (Sverre Rabbelier)
- * Allow hosts to withdraw student projects (Sverre Rabbelier)
- * Add three new redirects (Sverre Rabbelier)
- * Style fixes in the ghop task model module. (Madhusudan.C.S)
- * Added optional filters property to deepFetch. (Pawel Solyga)
- * Organization home page map dimensions now fit the world. (Mario Ferraro)
- * Role name for mentors now correctly shown in map's infoWindows. (Mario Ferraro)
- * Enable the map of the connections between mentors and students. (Lennard de Rijk)
- * Edited the role form to clarify the intention of the checkbox+marker. (Lennard de Rijk)
- * Renamed main CSS and map JS file due to recent changes. (Lennard de Rijk)
- * Moved the student to mentor map on the org home page below the list. (Mario Ferraro)
- * Redone the student to mentor map JS to reflect recent changes. (Mario Ferraro)
- * Redone the gathering of data for the student to mentor map. (Lennard de Rijk)
- * Style fixes in StudentProject View. (Lennard de Rijk)
- * Factored out the "No Record Available" message. (Lennard de Rijk)
- * Pre-storing the information for setStudentProjectSurveyInfo. (Lennard de Rijk)
- * Added project information to the Project manage page. (Lennard de Rijk)
- * Renamed hasAtLeastOneRecord to hasRecord. (Lennard de Rijk)
- * Added list of Surveys to the Project's manage page. (Lennard de Rijk)
- * Added getProjectSurveyInfoForProject to list_info helper. (Lennard de Rijk)
- * Added new table templates for showing Suryves on the manage page. (Lennard de Rijk)
- * Added columns to the manage page showing the amount of evaluations. (Lennard de Rijk)
- * Added hasAtLeastOneRecord method to Survey Logic. (Lennard de Rijk)
- * Two style fixes. (Lennard de Rijk)
-
-= Changelog for 0-5-20090727 =
-
- * Every radio button is now properly shown on a new line. (Lennard de Rijk)
- * Adds to Melange a tags framework based on taggable-mixin. (Madhusudan C.S)
- * Send out a Notification upon creation of a new Request entity. (Lennard de Rijk)
- * Use proper in-line import in Request helper. (Lennard de Rijk)
- * Added sendNewRequestNotification to the Notifications helper. (Lennard de Rijk)
- * Added template for a notification upon arrival of a new Request. (Lennard de Rijk)
- * Tables listing Requests now show the name of the Group. (Lennard de Rijk)
- * Added missing role_name to org_admin Logic. (Lennard de Rijk)
- * Added getRoleLogicsToNotifyUponNewRequest for use with notifications. (Lennard de Rijk)
- * Use proper in-line imports in the Notifications helper. (Lennard de Rijk)
- * fix for issue 653 by adding wrap=hard attr to textareas for surveys (James Levy)
- * seed_db now creates fixture student project entities (James Levy)
- * Use role_name where needed for creating/handling requests. (Lennard de Rijk)
- * Use role_name to register the Role with the Group View. (Lennard de Rijk)
- * Use role_name as key to store the different Role Views. (Lennard de Rijk)
- * Style fixes in Group View. (Lennard de Rijk)
- * Added registerRole to Role Logic where all roles are registered. (Lennard de Rijk)
- * update Sidebar tests to use getCore (Sverre Rabbelier)
- * register a core for the test modules to use (Sverre Rabbelier)
- * Fixed line length. (Mario Ferraro)
- * Another batch of style fixes for Surveys. (Lennard de Rijk)
- * More style fixes due to code reviews for Surveys. (Lennard de Rijk)
- * Several style fixes and code cleaning for surveys. (Lennard de Rijk)
- * Fixed wrong js being referenced by the public Survey template. (James Levy)
- * Added validation to email fields where needed. (Lennard de Rijk)
- * Slow down mail tasks some more to ensure they actually complete. (Lennard de Rijk)
-
-= Changelog for 0-5-20090711 =
-
- * Fixed typo in ProjectSurvey reminder mail. (Lennard de Rijk)
- * Fixed the redirect for Survey reminder emails. (Lennard de Rijk)
- * Fixed typo in GradingProjectSurvey reminder email. (Lennard de Rijk)
- * Add queue.yaml to build scripts. (Pawel Solyga)
- * Changed URL pattern for starting sending out survey reminders. (Lennard de Rijk)
- * Added the Surveys Tasks to the registered URL patterns. (Lennard de Rijk)
- * Added a view to start sending out a reminder. (Lennard de Rijk)
- * Added Surveys Tasks module to send reminders. (Lennard de Rijk)
- * Added empty Tasks package and queue.yaml. (Lennard de Rijk)
- * Edited help text to be more clear when a Survey has been submitted. (Lennard de Rijk)
- * Add setOrganizationInSurveyRecords function to stats.py script. (Pawel Solyga)
- * Add Organization reference property to ProjectSurveyRecord. (Pawel Solyga)
- * Fix indention and add missing dot in docstring in survey models. (Pawel Solyga)
- * GradingSurveyGroup now uses DynaForm for its forms. (Lennard de Rijk)
- * Indention fixes and adding "reference_class=" in ReferenceProperty. (Pawel Solyga)
- * Start using buildout to bring in external dependencies. (Augie Fackler)
- * Added GradingSurveyGroup to the sitemap and sidebar. (Lennard de Rijk)
- * Completed the Create and Edit view for GradingSurveyGroup. (Daniel Diniz)
- * Fixed GradingRecord and GradingSurveyRecord Logic. (Lennard de Rijk)
- * Added denySidebar to several access checks. (Lennard de Rijk)
- * Added Surveys to sidebar menu. (Lennard de Rijk)
- * Changed title entry in GradingSurveyGroup's public template to name. (Lennard de Rijk)
- * Added skeleton view and templates for GradingSurveyGroup. (Lennard de Rijk)
- * Added name property to GradingSurveyGroup. (Lennard de Rijk)
- * Added missing blank line to GradingSurveyGroup logic. (Lennard de Rijk)
- * Added logic for GradingRecord and GradingSurveyGroup. (Lennard de Rijk)
- * Removed results list from Survey edit. (Daniel Diniz)
- * Extended tooltip timeout to 10 seconds for all fields. (Mario Ferraro)
- * Minor stylefix to StudentProject model. (Lennard de Rijk)
- * Handle a dynamic amount of GradeRecords in StudentProject model. (Lennard de Rijk)
- * Renamed several files due to recent changes. (Lennard de Rijk)
- * Style fixing in GradeRecord model (Lennard de Rijk)
- * Several Survey UI fixes. (Daniel Diniz)
- * Fixed base template URL to tagged version of the deployed code. (Madhusudan C.S.)
- * Fixed imports for Survey logic. (Lennard de Rijk)
- * Added skeleton models for GradingSurveyGroup and Records. (Lennard de Rijk)
-
-= Changelog for 0-5-20090706 =
-
- * Ensure that the Grade field data stays in clean_data. (Lennard de Rijk)
- * Add missing import to Project Survey view. (Daniel Diniz)
- * Renamed several files due to recent changes. (Lennard de Rijk)
- * Now properly escaping JS and converting new lines into br for Tooltips. (Mario Ferraro)
- * Added ability to add custom tooltips and UI improvements. (Daniel Diniz)
- * Public Survey template now resembles the take template more closely. (Lennard de Rijk)
- * Added the possiblitity to add a description to the top of the Survey. (Lennard de Rijk)
- * Use CSS instead of JS for Survey layout. (James Levy)
- * Remove the custom propmpt inside textareas and input fields. (Daniel Diniz)
- * Fix HtmlSanitizer to return cleaned string in proper encoding. (Pawel Solyga)
- * Added clear:right property to submit button in Survey take form. (James Levy)
- * Fix button layout on Safari 4.0 for Survey take page. (Mario Ferraro)
- * Fix comment indention in survey-take javascript file. (Pawel Solyga)
- * Renamed survey-take-090627.js to survey-take-090705.js. (Lennard de Rijk)
- * Increased bottom margin on comments for better grouping. (James Levy)
- * Changed the filter for getting a SurveyRecord for a ProjectSurvey (Lennard de Rijk)
-
-= Changelog for 0-5-20090705p1 =
-
- * Ensure that accessViolations for Survey menu items get captured. (Lennard de Rijk)
-
-= Changelog for 0-5-20090705 =
-
- * Added Menu items for all three kinds of Surveys to the program menu. (James Levy)
- * POST data always overwrites survey_record data. (Daniel Diniz)
- * Fixes bug when option name contains double quotes. (Mario Ferraro)
- * Several style fixes due to code reviews. (Lennard de Rijk)
- * Ensure that long questions and comments are stored as db.Text. (Daniel Diniz)
- * Style fix in access module. (Lennard de Rijk)
- * Returned ProjectSurvey create to checkIsUser. (Lennard de Rijk)
- * Added access checks for taking a Project(Grading)Survey. (Lennard de Rijk)
- * Brown paper bag fix for using non-existing logic. (Lennard de Rijk)
- * Fixed basic Survey access check. (Lennard de Rijk)
- * Fixed broken selection questions from refactoring SurveyForm. (Daniel Diniz)
- * Fixed showing the correct list of projects. (Lennard de Rijk)
- * Refactored filter construction. (Lennard de Rijk)
- * Make sure that radio button questions validate correctly. (Lennard de Rijk)
- * Added Daniel Diniz and Zachary Voase to the AUTHORS file. (Lennard de Rijk)
- * Added Daniel Diniz to authors for Grading Project Survey View. (Lennard de Rijk)
- * Add a grade field to the Grading Project Survey form. (Daniel Diniz)
- * Survey editing/taking Javascript and CSS fixes. (James Levy)
- * Remove public role type from SURVEY_TAKING_ACCESS in Survey model. (Pawel Solyga)
- * try to fix the surveys-have-no-scope issue (Sverre Rabbelier)
- * addressed comments to previous version (Sverre Rabbelier)
- * return found entity for activity checks (Sverre Rabbelier)
- * survey access: stylefix and remove public role type (Sverre Rabbelier)
- * Style fixes in Survey helper. (Lennard de Rijk)
- * Added getSurveyTakeForm to the Survey view. (Lennard de Rijk)
- * Only initialize a SurveyTakeForm in take. (Lennard de Rijk)
- * Split SurveyForm into SurveyTakeForm and SurveyEditForm. (Daniel Diniz)
- * Do not call takeGet when SurveyForm ValidationError occurs. (Lennard de Rijk)
- * Several stylefixes due to received reviews. (Lennard de Rijk)
- * Style fixes in Access module. (Lennard de Rijk)
- * Style fixes to the GradingProjectSurvey View module. (Lennard de Rijk)
- * Sub_merge params for GradingProjectSurvey View. (Lennard de Rijk)
- * Added rudimentary grade field to GradingProjectSurvey take View. (James Levy)
- * Ensure that the params from subclasses get merged. (Lennard de Rijk)
- * Corrected the links to Grading Project Surveys in Program menu. (Lennard de Rijk)
- * Added missing import to ProjectSurvey View. (Lennard de Rijk)
- * Fix pick_multi only returning one answer as maximum. (Daniel Diniz)
- * Removed getSurveyResponseFromPost from Surveys helper. (Lennard de Rijk)
- * Renamed survey-edit-090627.js due to recent changes. (Lennard de Rijk)
- * Form errors when taking a Survey now have the correct context. (Lennard de Rijk)
- * Fixed Survey Form error giving 505. (Lennard de Rijk)
- * Surveys can now have required questions. (Daniel Diniz)
- * Added Survey From Field validation. (Daniel Diniz)
- * Style fixes and a forgotten parameter in Survey(Record) logic. (Daniel Diniz)
- * Removed unnecessary variable in ProjectSurvey take method. (Lennard de Rijk)
- * Overwrite _getSurveyRecordFor in ProjectSurvey view. (Lennard de Rijk)
- * Added _getSurveyRecordFor method to Survey View. (Lennard de Rijk)
- * Added default Survey list templates. (Lennard de Rijk)
- * Enable the ProjectSurvey and GradingProjectSurvey views in the core. (Daniel Diniz)
- * Implemented taking ProjectSurveys. (Lennard de Rijk)
- * Edit SurveyRecord model to not make use of different Survey. (Lennard de Rijk)
- * Made the CSV exporter not rely on the BackReferenceProperty. (Lennard de Rijk)
- * Added getTakeProjectSurveyRedirect. (Lennard de Rijk)
- * Added the possibility to change the action Survey take page. (Lennard de Rijk)
- * Small style fix in Surveys helper. (Lennard de Rijk)
- * Set required is True for StudentProject reference. (Lennard de Rijk)
- * Removed obsolete if tag form take template. (Lennard de Rijk)
- * Added hook methods to takeGet and takePost. (Lennard de Rijk)
- * Fixed typo in title of Survey Take page. (Lennard de Rijk)
- * Add a base implementation of takePost. (Lennard de Rijk)
- * Added getSurveyResponseFromPost method to Surveys Helper. (Lennard de Rijk)
- * Added updateOrCreateFromFields method to SurveyRecordLogic. (Lennard de Rijk)
- * Added base class logic for Expando based models. (Lennard de Rijk)
- * Removed two obsolete/outdated methods in Survey Logic. (Lennard de Rijk)
- * Removed obsolote method call in Program View. (Lennard de Rijk)
- * Clean up and other fixes for Survey modules. (Daniel Diniz)
- * Implemented the takeGet view for Surveys. (Lennard de Rijk)
- * Fixed multiple typos in Survey tooltips strings. (Lennard de Rijk)
- * Added skeleton for the take view and its template. (Lennard de Rijk)
- * Move getMenusForScope to the end of the View class. (Lennard de Rijk)
- * Changed the Survey public view to give a preview of the Survey. (Lennard de Rijk)
- * Removed activate grade URL pattern from Survey View. (Lennard de Rijk)
- * Brown paper bag "without tea" morning typo fix in Survey View. (Lennard de Rijk)
- * Style fix in Survey views helper. (Lennard de Rijk)
- * Returned access checks in Survey View to the right state. (Lennard de Rijk)
- * Fixed too long line in Surveys helper. (Lennard de Rijk)
- * Solved some merging problems and use the getRecordLogic where needed. (Lennard de Rijk)
- * Reverted some changes in SurveyLogic. (Lennard de Rijk)
- * Use an existing logic for showing Survey Results. (Lennard de Rijk)
- * Merge params from inheriting Survey views. (Lennard de Rijk)
- * Add more flexibility to the Survey helper. (Lennard de Rijk)
- * Added getRecordLogic method to SurveyLogic. (Lennard de Rijk)
- * Removed setting of the scope in the ProjectSurvey init. (Lennard de Rijk)
- * Added getSurveyForContent method to SurveyLogic. (Lennard de Rijk)
- * Calling the correct super in Project and Grading Survey Logic. (Lennard de Rijk)
- * fixed critical errors related to survey subclassing (James Levy)
- * Add paver script that will replace our current build.sh. (Zachary Voase)
- * Add checkHasSurveyAccess access check (Sverre Rabbelier)
- * Removed survey_kind from Survey model. (Lennard de Rijk)
- * Set the correct base_model and scope_logic for extended Survey logic. (Lennard de Rijk)
- * Added two missing imports to the Project and Grading Surveys views. (Lennard de Rijk)
- * Added SurveyContentSchema to improve readability for the survey helper. (Daniel Diniz)
-
-= Changelog for 0-5-20090629 =
-
- * Added skeleton view for ProjectSurvey and GradingProjectSurvey. (Lennard de Rijk)
- * Prepared Survey access controls to deal with multiple logics. (Lennard de Rijk)
- * Extracted the ProjectSurvey and ProjectGradingSurvey records. (Lennard de Rijk)
- * Removed unused import from Survey model. (Lennard de Rijk)
- * Separated two survey types out of the main survey model. (Lennard de Rijk)
- * Seperated Logic for ProjectSurvey and GradingProject surveys. (Lennard de Rijk)
- * Start on adding ProjectSurvey and GradingProjectSurvey. (Daniel Diniz)
- * Added .settings to hgignore. (Lennard de Rijk)
- * Renamed opening to survey_start and deadline to survey_end. (Lennard de Rijk)
- * Put ResultsLogic in its own Logic module named survey_record. (Lennard de Rijk)
- * Removed non-existing import in Survey Logic. (Lennard de Rijk)
- * Added Survey menu items to the Program menu. (Daniel Diniz)
- * Added Surveys to the sitemap. (Daniel Diniz)
- * Added View for Surveys. (James Levy)
- * Added redirect for use in Surveys. (Daniel Diniz)
- * Added Access checks for Surveys. (Daniel Diniz)
- * Added Survey Views Helper for rendering several widgets. (James Levy)
- * Added logic for Survey and SurveyRecord. (James Levy)
- * Added SurveyRecordGroup for the use in evaluation surveys. (James Levy)
- * Added SurveyRecordModel. (James Levy)
- * Added Survey and SurveyContent model. (James Levy)
- * Fixed docstring in Document Logic. (Lennard de Rijk)
- * Renamed css due to previous changes in previous commit. (Lennard de Rijk)
- * Edited stylesheet for use in Surveys. (Daniel Diniz)
- * Renamed JavaScript files in templates to match the correct files. (Lennard de Rijk)
- * Adding JS files for use in Surveys. (Daniel Diniz)
- * Added templates considering Surveys. (Daniel Diniz)
- * Renamed jquery.growfield.js to jquery-growfield.js. (Daniel Diniz)
- * Patch that adds the JS and CSS files for surveys. (Daniel Diniz)
- * Patch that touches 'upstream' templates, for use in surveys. (Daniel Diniz)
- * Fixes an issue where the organization home page. (Lennard de Rijk)
-
-= Changelog for 0-5-20090621 =
-
- * jQuery Spin plugin updated to version 1.1.1 (Mario Ferraro)
- * Use build-in django 1.0.x on deployed version of Melange. (Pawel Solyga)
- * Update GAE to 1.2.3 in thirdparty folder. (Pawel Solyga)
-
-= Changelog for 0-5-20090604 =
-
- * Display caught errors on the page itself (Sverre Rabbelier)
- * Make the maintenance page a hardcoded response (Sverre Rabbelier)
- * Merge with Pawel's tip. (Lennard de Rijk)
- * Small indentation fix. (Lennard de Rijk)
- * Fixed an issue where some access checks would fail. (Lennard de Rijk)
- * Now showing link to edit the home page document on the home page. (Lennard de Rijk)
- * Partial fix for displaying mentors and students. (Pawel Solyga)
- * Comment out GMaps support in Organization home page template. (Pawel Solyga)
- * Add missing if statement in organization list row template. (Pawel Solyga)
- * Added link to edit the Document on the Document's public page. (Lennard de Rijk)
- * Clarified docstring for document read/write access check. (Lennard de Rijk)
- * Added a link to the website the welcome email. (Lennard de Rijk)
- * Introduced 'module_package' key in params dict (Madhusudan.C.S)
- * Temporary turn off GMaps support until it's fixed. (Pawel Solyga)
- * Rename soc-090421.css and update base.html template. (Pawel Solyga)
- * Small changes in #extra_left, #extra_right tags in css file. (Pawel Solyga)
- * Add taggable-mixin and gviz to build script. (Pawel Solyga)
- * Extend taggable-mixin to support different Tag models. (Pawel Solyga)
- * Make taggable-mixin tests working by updating GAE path. (Pawel Solyga)
- * Merge with Pawel's head. (Pawel Solyga)
- * Add google-visualization-python project to Melange repository. (Pawel Solyga)
- * Removed unecessary use of %. (Lennard de Rijk)
- * Changed expected graduation date to be a dynamic dropdown. (Lennard de Rijk)
- * Added GHOP specific Mentor and Org Admin Models. (Lennard de Rijk)
- * Add missing __init__.py file in taggable-mixin module. (Pawel Solyga)
- * Add taggable-mixin to Melange repository. (Pawel Solyga)
- * Add some missing docstrings to Seeder classes in seed_db.py (Pawel Solyga)
- * Style fixes and pylint: disable-msg comments in different modules. (Pawel Solyga)
- * Add pylint: disable-msg= where needed in Melange modules. (Pawel Solyga)
- * Rename bathSize variable to batch_size in soc.logic.models.base module. (Pawel Solyga)
- * Style fixes and wrong function call fix. (Pawel Solyga)
- * Remove unused variable from soc.view.models.cron module. (Pawel Solyga)
- * Some more pylint fixes in different Melange modules. (Pawel Solyga)
- * Style and pylint fixes in Melange modules. (Pawel Solyga)
- * Style and variable names fixes in soc.modules.core module. (Pawel Solyga)
- * Remove unused imports in Melange modules. (Pawel Solyga)
- * Remove unused imports from main.py. (Pawel Solyga)
- * Some small fixes to unique_user_id_adder module. (Pawel Solyga)
- * Fixed typo in org_prize_assignment model. (Lennard de Rijk)
- * remove accidental head (Sverre Rabbelier)
- * Use key_name instead of link_id (Sverre Rabbelier)
- * Fixed the notification list to show a properly formatted date. (Lennard de Rijk)
- * Link id and key name fixes for Organization And OrgApplication. (Pawel Solyga)
- * Add Organization Application seeding. (Dan Bentley)
- * Make user_id property in User model not required. (Pawel Solyga)
- * Merged with Sverre (Sverre Rabbelier)
- * Fixed model name and comment typo's in task model. (Lennard de Rijk)
- * Added several models related to the GHOP workflow. (Madhusudan C.S.)
- * Do not die on NeedIndexErrors (Sverre Rabbelier)
- * Add helper functions, model update and jobs for unique user ids. (Pawel Solyga)
- * Add missing django.template import to shell.py. (Pawel Solyga)
- * Revert "Add a supplemantal block to the edit form" (Sverre Rabbelier)
- * Revert "Add an EditForm id to the edit form" (Sverre Rabbelier)
- * Add a supplemantal block to the edit form (James Levy)
- * Add an EditForm id to the edit form (James Levy)
- * Remove executable bit from datatimepicker (Sverre Rabbelier)
- * Added GHOP Task model. (Madhusudan C.S.)
- * Added __init__.py to ghop folder. (Lennard de Rijk)
- * Merge with Sverre's recent module architecture commit. (Pawel Solyga)
- * Add web based python shell to Melange. (Pawel Solyga)
- * First step in the module design (Sverre Rabbelier)
- * Comment style fix in soc.views.models.organization module. (Pawel Solyga)
- * Add comment regarding Student Project sorting on Organization home page. (Pawel Solyga)
- * Add sorting of student projects on organization home page. (Pawel Solyga)
- * Now clicking cancel button returns user to previous page. (Pawel Solyga)
- * Add comment to clean_html_content function and update __authors__. (Pawel Solyga)
- * Invoke pylint from build script. (Pawel Solyga)
- * Replace usage of feedparser for sanitizing html with new HtmlSanitizer. (Pawel Solyga)
- * Add htmlsanitizer folder to build script. (Pawel Solyga)
- * Add missing __init__.py file to htmlsanitizer folder. (Pawel Solyga)
- * Add HtmlSanitizer python module to Melange repository. (Pawel Solyga)
- * Add BeautifulSoup Python HTML/XML parser to Melange repository. (Pawel Solyga)
- * Add acceptedStudentsCSVExport function to stats.py script. (Pawel Solyga)
- * Remove accidentaly committed file. (Pawel Solyga)
- * Merge with Sverre's accidental head. (Pawel Solyga)
- * Do not rely on notifiction module being imported (Sverre Rabbelier)
- * Style fixes in test_functional.py. (Pawel Solyga)
- * Add some example function tests that use gaeftest (Matthew Wilkes)
- * Include required antl3 library and check if datastore is available (Matthew Wilkes)
- * Revert not finished 1000 limitation fix commit (ef7222d484). (Pawel Solyga)
- * added foo (Sverre Rabbelier)
- * Add vcs-load-dirs project to thirdparty directory. (Pawel Solyga)
- * Add .DS_Store Mac OS X specific files to .hgignore. (Pawel Solyga)
- * Update Google App Engine to 1.2.2 in thirdparty folder. (Pawel Solyga)
- * Fix ordering of names in AUTHORS file. (Pawel Solyga)
- * Add .gitignore to .hgignore (Sverre Rabbelier)
- * Add .git to the .hgignore file (Sverre Rabbelier)
- * Remove __init__.py from project root as well (Sverre Rabbelier)
- * [PATCH] Remove __init__.py from app, as app is not a module (Sverre Rabbelier)
- * Renamed duplicate slots because of recent changes. (Lennard de Rijk)
- * Fixes Duplicate calculation hang if no assigned slots where available. (Mario Ferraro)
- * Fixed multiple Purr boxes would show when using calendar widget. (Mario Ferraro)
- * Add Marcelo to AUTHORS file and fix typo (Sverre Rabbelier)
- * Add coverage support to the test suite (Marcelo de Sena Lacerda)
- * Added coverage output files to .hgignore (Sverre Rabbelier)
- * Fixed typo in docstring as to comments on r3012 (svn repo). (Lennard de Rijk)
- * Replace BeautyTips tooltips with purr info box. (Mario Ferraro)
- * Use python2.5 in our unit tests (Sverre Rabbelier)
- * Ignore .project and .pydevproject files (Sverre Rabbelier)
- * Add full list of accepted students (Sverre Rabbelier)
- * Ignore backup files (~) (Sverre Rabbelier)
- * Ignore zip files and build directory (Sverre Rabbelier)
- * Merged revert (Sverre Rabbelier)
- * Backed out changeset 571f2de51138 (Sverre Rabbelier)
- * Make dev_appserver error out when python version >2.5 is used (Sverre Rabbelier)
- * Added file 'foo.txt' (Sverre Rabbelier)
- * Fixed StudentProposal apply view that broke during split of Create/Edit view. (Lennard de Rijk)
- * Fix Issue 389 (Clicking list entry will not open new tab/window). (Daniel Hans)
- * Fix too long line in soc.view.models.organization module. (Pawel Solyga)
- * Remove E1103 and E1101 errors from ignore list in pylintrc file. (Pawel Solyga)
- * Style fixes in app.soc.views.models.student_project module. (Pawel Solyga)
- * Show all Co-Mentors on the Student Project public page. (Lennard de Rijk)
- * Changed Additional Mentors to Co-Mentors in the manage view. (Lennard de Rijk)
- * Added functionality to set additional mentors for a Student Project. (Lennard de Rijk)
- * Fixed missing value in context. (Lennard de Rijk)
- * Fix broken tests by renaming default app id from "test-app-run". (Pawel Solyga)
- * Add .hgignore to repository and ignore all .pyc files and app.yaml file. (Pawel Solyga)
- * Add getStudentsProjects to context in stats.py script. (Pawel Solyga)
- * Update to AppEngine 1.2.1. (Pawel Solyga)
- * Renamed .css file due to recent changes. (Lennard de Rijk)
- * Added map of accepted student proposals to mentors. (Lennard de Rijk)
- * Fix missing dot in stats.py docstring. (Pawel Solyga)
- * Fixing the build now that emails have been tested. (Sverre Rabbelier)
- * Intentionally breaking the build (Sverre Rabbelier)
- * Fixing the build now that emails have been tested. (Augie Fackler)
- * Intentionally breaking the build. (Augie Fackler)
- * Added reviveJobs and deidleJobs to stats.py (Sverre Rabbelier)
- * Email address is actually private, not public, make this obvios (Sverre Rabbelier)
- * Set the last_modified_on date to last change (Sverre Rabbelier)
- * Set batch size to 10 (Sverre Rabbelier)
- * Added index needed to convert proposals (Sverre Rabbelier)
- * Some minor style fixes. (Lennard de Rijk)
- * Accepted and rejected list to redirect to the review page. (Lennard de Rijk)
- * Allowing review page in read-only mode after the deadline has passed. (Lennard de Rijk)
- * Fixed typo in access module naming. (Lennard de Rijk)
- * Use offset_linkid instead of offset to scan >1000 entities. (Daniel Bentley)
-
-= Changelog for 0-5-20090420 =
-
- * Some minor style fixes. (Lennard de Rijk)
- * Added listing of accepted and rejected proposals. (Madhusudan C.S)
- * Added org_home_gmap function to the map JS. (Madhusudan C.S, Merio Ferraro)
- * Added mentor-marker.png to content/images. (Madhusudan C.S)
- * Renamed map JS to facilitate upcoming changes. (Lennard de Rijk)
- * Added the gathering of data required to display a map. (Madhusudan C.S)
- * Added ccTld property to role to retrieve the ccTld for a role entity. (Madhusudan C.S)
- * Added dictionary mapping to CCTLD in countries model. (Madhusudan C.S)
- * Don't run in a transaction if not needed (Sverre Rabbelier)
- * Tweak the 'load balancing' algorithm (Sverre Rabbelier)
- * Added deleteEntities methods to stats.py (Sverre Rabbelier)
- * Fixed typo in cron.job module's timeOutJob docstring. (Lennard de Rijk)
- * Use status codes in job.py (Sverre Rabbelier)
- * getDefaultMailSender now handles logged in but not registered. (Lennard de Rijk)
- * Allow anyone to see student projects (Sverre Rabbelier)
- * Make no valid sender could be found a fatal error (Lennard de Rijk)
- * Students can not list their own projects before the announced. (Lennard de Rijk)
- * Student Proposal Mailer is now sending out real emails. (Lennard de Rijk)
- * Fixed a comment typo and possible bug in mail_dispatcher. (Lennard de Rijk)
- * Added email templates for accepted and rejected students. (Lennard de Rijk)
- * Major brown paper bag fix (Sverre Rabbelier)
- * Add a startSpam method to stats (Sverre Rabbelier)
- * Add job to the index (Sverre Rabbelier)
- * Add a random chance to ignore a job to reduce contention (Sverre Rabbelier)
- * Do not fetch all jobs with each poke (Sverre Rabbelier)
- * Add entityIterator to base Logic (Sverre Rabbelier)
- * Store how many times a job has timed out and abort if needed (Sverre Rabbelier)
- * Wrong usage of twoline_table_row caused weird layout in project (Sverre Rabbelier)
- * Add cron.yaml to the build script (Sverre Rabbelier)
- * Instead of text_data use key_data property to check for uniqueness. (Lennard de Rijk)
- * Style fix in Job model. (Lennard de Rijk)
- * Hook up the Student Proposal Mailer in the cron/jobs module. (Lennard de Rijk)
- * Added Student Proposal Mailer module (Lennard de Rijk)
- * Various improvements to convertProposals (Sverre Rabbelier)
- * Add a silent option to updateOrCreateFromFields (Sverre Rabbelier)
- * Fixed wrong import for list proposals view. (Lennard de Rijk)
- * Fixed typo and added myself to authors in the cron/job module. (Lennard de Rijk)
- * Add a script to convert proposals. (Sverre Rabbelier)
- * Added FatalJobError to the cron/job module. (Lennard de Rijk)
- * Fixed typo in documentation of the Job Model. (Lennard de Rijk)
- * Changed the response message in the cron poke view. (Lennard de Rijk)
- * Remove debug url too (Sverre Rabbelier)
- * Remove testing method and update docstring for cron system (Sverre Rabbelier)
- * Removed unneeded imports and variables (Sverre Rabbelier)
- * Add cron, the core of the job system (Sverre Rabbelier)
- * Add priority groups and jobs to the sitemap (Sverre Rabbelier)
- * Add jobs (model, logic, and view) (Sverre Rabbelier)
- * Add priority groups (model, logic, and view) (Sverre Rabbelier)
- * Listing of accepted projects is now timeline dependent. (Lennard de Rijk)
- * White space fix in list_info module. (Lennard de Rijk)
- * Fix user_self calling editGet with a wrong parameter (Sverre Rabbelier)
- * Split edit and create into different methods (Sverre Rabbelier)
- * Add support for ID based entities (Sverre Rabbelier)
- * Use proposal key instead of raw proposal (Sverre Rabbelier)
- * Show in green the proposals that would be accepted (Sverre Rabbelier)
- * Add Student entities and StudentProposal entities to seed_db module. (Pawel Solyga)
- * Rename that should have been part of r2953. (Lennard de Rijk)
- * Renamed stepsize to step_size in Student Proposal Logic. (Lennard de Rijk)
- * Moved the code to retrieve all Proposal to the Logic module. (Lennard de Rijk)
- * Style fixes in soc.views.helper.lists module. (Pawel Solyga)
- * Style fixes in soc.views.models.organization module. (Pawel Solyga)
- * Fix too long line in soc.views.models.program module. (Pawel Solyga)
- * Comment out unused variables in soc.views.models.base module. (Pawel Solyga)
- * Fix too long line in templatetags.forms_helpers module. (Pawel Solyga)
- * Proposal CSV export for students. (Pawel Solyga)
- * Readability fix in base logic (Sverre Rabbelier)
- * Remove redundant if check (Sverre Rabbelier)
- * Comment out unused variables in soc.logic.allocations module. (Pawel Solyga)
- * Fix too long line in soc.cache.logic module. (Pawel Solyga)
- * Add missing responses import and in soc.views.models.student module. (Pawel Solyga)
- * Fix too long line and in soc.views.models.student_proposal module. (Pawel Solyga)
- * Step 2 of moving to new seeding model. (Daniel Bentley)
- * Added additional_mentors property to StudentProject. (Lennard de Rijk)
- * Whitespace fix in sponsor model. (Lennard de Rijk)
- * Place the getSingleton call in view decorator in the try (Sverre Rabbelier)
- * Fix a bug in duplicate detection (Sverre Rabbelier)
- * Undid superfluas replacement of .name() with .name_or_id() (Sverre Rabbelier)
- * Fixes access check for manage view. (Lennard de Rijk)
- * Do not rely on dicts.merge to change target (Sverre Rabbelier)
- * Use key().id_or_name() instead of key().name() (Sverre Rabbelier)
- * Fix a bug in seed_db (Sverre Rabbelier)
- * Added a warning message that reviews are not editable. (Lennard de Rijk)
- * Added overview of private reviews. (Lennard de Rijk)
- * Update to the latest GAE release (Pawel Solyga)
- * Do not rely on a backup_admin being set (Sverre Rabbelier)
- * Send out notifications and emails to admin and backup admin (Sverre Rabbelier)
- * Allow the backup_admin to fill in the org application (Sverre Rabbelier)
- * Use offset_linkid instead of offset to scan >1000 entities. (Daniel Bentley)
- * Respond to comments on r2769. (Daniel Bentley)
- * Last step of refactoring before adding support for > 1000 entities. (Daniel Bentley)
- * Add (better) help_text to publish_location and school_name (Sverre Rabbelier)
- * Brown paper bag fix (Sverre Rabbelier)
- * Added Joel Sherrill to the AUTHORS file (Sverre Rabbelier)
- * Lower ASCII fix (Sverre Rabbelier)
- * Remove getKeySuffix and it's usage (Sverre Rabbelier)
- * Use key().id_or_name() instead of key().name() (Sverre Rabbelier)
- * Use key.id_or_name in templates rather than key.name (Sverre Rabbelier)
- * Indentation fixes. (Lennard de Rijk)
- * Added two menu items to the program menu. (Lennard de Rijk)
- * Removed obsolete white line. (Lennard de Rijk)
- * Added listing of Student Projects for Students themselves. (Lennard de Rijk)
- * Added three new redirect methods. (Lennard de Rijk)
- * Brown paper bag fix for Student Project Manage and Edit access check. (Lennard de Rijk)
- * Style fix in function names in stats.py (Sverre Rabbelier)
- * When ranking, put them at or above the given rank (Sverre Rabbelier)
- * Remove slots_allocation from program view (Sverre Rabbelier)
- * Make it possible to save any value with saveValues (Sverre Rabbelier)
- * Allow loading a previously saved slot allocation (Sverre Rabbelier)
- * Added Manage Student Projects item to the organization menu. (Lennard de Rijk)
- * Fixed typo in checkStudentProjectHasStatus docstring. (Lennard de Rijk)
- * Removed TODO that has been completed in r2876. (Lennard de Rijk)
- * Fix bug exposed in previous commit (Sverre Rabbelier)
- * Add a test case to demonstrate a bug in the allocator (Sverre Rabbelier)
-
-= Changelog for 0-5-20090410 =
-
- * Add a new allocation algorithm and use it (Sverre Rabbelier)
- * Change iterative to algorithm in slot allocator (Sverre Rabbelier)
- * Store min and max slots in the program model (Sverre Rabbelier)
- * If nothing is assigned, return no assignments (Sverre Rabbelier)
- * Add a submit method and button to slots view (Sverre Rabbelier)
- * Make "Private Comment" default on Student Proposal review page. (Pawel Solyga)
- * Add auto-completion for mentor field (Kai Blin)
- * Make mentor pickable (Kai Blin)
- * Make it possible to specify the key_order for pick (Kai Blin)
- * Add a temporary hack to allow filtering on org.key().name() (Kai Blin)
- * Drop the 'adjustement' part of slots allocation (Sverre Rabbelier)
- * Use slots allocated instead of adjustment in slots view (Sverre Rabbelier)
- * Use the new self._getAcceptedOrgsList in slots view (Sverre Rabbelier)
- * Factor out _getAcceptedOrgsList from acceptedOrgs (Sverre Rabbelier)
- * Public page for StudentProjects now displays public info. (Lennard de Rijk)
- * Added public info as TinyMCE to the edit pages. (Lennard de Rijk)
- * Added public_info property to StudentProject model. (Lennard de Rijk)
- * Student Project public page now shows feed entries. (Madhusudan C.S)
- * Added feed_url to StudentProject. (Lennard de Rijk)
- * Added list of projects to the organization home page. (Madhusudan C.S)
- * Changed StudentProposal list to show the amount of pending mentors (Lennard de Rijk)
- * Brown paper bag fix (Sverre Rabbelier)
-
-= Changelog for 0-5-20090407 =
-
- * Cleanups in in soc.views.models.student_project module. (Pawel Solyga)
- * Add pylint: disable-msg=W0706 to soc.views.helper.access module. (Pawel Solyga)
- * Major update to the views concerning StudentProjects. (Lennard de Rijk)
- * Added new redirect method to be used for StudentProjects. (Lennard de Rijk)
- * Added two new templates for use in StudentProject views. (Lennard de Rijk)
- * Added 2 new access checks to deal with StudentProjects. (Lennard de Rijk)
- * Student Project listing now includes mentor column. (Lennard de Rijk)
- * Change the dropdown menu to state Comment Visible to Student. (Lennard de Rijk)
- * Only show mentor name in the detailed list. (Lennard de Rijk)
- * Properly handle exports when there are multiple lists (Sverre Rabbelier)
- * Make slots view available to hosts (Sverre Rabbelier)
- * Use the new nr_applications and nr_mentors (Sverre Rabbelier)
- * Add the amount of proposals and mentors to slots view (Sverre Rabbelier)
- * Added Matthew Wilkes to the AUTHORS file (Sverre Rabbelier)
- * Added key_order to student proposal to enable csv export (Sverre Rabbelier)
- * Fixed wrong usage of twoline_field in proposal view (Sverre Rabbelier)
- * Fixed bug introduced by fixing a pylint error (Sverre Rabbelier)
- * Added name column to all role lists. (Lennard de Rijk)
- * Added Mentor name column to StudentProposals list. (Lennard de Rijk)
- * Fix too long line in soc.views.models.student_proposal module. (Pawel Solyga)
- * Added simple listing for Student Proposals you are a mentor for. (Lennard de Rijk)
- * Changed label and help_text for public review button. (Lennard de Rijk)
- * Replace current favicon with the cleaned up one (smudges). (ajatsu)
- * Allow students to see and comment on withdrawn and ineligible proposals. (Pawel Solyga)
- * Indention fix in soc.views.models.organization module. (Pawel Solyga)
- * When Student withdras a proposal a comment is added. (Pawel Solyga)
- * Make "Mark as Ineligible" reversable. (Pawel Solyga)
- * Add a script to subscribe someone to all updates (Sverre Rabbelier)
- * Add the entities to the context too (Sverre Rabbelier)
- * Fix posting public comments as private. (Pawel Solyga)
- * Brown paper bag fix, sort by last name in AUTHORS (Sverre Rabbelier)
- * Added Dmitri to the AUTHORS file (Sverre Rabbelier)
- * Use different colors for public/private comment widget (Dmitri Gaskin)
- * Fixed a missing variable declaration (Sverre Rabbelier)
- * Disable E1002 pylint error in soc.views.helper.dynaform module. (Pawel Solyga)
- * Fixed a 'stylefix' in DynaField that wasn't a style issue (Sverre Rabbelier)
- * Fix bug in soc.views.models.base after recent cleanup. (Pawel Solyga)
- * Also show 'List my student proposals' after signup closes (Sverre Rabbelier)
- * Minor tweaks to orgStats (Sverre Rabbelier)
- * Fix calling of super class __init__ method in out_of_band Error class. (Pawel Solyga)
- * Cleanups in soc.views.helper. (Pawel Solyga)
- * Style fixes and removal of unused imports in soc.views.models. (Pawel Solyga)
- * Cleanups in soc.views.out_of_band module Error class. (Pawel Solyga)
- * Cleanups soc.models modules. (Pawel Solyga)
- * Style fixes and removal of unused imports in soc.logic modules. (Pawel Solyga)
- * Style fixes and removal of unused imports in soc.logic.models modules. (Pawel Solyga)
- * Disable some messages in pylintrc of do_pylint.sh. (Pawel Solyga)
- * Cleanups in soc.cache.base and in soc.views.sitemap. (Pawel Solyga)
- * Remove unused imports in soc.views.sitemap modules. (Pawel Solyga)
- * Style fixes and removal of unused imports in soc.logic.helper modules. (Pawel Solyga)
- * Add missing docstring url.py. (Pawel Solyga)
- * Add missing docstrings to main.py and settings.py. (Pawel Solyga)
- * Add license file and docstring to __init__.py files. (Pawel Solyga)
- * Returning a JSON response on successfully storing duplicates. (Lennard de Rijk)
- * Fixed a typo in stats.py (Sverre Rabbelier)
- * Refactor getProps to use dateFetch (Sverre Rabbelier)
- * Style fixes (Sverre Rabbelier)
- * Add and use a getEntities method (Sverre Rabbelier)
- * Make it possible to retrieve all properties in toDict (Sverre Rabbelier)
- * Add dateFetch (Sverre Rabbelier)
- * Make stats.py executable (Sverre Rabbelier)
- * Print how many entities have been retrieved (Sverre Rabbelier)
- * Enable storing of the duplicate calculation results. (Lennard de Rijk)
- * Added ProposalDuplicates model and logic. (Lennard de Rijk)
- * Replace "Founded by" with "Registered by" in soc.models.group module. (Pawel Solyga)
- * Add some additional functions for stats to stats.py script. (Pawel Solyga)
- * Make the mentor and admin submission nicer. (Tim Ansell, Pawel Solyga)
- * "Where did you hear about this program" is now always editable. (Lennard de Rijk)
- * Some fixes to lists helper to reduce mutation. (David Bentley)
- * A new model to easily seed many entities. (David Bentley)
- * Added a stats module to scripts (Sverre Rabbelier)
- * Factor out the setup() method in interactive (Sverre Rabbelier)
- * Fixed a typo in seed_db.html (Sverre Rabbelier)
- * Now using GET request for getting the data. (Lennard de Rijk)
- * Missing template change from r2750. (Lennard de Rijk)
- * Renamed duplicate-slots.js to prepare for changes. (Lennard de Rijk)
- * Make invalid Student Proposals accessible. (Pawel Solyga)
- * Added example text to birth_date. (Lennard de Rijk)
- * Fix docstring in interactive.py script. (Pawel Solyga)
-
-= Changelog for 0-5-20090331 =
-
- * Added nr_applications and nr_mentors (Sverre Rabbelier)
- * Use ugettext and shorter variable names for inellegible list (Sverre Rabbelier)
- * Add listing of ineligible Student Proposals (Pawel Solyga)
- * Fixed the duplicate slots view. (Merio Ferraro, Lennard de Rijk)
- * Renamed duplicate-slots.js to prepare for changes. (Lennard de Rijk)
- * Added missing return to manage access check. (Lennard de Rijk)
- * Enforce the 500 character limit for abstracts. (Lennard de Rijk)
- * Fixed typo in docstring for logic/models/base.py (Lennard de Rijk)
- * Added cleaner to clean content of a specific size. (Lennard de Rijk)
- * Add confirmation to "Mark as Ineligible" on Student Proposal (Tim Ansell)
- * Add mentor for one gsoc org and an admin for a gsoc org (Tim Ansell)
- * Set fields to 100% width again (Tim Ansell)
- * Remove two trailing comma's (Sverre Rabbelier)
- * Add a script to start an interactive shell with remote api (Sverre Rabbelier)
- * Enabled remote_api for admins only (Sverre Rabbelier)
- * Fix  Issue 381  and  Issue 207  (Date selector Widget) (Daniel Hans)
- * Fixed some typo in app/soc/views/models/base.py (Chen Lunpeng)
- * Changed edit access checks for role views. (Lennard de Rijk)
- * Fixed access check in club_member view. (Lennard de Rijk)
- * Added missing access checks to various roles. (Lennard de Rijk)
- * Added document_name alias for use on award certificates. (Lennard de Rijk)
- * Disabled CSV export for roles. (Lennard de Rijk)
- * Name alias now does not use the name_on_documents. (Lennard de Rijk)
- * Add missing utf decode in html cleaner in soc.logic.cleaning module. (Pawel Solyga)
- * Use minified tiny_mce.js which saves 100kB (Pawel Solyga)
- * Student Proposal Review template now has the right header_title. (Lennard de Rijk)
- * Added title and student name to Student Proposal Review title. (Lennard de Rijk)
- * Separate submit button on Student Proposal review page. (Lennard de Rijk)
-
-= Changelog for 0-5-20090325 =
-
- * Public review now also triggers the status change to pending. (Lennard de Rijk)
- * Show additional info link on Student Proposal pages. (Lennard de Rijk)
- * Added cleaning to student proposal content and its reviews. (Lennard de Rijk)
- * Removed leftover URL in duplicate-slots.js (Lennard de Rijk)
- * Added JS to the duplicate proposals page. (Lennard de Rijk)
- * Fixed error occurring when mentor or student posts a comment. (Lennard de Rijk)
- * Fix csv export of properties that are not string (like datetime.time) (Pawel Solyga)
-
-= Changelog for 0-5-20090324 =
-
- * Add csv export support for Roles (Pawel Solyga)
- * Now showing student name in list proposal views. (Lennard de Rijk)
- * Fixed a typo in proposal listing (Sverre Rabbelier)
- * Enable resizing in the TinyMCE widget (Sverre Rabbelier)
- * Add "Edit my Student Profile" link to program menu. (Lennard de Rijk)
- * Added check to prevent students from submitting too many proposals. (Lennard de Rijk)
- * Fixed a typo in Organization model. (Lennard de Rijk)
-
-= Changelog for 0-5-20090322 =
-
- * Redirect to show if there is no home document (Sverre Rabbelier)
- * Make public return True iff public page should be shown (Sverre Rabbelier)
- * Automagically convert '+' to '00' in phone numbers (Sverre Rabbelier)
- * Added a 'Can we contact you' property (Sverre Rabbelier)
- * Make sure the user has restricted rights to create a new document (Sverre Rabbelier)
- * Add example text on t-shirt sizes (Sverre Rabbelier)
- * Ensure that the link_id entered is the user's in edit_self (Sverre Rabbelier)
- * Optionally return link_id in clean_user_is_current (Sverre Rabbelier)
- * Use getFromKeyFields instead of getForFields where possible (Sverre Rabbelier)
- * Student proposal list shows date, regular list shows the org name. (Lennard de Rijk)
- * Removes the Mentor from 'willing to mentor' lists when resigning. (Lennard de Rijk)
- * Factor out input and file utils into io.py. (David Anderson)
- * Added fields requested in Issue 392 to Student Model. (Lennard de Rijk)
- * Push agreements to group 99 for Role forms. (Lennard de Rijk)
- * Use the new as_email tag for user profile (Sverre Rabbelier)
- * Added an as_email template tag (Sverre Rabbelier)
- * Fixed typo in variable name. (Lennard de Rijk)
- * Fix broken list_msg, do not to display list_msg if it is None. (Pawel Solyga)
-
-= Changelog for 0-5-20090321 =
-
- * Add school name and school country properties to Student Role (Pawel Solyga)
- * Mentors cant resign when mentoring a project/proposal. (Lennard de Rijk)
- * Only show 'Register as student' link student has a user profile (Sverre Rabbelier)
- * Explain better what a link_id should look like (Sverre Rabbelier)
- * Typo and thinko fix in accepted_orgs_msg (Sverre Rabbelier)
- * Show the accepted_orgs_msg for the accepted orgs page (Sverre Rabbelier)
- * Allow for a message to be displayed above the list view (Sverre Rabbelier)
- * Add an non-required accepted_orgs_msg property to program profile (Sverre Rabbelier)
- * Requests now link to a user's profile (Sverre Rabbelier)
- * Added an as_user template tag (Sverre Rabbelier)
- * Clean phone numbers to be numeric only (Sverre Rabbelier)
- * Added a numeric_only cleaner (Sverre Rabbelier)
- * Added example text to the phone number fields (Sverre Rabbelier)
- * Removed formatting from TinyMCE that use the style tag (Sverre Rabbelier)
- * Show all orgs in accepted org list view (Sverre Rabbelier)
- * Made getPickData more generic by supporting ordening (Sverre Rabbelier)
- * Added a new index for accepted orgs listing (Sverre Rabbelier)
- * Fixed docstring for canResign method. (Lennard de Rijk)
- * Moved canResign check to role logic so subclasses can override. (Lennard de Rijk)
- * Minor style fix. (Lennard de Rijk)
- * Add date postfix to slot-allocator.js file. (Pawel Solyga)
- * Don't call updateFromJSON function if no data in slot allocation. (Mario Ferraro)
- * Fixed copy/paste fail in docstring. (Lennard de Rijk)
- * Only show valid roles on user roles page. (Lennard de Rijk)
- * Added "How did you hear about this program?" to Student Profile. (Lennard de Rijk)
- * Fixed double sending of notifications on creating a new invite. (Lennard de Rijk)
- * Fixed redirect after creating/rejecting a request/invite. (Lennard de Rijk)
\ No newline at end of file
