*** February 9, 2024 - Version 3.65 (New Advanced Field Types)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.7+ (or MariaDB 10.2+)

UPGRADING
- Note: If you added /lib/wysiwyg_custom.php, you'll need to re-create it from wysiwyg.php and re-apply your customizations

NEW FEATURES
- New Field Type: "Generated Columns" let you create virtual columns that are calculated from other fields in the same row
- New Field Type: "Foreign Keys" for relational links between records, ensuring data integrity and preventing orphan records
- Live SQL Monitor: Monitor SQL queries in realtime, found under: Admin > General > Server Info > Database Server
- Cloud Mode: Reduced CMS codebase by 10 megs and over 200 files by switching to CDNs for common library delivery
- Offline Mode: Added support for new plugin with all CDN files bundled for offline use
- Setup > Database Editor > Table Editor: Added "MySQL Source" tab for referencing MySQL table definitions

MINOR CHANGES
- Session Names: Cookie name is now set under: Admin > General > Advanced
- ZenDB: Added $results->row($pos) to get a row based on its position, e.g. $firstRow = $results->row(0)
- ZenDB: Added $results->col($nameOrPos) to get a list of column values by name or position
- ZenDB: Added $row->col($nameOrPos) to get single row column value by name or position
- ZenDB: Added $row->isFirst, $row->isLast
- ZenDB: Added $field->toString() to force a string representation of a field value
- ZenDB: Added DBException class for displaying standardized error messages
- ZenDB: Added DB::query()->orThrow($message) chainable method to throw exceptions with a custom error message
- ZenDB: Added DB::config('useSmartJoins') option for disabling smart join functionality
- Upgraded PHP Mailer from v6.8.1 to v6.9.1

REMOVED FEATURES
- Removed experimental ViewerAPI code (not updated or available through CMS interface since 2017)
- Removed demo mode: It took significant resources to maintain and was not widely used (previous versions can still be used for demo sites)
- Removed bundled libraries: Now loaded via CDNs and available in Offline Mode plugin
- Removed feature that disabled autocomplete for browsers that ignore HTML5 autocomplete standard (as it no longer works)

BUG FIXES
- Database Tables: Convert all tables to ROW_FORMAT=DYNAMIC if not already, to avoid "Row size too large" errors with InnoDB
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------
*** December 8, 2023 - Version 3.64 (MySQL 5.7 Required)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.7+ (or MariaDB 10.2+)

*** NEW DATABASE REQUIREMENTS
- This version now requires: MySQL 5.7.32+ or MariaDB 10.2+ (increased from MySQL 5.5+)
- Please check with your hosting provider to ensure you have these installed BEFORE upgrading.

MINOR CHANGES
- Admin Menu > Security: Added option to ignore PHP development warnings (E_STRICT, E_DEPRECATED)
- Admin Menu > Server Info: Display PHP Caching Modules to help debug caching issues
- Admin Menu > Server Info: Display CMS Folder and chroot status (to help debug filesystem issues)
- Section Editors: Renamed "Section Editors" to "Database Editor" in CMS Setup menu
- Database: Newly created fields have default values in MySQL now so values don't have to be specified on INSERT
- Database: New createdDate and updatedDate fields now default to current datetime (not 0000-00-00 00:00:00)
- Database: "MySQL Type" is now displayed in its own column under: Admin > Database

ZenDB Improvements
- ZenDB: Added DB::identifier() for `quoting` and escaping MySQL identifiers such as table and column names
- ZenDB: Added $row->toArray() to get an array structure of HTML-encoded values
- ZenDB: Added $resultSet->toArray() to get an array structure of HTML-encoded values
- ZenDB: Added $resultSet->getColumn() to get values from a single column
- ZenDB: Added $resultSet->indexBy() for a column to record map, e.g. $emailToRecord = $resultSet->indexBy('email')
- ZenDB: Added $resultSet->groupBy() for a nested column to record map, e.g. $cityToUsers = $resultSet->groupBy('city')
- ZenDB: Brackets and "get" prefix are now optional for chainable methods, e.g. ->getValues() can be called as ->values

BUG FIXES & Minor Changes
- PHP 8.2 compatibility fixes
- Install: Fixed issue where restoring from backup on install required new admin account info to be entered
- MySQL 8.0: Fixed error when SET innodb_strict_mode was called without SESSION_VARIABLES_ADMIN access
- Error Logging: Improved how error logging catches and logs fatal errors that halt script execution
- View Menus & Tab Groups: Fixed issue where first tab in a tab group wouldn't display currently
- View Menus & Tab Groups: Fixed issue where upload lists wouldn't automatically resize on tab switch
- View Menus: Fixed issue where non-displaying fields with internal category menu fields were incorrectly showing
- View Menus > Advanced Commands: Resolved double HTML-encoding issue that caused actions to not function correctly
- Admin > General: Fixed open_basedir warning for fileinode()
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** November 7, 2023 - Version 3.63 (ZenDB Database Library)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.5+

