## Version 4.3.1 - May 21, 2025

ENH: Issue #993 - Added TDatePicker::DropDownCssClass to apply a class to all the dropdowns
ENH: Issue #997 - Nginx fixes to run appliaction in subfolder
ENH: Issue #998 - Replace Exception by Throwable to catch eval ParseError and Error.
ENH: Issue #1002 - Add THttpSessionhandler to avoid use of deprecated session_set_save_handler() ctor
ENH: Migrate functional tests from phpunit-selenium to php-webdriver
ENH: Php 8.4 compatibility: limit use of deprecated SID and E_STRICT constants
ENH: Php 8.4 compatibility: use explicit nullable type
ENH: Php 8.2 compatibility:remove deprecated usage of dynamic defined properties in TActiveRecord
BUG: Avoid recursive error while reporting an error and the source file can't be loaded

## Version 4.3.0 - October 26, 2023

ENH: Issues #824, #838, #851, #891, #910, #917 - General Behaviors Update: Cloning and Serializing supports behaviors.  IBaseBehavior has init($config) method. TClassBehavior tracks their owners.  Behaviors attach their registered event handlers at the behavior priority.  Registered Behavior event can optionally attached and detached automatically when the behavior is enabled or disabled (default).  Behavior events() support Closures. IBehavior are attachable class-wide by cloning. Behaviors for behaviors has better support.  Behaviors are case insensitive.  Supports Anonymous (unnamed/numeric) behaviors.  Wakeup updates the component behaviors with new named class behaviors. (belisoful)
BUG: Issue #843 - Permissions Manager behaviors rename the method 'getManager' to 'getPermissionsManager' for specificity. (belisoful)
ENH: Issue #845 - PHP Clone and Unserialize of TComponent objects supports behaviors. (belisoful)
ENH: Issue #848 - TComponent events support Closure (anonymous functions) as handlers. (belisoful)
ENH: Issue #861 - TWebColors lists all the Web Colors in a TEnumerable and implements TPropertyValue::ensureHexColor (belisoful)
ENH: Issue #886 - Lists the 1st level traits of the class and its parents in TComponent::getClassHierarchy.  Class-wide behaviors support attaching to Traits as well as interfaces, classes, and their parents. (belisoful)
ENH: Issue #904 - TRational and TURational for reading, writing, and computing EXIF-Tiff (GPS) Rational and URational unit types; in Prado\Util\Math. (belisoful)
BUG: Issue #911 - Protect the message cache file to be thread safe. (majuca)
ENH: Issue #939 - TEventHandler for embedding data with a specific event handler callable. (belisoful)
ENH: Issue #944 - TExitException for gracefully exiting the application anywhere. Exception chaining with the last parameter being the previous Exception. (belisoful)
ENH: Issue #979 - TComponent::raiseEvent optionally execute handlers in reverse; asa() and getBehaviors() searches for behaviors based on class after failing on name. (belisoful)
ENH: Issue #975 - Prado base object methods for each log type and automatic discovery of calling object for log category. (belisoful)
ENH: Issue #977 - THttpRequest::onResolveRequest for custom service resolution and TRequestConnectionUpgrade behavior for selecting service on http headers for "websocket". (belisoful)
ENH: Issue #982 - General Logging update: Profiling, Flushing large logs for long running processes, optional Tracing, tracks PID for multi-threaded logging, TBrowserLogRoute colorizes the time delta, TDbLogRoute adds a new DB field 'prefix' and functions for getting the DB log, DB log count, and deleting DB logs, TDBLogRoute also adds a RetainPeriod for automatically removing old logs, Adds an event TLogger::OnFlushLogs and flushes as a register_shutdown_function, adds the TSysLogRoute, and adds unit tests for logging. (belisoful)
ENH: Issue #984 - TEventSubscription for temporary event handlers. (belisoful)
ENH: Issue #972 - TProcessHelper (isSystemWindows, forking, kill, priority) and TSignalsDispatcher for delegating signals to respective global events, alarm interrupt callbacks at specific times, and per child PIDs callbacks. TEventSubscription can subscribe to a PHP process signal, an integer, as an event "name" (in TSignalsDispatcher).  (belisoful)
ENH: Issue #973 - Embedded PHP Development Web Server CLI Action. (belisoful)
ENH: Issue #976 - A class's static functions are extendable with class-wide behaviors or a singleton implementing ISingleton.  The PHP magic method TComponent::__callStatic forwards static function calls to implementing class-wide or ISingleton behaviors. (belisoful)

## Version 4.2.2 - April 6, 2023

