2.2 (11/22/2020)
- Added the
status
argument to allrender*()
functions to force returning a specific HTTP status code #1025 - [Adam Chapman, Tom King] - CORS
accessControlAllowOrigin
can now match subdomain wildcards #1031 - [Tom King]
- Experimental adapter for Oracle database - [Andrei B]
- Added
automaticValidations
argument to theproperty
method - [Per Djurner] - Support named second argument in
findOneBy[Property]And[Property]
andfindAllBy[Property]And[Property]
- [Per Djurner] - Support
value
argument infindOrCreateBy[Property]
- [Per Djurner] - Minor fix for
full null support
- [Michael Diederich]
- Added the
required
argument toimageTag
to suppress exceptions if using non-existent files #979 - [Adam Chapman, Michael Diederich]
- Removed authenticity token id attribute to avoid non-unique id warnings in Chrome #953 - [Per Djurner]
- Fixes regular expression bug when using the SQL
IN
operator #944 - [Adam Chapman, Per Djurner] - Display content in maintenance mode on newer Lucee versions #848 - [Per Djurner]
validatesUniquenessOf
does not respect allowBlank #914 - [Adam Chapman]Wheels.RouteNotFound
Error page now escapes thearguments.path
to prevent XSS attacks - [Michael Diederich]buttonTo()
now uses<button>
internally instead of<input>
allowing for html in content - #798 - [Tom Sucaet, Tom King, Per Djurner]- Minor SQL preview fix in GUI - #992 - [Brandon Shea, Tom King]
- Added the
refresh
url parameter for auto refreshing test framework html - #986 - [Adam Chapman] - Allow custom migrator templates by scanning the
/migrator/templates
directory - [Adam Chapman] - Minimum Lucee 5 version is now 5.3.2.77 - Tests added - [Michael Diederich]
- Use
http_x_forwarded_proto
to determine if the application is running behind a loadbalancer that is performing SSL offloading - [Peter Amiri] - Allow the combination of
url
andparams
arguments withredirectTo
- [Adam Chapman] - Fixed some variable scoping - [Michael Diederich]
- Github Actions CI Pipeline - [Adam Chapman, Tom King]
- Flash Cookie can now be disabled via
set(flashStorage="none")
#978 [Tom King] processRequest()
accepts a route param -#1030 - [Adam Chapman]- Migration files are written with 664 mode -#1034 - [Adam Chapman]
2.1 (04/12/2020)
- Fixed pagination order ambiguous column name exception - #980 [Adam Chapman, Mike Lange]
- Renames findLast() to findLastOne() for [email protected]+92 upwards compatibility #988
2.1.0-Beta (02/24/2020)
- The new CFWheels internal GUI is more isolated and runs in it's own component: previously this was extending the developers main
Controller.cfc
which caused multiple issues. The migrator, test runner and routing GUIs have therefore all been re-written. - The plugins system behaviour no longer chains multiple functions of the same name as this was a major performance hit. It's recommended that plugin authors check their plugins to run on 2.1
- HTTP Verb/Method switching is now no longer allowed via GET requests and must be performed via POST (i.e via
_method
)
- Migrator now automatically manages the timestamp columns on
addRecord()
andupdateRecord()
calls - #852 [Charley Contreras] - Migrator correctly honors CFWheels Timestamp configuration settings (
setUpdatedAtOnCreate, softDeleteProperty, timeStampMode, timeStampOnCreateProperty, timeStampOnUpdateProperty
) - #852 [Charley Contreras] MSSQL
now usesNVARCHAR(max)
instead ofTEXT
#896 [Reuben Brown]- Allow createdAt and updatedAt to be explicitly assigned using the
allowExplicitTimestamps=true
argument - #887 - [Adam Chapman]
- New
set(flashAppend=true)
option allows for appending of a Flash key instead of replacing - #855 - [Tom King] flashMessages()
now checks for an array of strings or just a string and outputs appropriately - #855 - [Tom King]flashInsert()
can now accept a one dimensional array - #855 - [Tom King]
- Allow uppercase table names containing reserved substrings like
OR
andAND
- #765 [Dmitry Yakhnov, Adam Chapman] - Calculated properties can now override an existing property - #764 [Adam Chapman, Andy Bellenie]
- Filters are now correctly called if there is more than one after filter - #853 [Brandon Shea, Tom King, Adam Chapman]
- Minor fix for duplicate debug output in the test suite - #176 [Adam Chapman, Tom King]
- Convert
handle
to a valid variable name so it doesn't break when using dot notation - #846 [Per Djurner] - The
validatesUniquenessOf()
check now handles cases when duplicates already exist - #480 [Randall Meeker, Per Djurner] validatesConfirmationOf()
now has acaseSensitive
argument to optionally perform a case sensitive comparison - #918 [Tom King]sendFile()
no longer expands an already expanded directory on ACF2016 - #873 [David Paul Belanger, Tom King, strubenstein]- Automatic database migrations onApplicationStart now correctly reference appropriate Application scope - #870 [Tom King]
usesLayout()
now can be called more than once and properly respects the order called - #891 [David Paul Belanger]- Migrator MSSQL adapter now respects
Time
andTimestamp
Column Types - #906 [Reuben Brown] - Automatic migrations fail on application start - #913 [Adam Chapman]
- Default
cacheFileChecking
totrue
in development mode - [Adam Chapman, Steve Harvey] - Migrator columnNames list values are now trimmed - #919 [Adam Chapman]
- Fixes bug when httpRequestData content is a JSON array - #926 [Adam Chapman]
- When httpRequestData content is a JSON array, contents are now automatically added to
params._json
- #939 [Tom King] - Fixes bug where Migrator $execute() always appends semi-colon - #924 [Adam Chapman]
- Fixes bug where model createdAt property is changed upon update - #927 [Brandon Shea, Adam Chapman]
- Fixed silent application.wheels scope exception hampering autoMigrateDatabase - #957 [Adam Chapman, Tom King]
- Added the ability to pass
&lock=false
in the URL for when reload requests won't work due to locking - [Per Djurner] - Basic 302 redirects now available in mapper via
redirect
argument forGET/PUT/PATCH/POST/DELETE
- #847 - [Tom King] .[format]
based routes can now be turned off inresources()
andresource()
viamapFormat=false
- #899 - [Tom King]mapFormat
can now be set as a default inmapper()
for all childresources()
andresource()
calls - #899 - [Tom King]HEAD
requests are now aliased toGET
requests #860 - [Tom King]- Added the
includeFilters
argument to theprocessRequest
function for skipping execution of filters during controller unit tests - [Adam Chapman] - Added the
useIndex
argument to finders for adding table index hints #864 - [Adam Chapman] - HTTP Verb/Method switching is now no longer allowed via
GET
requests and must be performed viaPOST
#886 - [Tom King] - CORS Header
Access-Control-Allow-Origin
can now be set either via a simple value or list inaccessControlAllowOrigin()
#888 [Tom King] - CORS Header
Access-Control-Allow-Methods
can now be set viaaccessControlAllowMethods(value)
#888 [Tom King] - CORS Header
Access-Control-Allow-Credentials
can now be turned on viaaccessControlAllowCredentials(true)
; #888 [Tom King] accessControlAllowMethodsByRoute()
now allows for automatic matching of available methods for a route and sets CORS HeaderAccess-Control-Allow-Methods
appropriately #888 [Tom King]- CORS Header can now be set via
accessControlAllowHeaders(value)
#888 [Tom King] - Performance Improvement: Scanning of Models and Controllers #917 [Adam Chapman]
- Added the
authenticityToken()
function for returning the raw CSRF authenticity token #925 [Adam Chapman] - Adds
enablePublicComponent
,enableMigratorComponent
,enablePluginsComponent
enviroment settings to completely disable those features #926 [Tom King] - New CFWheels Internal GUI #931 [Tom King]
pluginRunner()
now removed in favour of 1.x plugin behaviour for performance purposes #916 [Core Team]- Adds
validateTestPackageMetaData
environment setting for skipping test package validation on large test suites #950 [Adam Chapman] - Added aliases for
migrator.TableDefinition
functions to allow singular variant of thecolumnNames
property #922 [Sébastien FOCK CHOW THO] onAbort
is now supported viaevents/onabort.cfm
#962 [Brian Ramsey]
2.0.1 (01/31/2018)
- Fixes reload links on application test suite page - #820 [Michael Diederich]
- Set
dbname
incfdbinfo
calls when using custom database connection string - #822 [Per Djurner] - Fixes
humanize()
function - #663 [Chris Peters, Per Djurner, kmd1970] - Enables the
rel
attribute forstylesheetlinkTag()
- #834 [Michael Diederich] - Returning a
NULL
value from a query with NULL support enabled no longer throws an error - #834 [Michael Diederich] - Accessing a route with incorrect verb now provides a more useful error message - #800 [Tom King]
- Fixed bug with arrays in URLs - #836 [Michael Diederich, Per Djurner]
- startFormTag now properly applies the method attribute - #837 [David Paul Belanger]
- Incompatible plugin notice now ignores patch releases unless specified - #840 [Risto, Tom King]
2.0.0 (09/30/2017)
- Support passing in
encode="attributes"
tosubmitTag()
,buttonTag()
,paginationLinks()
,checkBoxTag()
, andcheckBox()
- #816 [Per Djurner, Tom King] - Support passing in
encode="attributes"
to date helpers - #818 [Per Djurner]
- Support for Oracle has been dropped.
2.0.0 RC 1 (08/21/2017)
- Added global setting (
createMigratorTable
) for creating migrations table - #796 [Adam Chapman, Per Djurner]
- Use association to create automatic property labels on
belongsTo()
- #618 [Andy Bellenie, Chris Peters] - The output of all view helpers is now encoded by default - #777 [Per Djurner]
- Added global setting (
allowCorsRequests
) for allowing CORS requests to go through - #623 [Chris Peters, David Belanger, Per Djurner, Tom King]
- Support CSRF in
buttonTo()
- #808 [Per Djurner, Tom King] - Fix encoding on
buttonTo()
- #798 [Per Djurner] - Fix error when creating default table for migrations - #791 [Adam Chapman, Per Djurner]
- Fix so calling
usesLayout()
inController.cfc
does not affect layout of internal CFWheels pages - #793 [Adam Chapman, Per Djurner] - Fix slow performance of findAll - #806 [Andy Bellenie]
- Minimum version when running Lucee 5 is now 5.2.1.9 (can be disabled with the
disableEngineCheck
setting). - Minimum version when running ACF 2016 is now 2016,0,04,302561 (can be disabled with the
disableEngineCheck
setting). - includePartial() now requires the
partial
andquery
arguments to be set (if using a query)
2.0.0 Beta 1 (5/31/2017)
- Support for passing in
select=false
toproperty()
to not include a calculated property by default in SELECT clauses - #122 [Adam Chapman, Per Djurner] - Support for setting calculated properties to a specific data type - [Per Djurner]
- Support for boolean
returnIncluded
argument inproperties()
for returning nested properties - [Adam Chapman] - Support for calling
updateProperty()
with dynamic argument, e.g.updateProperty(firstName="Per")
- [Per Djurner] - Support for using boolean transaction argument, e.g.
update(transaction=false)
- #654 [Adam Chapman] - Model instance
isPersisted()
andpropertyIsBlank()
methods - #559 [Chris Peters] - Database Migrations (dbmigrate) now available in the core (See Breaking Changes) - #664 [Adam Chapman, Tom King, Mike Grogan]
- Databases can now be automatically migrated to the latest version on application start - #766 [Tom King]
- New
timeStampMode
setting ("utc"
,"local"
or"epoch"
) for thecreatedAt
andupdatedAt
columns - [Andy Bellenie] - Allow nested transactions - #732 [Andy Bellenie]
- The
handle
argument to finders now set the variable name for the query so it's easier to find in the debug output - [Per Djurner] - Support added for HAVING when using aggregate functions in the
where
argument - #483 [Per Djurner] - Added support for the JSON data type in the MySQL adapter - #759 [Joel Stobart]
- Corrected mapping for text types in the MySQL adapter - #759 [Joel Stobart]
- Added global setting,
lowerCaseTableNames
, to always lower case table names in SQL statements - [Per Djurner]
flashMessages()
are now in default layout.cfm - #650 [Tom King]- Added ability to override value in
textField()
,passwordField()
andhiddenField()
- #633 [Per Djurner, Chris Peters] - Support for the
method
argument inbuttonTo()
helper - #761 [Adam Chapman]
- Support for HTTP verbs, scopes, namespaces, and resources in routes (ColdRoute) [Don Humphreys, James Gibson, Tom King]
- Support for passing in
ram://
resources tosendFile()
- #566 [Tom King] - Extended
sendMail()
so that it can return the text and/or html content of the email - #122 [Adam Chapman] renderWith()
can now set http status codes in header with thestatus
argument - #549 [Tom King]- Cross-Site Request Forgery (CSRF) protection - #613 [Chris Peters]
- Parse JSON body and add to params struct - [Tom King, Per Djurner]
- Fixes skipped model instantiation due to Linux file case sensitivity - #643 [Adam Chapman, Tom King]
- Avoid double redirect error when doing delayed redirects from a verification handler function - [Per Djurner]
- Fixes attempts to insert nulls for blank strings - #654 [Andy Bellenie, Per Djurner]
- Fix for using
validatePresenceOf()
with default on update - [Andy Bellenie] - Fixes so paginated finder calls with no records include column names - #722 [Per Djurner]
- Fixes "invalid data" error when using unsigned integers in MySQL - #768 [Per Djurner]
- Plugins now distributed via forgebox.io [Tom King]
- Update to the plugin system to allow overriding of the same framework method multiple times - #681 [James Gibson, Tom King]
- Added ability to turn off incompatible plugin warnings from showing - [Danny Beard]
- Plugins now have any java lib/class files automatically mapped onApplicationStart 731 [Andy Bellenie, Tom King]
- Plugins now read version number off their
box.json
files and are displayed in debug area #68 [Tom King] - Plugin meta data as set in
box.json
now available inapplication.wheels.pluginMeta
scope #68 [Tom King]
- Redirect away after a reload request - [Chris Peters]
- Support checking IP in
http_x_forwarded_for
when doing maintenance mode exclusions - [Per Djurner] - Support checking user agent string when doing maintenance mode exclusions - [Per Djurner]
- Added JUnit and JSON format test results - [Adam Chapman]
- Added empty application test directories - [Chris Peters, Adam Chapman]
- Added
beforeAll()
,afterAll()
,packageSetup()
,packageTeardown()
methods to test framework #651 - [Adam Chapman] - Added
errorEmailFromAddress
anderrorEmailToAddress
config settings - #95 [Andy Bellenie, Tony Petruzzi, Per Djurner] - Support for passing in any "truthy" value to
assert()
in tests - [Per Djurner] - Added
/app/
mapping pointing to the root of the application - [Per Djurner] - Added a
processRequest()
function that simplifies testing controllers - [Per Djurner] - Added new embedded documentation viewer/generator for JavaDoc - #734 [Tom King]
- Removes all references to Railo - #656 (Adam Chapman)
- Made uncountable and irregular words configurable - #739 [Per Djurner]
- Removed
design
mode - [Per Djurner] - Removed
cacheRoutes
setting - [Per Djurner] - The
cacheFileChecking
andcacheImages
settings are now turned off in development mode - [Per Djurner] - Added
includeErrorInEmailSubject
setting - [Per Djurner] - Environment switching via URL can now be turned off via
allowEnvironmentSwitchViaUrl
- #766 [Tom King]
- Minimum Lucee version is now 4.5.5.006.
- Minimum ACF version is now 10.0.23 / 11.0.12.
- Support for Railo has been dropped.
- Rewrite and config files for IIS and Apache have been removed and has to be added manually instead.
- The
events/functions.cfm
file has been moved toglobal/functions.cfm
. - The
models/Model.cfc
file should extendwheels.Model
instead ofWheels
(models/Wheels.cfc
can be deleted). - The
controllers/Controller.cfc
file should extendwheels.Controller
instead ofWheels
(controllers/Wheels.cfc
can be deleted). - The
init
function of controllers and models should now be namedconfig
instead. - The global setting
modelRequireInit
has been renamed tomodelRequireConfig
. - The global setting
cacheControllerInitialization
has been renamed tocacheControllerConfig
. - The global setting
cacheModelInitialization
has been renamed tocacheModelConfig
. - The global setting
clearServerCache
has been renamed toclearTemplateCache
. - The
updateProperties()
method has been removed, useupdate()
instead. - Form labels automatically generated based on foreign key properties will drop the "Id" from the end (e.g., the label for the "userId" property will be "User", not "User Id").
- Routes need to be updated to use the new routing system by calling
mapper()
. - JavaScript arguments like
confirm
anddisable
have been removed from the link and form helper functions (use the JS Confirm and JS Disable plugins to reinstate the old behaviour). - Timestamping (
createdAt
,updatedAt
) is now in UTC by default (set the globaltimeStampMode
setting tolocal
to reinstate the old behaviour). - Blank strings in SQL are now converted to null checks (e.g.
where="x=''"
becomeswhere="x IS NULL"
). - Tags are now closed in HTML5 style (e.g.
<img src="x">
instead of<img src="x" />
). - The
encode
argument tomailTo
now encodes tag content and attributes instead of outputting JavaScript. - Class output is now dasherized (e.g.
field-with-errors
instead offieldWithErrors
). - The
renderPage
function has been renamed torenderView
. dbmigrate
is now namedMigrator
- Automatic database migrations are disabled by default. Use
autoMigrateDatabase
setting to enable. - Migrator does not write .sql files by default. Use
writeMigratorSQLFiles
to enable - Migrator does not allow 'down' migrations outside of the 'development' environment by default. Use
allowMigrationDown
to enable.
1.4.6 (10/1/2017)
- Made humanize() keep spaces in input - #663 [Per Djurner, Chris Peters]
- Added spatial datatypes for MySQL - #660 [Norman Cesar]
- Scope variable to avoid object being returned as NULL - #783 [Adam Larsen, Dmitry Yakhnov]
- Include "MariaDB" in database check connection string - #563 [Adam Chapman]
- Fixes MySQL attempts to insert nulls for blank strings - #680 [Andy Bellenie]
1.4.5 (3/30/2016)
- Display URL correctly in error email when on HTTPS - [Per Djurner]
- Added the
datetimeoffset
data type to the Microsoft SQL Server adapter - [Danny Beard] - Fix for test link display in debug footer - #588 [Tom King]
- Don't include query string when looking for image on file through
imageTag()
- [Per Djurner] - Format numbers in
paginationLinks()
- [Per Djurner] - Correct plugin filename case on application startup - #586 [Chris Peters]
- Clear out cached queries on reload - #585 [Andy Bellenie]
1.4.4 (12/10/2015)
- Check global "cacheActions" setting - #572 [Andy Bellenie, Per Djurner]
- Fixed parsing for SQL IN parameters - #564 [Lee Bartelme, Per Djurner]
- Pass through all arguments properly when using findOrCreateBy - #561 [Per Djurner]
- Make it possible to disable session management on a per request basis - #493 [Andy Bellenie, Per Djurner]
- Allow mailParams to be passed through to sendEmail() - #565 [Tom King]
- Fixed inconsistency in form helpers for nested properties - [Marc Funaro, Per Djurner, Chris Peters]
- Fixed issue with grouping on associated models - [Song Lin, Per Djurner]
- Made the pagination() function available globally - #560 [Chris Peters, Per Djurner]
1.4.3 (10/16/2015)
- Fix for using cfscript operators in condition and unless arguments - [Per Djurner]
- Added try / catch on getting host name since CreateObject("java") can be unavailable for security reasons - [Per Djurner]
- Fixed bug with cache keys always changing even though the input was the same - [Per Djurner]
- Remove white space character in output - [Bill Tindal, Per Djurner]
- Use correct path info in error email and debug area - [Per Djurner]
- Fixed plugin injection issue on start-up - #556 [Adam Chapman, Per Djurner]
- Skip calculated properties that are aggregate SQL functions in the GROUP BY clause - #554 [Adam Chapman, Per Djurner]
- Fixed error when trying to validate uniqueness on blank numeric properties - #558 [Chris Peters, Per Djurner]
1.4.2 (08/31/2015)
- Fix for selecting distinct with calculated property - [Edward Chanter, Per Djurner]
- Fixed so default values are applied to non persistent properties - #519 [Andy Bellenie]
- Fixed missing var scope causing error on Lucee - [Russ Michaels, Tom King]
- Don't show debug info on AJAX requests - #496 [Leroy Mah, Per Djurner]
- Fixed permissions issue with imageTag() when running on shared hosting - [Per Djurner]
- Removed use of ExpandPath() in debug file since it was causing file permission issues - [Peter Hopman, Per Djurner]
- Skip setting object property when NULL is passed in - #507 [Andy Bellenie, Per Djurner]
- Fixed edge case issue with calling dynamic association methods - #501 [Dominik Hofer, Per Djurner]
- Fixed lock name in onSessionEnd event - #499 [Per Djurner]
- Ignore white space in the "where" argument to finders - #503 [Per Djurner]
- Ignore spaces in the "keys" argument to hasManyCheckBox() and hasManyRadioButton() - [Song Lin, Per Djurner]
- Skip running callbacks when validating uniqueness and similar situations - #492 [Andy Bellenie, Per Djurner]
- Avoid plugin directory exception during first application load - #541 [Adam Chapman, Per Djurner]
- Fix for using cfscript operators in "condition" and "unless" argument on ACF 8 - #531 [Per Djurner]
- afterSave and afterCreate callbacks are not firing on nested objects - #525 [Adam Chapman, Chris Peters, Per Djurner]
- Fix for rolling back nested properties - #539 [James Gibson, Chris Peters, Per Djurner]
- Ability to pass in list to "includeBlank" argument on dateSelect() and similar functions - #502 [Thorsten Eilers, Per Djurner]
- Ability to set attributes on the input element created by buttonTo() - [Per Djurner]
- Added missing "onlyPath" argument to imageTag() - #508 [Per Djurner]
- Corrected output of property labels in error messages - #494 [Andy Bellenie]
1.4.1 (05/30/2015)
- Skip callbacks when running calculation methods - #488 [Adam Chapman, Per Djurner]
- Fixed rewrite rules so base URL is rewritten correctly on Apache - #367 [Jeremy Keczan, Per Djurner]
- Removed incorrect path info information set by Apache - #367 [David Belanger, Per Djurner]
- Fixed routing bug when running from a sub folder on Adobe ColdFusion 10 - [Brant Nielsen, Per Djurner]
- Made sure error emails never depend on application variables being set - [Per Djurner]
- Fix for using cfscript operators in "condition" and "unless" argument on ACF 8 - [Per Djurner]
- Removed tests folder - [Per Djurner]
- Updates to framework utility pages - Update logo, Fix links on congrats page to point to new documentation site - [Chris Peters]
1.4 (05/08/2015)
- Allow spaces in list passed in to the "include" argument on finders - #150 [Per Djurner]
- Added findOrCreateByProperty, findAllKeys(), findFirst() and findLast() finder methods - [Per Djurner]
- Add support for "GROUP BY" in sum(), average() etc. - #464 [Per Djurner]
- Made exists() check for any record when "key" and "where" is not passed in [Per Djurner]
- Added clearChangeInformation() for clearing knowledge of object changes - #433 [Jeremy Keczan, Per Djurner]
- Evaluate validation error messages at runtime - #470 [Per Djurner]
- Respect blank "text" argument in linkTo() - #365 [Adam Chapman, Tony Petruzzi, Per Djurner]
- Allow styleSheetLinkTag() and JavaScriptIncludeTag() to reference files starting from the root - [Per Djurner]
- Added "monthNames" and "monthAbbreviations" arguments to form helpers for easy localization - [Per Djurner]
- Ability to prepend functions to the filter chain instead of appending - #321 [Per Djurner]
- Pass in "appendToKey" to caches() to cache content separately - #439 [Per Djurner]
- Allow external attachments with sendEmail() - [Adam Chapman, Tony Petruzzi]
- Ability to redirect to a specific URL - [Simon Allard]
- Option to correct JSON output by passing in x="string" or x="integer" to renderWith() - [Per Djurner]
- Fix for blank path_info in CGI scope - #447 [Tim Badolato, Tony Petruzzi, Per Djurner]
- Fix for accessing request scope key that does not exist from session - #446 [Brent Alexander, Per Djurner]
- Removed "validate" property that was incorrectly set when calling create() - [Per Djurner]
- Pass through "parameterize" in exists() [Per Djurner]
- Do not remove "AS" when it's in the SQL for a calculated property - #453 [Jean Duteau, Per Djurner]
- Obfuscate parameters in named route patterns when URL rewriting is off - #455 [Amber Cline, Per Djurner]
- Pass through "includeSoftDeletes" argument correctly - #451 [Jon Brose]
- Support for the Lucee server - [Tom King]
- Made "development" the default environment mode - [Per Djurner]
- Removed deprecation work-around for the "if" argument on validation helpers - [Per Djurner]
- Removed deprecation work-around for the "class" argument on association initialization methods - [Per Djurner]
- Removed the "lib" folder - [Per Djurner]
- Removed the h() function, use XMLFormat() instead - [Per Djurner]
1.3.4 (02/03/2015)
- Removed unnecessary tests folder [Brant Nielsen, Per Djurner]
1.3.3 (02/02/2015)
- Correct output of boolean HTML attributes using new global "booleanAttributes" setting - #377 [James Hayes, Per Djurner]
- Make sure locks cannot be affected by other applications running on the same server - [Jonathan Smith, Per Djurner]
- Fixed bug with updating an integer column from NULL to 0 - #436 [Simon Allard, Per Djurner]
- Fixed potential permissions issue when running on shared hosting - [John Bliss, Per Djurner]
1.3.2 (11/11/2014)
- Fixed regression bug with setting unique id for nested properties - [Simon Allard, Per Djurner]
- Fixed reversed usage for setting option text / value when passing in an array of structs to select() / selectTag() - [Per Djurner]
- Tableless models should not require dataSourceName - #351 [Jeremy Keczan, Singgih Cahyono]
- Fixed issue with using group by with calculated properties - #89 [Adam Chapman, Per Djurner, Singgih Cahyono]
- Fixed ORM incorrectly parsing a property value as NULL - #209 [Chris Peters, Per Djurner]
- Fixed bug with application scope when sharing name across applications - #359 [Singgih Cahyono]
- Fix for removing "AS" from ORDER BY clause in Microsoft SQL Server - #132 [Troy Murray, Tony Petruzzi, Charley Contreras, Per Djurner]
- Calling valid() will now correctly validate all associations when using nested properties - #284 [Adam Chapman, Per Djurner]
- Fixed issue with save() causing callbacks to run twice when using nested properties - #284 [Adam Chapman, Per Djurner]
- Fixed race condition issue with caching - #376 [Brian Parks, Tom King, Per Djurner]
- Fixed number parsing in WHERE strings - [Per Djurner]
1.3.1 (08/25/2014)
- Fixed issue with calling addFormat() on application start-up - #333 [Tom King, Per Djurner]
- Fixed so that Railo outputs ids for nested properties as integers instead of exponents - [Jordan Clark]
- Make sure that ids for nested properties are unique - [Sam Hakimi, Tony Petruzzi]
- Allow models to be created with no properties - [Tony Petruzzi, Singgih Cahyono]
- Added missing "prepend" and "append" arguments on startFormTag() and endFormTag() - [Per Djurner]
- Fix for fetching inserted primary key value from an Oracle database when using Adobe ColdFusion - [Per Djurner]
- When using autoLink(), make sure that links beginning with "www" have a protocol - [Benjamin Melançon, Tony Petruzzi]
- Plugin folder name should be lower case as per convention - #320 [Singgih Cahyono]
- Clear statically cached pages on reload - [Per Djurner]
- Do not run filters and verifications when caching actions statically - [Per Djurner]
- Fixed a bug where trying to obfuscate a high number was throwing an error - [Per Djurner]
- Fixed bug with static caching on Adobe ColdFusion 9 - #332 [Charley Contreras]
- Allow for format auto-detection when HTTP ACCEPT contains multiple values - #297 [Raul Riera, Singgih Cahyono]
- Fixed so that sendEmail() can use the "remove" attribute to delete attachments - #339 [Simon Allard]
- Fixed bugs with using the "twelveHour" argument on form helpers - #342, #343 [Jeremy Keczan, Per Djurner]
- Fixed issue with using non-ascii characters in routes - #138 [Chris Ogden, Singgih Cahyono, Per Djurner]
- Support for tableless models - [Tony Petruzzi]
- Alias table names using the association name in the "FROM" clause of a query when needed - [James Gibson, Per Djurner]
- New global "modelRequireInit" setting that you can set to "true" to require an init function specified in all models - [Jonathan Smith]
- Place surrounding parentheses on calculated properties in "where" and "order by" clauses - [Andy Bellenie, Per Djurner]
- Check to see if a given primary key already exists before adding it through setPrimaryKey() - [Mark Moran]
- Made it possible to set global defaults on autoLink(), excerpt(), wordTruncate() and simpleFormat() - [Chris Peters]
- Added server host name to debug info and error email - [Colin MacAllister]
- Made it possible to set a global default for the "twelveHour" argument on date / time helpers - [Per Djurner]
- Added "prepend / "append" arguments on buttonTag() - [Per Djurner]
- New "aroundRight" option on the "labelPlacement" argument that places the label text to the right of the form input - [Adam Chapman, Per Djurner]
- Support for HTML5 "type" argument in form field helpers - [Per Djurner]
- Support for HTML5 boolean attributes - [Per Djurner]
- Ability to remove media / type attributes when using styleSheetLinkTag and JavaScriptIncludeTag - [Per Djurner]
- Support for implicit protocol in JavaScriptIncludeTag and styleSheetLinkTag - [Per Djurner]
- Setting to convert, for example, dataDomCache or data_dom_cache (default) view helper argument names to data-dom-cache attribute names - [Per Djurner]
- Allow the class attribute for paginationLinks helper anchor tags - [Adam Chapman]
- Added the ability to pass through arguments from the view to the data Function in the controller - [Per Djurner]
- Made setPagination() available from the controller layer - [Per Djurner]
- Fixed issue with double camel-casing of already singular strings [Don Humphreys]
- Fixes issue with running CFWheels with strict scope cascading enabled in Railo - [Jason Weible]
- Prevent stack overflow error with named arguments on dynamic update - [Tony Petruzzi]
- Fixes pagination bug when using association methods with a blank "where" clause - [Andy Bellenie]
- Added missing "validate" argument to create() - [Andy Bellenie]
- Fixed issue with deleting plugins on case sensitive systems - [Mark Moran]
- Make sure the latest version of a plugin is unpacked if multiple versions exists - [Tony Petruzzi]
- Fixed so the "onApplicationEnd" and "onSessionEnd" events pass through the arguments scope [Per Djurner]
- Fixed so the "onSessionEnd" event fires correctly - #172 [Per Djurner]
- Added geometry and geography datatypes (SQLServer) - [Simon Allard]
- Allow blank values to be passed through when validating uniqueness - [Per Djurner]
- Added work-around for "FastHashRemoved" struct bug found in ColdFusion 8 - [Per Djurner]
- Removed old bug fix to make redirectTo() respect anchors - [Per Djurner]
- Correct controller action caching - #153 [Tobias Reiter, Per Djurner]
- Fix for creating objects from the root folder on Railo 4 - [Jordan Clark, Adam Chapman]
- Fix for detecting that Microsoft SQL Server is used - [Tony Petruzzi, Adam Chapman]
- Don't assume null is false for boolean properties - [Adam Chapman]
- Allow to pass in encoded versions of "&"" and "=" (%26 and %3D) to the params argument - #173 [Mark Gaulin, Per Djurner]
- Avoid error when the first request to the app is an invalid one - #222 [Maxime de Visscher, Per Djurner]
- Get the error location from the correct exception struct - #223 [Adam Chapman, Per Djurner]
- Do not trim primary key values - #213 [Jeremy Keczan, Per Djurner]
- Incorrect pagination query with Oracle - #93 [crsedgar, Tony Petruzzi, Singgih Cahyono]
- Repair Oracle test failures #187 (Tony Petruzzi, Singgih Cahyono)
- Plugins with global mixin are ignored in unit tests - [Singgih Cahyono, Tony Petruzzi]
- Automatic validation should validate primary key - #143 [Adam Chapman, Tony Petruzzi]
- Made application start-up thread safe - [Per Djurner]
- Performance improvement for locking - [Per Djurner]
- Case insensitive loading of controllers and models - [Per Djurner]
- Browse test packages for core, app and plugins - [Adam Chapman, Tony Petruzzi]
- Refactored to avoid a Duplicate() call when sending error email - [Per Djurner]
- Add boolean type to validatesFormatOf() - [Andy Bellenie]
- Add delimiter parameter to the highlight() function - #826 [Per Djurner, Tony Petruzzi]
- Use mark tag in highlight - #836 [Per Djurner, Tony Petruzzi]
- Add parameters append and prepend to the submitTag() - #593 [Per Djurner, Tony Petruzzi]
- Turned off URL rewriting in IIS 7 by default - [Per Djurner, Tony Petruzzi]
- Add CFFileServlet to the pattern list, of the rewrite rules file, to be able to display an image when using - [ellor1138]
- radioButtonTag() checked attribute is ignored if value attribute is empty - #733 [Per Djurner, Tony Petruzzi]
- make cached queries respect the 'maxrows' argument (findAll) - #824 [Per Djurner, Tony Petruzzi]
- Update web.config, htaccess to ignore favicon.ico - [Cathy Shapiro, Tony Petruzzi]
- Route with only format specified was throwing error - [jjallen, Tony Petruzzi]
- Filter controller and action params - [Pete Freitag, Andy Bellenie, Tony Petruzzi]
- validatesUniquenessOf only selects primary keys - [Jordan Clark, Don Humphreys]
- Allow removal height and/or width attributes from imageTag when set to false - [downtroden, Tony Petruzzi]
- Allow delimiter to be specified for stylesheets and javascripts - [Derek, Tony Petruzzi]
- hasChanged was incorrectly evaluating boolean values - [Jordan Clark, Don Humphreys]
- Do not perform update when no changes have been made to the properties of a model - #786 [Mohamad El-Husseini, Tony Petruzzi]
- OnlyPath argument of urlFor does not correctly recognise HTTPS urls - [Andy Bellenie, Tony Petruzzi]
- Pagination clause wasn't enclosed - [Karl Deterville, Tony Petruzzi]
- Pagination endrow was incorrectly calculated - [Karl Deterville, Tony Petruzzi]
- Escape html entities in text and value of select options - #767 [Richard Herbert, Tony Petruzzi]
- Fix plugins not loading when application is in a subdirectory - [Mike Craig, Tony Petruzzi]
- Update to belongsTo(), hasOne() and hasMany() for the new argument joinKey. - [James Gibson, Tony Petruzzi]
- You can pass an unlimited number properties when using dynamic finders - [Tony Petruzzi]
- Dynamic finders now support passing in an array for values - [Tony Petruzzi]
- Added the delimiter argument to dynamic finders, this allow you to change the delimiter - [Tony Petruzzi]
- Added validationTypeForProperty() method - [Tony Petruzzi]
- Allow an array of structs to used for options in selectTag() - [Adam Chapman, Tony Petruzzi]
- Added secondStep parameter to date/time select tags - [Tom King, Tony Petruzzi]
- Incorrect MIME type for JSON - #751 [daniel.mcq, Tony Petruzzi]
- Route with format will cause exception when route is selected and format is not provided - #738 [Danny Beard, Tony Petruzzi]
- Raise renderError when template is not found for format - #759 [Mike Henke, Tony Petruzzi]
- LabelClass should split up the list of classes and attach one class for each label - #757 [Mohamad El-Husseini, Tony Petruzzi]
- Transactions would not close when used with the dependent argument of hasMany() - #739 [Andy Bellenie]
- Soft deletes do not work correctly with outer joins - #762 [Andy Bellenie]
- Better error message when supplying a query param of type string and omitting single quotes - #763 [Adam Chapman, Tony Petruzzi]
- Allow commas in dynamic finders - #771 [Joshua, Tony Petruzzi]
- AMPM select displaying twice - #768 [John Bliss, Tony Petruzzi]
- $request argumentsCollection: should be argumentCollection - #772 [William Fisk, Tony Petruzzi]
- Pagination pull incorrect number of results with compounded keys - #725 [Jeff Greenhouse, Tony Petruzzi]
- Update hasChanged() to properly chech floats - [Andy Bellenie, Tony Petruzzi]
- Date tags selected date throws out of range error - [Ben Garrett, Tony Petruzzi]
- Added proper HTTP status headers - #705 [Randy Johnson , Andy Bellenie]
- Plugin development no longer requires a zip file. - [Tony Petruzzi]
- You can now have bracket markers for all validation arguments - #706 [Tony Petruzzi]
- Columns marked as not null should allow for blank strings - [Tony Petruzzi]
- Allows for relative url linking to be turned off in autolink() - [James Gibson, Tony Petruzzi]
- Allow for default argument on sendmail for from, to and subject - #727 [Andy Bellenie, Tony Petruzzi]
- Fixed issue with $create supplying incorrect keys to $query - [Don Humphreys, Tony Petruzzi]
- The original transaction mode would not be respected during during callbacks - [Andy Bellenie, Tony Petruzzi]
- "none" transaction modes would never close - [Andy Bellenie, Tony Petruzzi]
- Incorrect $cache argument - #671 [William Fisk, Tony Petruzzi]
- Route formats prevented fullstops from being used in params - #666 [Tom King, Raul Riera, Tony Petruzzi]
- Controller in params should be upper camel case - #703 [William Fisk, Tony Petruzzi]
- Application scope would not initialize in sub - #721 [Adam Chapman, Tony Petruzzi]
- ValidatesUniquenessOf doesn't read soft-deletes - #719 [Andy Bellenie, Tony Petruzzi]
- PaginationLinks(): routes with page number marker variable would produce the wrong links - [Kenneth Barrett, Tony Petruzzi]
- Add 'when' argument to validate() - #643 [Andy Bellenie, Tony Petruzzi]
- Select, SelectTag allow an array of structs to be passed to options - #680 [William Fisk, Tony Petruzzi]
- Changed "default" argument on includeContent() to "defaultValue" - #663 [Tony Petruzzi]
- Added the varchar_ignorecase type to the H2 adapter - #664 [Per Djurner]
- Fix so that the full tablename is always retuned - #667 [Tony Petruzzi]
- Pagaination with parameterize set to false for numeric keys - #656 [levi730, Tony Petruzzi]
- Blank should be the selected value when includeBlank is set - #633 [Tony Petruzzi]
- validatesLengthOf failed when both maximum and minimum were specified - [Tony Petruzzi]
- Added number formatting on the value passed in to "count" in the pluralize() function - [Per Djurner]
- Fixed renderWith() so that it works in all environment modes when returning JSON - #644 [Tony Petruzzi]
- Fixed belongsTo association code when using composite keys - #641 [James Gibson, Andy Bellenie]
- Allow cfthread to be used in views - #612 [Cathy Shapiro, Tony Petruzzi]
- Fixed paging code for non-parameterized queries - #656 [Mike Lester, Tony Petruzzi]
- Corrected bug in request verification when session management was disabled in Railo - #658 [Russ Sivak, Per Djurner]
- Changed "if" to "condition" on all validation methods to get around the fact that "if" is a reserved word in cfscript - #660 [Mohamad El-Husseini, Per Djurner]
- Fixed autolink() so that it correctly links and escapes relative paths - #646 [Tony Petruzzi]
- Fixed so including partials with layouts does not cause duplicated content - #659 [Per Djurner]
- Don't use the cfzip "overwrite" attribute when unzipping plugins since it updates the date on the files on Railo - [William Fisk, Per Djurner]
- Update to the error template to make sure errors are not thrown while trying to send out error emails - [James Gibson]
- Fixes a bug with obfuscation on Railo that happens when the mathematical constant "e" is in the string together with no other letters - [Jon Lynch, Tony Petruzzi, Per Djurner]
- Transaction="none" would throw an error if methods within a callback chain also attempted to make database changes - #613 [Andy Bellenie]
- Fixed bug that prevented the use of custom labels on calculated or non-persisted properties in form helpers and error messages - #630 [Andy Bellenie, Mike Henke]
- Update to renderwith() to return the content if "returnAs" equals "string" - [James Gibson, W. Scott Hayes]
- Removed case-sensitivity on labelXXX arguments passed through to form helpers - [Andy Bellenie]
- The full tag context of an error was missing from the error emails, fixed now - [Andy Bellenie]
- Fixed bug in nested properties related to deleting children via object array - #595 [Adam Michel, Tony Petruzzi]
- Make sure transactions are rolled back and marker gets closed on error - [Tony Petruzzi]
- Fixed so deprecation notices only gets set when the debug info is to be displayed - [John C. Bland II, Per Djurner]
- Fix to make preserveSingleQuotes() call work in Railo 3.2 - [Raul Riera, Per Djurner]
- Fixed bug with dynamic finders where we were looking for a non existing data type on a calculated property - [Brian Ward, Per Djurner]
- Fix to make sure findOne() does not query the database for more records than needed - #605 [Per Djurner, Tony Petruzzi]
- Corrected H2, Oracle and PostgreSQL code for when GROUP BY clause needs to contain columns from the ORDER BY clause - [Per Djurner]
- Correction to get exactly one record when we're dealing with single associations instead of basing it on the "joinType" argument - [Per Djurner]
- Update to error handling to make sure the "rootCause" data exists before trying to use it - [James Gibson]
- Corrections and improvements to Oracle support - [Ryan Hoppitt, Tony Petruzzi, Per Djurner]
- Fixed so the "Message" part is also in lower case when "lowerCaseDynamicClassValues" is "true" in flashMessages() - [John C. Bland II, Per Djurner]
- Case corrections to ensure compatibility with Linux - [Per Djurner]
- Fix for using layouts on AJAX calls when usesLayout() has not been called - [Per Djurner]
- Added missing dependency operation remove with instantiation - [Andy Bellenie]
- Fixed bug with pagination and renamed primary keys - [Tony Petruzzi]
- Added "errorClass" argument to form helpers and set the default to "fieldWithErrors" to make the naming consistent - [Per Djurner]
- Corrected some bugs related to case, ordering and pagination on the H2 database - [Per Djurner]
- made it possible to use plugins on the H2 database - [Per Djurner]
- Fixed autoLink() so that it can handle all types of domains - #560 [Tom King, Tony Petruzzi]
- Corrected deobfuscation logic so that it... umm... works :) - #577 [Per Djurner, James Gibson]
- Fix for obfuscateParam() related to leading zeros in integer values on Railo - #578 [Tony Petruzzi]
- Fixed so correct defaults are set for "valueField" and "textField" on select() when dealing with objects - #445 [Per Djurner]
- Adapters now only fall backs on native code for getting the last inserted key when Railo/ACF can't do it automatically - #562 [Per Djurner]
- simpleFormat() now produce the exact same output regardless of the operating system - #570 [Raul Riera, Tony Petruzzi, Per Djurner]
- imageTag() was outputting the "id" attribute twice when caching was on, fixed now - #582 [Andy Bellenie, Per Djurner]
- Changed to using SCOPE_IDENTITY() as fallback for SQL Server - [Tony Petruzzi, Per Djurner]
- Fixed overwrite problem when using composite keys - #587 [Andy Bellenie, Per Djurner]
- Fixed bug with upper case input in humanize() and allow exception list for when abbreviations aren't caught - #587 [Andy Bellenie, Tony Petruzzi, Per Djurner]
- Made it possible to call model (and other) methods on application / session start - [W. Scott Hayes, Per Djurner]
- Fixed bug in setPagination() where floats could be passed in for the numeric values - [Tony Petruzzi]
- Fixed so labels on dateTimeSelectTags() and dateTimeSelect() get applied correctly to all six possible form inputs - #531 [Raul Riera, Tony Petruzzi, Chris Peters, Per Djurner]
- Made it possible to call the controller data function from a partial located in the root or sub folder - [Per Djurner, Chris Peters]
- Fixed a PostgreSQL pagination query that would fail under certain conditions (edge case) - [Per Djurner]
- Fixed deleting in nested properties - #579 [Adam Michel, Tony Petruzzi]
- Removed the
afterFindCallbackLegacySupport
setting and made the new way introduced in Beta 1 the only way - #580 [Per Djurner] - Changed "class" attribute on flashMessages(), errorMessageOn() and errorMessagesFor() to be camelCased - #554 [Per Djurner]
- Added better error reporting when passing in one primary key value when multiple are expected - #540 [Adam Michel, Tony Petruzzi]
- Support for automatic validations based on database settings (column does not allow nulls, has a maximum length etc) - [James Gibson, Andy Bellenie, Tony Petruzzi]
- Support for handling binary data columns - #133 [Tony Petruzzi]
- Callbacks are not pre-loaded anymore - #388 [Andy Bellenie]
- Support for NOT IN, IN, NOT LIKE, IS NULL, IS NOT NULL in where clause with proper use of cfqueryparam - [Per Djurner, Tony Petruzzi]
- Made it possible to use a blank value as a property default - [Andy Bellenie]
- Ability to skip validation when saving, e.g. save(validate=false) - [Tony Petruzzi]
- Added argument for model methods to be able to turn off callbacks, e.g. save(callbacks=false) - #236 [Andy Bellenie]
- Ability to set a default value for column statistics with "ifNull" argument - #330 [Andy Bellenie]
- Support for nested properties (saving data in associated model objects through the parent) - [James Gibson]
- Added automatic deletion of dependent models - #367 (Per Djurner, Andy Bellenie]
- Added "setUpdatedAtOnCreate" to tell CFWheels if it should update the "updatedAt" property when creating new records - [James Gibson]
- New setting "useExpandedColumnAliases" that you can set to "true" to prepend included model properties with their model name in queries - #442 [Andy Bellenie]
- Arguments are now always passed in to "afterFind" callback methods and you can return them to set both queries and objects - [Tony Petruzzi]
- Updated findAll() to allow for more than one association as long as they are direct (i.e. include="assoc1,assoc2" works but not include="assoc1(assoc2)) - [James Gibson]
- Update to add GROUP BY functionality in finders - [James Gibson]
- Allow overriding of soft-deletes - #324 [Andy Bellenie]
- Added accessibleProperties() and protectedProperties() to protect model variables from mass assignment - [James Gibson]
- Ability to set defaults on a model using the "defaultValue" argument to property() - #244 [Andy Bellenie]
- Added transaction handling support, use the "transaction" argument on save(), updateAll() etc, callbacks are automatically wrapped in a transaction - #325 [Andy Bellenie]
- Added a position argument to primaryKeys() for easier retrieval - [Tony Petruzzi]
- Added a setPagination() function to make it possible to use paginationLinks() and similar functions for custom queries (i.e. ones not created with the CFWheels ORM) - [Tony Petruzzi]
- Allow database views to be used as a model by calling setPrimaryKey() - #390 [Tony Petruzzi]
- Labels will now be added automatically for form helpers based on the object's property name (or a custom label set in the model) - [Andy Bellenie]
- Added default for "action" argument on linkTo() - #321 [Andy Bellenie]
- Added 12-hour format to date/time select helpers - #551 [Tony Petruzzi]
- Added a flashMessages() function that outputs all key/values from the Flash - [Per Djurner]
- Added support for inherited / nested layout templates through includeLayout() - [Per Djurner]
- Added "head" argument to styleSheetLinkTag() and JavaScriptIncludeTag() - [Per Djurner]
- flashMessages() can now pass a list of keys that controls which messages to display as well as the order they are displayed in - [Chris Peters]
- Ability for years to display in descending order in date select form tags - [Tony Petruzzi]
- Support for an automatic "assetQueryString" which can be used to force local browser caches to refresh when there is an update to your assets (CSS, JavaScript etc) - [James Gibson]
- Added buttonTag() form helper - [Tony Petruzzi]
- Added "disabled" and "readonly" arguments to form input helpers [Andy Bellenie]
- Allows disabling error elements appearing on form fields by setting "errorElement" - [Andy Bellenie]
- Updates to checkBoxTag() and checkBox() to allow for unchecked values - [James Gibson]
- Added "pageNumberAsParam" argument to paginationLinks() that decides whether the page parameter should be part of the route or just a regular parameter - [James Gibson]
- Added contentFor() and includeContent() used to set/display content - [Tony Petruzzi, Per Djurner]
- Added hasManyRadioButton() and hasManyCheckBox() used to easily add radio buttons / checkboxes for a hasMany relationship on a model when using nested properties. - [James Gibson]
- New global defaults for truncate() and wordTruncate() - [James Gibson]
- Added a toXHTML() function that returns an XHTML compliant string - [Tony Petruzzi]
- Added "dataFunction" argument to includePartial() for getting data from a controller function automatically - [Per Djurner]
- Added a h() function for sanitizing user output - [Tony Petruzzi]
- Added support for external links in linkTo(), startFormTag(), javaScriptIncludeTag() and styleSheetLinkTag() - [Tony Petruzzi]
- Updated the request processing to not call the action if a before filter has rendered content - [James Gibson]
- Support for using an onMissingMethod() inside controllers - [James Gibson]
- redirectTo() now accepts a "delay" argument which can be used to delay the redirection until after the action code has completed (useful for testing) - [James Gibson, Tony Petruzzi]
- Added addDefaultRoutes(), used to control exactly where in the route order to place the default routes - [Per Djurner]
- New setting called "loadDefaultRoutes" which you can set to false when you want to use addDefaultRoutes() to load the routes manually - [Per Djurner]
- Added the ability to attach files with sendEmail() - [Per Djurner]
- Added "directory" and "deleteFile" arguments to sendFile() - #323 [Tony Petruzzi]
- Added the ability to set wildcard routes - [Andy Bellenie]
- Controllers can now respond to different formats such as "xml", "json", "csv", "pdf" and "xls" - [James Gibson]
- Ability to store Flash in cookies - [Per Djurner]
- Ability to add Flash messages when redirecting - [Per Djurner]
- redirecTo(back=true) can now fall back on a route/controller/action when the referrer is blank instead of throwing an error - [Per Djurner]
- Support for "format" parsing in route patterns ([controller]/[action].[format]) - [James Gibson]
- Ability to pass through arguments to filters - [Per Djurner]
- Added flashKeep() function for keeping Flash contents for one additional request - [Per Djurner]
- You can now validate type on incoming parameters using verifies() - [Tony Petruzzi]
- Defaulted day to 1 and month to 1 when submitting forms - [Tony Petruzzi]
- Added usesLayout() for specifying a controller specific layout - [Tony Petruzzi, Per Djurner]
- You can now perform a redirect instead of aborting the request using verifies(), any extra arguments passed in are passed through to redirectTo() - [Tony Petruzzi]
- Session scope is now locked when accessing the Flash - #275 [James Gibson, Per Djurner]
- Corrected the "id" attribute for radioButton() when value is blank - #373 [Tony Petruzzi]
- findByKey() now correctly returns "false" when passed a blank "key" argument - #514 [Andy Bellenie]
- Fixed so hasChanged() compares dates correctly - #515 [Tony Petruzzi]
- validatesUniquenessOf() now recognizes soft-deleted columns as well - #532 [Andy Bellenie]
- Corrected a bad throw in onMissingMethod() - #555 [Per Djurner, Adam Michel]
- Corrected count() to always return 0 if no records are found - [Per Djurner]
- Removed differences in params structure for form / URL variables - #232 [Mike Henke, Tony Petruzzi]
- Allowed plugins to run in maintenance mode - [James Gibson]
- Added "excludeFromErrorEmail" setting - #447 [Per Djurner]
- New setting, "errorEmailSubject", that allows you to customize the subject line of error emails - #392 [Per Djurner]
- New setting, "deletePluginDirectories" that tells CFWheels whether to delete plugin directories if no corresponding ZIP file exists - #385 [Per Djurner]
- Added a "cachePlugins" setting to allow developers to not cache plugins during the development of them - #304 [Andy Bellenie]
- Allow setting multiple argument defaults at once, e.g. set(functionName="textField,textArea,select", labelPlacement="before" - #426 [Raul Riera, Per Djurner]
- A full testing framework is now included in Wheels, unit tests can be created in the "tests" folder - [Tony Petruzzi]
- Adobe ColdFusion 8.0.1 or Railo 3.1.2.020 is now required [Tony Petruzzi, Per Djurner]
- Deprecated the "class" argument on association methods (belongsTo(), hasMany(), hasOne()), use "modelName" instead. - [Per Djurner]
- Refactor to avoid polluting the Application.cfc's this scope with the "rootDir" variable - [Per Djurner]
- Fixed the handling for the "errorEmailServer" setting so that error emails can now be sent without having to set the server in the ColdFusion administrator - [Per Djurner]
- Corrected pluralize rules - #450 [Joshua Clingenpeel, Tony Petruzzi]
- Remove possible spaces in list passed in to callback registration - #448 [Raul Riera]
- Check to see that a function has a declaration in the settings before setting defaults - [James Gibson]
- Update to capitalize() to return nothing if the passed in string is empty - [James Gibson]
- validatesPresenceOf() now takes whitespace into account - [Tony Petruzzi]
- Fix for lock timeouts occurring during race conditions in the "design" and "development" modes - #467 [John C. Bland II, Andy Bellenie, Tony Petruzzi]
- Fix so CFWheels uses passed in width/height in imageTag() when only one of them is passed in - #328 [Andy Bellenie, Per Djurner]
- Don't append .css, .js to asset files when they end in .cfm - [Tony Petruzzi]
- Update to reload to catch the query blank boolean error - [James Gibson]
- onCreate validations do not run when onSave validations fail - #455 [Andy Bellenie]
- Fixes bug with nullable foreign keys in where clause - [Andy Bellenie]
- Update to clean up variables from all scopes after running plugin injection - [James Gibson]
- Updated PostgreSQL types - [Jaroslaw Krzemienski, Per Djurner]
- Fix for race condition when checking for existing controller files in the "design" and "development" modes - #360 [Andrea Campolonghi, Per Djurner]
- Error in SQL Server pagination with mapped columns - #456 [Don Humphreys, Tony Petruzzi]
- Updated hasChanged() for a race condition that wasn't met - [James Gibson]
- Fixed pagination error in Oracle when using the "include" argument - #449 [Per Djurner]
- Fixed incorrect layout rendering for renderPartial() and includePartial() - #488 [Jordan Sitkin, Per Djurner]
- Fix for complex "include" strings - #453 [Jordan Sitkin, Andy Bellenie]
- Fixed naming conflict occurring for properties starting with the same name as its model on included objects - #461 [Tony Petruzzi, Per Djurner, Raul Riera]
- Fixed pluralization issue related to partials used with object(s)/queries and removed the limitation of the file being tied to the model name - #427 [Per Djurner, James Gibson]
- Prevent additional errors from occurring during display of CFML errors - #466 [John C. Bland II, Per Djurner, Tony Petruzzi]
- Added missing support for passing in array of model objects as options to select() - #411 [John C. Bland II, Tony Petruzzi]
- Fixed so "afterFind" callback methods are only called once during pagination - #435 [Bucky Schwarz, Doug Giles, Per Djurner]
- Added "prependOnAnchor" and "appendOnAnchor" arguments to paginationLinks() to get around an issue where the "appendToPage" string was added on anchor pages - #434 [Joshua Clingenpeel, Per Djurner]
- Fixed bug in paginationLinks() when using "appendToPage" with single page result - [Joshua Clingenpeel, Per Djurner]
- Fixed bug with count() when using composite primary keys - [Per Djurner]
- Fixed concurrency issue related to setting the model name on associations - #419 [John C. Bland II, Per Djurner]
- Fix for skipping duplicate columns returned from cfdbinfo when using Oracle - #437 & #439 [Mike Henke, Per Djurner]
- Fix for race conditions when setting the join clause in an application scoped model object - #432 [James Gibson, Per Djurner]
- Fixed so URLFor() is not duplicating controller and action when URL rewriting is off - #433 [Per Djurner]
- Added support to imageTag() for all image types that the CFML engine supports - [Cathy Shapiro, Per Djurner]
- Added support for more domains in autoLink() and also fixed linking when the URL starts at the very beginning of the string - #424 [Per Djurner]
- Corrected the order in which object properties are set when based on a query result - #404 & #422 [Raul Riera, Per Djurner]
- Fixed so the "appendToPage" and "prependToPage" arguments in paginationLinks() apply to the anchor pages - #417 [Raul Riera, Per Djurner]
- Changed so developer supplied arguments to URLFor() are not converted to lowercase - #415 [Per Djurner]
- Made sure you can only reload based on the URL when a reload password exists (either empty or set) - #410 [John C. Bland II, Per Djurner]
- Added escaping on strings used in JavaScript - #393 [Tony Petruzzi]
- Changed so the dispatch object is created with a reference from the root of the CFWheels application instead of the entire website - [Per Djurner]
- Fixed so sendEmail() automatically sets the "type" argument to "text" or "html" when only one template is in use - [Per Djurner]
- Fixed so creating SELECT clause works when there are 10 tables or more in use - #421 [Don Humphreys, Tony Petruzzi]
- Fixed a regression bug in the dateTimeSelect() function - #413 [Andy Bellenie]
- Fixed bug in dynamic belongsTo() methods - #420 [Andy Bellenie]
- Fixed error with a call to http://localhost/badtemplate.cfm not showing the output of the onmissingtemplate.cfm file - [Clarke Bishop, Andy Bellenie, Per Djurner]
- Corrected link in error email when URL rewriting is on - [Andy Bellenie]
- Added work-around for CF9 / OSX related "extends" bug in MySQL adapter - #378 [Russ Johnson, Jordan Sitkin, John C. Bland II, Per Djurner]
- Fixed call to non existing function in URLFor() - [Andy Bellenie, Per Djurner]
- Fixed bug in MS SQL adapter when paginating and ordering on identically named columns from two tables - #355 [Don Bellamy, Per Djurner]
- Fixed bug where soft deleted rows were returned when using the include argument - #344 [Andy Bellenie, Per Djurner]
- Fixed bug where humanize() would add a space at the beginning of the string if it started with an upper case character - #359 [Per Djurner]
- To fix bugs with change tracking CFWheels will now only check for changes to properties that exist on the model object - #353 [James Gibson, Per Djurner]
- Fixed so the keys we use for caching always return identical results so they do not break the cache unnecessarily - [Andy Bellenie, Per Djurner]
- Fixed so average() with integer values work in Railo - #331 [Raul Riera, James Gibson, Per Djurner]
- Fixed so the "for" attribute on form helpers always matches the "id" attribute when it's passed in by the developer - #340 [Chris Peters, Per Djurner]
- Fixed so findAll() afterFind callbacks run when one record is returned - #327 [Ryan Hoppitt, Per Djurner]
- Wrapped debug output completely in "cfoutput" tags so that it works when "enableCFOutputOnly" has been set to true - [William Fisk, Per Djurner]
- Fixed a bug with pagination with outer joins that was creating SQL errors when no records were returned from the pagination query - [James Gibson]
- Made the "objectName" argument check for the object in the "variables" scope by default instead of unscoped - #365 [John C. Bland II, Per Djurner]
- Fixed so the this.dataSource setting is picked up by CFWheels when used - #333 [Chris Peters, Per Djurner]
- Fixed so you can use the built-in validation methods for properties that does not exist in the database table - #362 [Andy Bellenie, Per Djurner]
- Fixed so primary key column is not added to order clause when paginating if it has already been specified with tableName.columnName syntax - [Per Djurner]
- Fixed so pluralization/singularization works with camelCased variable names - [Chris Peters, Per Djurner]
- Added line break to stylesheetLinkTag and javaScriptIncludeTag output - #372 [Tony Petruzzi]
- Fixed bug with select() and selectTag() failing with empty collections as options - #374 [Tony Petruzzi]
- Added missing option "variableName" to validatesFormatOf() options - #337 [Raul Riera, Per Djurner]
- Get disallowed methods from Wheels.cfc instead to allow methods in Controller.cfc to be executed as actions - [Per Djurner]
- Fixed so all callbacks run when the valid() method is called - #303 [Tony Petruzzi]
- Allow private methods to be used as controller filters - #380 [Tony Petruzzi]
- Fixed so the date form helpers can accept a blank string as the default value - #391 [Andy Bellenie]
- Fixed so that the "for" and "id" HTML attributes match when passing an empty string in "tagValue" - #303 [Tony Petruzzi]
- Added the datetime2 data type to the Microsoft SQL Server adapter - #401 [Per Djurner]
- Fixed so queries created in afterFind callbacks can be referenced from view helpers - [James Gibson]
- Fixed so links are properly hyphenated when controller/action is part of the placeholder route values. - [William Fisk, Per Djurner]
- Added "xml" datatype for SQL Server 2005/2008 - #295 [Andy Bellenie, Per Djurner]
- Added the Railo specific cfquery attribute called "psq" to make CFWheels run on a default installation of Railo - [Raul Riera, Per Djurner]
- Changed setProperties() to allow any passed in variable to be set on the object - [Per Djurner]
- Changed properties() so that it returns anything in the this scope that is not a function - [Per Djurner]
- Modified so SUM, AVG, MIN, MAX returns blank string and COUNT returns 0 when no records are found - [Tony Petruzzi, Per Djurner]
- Support for "if"/"unless" in validate(), validateOnCreate() and validateOnUpdate() - [Per Djurner]
- Support for built-in CFML types in validatesFormatOf() - [Raul Riera, Per Djurner]
- Added "allowBlank" argument on validatesUniquenessOf() - #271 [Per Djurner]
- Removed a query in findAll that didn't need to run when the join type was set to inner - [Mike Henke, Per Djurner]
- Updated model error functions to take and perform actions with properties and name errors - [Tony Petruzzi]
- Consistent style and reload links added to debug area - [Per Djurner]
- Trimmed final output's white space - #279 [Chris Peters, Per Djurner]
- Humanized list / array items in $optionsForSelect() - #267 [James Gibson]
- Rewrite Rules for IIS7 - [Sameer Gupta, Mike Rampton, Per Djurner]
- Rewrite support in sub folders in Apache - [Peter Amiri]
- Turned off rewriting for "robots.txt" file - #278 [Chris Peters, Per Djurner]
- Fixed AVG SQL calculation when dealing with integer values - [Tony Petruzzi, Per Djurner]
- Fixed so that CFID and CFTOKEN values do not get obfuscated when passed in the URL - [James Gibson]
- Fixed so javaScriptIncludeTag and styleSheetLinkTag can work with files with multiple dots in them - #312 [Mike Henke, Tony Petruzzi]
- Included calculated properties in the propertyNames(), reload(), updateAll(), deleteAll(), includePartial() and renderPartial() methods - [Per Djurner]
- Allow dynamic methods to be called through callbacks - [James Gibson, Per Djurner]
- Fixed so you can pass in the "properties" argument to dynamic methods (it was overridden previously) - [Per Djurner]
- Allow passing along the original where clause when paginating with a criteria on a joined table - Groups [Don Humphreys, Per Djurner]
- Removed unnecessary singularization for associations - Groups [Don Humphreys, Per Djurner]
- Fixed so validations respect the "allowBlank" setting - Groups [Raul Riera, Per Djurner]
- Corrected execution time report when reloading application - [Tony Petruzzi, Per Djurner]
- Allowing negative values in where clause - Groups [Don Humphreys, Tony Petruzzi]
- Work-around for a Railo mapping bug that was causing slowness - #268 [Tony Petruzzi, Per Djurner]
- Fixed an includePartial() error with caching that occured in production mode - #285 [James Gibson, Per Djurner]
- Support passing in a single column query to select() and selectTag() - #300 [Tony Petruzzi]
- Fixed radio button ids to work properly with negative number values - #274 [Elezotte, Per Djurner]
- Removed display of "rewrite.cfm" in error emails - #280 [Raul Riera, Per Djurner]
- Fix for layout handling in sendEmail() on multipart emails - #269 [Chris Peters, Per Djurner]
- Throw CFWheels errors based on the "showErrorInformation" setting instead of production mode - #276 [Tony Petruzzi, Per Djurner]
- Fixed so includePartial() / renderPartial() returns a blank string when passed an empty array instead of an error - #287 [James Gibson, Per Djurner]
- Fixed a problem with file naming and case on Linux / Unix when using helpers and plugins - [Chris Peters, Per Djurner]
- Fixed so pagination aborts early when no records exist in the table instead of causing an error - Groups [Per Djurner, James Gibson]
- Fixed so return type is correct when no records are found on using findOne() with returnAs="object" - [Raul Riera, Per Djurner]
- Fixed Railo bug caused by argument defaults on a number of functions - #201, #264 [William Fisk, Tony Petruzzi, Per Djurner]
- Fixed so you can order on included tables in finders without speciyfing table name - [Per Djurner]
- Fixed so pagination returns an empty query instead of the full record set when specifying a page out of range - [Per Djurner]
- Support for setting Application.cfc this scoped variables through config/app.cfm - #315 [Jay McEntire, Per Djurner]
- Allow plugin developer to specify a list of supported CFWheels versions instead of just one - [Chris Peters, Per Djurner]
- Methods from plugins can now be injected to "Application.cfc" - #288 [James Gibson, Per Djurner]
- Refactored validations code - #266 [Per Djurner]
- Copied cgi scope to request scope - #277 [Tony Petruzzi, James Gibson, Per Djurner]
- Removed an unnecessary variable assignment - #265 [William Fisk, Per Djurner]
- Added informative error messages for common CFWheels mistakes - [James Gibson, Per Djurner]