* Fixed value of layout sandbox cookie in Layout.sandbox() method
* Removed (yet) unused Layout.sandbox_action()
* Removed (yet) unused session.data.layout in HopObject.onRequest()
* Moved code setting res.contentType to top of Tag.rss_xml_action()
* Disburdened constructor methods of most of the prototypes by moving most of the code to the new static add() method.
* Added temporary debugging method HopObject.confirmConstructor() to log a warning whenever a constructor is directly called – in which case it should be checked if the static add() method is to be preferred.
* Removed obsolete code in Poll.edit_action() method.
* Removed call for Site.processHref() method in Site.getStaticUrl() - still to be evaluated
* Added call for Feature.getPermission() in Site.getPermission()
* 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
* Slightly modified the message informing about successful deletion of an object
* Fixed type when calling Membership.remove() in Site.unsubscribe_action() method
* Fixed bug causing exception when calling Membership.remove() method with no arguments
* FIxed still incorrect permissions for editing and deleting a membership
* Slightly increased sizes of some input elements for convenience
* Added SQL patch updating constraints of the membership role column (MySQL)
* Removed obsolete title and description properties from Layout
* Minor layout enhancements and wording edits
* Refactored Admin.queue(), Admin.dequeue() and Admin.purgeSites() methods to use new Admin.Job prototype
* Refactored Exporter and Importer objects to use new Admin.Job prototype (the way sites are im/exported still needs to be rewritten)
* Refactored resetting and importing a layout to always backup the current layout in a temporary ZIP file
* Moved import_action() method along with corresponding skins from Root to Site
* Moved #create skin from $Root to $Site
* Added the root site itself to the Root.sites collection
* Permitted deletion of the root site by adding appropriate checks and treatment in Site.remove()
* Moved call for Admin.dequeue() from scheduler() to nightly() method
* Removed obsolete Admin.importExport() method
* Removed obsolete app.data.exports and app.data.imports properties
* 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
* 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
* Moved the private copy() method in Root.create_action() to helma.File.copyDirectory() in Global.js (will be committed later)
* Replaced the copy routine with call for Layout.reset()
* Wrapped zipping of layout images in try/catch block to prevent exceptions when there is no thumbnail image
* Introduced a more elegant way to include necessary script files (jQuery et al.) in Site.main_js_action()
* Slightly modified jQuery "onload" calls
* Completely render skin outline and drop down menu from application directory
* Moved remaining skins into protected (ie. non-customizable) skin files
* Removed obsolete skin files
* Removed obsolete code
* Fixed various b/w compatibility issues found in some sites
* Fixed pager action in Images
* Added confirmation dialog before resetting a layout
* Added collection containing updated sites in reverse chronological order
* Modified site listing (still work in progress)
* Save site name as title if no title is entered
* Removed some res.debug() calls
* 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
* Fixed bug in Layout.image_macro() preventing the URL from being written
* Wrapped output of Site.getStaticUrl in encodeURI() call
* Removed test macro in Site.skin (AAAAAAAAAAAAAAA!)