NEW FEATURES
- ZenDB Database Library - Added new next-generation database library for improved performance and security.

MINOR CHANGES & BUG FIXES
- Email Templates: Email templates can now include attachments.
- Developer Log: Replaced "Backtrace" with sequential "Call Stack" to make debugging faster and easier.
- Hide PHP Errors: Now only applies to web requests and displays full errors for cronjobs and logged-in admins.
- showme() no longer outputs HTML tags when Content-type is "text/plain" (for debugging)
- Security: Automatically remove X-Powered-By: PHP/x.x header to prevent information disclosure
- Programmers: Added new plugin filter 'headers' for adding or modifying headers sent to the browser
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** October 12, 2023 - Version 3.62 (Improved Section Editor Sorting and New Mailer)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.5+

NEW FEATURES
- Section Editors: Multi-record drag sorting is now supported for quickly re-ordering tables
- Sending Mail: Switched to PHP Mailer v6.8.1 (instead of Swift Mailer)

MINOR CHANGES & BUG FIXES
- Debugging Info: Added additional .htaccess check for mod_security to help identify server restrictions
- Code Cleanup: Removed Suhosin detection and workarounds, as they're no longer widely used
- Code Generator: Resolved error: Undefined array key "function"
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** September 2, 2023 - Version 3.61 (Maintenance Release)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.5+

MINOR CHANGES
- CMS Record List: Record lists now show in stacked format for small screens (<768px) - see /3rdParty/clipone/css/main-small.css
- Developer Log: Filepath report now summarizes errors by line number and provides a "clear" link
- Server Info: "Admin > General > Server" now displays server uptime as days since "Last Rebooted"
- CMS Setup > Section Editors: Table row count and disk size now displayed as columns
- CMS Record List: You can now shift-click to select a range of checkboxes
- Permalinks Plugin: searchMultipleTables() now returns a permalink field if it's set (requires Permalinks v1.11)
- Programmers: New function: isMac() to detect macOS servers
- Programmers: New functions: errorlog_lastError() & error_get_last_message() for getting last error message
- Programmers: Added data-label="column title" to each <td> in CMS record lists
- Added no-cache headers to CMS pages to prevent caching
- Menus: Renamed "Background Tasks" to "Scheduled Tasks"

BUG FIXES
- Maintenance: Removed legacy MySQL library support (mysqli used since PHP 7)
- Maintenance: Replaced $php_errormsg references (not supported in PHP 8)
- Admin > General: Fixed open_basedir warnings on some servers
- CMS Record Lists: Fixed drag sorting for iPads
- Cron: Updated old references to `function` column to `functionName` (previous is now MySQL reserved keyword)
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** July 12, 2023 - Version 3.60 (Enhanced Server Management & Error Tracking)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.5+

NEW FEATURES
- Server Info: "Admin > General > Server" now show some additional details about the current server
- Server Changes: "Admin > General > Server" now shows change history for server components (PHP, etc)
- Developer Log: New "Filepath Report" groups errors by filepath for easier debugging
- Developer Log: Improved detection of source filepath and line num of errors
- Developers: Added shellCommand() function to try various PHP shell execution methods and/or fail gracefully

