* Replaced req.data with req.params in Stories.create_action() and Images.create_action() to prevent leaking of unwanted data (e.g. http_*) to the database
* Renamed and refactored Story.setMetadata() to Story.setCustomContent()
* Renamed Story.isMetadata() to Story.isCustomContent()
* Added JSON.pad() and JSON.sendPaddedResponse() methods
* Added calls for JSON.sendPaddedResponse() in Stories.create_action() and Images.create_action()
* Removed numbered, footnote-like links in most of the noficitaion messages
* Added prefix to subjects of notification mails (like “[Antville] ...”) for convenience
* Added markgettext() calls for most of the prototype names and their plural forms – this time in each corresponding prototype file, though
* Added options argument to global sendMail() method, currently only to switch inclusion of generic footer in mail body
* Fix bug in Membership.contact_action() method when an unknown (i.e. unregistered or unsubscribed) user tries to send a message via contact form
* Unified naming of notify skins (e.g. #notify_delete instead of #notify_deletion)
* Updated and rebuilt i18n and message files
* Added markgettext_macro()
* Readjusted Admin.dropdown_macro() and the global defineConstants() methods to work with the modified markgettext() calls
* Updated Members.properties and added SQL patch for lowercasing all membership status due to the modified margettext() calls
* Added Membership.role_macro() as convenience method
* Removed syntactic sugar from HopObject.link_macro() and moved it to the compatibility layer to prevent current layouts from breaking
* Removed obsolete permission for non-existing Image.replace_action()
* Refactored and unified remove() methods and calls for greater flexibility as well as reliability
* Added option to remove all comments by a user to Comment.remove() method and $Comment#delete skin
* Added global #listItemFlag skin as well as listItemFlag_macro() for rendering vertically written text of items in a list view (e.g. closed)
* Fixed bug in gettext_macro() and ngettext_macro() causing incorrect whitespace
* Refactored timezone and locale handling
* Modified automatic translation of untitled links in HopObject.link_macro()
* Added honeypot to login and registration forms
* Fixed client-side JavaScript to be evaluated when login or registration form is submitted, not only when the submit button is clicked
* Removed redundant filter expression from DB mapping of Membership.images collection
* Added Membership.content collection
* Changed terminology from open to running polls, thus renaming Polls.open_action() method and Polls.open collection
* Moved a lot of CSS used in root or administration sections from Site#stylesheet to $Root#stylesheet skin
* Added Root.updateDomains() method (most likely already obsolete)
* Removed Root.processHref() method (only necessary for very advanced setup) and obsolete comments
* Fixed Root.xgettext() method to correctly read UTF-8 encoded data
* Fixed Site.deleted_macro() to return the date object for late formatting
* Refactored Site.processHref() for more convenient custom domain name mapping
* Renamed Skins.advanced_action() method to Skins.all_action()
* Removed redundant filter from Stories.comments collection
* Removed unnecessary filter from Story.comments collection
* Added second argument to HopObject.remove() method; if set to true, any object will be removed without any checks for permissions or the like
* Enhanced notfound and error screens
* Removed obsolete Image.site property
* Added missing LogEntry.remove() method
* Added Site.deleted property
* Fixed missing calls for remove() methods of some collections in Site.remove()
* Added Root#stylesheet skin for future CSS classes necessary for GUI elements
* Added missing Site.entries collection
* Removed troublesome if condition in Skin.remove()
* Generally deny access to Skin.main_action
* Added missing Skin.getFormValue() method
* Added check in Skin.update() if the Site#page skin contains the <% response.body %> macro
* Added Skins.onRequest() method checking if we are in-between two Skins objects
* Hopefully fixed redirect loop bug of XSS check in HopObject.onRequest()
* Added Root.xgettext() method as a more reliable way of extracting gettext call strings (esp. from skins)
* Added global default_filter() method as alternative (and fix in some cases) for the “default” macro parameter
* Do not show a story’s summary in top stories view but instead try the title and apply the newly introduced default_filter() method with the clipped story text to it
* Modified LogEntry to fit into the new logging mechanics
* Added commitRequests(), commitReferrers() and purgeReferrers() to Root prototype
* Added referrers collection to Root
* Re-added Site.spamfilter property for now
* Refactored Site.referrers_macro() and Story.referrers_macro() (formerly backlinks_macro, but compatibility is granted)
* Removed obsolete method Stories.flushRequests()
* Reactivated referrers (thus, including backlinks) for privileged users for testing purposes
* Added global nightly() method which is called from a new cronjob at 5 am
* Added calls for referrer purge and commit methods in Root to scheduler
* Added Story.count() method to increment the request counter; overwrites Helma's built-in HopObject method but it's anyway redundant with HopObject.size()
* Added utility methods for database access in Sql.js
* Added Membership.toString() method for human-readable output
* Assigned Membership.valueOf() method original toString() method
* Fixed output of site list in userland
* Added mountpoint for Api prototype in Root
* Added trimming for Story text and title input
* Fixed condition for setting the site modification date on comment update (hopefully this is correct...)
* Replace site.lastUpdate with site.modified (still needs some more care - what do we do with lastUpdate anyway?)
* Removed obsolete skin files (ie. content moved to the protected skin file)
* Moved contents of Messages.skins to their protected siblings
* Prefixed notification skins (used in e-mails) with "notify_"
* Fixed and simplified a whole bunch of issues in compatibility layer
* Added work-around for Helma bug #607 by calling persist() on creating a story or an image before setting the tags
* Fixed sequence of clipping/embodying and tag stripping in Story.getTitle()
* Added work-arounds for tagging problem in Story, Stories, Image and Images until Helma bug #607 is fixed
* Deprecated getData and setData methods in Metadata
* Disabled file tags for now
* Renamed global renderPageNavigation() method to renderPager()
* Added support for rendering the list of updated sites in global list_macro()
* Fixed return point when cancelling a file edit action
* Fixed nasty bug in deletion routine
* Implemented sorting of values in Layout.values_macro()
* Disabled layout title, description, origin and sharing for now
* Renamed list_action() to sites_action() in Root prototype
* Enabled filter of root site in default collection
* Moved Root's list.skin as subskin in Root.skin
* Added experimental Root.search_xml_action()
* Renamed "unpublish" link to "close" in Story list
* Reduced display of backlinks to last 24 hours
* Removed obsolete skin files
* Removed obsolete rescue methods
* Moved contents of many individual skin files as subskins in the corresponding prototype skin file
* Moved commentform_macro of Story prototype into compatibility module
* Added encoding="form" parameter to most of the macros using the request handler
* Renamed commentsMode to commentMode (comments_mode to comment_mode in DB)
* Reactivated notifications in a simplified manner
* Throw an error in global sendMail() method if arguments are not sufficient
* Added HopObject.notify() method
* Added HopObject.kind_macro() method (provides the constructor's name in lowercase)
* Added Messages.skin containing subskins suited for e-mail output
* Removed obsolete skin files
* Added reset_action() method for resetting a user's password to Members prototype
* Added require() method to Membership prototype; wrapped static require() method around it
* Added Membership.notify() method which does all the member-related notification stuff
* Send notification on membership removal
* Fixed contact form in Membership prototype
* Dropped e-mail property from Site prototype (users can be contacted via Membership.contact_action(), Root prototype has extra e-mail property)
* Added missing getPermission() method to User prototype, always requiring a privileged user