BUG: Issue #811 - Update TSqlCriteria.php for fix phpdoc (zendre4)
BUG: Issue #814 -  TSkinTemplate: ensure the full-NS class name is returned from the skin to match the one from the template (ctrlaltca)
BUG: Issue #815 - Cron trigger on first run fix, repeat running fix, and removed time zone code (belisoful)
BUG: Issue #819 - Support for OFFSET parameter without LIMIT clause in SQL query for TActiveRecord (ganiuszka)
ENH: Issue #820 - TApplicationComponent::getClassFxEvents Performance Mode should cache all (belisoful)
ENH: Issue #828 - TApplication::onSetUser raised when setting user. (belisoful)
ENH: Issues #821, #822, #823, #825, #826, #834, #839, #842 - Behavior updates (belisoful)
ENH: Issues #840, #847 - TPriority updates (belisoful)
ENH: Issues #818, #846 - TCallChain updates (belisoful)
ENH: Issue #866 - HTMLPurifier_Config and cache path (majuca)
ENH: Issue #868 - RFC: Service detection is fragile (ctrlaltca)
BUG: Issue #815 - Cron tasks delay until their proper time on first entry. Long running cron tasks no longer repeat further pending tasks. (belisoful)
ENH: Issue #865 - File and dir permissions were too permissive 0777, now the file permissions are 0644 and 0755 for directory by default. (majuca)
ENH: Issue #869 - Remove execute permission on all files excepted on php-cli (majuca)
ENH: Issue #875 - Make Prado::using able to autoload traits defined as prado3 namespaces (ctrlaltca)

## Version 4.2.1 - May 9, 2022

BUG: Issue #809 - Interface order and minimum required PHP version (ganiuszka)
BUG: Issue #810 - Index 0 is out of range error from TAuthorizationRuleCollection::insertAt (ganiuszka)

## Version 4.2.0 - Apr 19, 2022

ENH: Issue #790 TPermissionsManager implements Role Based Access Control and Authorization Rules for each permission (belisoful)  
ENH: Prado::createComponent can take an array with "class" and object properties to set on the new object (belisoful)  
ENH: TAuthorizationRule adds Priority for proper ordering of Authorization Rules, eg. Deny All can be and stay the final rule using priorities. (belisoful)  
ENH: TPageConfiguration is extendable with dynamic events for loading xml & php and then applying (belisoful)  
ENH: TUser adds dynamic events dyDefaultRoles and dyIsInRole for default roles and checking the user in a role. (belisoful)  
BUG: Issue #791 - TUserManager loads PHP user file configurations properly (belisoful)  
ENH: Adds IPriorityItem for auto-prioritizing items in TPriorityList and TPriorityMap (belisoful)  
CHG: Issue #783 - Refactor the Shell system with Composer in mind; shell routes and actions, updated the help system. (belisoful)  
ENH: Issue #761 - TCronModule and TDbCronModule with supporting classes, scheduled like linux cron schedule expression, 8 languages. (belisoful)  
ENH: Issue #743 - Integrate Composer extensions for PRADO, module ids can be the composer package names and the class will be ['extra']['bootstrap'] (from the composer.json file). TPluginModule/TDbPluginModule for additional functionality as the parent class for extensions.  Composer "type" : "prado4-extension" (belisoful)  
BUG: Issue #784 - Prado-CLI corrected I18N by translating the shell "LANG" into "HTTP_ACCEPT_LANGUAGE" (belisoful)  
ENH: Issue #778 - Added TEventContent for filling in the control content from handlers of a global event (belisoful)  
ENH: Issue #776 - Added TDataSize for formatting data sizes with bytes, kB, MB, KiB, MiB, etc. (belisoful)  
ENH: Issue #775 - TPageService::onAdditionalPagePaths for additional pages (to look for) from composer package extensions (belisoful)  
ENH: Issue #772 - TMap, TPriorityMap adds dyNoItem, dyAddItem, and dyRemoveItem dynamic events. (belisoful)  
ENH: Issue #771 - Added TDbParameterModule for reading and setting application parameters with a database-table. (belisoful)  
CHG: Issue #765 - Prado-CLI moved into their own set of classes rather than one big prado-cli file with all the functionality in it. (belisoful)  
CHG: Issue #763 - Moved secondary saving of global variables until after onEndRequest in case global state changes in onEndRequest. (belisoful)  
ENH: Issue #750 - Added TGravatar (belisoful)  
ENH: issue #744 - Added RTL theme support (belisoful)  
BUG: Issue #742 - TSecurityManager::setHashAlgorithm uses hash_algos() rather than hash_hmac_algos() - some algos may be set that are not supported by hmac (belisoful)  
ENH: Issue #741 - TBehaviorsModule and TBehaviorParameterLoader for instancing behaviors in an application; added various behaviors like TParameterizeBehavior that gives new defaults and data from the parameters to any prado object property. (belisoful)  
ENH: Issue #740 - Behaviors can instances from an array with class and properties, important for #741 (belisoful)  
BUG: Issue #739 - TApplicationConfiguration::loadParametersPhp variable unset but called (belisoful)  
CHG: AutoGlobalListen is true for TApplicationComponents (but not TWebControls), and select TComponent children, their 'fx' events will automatically listen and unlisten to fx events on construct and destruct.
ENH: Issue #738 - Added TAuthManager::onLogin, onLogout, and onLoginFailed events (belisoful)  
ENH: Issue #737 - Added TSkinTemplate that doesn't do class/attribute validation so skins are more portable between apps (belisoful)  
ENH: Issue #735 - Added TPageService::onPreRunPage so modules can access Page events (belisoful)  
BUG: Issue #728 - TWeakCallableCollection makes use of 7.4 WeakReference so fx events do not stop garbage collection (belisoful)  
CHG: Split Wsat into its own repo pradosoft/prado-wsat (ctrlaltca)  
CHG: T(Active)HtmlArea4 has been replaced by T(Active)HtmlArea5, based on tinyMCE version 5 (ctrlaltca)
CHG: removed hardcoded bootstrap libraries (ctrlaltca)