* 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()
* Added Tag.DELIMITER constant used in Story.getFormValue() and Story.tags_macro()
* Fixed flag in $Skin#listItem skin
* Added ancestor call to Skin.getFormValue() method
* Replaced custom SQL query in Comment.remove() with code using new Membership.comments collection
* Removed obsolete Sql.COMMENTS statement
* Added getConfirmText() method to Comment, File, Image, Layout, Membership, Poll, Skin and Story prototypes – which is used in HopObject.delete_action() for more convenient feedback about what is going to be deleted (fixes issue 37 for now)
* Fully enabled translation in global breadcrumb_macro()
* Removed obsolete Layout.getTitle() method
* Disabled translation in HopObject.toString() methods
* Fixed and added some i18n messages to ease translation
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
* 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
* Fixed bug in Story.summary_macro() preventing additional arguments from being used to render metadata content
* Added root.sites to _parent mapping in Site.properties
* Wrapped display of creation and modification dates in <% if %> macros in Comment#edit skin
* Slightly reduced code in global formatDate() method
* Modified HopObject.created_macro() to prevent creation dates of transient objects from being displayed or formatted incorrectly
* Modified HopObject.modified_macro() accordingly
* Added width attribute to CSS definition for fieldset elements
* Reduced macro code in Story#edit skin
* Replaced "story" handlers in a few Story skins with "this" as otherwise comments won't be correctly rendered in history or RSS output (which I think is due to the recent changes in Helma related to fixing bug #617)
* 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