Changes for the Labyrinth Core

5.32    2015-03-19
        - completed code changes for ParamCheck (Support).

5.31    2015-02-27
        - added Labyrinth::Paths parsing, if available.

5.30    2015-01-07
        - fixed and extended date test script.
        - switched to using DateTime (DTUtils).
        - removed OptSelect as no longer used (DTUtils).
        - documentation updates.

5.29    2014-12-05
        - now using Session::Token to create session ids, due to md5 clashes.
        - enable Export of float methods for use in rules (Filters).

5.28    2014-11-21
        - protocol regex now a setting variable (Variables).
        - multipart mails now include text and html parts, as well as 
          attachments (Mailer).
        - updated prerequisites.

5.27    2014-10-26
        - disabled SQLite tests for users.
        - fixed SQL syntax for SQLite.
        - disabled SQLite tests due issues with Test-Database/YAML-Tiny.

5.26    2014-10-26
        - prevent strings being used as numeric options (MLUtils).
        - fixed MetaData sort order in search tests (Metadata).
        - fixed protocol match to exclude non-alphabetics (Globals).

5.25    2014-10-17
        - fixed license fields in META.json to be lists.
        - escape characters before sending URL request (IPAddr).
        - enable both types of filters to be called via AUTOLOAD (Filters).
        - added missing pre-requisite.
        - moved UserGroups from Plugin::Groups to Core (Groups).
        - provide consistent return values (Groups, IPAddr).
        - reworked CSS creation to allow hashes and arrays of attributes. Now
          use HTML::Entities to (un)escape characters (MLUtils).
        - colours can be 3 characters as well as 6 (MLUtils).
        - reworked url regex (Variables).
        - more options for password validation (Users).
        - added field name for user select (Users).
        - extended functional test suite.

5.24    2014-08-16
        - added InternalLogin (Session) to enable authenticated logins.
        - set error code to an empty value before each request (Labyrinth).
        - add 1 to month when using time() (DTUtils).
        - decode HTML entities before sending mails (Mailer).
        - added missing use statement (Media).

5.23    2014-06-09
        - missed Exporter from prerequisites.

5.22    2014-06-03
        - Exporter tag ':default in Globals no longer used.
        - added clean up of <script> tags in CleanLink (MLUtils).
        - reworked FieldCheck (Support).
        - added ParamCheck (Support). 
        - added more scripts to test suite.
        - fixed period drop down (DTUtils).
        - added full version checks in META tests.

5.21    2014-04-23
        - CPAN Testers Reports from Chris Williams identified a very odd error
          with the installed versions of File::Temp and File::Path. Specifying
          versions of both in pre-requisites to ensure known working copies
          are installed.
        - if log file not writeable, ignore audit logging.
        - extend unformat functionality (DTUtils).
        - return (without BADACCESS) if no record found (Support).
        - allow 'charset' to be set in return headers (Writer).
        - catch phrasebook errors when creating the SQL (DBUtils).

5.20    2014-02-02
        - added error capture when reducing image (Media).
        - added Config::IniFiles::errors on config file load errors (Request,
          Globals, Variables).
        - added GetUser to help reduce db calls (User).
        - extend default tags list (MLUtils).
        - allow evalperl to be set in config (Writer::Parser::TT).
        - added Filters to meta files.

5.19    2014-01-26
        - set $past to current year if not set (DTUtils).
        - SQL LIMIT doesn't use '=' (Metadata).
        - load DB earlier to allow validation of parameters from DB tables
        - There is an issue with later versions of Data::FormValidator that
          trashes some of the CGI instances of binary image files. I suspect 
          this is something to do with the data format of the image files, but
          to curtail further (already lengthy) investigations, I have written
          an alternative method to uploading image files. (Media, Globals).
        - new date format (DTUtils).
        - completed Folder and Access permissions (Session, Support).
        - preload profiles and access settings (Variables).
        - fail gracefully ir settings or rules fail to load (Globals).
        - prevent looping redirects (Writer).
        - better file error handling, so browser can see a more descriptive
          message (Labyrinth, Globals).

5.18    2013-10-13
        - removed Crypt::RandPasswd from prerequisites.
        - added ResizeDimensions for displaying images (Media).

5.17    2013-05-03
        - fixed &#x000; style entities (MLUtils).
        - added a DFV plugin for additional parameter validation.
        - fixed missing pre-requisite, Session::Token.