BUG FIXES
- Error reporting: Fixed issue where @ silenced variables will still returning errors
- Default Data Files: Updated defaults to: ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
- mysql_escape now properly escapes backslashes ("\") so they match in searches
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** June 2, 2023 - Version 3.59 (PHP 8 now required)

SERVER REQUIREMENTS: PHP 8.0+ and MySQL 5.5+

MINOR CHANGES
- Server Info: "Admin > General > Server" has been updated to display more info about server
- Server Info: "Admin > General > Server" now provides links for viewing MySQL status and variables
- Backups: CMS Backups are now created as temp files and renamed on completion to prevent partial backups on error
- Translations: Added some additional text to the translation system
- Viewers: date searches now work with special createdDate and updatedDate fields
- Languages: Made some additional text translatable

BUG FIXES & CODE UPDATES
- MySQL 8 Support: Renamed _cron_log table column "function" to "functionName" (reversed name)
- Database: Fixed bug where MariaDB 'null' defaults in backups couldn't be restored in MySQL
- Swift Mailer: Fixed some additional PHP 8.x warnings and errors.
- Fixed minor bug in SVG detection causing false positives in non-SVG images
- Developer Log: Removed Symbol Table as PHP 8 set_error_handler() function no longer supports it
- Libraries: Updated HTML Purifier from 4.14 to 4.15
- Remove /3rdParty/PHP_Compat/ PHP compatibility libraries that aren't required with PHP 8
- Prevented "Erase" button from appearing on Single Record Sections where it's not functional.
- Updated CA Root Certificates in /3rdParty/cacert.pem - used by curl_ functions.
- Additional PHP 8.x support fixes
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** March 17, 2023 - Version 3.58 (Maintenance Release)

SERVER REQUIREMENTS: PHP 7.3+ and MySQL 5.5+

MINOR CHANGES
- Security: Added .htaccess code to prevent it from being loaded in a frame (to prevent clickjacking)
- Developer Log: Optimized memory usage to prevent memory limit errors when listing many error records
- Performance: Optimized getRecords() to load results faster in many cases (by replacing SQL_CALC_FOUND_ROWS)
- Programmers: getEvalOutput() now returns errors instead of halting execution.  See function header for details

BUG FIXES
- Fixed PHP 8 transparent image error that returned imagecolorsforindex(): Argument #2 ($color) is out of range
- Added workaround for Maria 10.5.16 where COLUMN_DEFAULT of NULL is instead of an empty string for text columns
- Separator fields: Fixed PHP 8.2 error: Deprecated: Creation of dynamic property SeparatorField::$order is deprecated
- Additional PHP 8.x support fixes
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** September 26, 2022 - Version 3.57 (Maintenance Release)

SERVER REQUIREMENTS: PHP 7.3+ and MySQL 5.5+

MINOR CHANGES
- Restoring databases on install now uses incremental restore to support large backups

BUG FIXES
- Additional PHP 8.1 support fixes
- Patched issue where emails would sometimes be received as raw HTML with PHP 8
- Fixed issue where cms admin searches for zero would return be ignored
- Misc code, security and other minor improvements.

-------------------------------------------------------------------------------

*** March 22, 2022 - Version 3.56 (PHP 8.1 Support)

SERVER REQUIREMENTS: PHP 7.3+ and MySQL 5.5+
- NOTE: Some plugins may need to be updated when upgrading from v2.xx

NEW FEATURES
- PHP 8.1 Support: Updates to support PHP 8.1
- License updates: Removed license key requirements for white-label branding
- WebP Support: Added default plugin for converting media files to webp

MINOR CHANGES
- License: Updated license agreement to remove references to registration and licence keys
- Updated jQuery to 3.6.0

BUG FIXES
- Misc media library bug fixes
- Misc Code and other minor improvements.

-------------------------------------------------------------------------------

*** Note: Only release dates and server requirements are listed for older versions.

 - Nov 10, 2021 - v3.55 (PHP 8 Support)                          - Requires: PHP 7.3+ and MySQL 5.5+
 - Oct 29, 2020 - v3.54 (Media Library Beta)                     - Requires: PHP 7.2+ and MySQL 5.5+
 - Aug 12, 2019 - v3.53 (Maintenance Release)
 - Jul 26, 2019 - v3.52                                          - Requires: PHP 7.1+ and MySQL 5.5+
 - Apr 11, 2019 - v3.51 (PHP 7 Upgrade)                          - Requires: PHP 7.0+ and MySQL 5.5+
 - Dec 18, 2018 - v3.50 (Free Version)
 - Sep 17, 2018 - v3.15 (Maintenance Release)
 - Aug 22, 2018 - v3.14 (HTML5 Multi-File Uploader)
 - Feb 20, 2018 - v3.13 (Maintenance Release)
 - Dec 5, 2017 - v3.12 (New multi-select pillbox field)
 - Nov 6, 2017 - v3.11 (User Requests)
 - Jun 16, 2017 - v3.10 (Maintenance Release)
 - May 8, 2017 - v3.09 (PHP 7 Support)
 - Feb 24, 2017 - v3.08 (New Server Requirements)                - Requires: PHP 5.6+ and MySQL 5.5+
 - Dec 7, 2016 - v3.07 (Upgraded WYSIWYG Editor)
 - Aug 25, 2016 - v3.06 (CMS Menu Icons and Thumbnail Cropping)
 - May 26, 2016 - v3.05 (Free "Powered By" Version)
 - Apr 26, 2016 - v3.04 (Maintenance Release)
 - Apr 20, 2016 - v3.03 (Collapsible Separators & PHP 5.5)       - Requires: PHP 5.5+ and MySQL 5.0+
 - Feb 3, 2016 - v3.02 (Maintenance Release)                     - Requires: PHP 5.4+ and MySQL 5.0+
 - Jan 20, 2016 - v3.01 (Maintenance Release)
 - Jan 8, 2016 - v3.00 (Responsive UI)                           - Requires: PHP 5.4+ and MySQL 5.0+
 - Apr 8, 2015 - v2.65 (Maintenance Release)                     - Requires: PHP 5.2.4+ and MySQL 5.0+
 - Feb 17, 2015 - v2.64 (Universal Error Logging)
 - Sep 3, 2014 - v2.63 (Maintenance Release)
 - Jul 15, 2014 - v2.62 (Security Enhancements)
 - Feb 19, 2014 - v2.61 (Security Update)
 - Feb 13, 2014 - v2.60 (Field Editor enhancements)
 - Apr 4, 2013 - v2.53 (Development Server Enhancements)
 - Mar 18, 2013 - v2.52
 - Feb 7, 2013 - v2.51 (Security & Maintenance Updates)
 - Dec 5, 2012 - v2.50 (Language & Translation Features)         - Requires: PHP 5.2.4+ and MySQL 5.0+
 - Sep 1, 2012 - v2.17 (Maintenance Release)
 - Aug 28, 2012 - v2.16 (Speed, Mail, and Usability Improvements)
 - May 7, 2012 - v2.15 (New Code Generator)
 - Dec 27, 2011 - v2.14 (Maintenance Release)
 - Oct 27, 2011 - v2.13 (Maintenance Release)
 - Aug 24, 2011 - v2.12 (External Menus)
 - Jul 7, 2011 - v2.11 (Maintenance Release)
 - Jun 30, 2011 - v2.10 (Faster Server Moves)
 - May 31, 2011 - v2.09 (Relative Upload Paths)
 - Apr 20, 2011 - v2.08 (Security Enhancements)
 - Feb 3, 2011 - v2.07 (Preview Button)
 - Sep 9, 2010 - v2.06 (Maintenance Release)
 - Jul 6, 2010 - v2.05 (View Menus)
 - Apr 27, 2010 - v2.04 (Viewer Pseudo-fields)
 - Mar 1, 2010 - v2.03 (Related Records)
 - Jan 26, 2010 - v2.02 (Multi-File Uploads & Viewer Enhancements)
 - Dec 14, 2009 - v2.01 (Date Field Enhancements)
 - Dec 4, 2009 - v2.00 (New User Interface)
 - Sep 25, 2009 - v1.36 (Bug Fix Release)
 - Sep 23, 2009 - v1.35 (Plugin Enhancements)
 - Sep 16, 2009 - v1.34 (Backup & Restore)
 - Aug 24, 2009 - v1.33 (Menu Enhancements)
 - Aug 4, 2009 - v1.32 (My Account Menu)
 - Jul 6, 2009 - v1.31 (Bug Fix Release)
 - Jul 3, 2009 - v1.30 (Advanced Editor Search Filters)
 - Jun 16, 2009 - v1.29 (Demo Mode Support)
 - Apr 8, 2009 - v1.28 (Plugin System Enhancements)
 - Feb 24, 2009 - v1.27 (Maintenance Release)
 - Feb 2, 2009 - v1.26
 - Jan 30, 2009 - v1.25
 - Jan 20, 2009 - v1.24                                          - Requires: PHP 4.3.2+ and MySQL 4.1.7+
 - Nov 6, 2008 - v1.23
 - Aug 15, 2008 - v1.22
 - Aug 14, 2008 - v1.21
 - Jul 14, 2008 - v1.20
 - Jul 10, 2008 - v1.19
 - Jun 26, 2008 - v1.18
 - Jun 5, 2008 - v1.17
 - Jun 5, 2008 - v1.16
 - May 6, 2008 - v1.15
 - Apr 18, 2008 - v1.14
 - Apr 16, 2008 - v1.13
 - Mar 21, 2008 - v1.12
 - Mar 20, 2008 - v1.11
 - Mar 3, 2008 - v1.10
 - Jan 24, 2008 - v1.09
 - Jan 19, 2008 - v1.08                                          - Requires: PHP 4.3.0+ and MySQL 4.1.7+ (lowered requirements)
 - Jan 10, 2008 - v1.07
 - Jan 3, 2008 - v1.06
 - Dec 19, 2007 - v1.05
 - Dec 10, 2007 - v1.04                                          - Requires: PHP 4.3.0+ and MySQL 5.0.15 (lowered requirements)
 - Dec 3, 2007 - v1.03
 - Nov 30, 2007 - v1.02
 - Nov 26, 2007 - v1.01
 - Nov 21, 2007 - v1.00 (First Release)

-------------------------------------------------------------------------------

*** NOTE: NEW ENTRIES ARE LISTED AT THE TOP ***