5.16    2013-04-28
        - post-processing XHTML content before writing out is now optional, 
          default is no post-processing. Use 'parsehtml' config setting 
        - new 'parsetest' configuration setting to allow tests to determine
          differences between original and post-processed content (Writer).
        - added DumpToFile for parsetest functionality (Audit).
        - fixed url validation (Variables).
        - improvements to post-processing content (MLUtils).
        - Enabled phrasebook caching to reduce disk I/O (Phrasebook).
        - switched from Crypt::RandPasswd to Session::Token for password
          generation for speed and efficiency (Users).

5.15    2013-03-24
        - added INSTALL file.
        - rewrote README.
        - added BlockURL functionality for remote service (IPAddr).
        - allow logout redirect to be set by config variable (Session).
        - clean up TinyMCE encodings (MLUtils).
        - updated HTMLSend (Mailer).
        - Transform can now save to file (Writer, Writer/TT).

5.14    2013-02-10
        - added DeleteFile (Media).
        - updated default image and thmubnail upload sizes (Media).
        - added config support for image and thmubnail upload sizes (Media).
        - GetFolderIDs now uses a hash rather than a hashref (Session).
        - added Javascript and JSON file types (Writer).
        - catch parsing errors (Writer).
        - capture initialisation issues uniformly.
        - added LICENSE file.
        - fixed constraints and url/email patterns.
        - extended test suite.

5.13    2012-09-02
        - added crawler detection.
        - change file dates changed to meet W3CDTF standards.
        - implemented Perl::Critic suggestions.
        - reworked Makefile.PL for clarity.
        - added example pages.cgi script.

5.12    2012-01-24
        - extended CSS list of styles (MLUtils).
        - length pattern now includes px and em (MLUtils).
        - email changed to recipient_email to avoid clashes (Mailer).
        - catch any template parsing errors (Mailer).
        - made alignment lists more consistent (Support).
        - Alignment split into AlignName and AlignClass (Support).

5.11    2012-01-03
        - Media now allows more control for resizing thumbnails.
        - DTUtils give more scope for configuring YearSelect.

5.10    2011-12-31
        - fixed capturing require errors in DIUtils
        - fixed passing args to D::FV::Constraints::Upload
        - fixed file uploads in Media.
        - fixed wrapper for Query::CGI.
        - added File:Slurp as a prerequisite.

5.09    2011-06-25 [unreleased]
        - fix to Transform to correctly return content.
        - fix to to use new Transform.
        - fix to URL pattern match.
        - added <label> as a valid tag to MLUtils.
        - moved SetLogFile into Globals and allowed more settings.
        - added titles to links, with the ability to provide user mappings.

5.08    2011-06-19
        - documentation updates.
        - added url mapping for MetaCloud links.
        - fixes for GetImageSize.

5.07    2011-06-19
        - added GetImageSize & GetGravatar to
        - added a cleanup of erroneous XHTML patterns in
        - store error message if opening mail pipe fails in

5.06    2011-05-19
        - abstracted input CGI to Labyrinth::Query::CGI.
        - abstracted output CGI to Labyrinth::Writer::Render::CGI.
        - abstracted template parser to Labyrinth::Writer::Parser::TT.
        - all above in order to allow PSGI packages and other template parsers
          to be used.
        - documentation updates.
        - reworked CookieLib to use new Labyrinth::Query::CGI package.

5.05    2011-04-11
        - fixes and code cleaning from CPAN Testers Blog site.

5.04    2011-03-13
        - Abstracted GD and ImageMagick drivers into their own distributions.

5.03    2011-01-05
        - removed unused reference to Text::Format.

5.02    2011-01-03
        - added better handling of MIME Types from CPAN Testers sites.

5.01    2011-01-01
        - moved MasterCheck from plugins to core

5.00    2011-01-01
        - first official open source release.
        - sessions can now be deleted by isolated script not part of logins.

4.19    2010-09-13
        - fixed RSS body content.
        - update to use Data::Phrasebook.

4.18    2010-08-20
        - merged differences for DBI and .ini file configuration.
        - plugins split away from core.
        - documentation patches.

4.17    2010-03-11
        - rewrote requests to use database rather than ini files.
        - rewrote plugin framework to load on demand.
        - removed file lookups.
        - added parameter validation to RSS feeds.
        - alternate data sources for RSS body text .
        - RSS permanent links split for articles and site links.
        - auto commit now an option to DBUtils.
        - comments can be ignored or removed in MLUtils.
        - '#' is valid in a URL.
        - 'noscript' added to the list of valid tags.
        - defaults applied to 'who' when saving IPs.
        - added UserID lookup in Users.

4.16    2009-03-06
        - fixed undefined error.
        - simplified Metadata searches and combined photo/page searches into
          a single table using nested selects
        - updated with new XHTML compatibility fixes.
        - removed unused Exporter references from several modules.
        - removed excessive use of 'use vars' where it wasn't needed.
        - reduced unncessary function calls
        - reduced unncessary database calls
        - added protection for bad image calls (
        - moved Plugins management to
        - remove whitespace before </p> in
        - added demoroniser code to

4.15    2008-05-31
        - upgraded to latest TinyMCE - v3.0.8
        - fixed session update functionality
        - fixed names of db access parameters

4.14    2008-05-14
        - aded further attribute (
        - MetaCloud now allows multiple lookups (
        - added guest user lookup (
        - added badcommand option (
        - constraints abstracted in CPAN module (
        - new date format (
        - added links and perma fields (
        - remove any remaining actions on a reset request (
        - added host settings (
        - added further log messages when mail not configured (
        - added picture storing ability to
        - added
        - added GetUserGroup to
        - added NAME to menu option fields to allow each option to have a 
          unique identifier to be used within CSS (
        - rework of trail creation from menus (
        - rework of hits listings (
        - rework of guestbook, adding IPAddr functionality (

4.13    2007-12-13
        - trim trailing whitespace from code
        - incorporate session/menu changes from smart site
        - map awkward quoting characters to sane ASCII versions
        - include the ability to server binary (PDF) files (
        - include Order and Product plugin rewrites from smart site
        - include Authenticated Downloads plugin
        - fix Mailer hooks from
        - Allow for more caller information via
        - bad login now throws BADUSER error (
        - incorporate language code into session from OD360
        - include RealmCheck and RealmID to realm support

4.12    2007-12-03
        - complete review of code to ensure that database result sets are
          being returned and used correctly.
        - removed further unnecessary template variables (eg 'norecs') when no
          results sets. TT logic can figure it out!
        - changed RSS to use name/email from settings
        - fixed BookReviews to use PUBLISHER for admin access
        - fixed image processing for
        - added ISBN drivers to prerequisites (also added Amazon back in)
        - fixed additional links to be saved and update for O'Reilly

4.11    2007-09-26
        - added TagCloud support to, and
        - fix to to add further legal tags
        - Change Labyrinth::Images to Labyrinth::Media
        - add several media file support functionality, including archive
        - removed all references to 'norecs', TT logic can figure it out!

4.10    2007-08-09
        - performance improvements within Globals and Variables
        - name change: =>
        - added extra debug info for
        - added more default legal HTML tags in
        - fixed session management with guest user
        - fixed articles listings
        - major rework of (removal of snippet, added better support
          for front page and archived news).
        - added more functionality to, changing the way hits are
          recorded and presented

4.09    2007-06-07
        - added categories to links (
        - 'users' template container used for data from
        - show/hide/ban/delete users functionality improved
        - fixed closed_tag_dependent bug (
        - moves to Events/
        - abstracted out social/technical specific code to Events/
        - changed the LoadSettings to use Config::IniFiles to read the settings
          config file. This means that lists can now be used for settings.
        - fixed new abbreviations - no longer supports regexs
        - fixed VenueSelect blank reference
        - fixed $where in Album::Page::Admin when undef

4.08    2007-05-30
        - when logging in the next command sets 'home-'+realm as the next
          command. The default assumes a normal 'public' user. (
        - added Survey plugins
        - added server date/time template variables (

4.07    2007-05-28
        - more date/time formats (
        - more POD in core
        - urlregex moved to and stored in $settings{urlregex}
        - emailregex added to and stored in $settings{emairegex}
        - added to core
        - and added to plugins
        - better HTTP handling in, including returning 404 status
        - fixed page/photo id checks in
        - added <pre> as another tage where <p> doesn't to preceed it
        - fixed bad URL capture
        - fixed several areas when saving user data, no existing checks for a
          new user and absolute default realm is 'public'
        - added ipaddr to tvars
        - added %closetag_is_dependent to allow for <a name="a" />
        - improvement to menu option deleting
        - added more entries to %safe_tags (

4.06    2007-05-10
        - better handling of plugins by abstracting out into
        - added url regex to
        - added ipaddr code
        - added Media functionality to core (name may change)
        - added more entries to %safe_tags (
        - improved interfaces
        - removed last remaining forum references

4.05    2007-03-08
        - lots of fixes!

4.04    2007-02-21
        - created to stop cyclic dependency, simplifying
          in the process.
        - improved so valid XHTML is correctly parsed out.
        - as a result of the above extended and fixed several
          hidden content bugs in the templates.
        - Croak moved to as it's a better fit in the chain.
        - removed unnecessary references to, &
          from plugins that don't use them.
        - SafeHTML => CleanTags in several plugins.
        - undef body bugfix to images in paragraphs (
        - initialise event types (

4.03    2007-02-04
        - Testing with Selenium has highlighted some areas of the core code
          that needs a little more tightening, together with various areas of
          plugin code.
        - a fix to prevent anyone trying to access realm code directly
        - removal of Carp dependancy and general code clean up (,
, DIUtils,,,,
        - Carp::croak replaced with Croak, which provides better error
          messaging both to logs and to the user.
        - PathMove and Croak added to
        - GroupSelect updated and GroupSelectMulti added (
        - update of copyright/author/name documentation
        - ddmmyy/printsafe/url/realname match functions updated with better
          regexes and returns undef if no match (
        - removed \n in select/option HTML strings (,,
        - better session logging (
        - improved to avoid cyclic dependancy
        - added AccessLevel checks for admin functions (
        - added UserSelect (
        - made UserName cache names correctly (
        - better error checking in public facing method, to prevent anyone
          trying to access anything they shouldn't do. (various plugins)
        - improved dropdown calls and deletion (
        - RSS code made to reflect the configuration file (

4.02    2007-01-26
        - dates => ddmmyy, email => emails (
        - DB connection error fix - now displays a nice message to the user and
          doesn't reveal any sensitive info (
        - StockType added to gather data from DB (
        - major rework around stock types, such that the default (DRAFT) is
          always id=1
        - in CGIFile force lower case extension for uploaded file (
        - try and keep dimensions up to date (
        - tidy up of code (,,
        - scalars are not references! (
        - default alignment = none (
        - added redirection code (
        - added new date format string (
        - added Standard plugin set to the manifest

4.01    2007-01-12
        - additional documentation
        - better handling when a plugin fails (
        - added ? to list of acceptable characters for simplewords
        - settings now automatically passed to tvars for PROJECT, HTTP & CMS
          sections (
        - fixed bugs in CleanTags (

4.00    2007-01-10
        - implemented proper plugin functionality for Scooter Do & Style Stop
        - general code cleaning and additional documentation
        - added more date formats (
        - fixed undef range bug in YearSelect (
        - ported core functionality out of plugins (,,

        - fixed undef issues with protocol and cgiroot values (
        - DB errors now trip MESSAGE rather than ERROR (
        - new functions CleanLink & CleanWords to fight spam (
        - fixed an undef error case (
        - Login/Logout require direct reference (
        - FreshPassword moved to new
        - improved session handling, now even guests have a key (
        - fixed undef key for session key bug (
        - removal of specific realm changing code (
        - addition of FolderSelect to prepare for full website management
        - fixed AuthorCheck/AccessUser bug where permission is 0 (PUBLIC)
        - removed unused error codes (
        - Evaluates Perl for BADPAGE (

3.00    2006-11-03
        - More general improvements to the system from writing DanDan's website
        - Added more caller info (
        - fixed AUTOLOAD bug (
        - simplified regex for script extraction from ENV variable (
        - removed strip from automatic CGI parameters parsing (
        - filters added to parserules file (
        - script & randpicwidth added to automatic tvars list (
        - formatted all HTML code to meet standards
        - LinkSpam added to protect spam attacks (
        - broken url regex down to more understandable components (
        - added more realm handling code (
        - fixed AuthorCheck to cope with records without a userid field
        - fixed FieldCheck to cope with added items (zero or blank id fields)

2.00    2006-10-10
        - complete overhaul of code from implementing the Slim Pickins site

1.00    0000-00-00
        - first version of Labyrinth, rebuilt basic core elements