Craft 2.3.2620 #

Released on Dec 11, 2014

  • Drastically improved the performance of the element index pages when loading additional batches of elements.
  • The Updates page now shows the Download button when allowAutoUpdates is set to false.
  • Fixed a couple bugs that could result in entries/categories appearing out of order in Structure view.
  • Fixed a bug that could result in an incomplete list of entries/categories getting loaded in Structure view.
  • Fixed a bug where Craft was attempting to read EXIF data from files that couldn’t have any.
  • Fixed a bug where Craft would sort plugins and components whose names began with a lowercase letter below other plugins/components. (This fix only applies to servers running PHP 5.4 or later; PHP 5.3 is still affected by the bug.)
  • Fixed a bug where users would get redirected to the wrong place after setting/resetting their password under certain conditions.
  • Fixed a bug where Craft’s JavaScript source maps were loading the same compressed JS files.
  • Fixed some incompatibilities with PHP 5.3.

Craft 2.3.2618 #

Released on Dec 10, 2014

  • Added the ability to expand/collapse Structure section entries and categories with descendants within their index views.
  • Added BaseElementModel::getTotalDescendants().
  • Added the SetStatusElementAction::onSetStatus() event.
  • Added support for Portuguese (pt).
  • Element status icons are positioned to the left of their title, once again.
  • Timestamp values in element index views now reveal the full timestamp in a tooltip when hovering over them.
  • Renamed the “Asset thumbs” option in the Clear Caches tool to “Asset resources”, as it deletes more than just the generated thumbnails; it also deletes generated file icons, and local copies of remotely-stored images (which are used to generate new thumbnails and transforms).
  • When a request’s URI includes ..%2Fs in an attempt to load files outside of the template or resource folders, Craft now responds with a 404 status code, rather than 500 or 403, respectively.
  • Email verification URLs will now activate the respective user if they still have a pending status.
  • Database backups now support custom views.
  • Removed ConfigService::getCpActivateAccountPath(), as it served no purpose.
  • Fixed a bug where front-end user registrations where incorrectly getting the Set Password email instead of the Email Verification email, so they had to set their password twice.
  • Fixed a bug where email verification and password reset URLs could have included the CP trigger for users that didn’t actually have access to the Control Panel.
  • Fixed a bug where UsersController::actionVerifyEmail() was not accessible to logged-out users.
  • Fixed a bug where the deprecated UsersController::actionValidate() was redirecting to actionSetPassword() rather than actionVerifyEmail().
  • Fixed a bug where users were not allowed to upload files to Assets fields that were restricted to a single folder within a source they didn’t have upload permissions, under certain conditions.
  • Fixed a bug where users who were not allowed to view any asset sources could still view them if they manually went to /admin/assets. (They wouldn’t have been able to make any changes, though.)
  • Fixed a bug where replacing an asset with a new file that had the same name as the old one would result in the new file getting a “_1” appended to its filename.
  • Fixed a PHP error that would occur when uploading a two-channel (grayscale + alpha) PNG image when ImageMagick was installed.
  • Fixed a bug where there were two asset thumbnail options in the Clear Caches tool.
  • Fixed a bug where dragging elements horizontally to change their level was inverted for RTL languages.
  • Fixed a bug where entries without a Post Date would continue to not have a Post Date after they were enabled using the Set Status action on the Entries index page.
  • Fixed a bug where some strings in the Control Panel weren’t getting translated.
  • Fixed a bug where element indexes could get themselves into a state where no source was selected, if the selected source was nested and one of its ancestors was collapsed.
  • Fixed a bug where the Top-Level and Nested URL Format inputs in Section and Category Group settings could go out of alignment if there was a validation error on one of them but not the other.
  • Fixed a bug where the ancestorOf, descendantOf, siblingOf, prevSiblingOf, nextSiblingOf, positionedBefore, and positionedAfter element params weren’t maintaining the criteria’s locale if passed an ID rather than an element object.
  • Fixed a bug where the ancestorOf, descendantOf, siblingOf, prevSiblingOf, nextSiblingOf, positionedBefore, and positionedAfter element params weren’t causing the query to return no results if passed an invalid ID.
  • Fixed a PHP error that could occur when backing up very large databases while Dev Mode was enabled.
  • Fixed a PHP error that could occur when backing up a database database with custom views.
  • Fixed a PHP error in MigrationHelper::getTables() that occurred on databases with custom views.
  • Fixed a bug where Craft’s exception classes were getting logged as errors in craft/storage/runtime/logs/craft.log even if they were caught. Now only uncaught exceptions get logged.
  • Fixed a JavaScript error that was occurring when running Craft in Dev Mode in IE 8, which doesn’t support console.groupCollapsed().
  • Fixed a Twig error that occurred on the default homepage template that comes with Craft.

Craft 2.3.2617 #

Released on Dec 4, 2014

  • Added the addUserAdministrationOptions hook.
  • Added StringHelper::lowercaseFirst().
  • Added StringHelper::uppercaseFirst().
  • Element reference tag parsing ({entry:section/slug}) now finds the referenced elements regardless of their statuses.
  • When editing an entry within a single-level Structure section, or a category within a single-level category group, the Parent Entry/Category setting is now hidden.
  • Matrix block type fields that are translatable but don’t have names will no longer show the locale ID above the field input.
  • The lcfirst and ucfirst Twig filters now support multi-byte strings.
  • Element types’ defineSortableAttributes() method can now specify multiple column names for a single sort option, separated by commas. (This also goes for the modifyEntrySortableAttributes, modifyCategorySortableAttributes, modifyAssetSortableAttributes and modifyUserSortableAttributes hooks.)
  • BaseModel::setAttributes() (and methods that call it, like BaseModel::populateModel()) will now copy any eager-loaded relations from passed-in records. (Meaning, if that’s the behavior you want you need to make use of with() when loading the records).
  • The default Homepage single no longer has a custom “Heading” field. Now it just shows a dynamic Title field instead.
  • Updated the default Redactor config files to set toolbarFixed: true rather than toolbarFixedBox: true, for Redactor 10 compatibility.
  • Fixed a MySQL error that occurred when ordering tags by name, which is no longer technically a column as of Craft 2.3.
  • Fixed a bug where multi-byte characters in slugs were failing validation.
  • Fixed a bug where entries were able to be saved if the slug was entirely composed of invalid characters.
  • Fixed a JavaScript error that occurred when using a Rich Text field within a Matrix field, whose Redactor config disabled the toolbar using toolbar: false.
  • Fixed a bug where users’ Activation and Password Reset links were expiring immediately after they were clicked on, even if the user decided not to complete the password reset task after clicking the link.
  • Fixed the look of elements with titles long enough to span two or more rows on Structure section and Category Group index pages.
  • Fixed a bug where the Name and Instructions settings were appearing to be required even though they weren’t, for unsaved Matrix block type fields.
  • Fixed a bug where validation errors for Matrix block type fields that didn’t have Names would refer to the field as “__blank__”. Now the field handle is used instead.
  • Fixed a bug where WebApp was getting initialized with config settings for ‘fieldTypes’ and ‘file’ components that don’t actually exist.

Craft 2.3.2616 #

Released on Dec 3, 2014

  • It is now possible to double-click on entries’, categories’, and users’ status icons/thumbnails to open an editor modal from their respective index pages, the same way it works on the Assets index page.
  • Added ElementsService::setPlaceholderElement().
  • Added ElementIndexController::getElementCriteria().
  • Added the modifyEntrySortableAttributes hook.
  • Added the modifyCategorySortableAttributes hook.
  • Added the modifyAssetSortableAttributes hook.
  • Added the modifyUserSortableAttributes hook.
  • Live Preview and Share links will now show the unpublished entry/category changes wherever the entry/category are being referenced in the templates (even areas where the entry/category was fetched from the database).
  • Moved TestApplication’s PHP environment normalization code to craft/app/tests/bootstrap.php.
  • Fixed a bug where Checkboxes and Multi-select fields weren’t showing their saved values.
  • Fixed a bug where Checkboxes and Multi-select fields were always causing validation errors when saved.
  • Fixed a bug where custom field instructions weren’t getting HTML-encoded properly.
  • Fixed a bug where some non-custom fields’ instructions were showing encoded HTML characters.
  • Fixed a PHP error that would occur when attempting to save a section with no selected locales.
  • Fixed a bug where assets could show their old, cached thumbnail after replacing their file with a new one.
  • Fixed a bug where the Control Panel could still show old, cached resources after Craft’s data caches were cleared.
  • Fixed a JavaScript error that occurred when choosing a date from a Date/Time field while using Live Preview.
  • Fixed a 404 error on a resource request on the Assets index page.
  • Fixed a PHP error that could occur when using TestApplication.
  • Fixed a bug where Craft Client/Pro-only components were not getting initialized when running Craft from its CLI.

Craft 2.3.2615 #

Released on Dec 2, 2014

General

  • Craft now automatically clears its data caches when it detects that the craft/app/ folder has been moved.
  • Craft now responds with a 503 response code whenever one of its early initialization checks fail, to prevent things like Varnish from caching them.
  • After updating Craft to a newer build of the same version, the user is now redirected based on the postCpLoginRedirect config setting.
  • The iconv PHP module is no longer a showstopping requirement.
  • Craft no longer writes out a log if the server has a buggy version of iconv installed. Instead the buggy version is reported in /admin/utils/serverinfo.
  • Improved the performance of element queries that are ordered by the dateCreated column.
  • Improved the performance of element queries that use the ‘search’ parameter.
  • Craft’s mobile detection script has been updated (affecting craft.request.isMobileBrowser(), HttpRequestService::isMobileBrowser(), and Garnish.isMobileBrowser()).

Localization

  • Added Control Panel translations for Simplified Chinese, Hebrew, Korean, Spanish, and Swedish.
  • When deleting a locale, it is now possible to transfer that locale’s content to another locale.
  • Added support for Eesti and Serbian locales.

Control Panel

  • Element index pages can now have batch actions.
  • Added a new Sort menu to all element index views, which includes a “Structure” option when viewing structured elements.
  • Structure View has been replaced by a structured Table View on element indexes, making large structure sections and category groups load much more quickly.
  • Added a “Save and continue editing” option to Quick Post widgets.
  • Added a “Locale” setting to Recent Entries widgets.
  • Element index toolbars now stick to the top of the window while scrolling down the page.
  • Sticky sidebars are no longer jerky when scrolling down the page in Safari.
  • Element statuses are now positioned to the right of their labels.
  • Timestamps are now formatted based on how long ago they occurred. For example, “10:00 AM”, “Yesterday”, “Tuesday”, or “11/5/2013”.
  • Live Preview now stores the editor and preview widths in percentages rather than pixels, and adjusts their pixel sizes accordingly when the browser window is resized.
  • Improved the usability of admin table row sorting.
  • Improved the usability of Craft on mobile devices.
  • Improved the look of Matrix fields.
  • Improved the look of selected elements.
  • Checkboxes now have custom styling.

Custom Fields

  • Matrix blocks now display their block type’s name in their titlebar.
  • It is now possible to reorder, collapse/expand, disable/enable, and delete multiple Matrix blocks at once.
  • Matrix block type fields can now have instruction text.
  • Matrix block type fields are no longer required to have names.
  • Rich Text fields now have a “Column Type” setting, which can be set to “MediumText” if more than 64K of data needs to be stored.
  • Lightswitch fields now have a “Default Value” setting.
  • Plain Text fields that have a Max Length set will now show the remaining character count within the text input rather than below it.
  • Rich Text fields will now get a validation error if their value contains more data than their column type can store.
  • Multi-select and Checkboxes fields now choose their database column type based on the total possible size of their values. (Fields will need to be re-saved before this change takes effect.)
  • Dropdown and Radio Buttons fields now use VarChar database columns. (Fields will need to be re-saved before this change takes effect.)
  • Improved the usability of element sorting in relational fields.
  • Relational fields with a Limit of 1 now hide the “Add” button once an element has been selected.
  • Position Select field buttons now have tool tips.
  • When dragging to reorder multiple items at once, the item that was actually clicked on is no longer repositioned before the others afterwards.

Entries

  • It is now possible to update the status on a batch of entries at once from the Entries index.
  • It is now possible to delete a batch of entries at once from the Entries index.
  • It is now possible to edit entries without leaving the Entries index.
  • It is now possible to edit an entry’s author from the Edit Entry page.
  • It is now possible to edit a Structure entry’s parent from the Edit Entry page.
  • Added a “Save as a new entry” option to the Save button menu on the Edit Entry page.
  • Added the ‘expiryDate’ entry param.
  • The Author field is now only visible if the user has permission to edit other authors’ entries in the section.
  • The Author and Parent Entry fields on the Edit Entry page now use element selector inputs.

Categories

  • It is now possible to update the status on a batch of categories at once from the Categories index.
  • It is now possible to delete a batch of categories at once from the Entries index.
  • Categories now get their own edit pages in the Control Panel.
  • Added Live Preview and Sharing support to categories.
  • The Categories field type’s input has been completely rewritten for better performance and usability.
  • It is now possible to edit selected categories from Categories fields by double-clicking on them, if the logged-in user has permission to do so.
  • Category groups can now have multiple content tabs.
  • The Parent Category field on the Edit Category page now uses an element selector input.

Tags

  • Tags now have translatable Titles, rather than Names.

Assets

  • Added a “Replace file” menu option to the Assets index.
  • Asset sources now have handles.
  • Added the ‘source’ parameter to craft.assets, which accepts an asset source’s handle.
  • Craft will now rotate photos based on the camera orientation used when the photos were taken.
  • It is now possible to clear asset thumbnails from the Clear Caches tool.
  • The options that were previously tucked away in file context menus on the Assets index have been moved to a toolbar menu button that appears when at least one asset is selected.
  • It is now possible to edit the content of assets that have been uploaded to a dynamic subfolder on unsaved elements.
  • After moving a file to a new folder, the asset index now stays put, rather than selecting the target folder.
  • When uploading a file that exceeds the maxUploadFileSize config setting, the error message now includes the max file size in a nicer format.
  • Uploaded files that don’t have safe filenames are now handled more gracefully.

Users

  • It is now possible to suspend/unsuspend a batch of users at once from the Users index.
  • It is now possible to delete a batch of users at once from the Users index.
  • It is now possible to edit users without leaving the Users index.
  • Added the ability to send out an activation/reset password email from the Edit User page.
  • Admins can now copy a user’s activation/reset password URL from the Edit User page directly.
  • When deleting a user account, it is now possible to transfer that user’s content to another user.
  • Added a Week Start Day user setting (only visible when a user is editing their own account).
  • Added a new “Change users’ emails” permission.
  • All of the user action buttons are now grouped into a single menu on the Edit User page.
  • Users are no longer automatically activated after an admin registers them with “Send verification email” unchecked.
  • Craft will now set a username cookie after activating a user account.
  • User activation, email verification, and password resetting are now possible from the Control Panel when the system is off.
  • It is now possible to edit selected users from Users fields by double-clicking on them, if the logged-in user has permission to do so.
  • When users are required to change their passwords, the Password Reset page no longer allows them to set their existing password.
  • Admins are no longer allowed to change other users’ passwords.

Templating

  • Most element criteria parameters now support partial match searching by beginning and/or ending the value with an asterisk (*).
  • It is now possible to set custom field parameters on Matrix block queries.
  • Added a new |literal Twig filter which can be used to escape commas and asterisks within element criteria parameter values.
  • Added the {% requireAdmin %} tag.
  • The {% redirect %} tag now optionally accepts a HTTP status code parameter.
  • Added craft.request.getQueryString().
  • Added craft.request.getQueryStringWithoutPath().
  • Added craft.request.getIpAddress().

Configuration

  • Added the siteName config setting, which overrides the Settings → General → Site Name setting, and can be set on a per-locale basis.
  • Added the timezone config setting, which overrides the Settings → General → Timezone setting.
  • Added the logDumpMethod config setting, which defines the method that should be used to export variables in Craft’s logs when Dev Mode is enabled.
  • Added the rotateImagesOnUploadByExifData config setting, which determines whether Craft should automatically rotate images according to their “Orientation” EXIF entry on upload.
  • Added the invalidUserTokenPath config setting, which replaces ‘activateAccountFailurePath’ (now deprecated).
  • The overridePhpSessionLocation config setting is set to false by default now.
  • The testToEmailAddress config setting can now be set to an array of email addresses.

Dev Changes: General

  • Added support for Element Actions.
  • Added BaseModel::$strictAttributes, which subclasses can set to false if they want to allow additional attributes to be set on the model besides those defined by defineAttributes().
  • Craft will now autoload any classes within plugins’ enums/ folders.
  • craft/app/index.php now calls setlocale().
  • Craft no longer calls date_default_timezone_set(), mb_internal_encoding(), mb_http_input(), mb_http_output(), or mb_detect_order() when it is loaded via bootstrap.php directly.
  • The built-in error templates will no longer HTML-encode messages that were passed as Twig_Markup objects.

Dev Changes: APIs

Dev Changes: Events

Dev Changes: Hooks

Dev Changes: Element Types

  • Element types can now implement getFieldsForElementsQuery() instead of getContentFieldColumnsForElementsQuery(), which provides a way to specify the fields’ contexts, so non-global fields can be used as parameters when searching for elements.
  • IElementType::getIndexHtml() now takes two new arguments: $includeContainer and $showCheckboxes. The former is an bool that indicates whether the method should include the element container HTML in its response, and the latter indicates whether the elements should have checkboxes.
  • IElementType::getSources() should now include a ‘structureEditable’ boolean within its response for each source that is structure-based and which the current user is allowed to edit.
  • Structures no longer have a “movePermission”, or have any need for it.
  • ElementsService is now forgiving of an element type whose populateElementModel() method doesn’t return an actual element model.

Dev Changes: Control Panel

  • Added Craft.getCsrfInput().
  • Added BaseElementSelectorModal::showFooterSpinner().
  • Added BaseElementSelectorModal::hideFooterSpinner().
  • Added BaseElementSelectorModal::updateSelectBtnState().
  • Added BaseElementSelectorModal::enableSelectBtn().
  • Added BaseElementSelectorModal::disableSelectBtn().
  • Added BaseElementSelectorModal::enableCancelBtn().
  • Added BaseElementSelectorModal::disableCancelBtn().
  • Added BaseElementSelectInput::getModalSettings().
  • Added BaseElementSelectInput::appendElement().
  • Added the _includes/previewbtns.html include template.
  • Added the ‘selectable’ and ‘multiSelect’ settings to BaseElementIndex.
  • Added the ‘hideOnSelect’ setting to BaseElementSelectorModal.
  • Added the ‘disableElementsOnSelect’ setting to BaseElementSelectorModal (replacing ‘disableOnSelect’).
  • Added the ‘fieldId’, ‘modalSettings’, ‘onSelectElements’, ‘onRemoveElements’, ‘sortable’, ‘selectable’, and ‘editable’ settings to BaseElementSelectInput.
  • Added a ‘totalSelected’ getter to BaseElementSelectInput.
  • Added Garnish.copyInputValues().
  • Added ‘checkboxMode’ and ‘allowEmpty’ settings to Garnish.Select.
  • Added ‘helperBaseZindex’, ‘helperLagBase’, ‘helperLagIncrementDividend’, ‘helperSpacingX’, ‘helperSpacingY’, ‘singleHelper’, and ‘copyDraggeeInputValuesToHelper’ settings to Garnish.Drag.
  • Added Garnish.Base::disable() and enable(), for disabling/enabling all event listeners that were initiated via addListener().
  • Added the elementSelectField() macro to _includes/forms.html.
  • It is now possible to create divs that are styled like checkboxes by giving them a ‘checkbox’ class. They can also mimic the indeterminate checkbox look with an ‘indeterminate’ class.
  • Added new “minus”, “asc”, and “desc” icons to Craft’s icon font.
  • The Craft.LivePreview class is no longer entry-specific, so other content types can implement Live Preview functionality.
  • Garnish.Select::selectItem() no longer sets keyboard focus to the item by default, and now has a second parameter which can be set to true if that’s the desired behavior.
  • Garnish.Select now calls onSelectionChange when selected items are removed via removeItems().
  • Garnish.Modal now fires ‘show’, ‘hide’, ‘fadeIn’, and ‘fadeOut’ events when the corresponding actions take place.
  • Garnish.MenuBtn now fires an ‘optionSelect’ event when an option is selected.
  • Made several performance and stability improvements to Garnish.DragSort.
  • ElementsController and StructureController actions are now restricted to Control Panel requests.
  • BaseElementSelectInput now accepts a single ‘settings’ object passed to its constructor, rather than a long list of arguments.
  • The _layouts/elementindex.html template now assigns the BaseElementIndex instance to Craft.elementIndex, so other scripts can reference it.
  • Moved ‘.formsubmit’ handling to Craft.initUiElements(), so it’s now possible to create form-submitting HTML elements after page load.
  • ‘.formsubmit’ HTML elements can now have ‘data-param’ and ‘data-value’ attributes, for adding a custom parameter to the form when clicked on.

Third Party Libraries

  • Added the PEL library.
  • Updated Twig to 1.16.2.
  • Updated PHPMailer to 5.2.9.
  • Updated PHPUnit to 4.3.5.
  • Updated Mockery to 0.9.2.
  • Updated jQuery Timepicker to 1.4.13.
  • Updated Velocity.js to 1.1.0.
  • Updated Redactor to 10.0.5.
  • Updated Imagine to 0.6.2.

Bug Fixes

  • Fixed a bug where non-admins could access various Admin-restricted areas of the Control Panel (though they couldn’t actually make any changes).
  • Fixed a bug where requests to an action URL could have the specified action route overwritten if the request URI matched a special user path.
  • Fixed a bug where Craft’s built-in error templates were encoding the HTML entities within PHP errors when the ‘html_errors’ setting was enabled.
  • Fixed a bug where inner-word underscores within error messages were italicizing the text between them in Craft’s built-in error templates.
  • Fixed a bug where the Control Panel’s CSS/JS resource requests were getting corrupted when PHP’s zlib.output_compression setting was enabled.
  • Fixed a bug where the application target language wasn’t getting set properly on console requests.
  • Fixed a bug where Craft was holding onto users’ return URLs longer than it should have.
  • Fixed a bug where users with permission to administrate users could activate a pending user account by suspending them and then unsuspending them.
  • Fixed a bug where CP resources could be broken if the craft/app/ folder was moved.
  • Fixed a MySQL error that could occur a field type’s getSearchKeywords() method returned more than 64K worth of data.
  • Fixed a bug where Arabic characters in uploaded filenames would get stripped out.
  • Fixed a bug where the confirmation dialog that’s supposed to appear when leaving an Edit Entry page with unsaved changes wasn’t working in newer versions of Chrome.
  • Fixed a bug where editable table rows would appear to lose their values when getting sorted.
  • Fixed a bug where saving an element less than 200 milliseconds after a related element was removed from one of its fields would result in the relation removal getting ignored.
  • Fixed a bug where elements not be visible while animating into place after being selected in a relational field from Live Preview.
  • Fixed the styling of the Logout Warning modal for RTL languages.
  • Fixed a bug where Categories fields had overbearing Limit settings, even applying to categories that had been unchecked.
  • Fixed a bug where Categories fields would show the titles of all categories in the group within collapsed Matrix blocks’ field preview text.
  • Fixed a bug where image transforms based on 8-bit and 24-bit PNGs were getting saved as 32-bit PNGs. (The fix currently only helps environments with ImageMagick installed; the issue still exists for GD.)
  • Fixed a bug where the “Remove files” permission was not being fully enforced when deleting files from an asset source.
  • Fixed a bug where the paginate.first variable within the {% paginate %} tag would have an incorrect value if there were no elements to paginate.
  • Fixed a bug where calling HttpRequestService::getQuery('foo.0') would not return $_GET['foo'][0] as expected (ditto for getPost() and getParam()).
  • Fixed a PHP error that could occur if an invalid path was passed to IOHelper::getRealPath().

Craft 2.2.2607 #

Released on Nov 21, 2014

  • Fixed a JavaScript error that occurred when linking to an entry or asset from a Rich Text field.
  • Fixed a bug where error messages that occurred when updating Craft could show up with unparsed Markdown formatting.

Craft 2.2.2604 #

Released on Nov 20, 2014

  • Craft now refers to its full list of known MIME types when determining the MIME type to identify an asset as when uploading it to Amazon S3 or Google Cloud.
  • Fixed a bug where moving an asset between folders in the same source would not move its transforms.
  • Fixed a bug where moving an asset between two sources would break the transform index for that asset.
  • Fixed a bug where Craft would attempt to resize images that were not considered manipulatable.
  • Fixed a JavaScript error that would occur when attempting to select an image or entry in a Rich Text field in certain circumstances.
  • Fixed a PHP error that would occur if you set the ‘cacheMethod’ config setting to “db” in certain circumstances.
  • Fixed a bug where the error message that Craft would display when attempting to run an older version of Craft with a newer version’s database would show HTML entities as text.
  • Fixed a MySQL error that could occur when the ‘generateTransformsBeforePageLoad’ config setting was set to ‘true’ and MySQL was running in strict mode.
  • Fixed a bug where the log viewer at /admin/utils/logs was only showing the first log for each HTTP request.
  • Fixed a bug where if an admin with a Get Help widget had their admin status revoked, they would still be able to edit the widget’s settings, and get a fatal error when saving them.

Craft 2.2.2601 #

Released on Nov 4, 2014

  • When dragging a subfolder or file, the asset index will now always make it clear where the subfolder/file will end up when dropped.
  • Transform names are now HTML-encoded in the “Select transform” menu within asset selector modals.
  • Fixed a PHP error that occurred on the Plugins page when two plugins had the same handle but different casing.
  • Fixed a JavaScript error that occurred when opening asset selector modals.
  • Fixed a bug where some entries could be skipped when converting a Channel to a Structure, resulting in an incomplete tree.
  • Fixed a bug where craft.users would return all users if the ‘group’ parameter was set to an invalid group handle.
  • Fixed a bug where user photos that were uploaded from the front-end weren’t getting properly escaped filenames.
  • Fixed a bug where the asset index was getting refreshed in cases where it didn’t need to be.
  • Fixed a bug where setting the ‘maxCachedCloudImageSize’ config setting to ‘0’ would prevent transforms from being created.
  • Fixed a bug where the “Purify HTML?” Rich Text field setting was stripping page breaks.
  • Fixed a bug where custom fields’ data wasn’t getting loaded when querying for elements through the CLI.
  • Fixed a MySQL error that occurred after changing the ‘cacheMethod’ config setting to ‘db’.

Craft 2.2.2598 #

Released on Oct 27, 2014

  • Page titles are now HTML-encoded by default in the Control Panel.
  • Element index pages in the Control Panel now HTML-encode the element attributes by default.
  • The default error templates now HTML-encode the error message and parse it as Markdown.
  • BaseElementModel::getLink() and AssetFileModel::getImg() now HTML-encode the element’s title.
  • The Delete Stale Template Caches task now deletes template caches that may involve pending or expired entries.
  • Improved the performance of the Edit Entry page on sites with a large number of eligible authors.
  • If an error occurs when drag-n-drop uploading to an Assets field, the error message is now displayed.
  • Fixed several minor security vulnerabilities throughout the Control Panel.
  • Fixed a bug where the Asset Index page would be unable to perform some file actions after moving a file to a different source or subfolder, until a new source/subfolder had been manually selected.
  • Fixed a bug where drag-n-drop uploading to Assets fields was not working on sites with CSRF protection enabled.
  • Fixed a bug where the First Name field in the Edit User page was getting autofocussed instead of Username.
  • Fixed a bug where the “Login as user” button would redirect you to the Control Panel even if the user didn’t have permission to access the Control Panel.
  • Fixed a SQL error caused by the Recent Entries widget when using MariaDB.
  • Fixed the positioning of spinners that are floated alongside buttons in the Control Panel for RTL languages.
  • Fixed a bug where grid items within the Control Panel might not be positioned correctly on page load in Safari.
  • Fixed the height of dropdown menus in the Control Panel in Safari.

Craft 2.2.2596 #

Released on Oct 21, 2014

  • Craft no longer automatically creates Quick Post widgets for each section when users visit the Dashboard for the first time.
  • Improved the JavaScript initialization performance on the Assets index page for sites with several hundreds of subfolders in their asset sources.
  • Windows now auto-scroll at variable speeds when dragging an item close to the window’s edges, depending on how close the item is to the edge.
  • Improved the element dragging behavior for relational fields.
  • Craft’s bootstrap script now ensures that the craft/config/ folder is writable if the license.key file doesn’t exist yet.
  • Fixed a bug where assets were getting timestamps appended to their filenames when they were moved within a source that had cache headers enabled.
  • Fixed a bug where relative time strings were reporting inaccurate times for durations greater than 23 minutes.
  • Fixed a bug where Field Layout Designers were not getting initialized properly when output within a namespaced template.
  • Fixed a bug where the window auto-scrolling while dragging was not working.
  • Fixed a JavaScript error that was breaking the Control Panel when running Craft from a private window in Safari 8.

Craft 2.2.2593 #

Released on Oct 10, 2014

  • Rich Text fields with the “Clean up HTML?” setting enabled will now remove <a> tags that don’t have any attributes or inner HTML.
  • Rich Text fields with the “Purify HTML?” setting enabled no longer remove target="_blank" attributes on <a> tags.
  • The IPlugin interface no longer requires that plugins have a static log() method.
  • Improved the reliability of drag-n-drop-based interactions.
  • Fixed a PHP error that would occur when passing “:empty:” or “:notempty:” into a date/time parameter.
  • Fixed a bug where all assets would appear to be selected after uploding a new file from the Assets index page.
  • Fixed a bug where Rackspace asset sources were incorrectly reporting that folders didn’t exist.
  • Fixed a bug where entries and assets were losing their reference tags in Rich Text fields when re-edited.
  • Fixed a CSS glitch on Rich Text fields where the code view would bleed a few pixels out of the right side of the field.
  • Fixed a bug where the Login modal wouldn’t fade in if a user let their session expire from the Control Panel.
  • Fixed a bug where Live Preview’s webpage preview pane wasn’t retaining its scroll position between refreshes in Firefox.
  • Fixed a bug where the “Resend Activation Email” button wouldn’t work when users clicked an activation link but the token had expired.
  • Fixed a Twig error on the email settings page that would occur when Gmail username/password validation failed.
  • Fixed a bug where the “Add a block” menu button on Matrix fields could take a while to show the menu.
  • Fixed a bug where if at least 10,000 messages had been logged for the same target log file in a single request, all but the last one would be discarded.
  • Fixed a bug where the onBeforeVerifyUser event wasn’t getting fired.

Craft 2.2.2592 #

Released on Oct 2, 2014

  • Fixed a bug where images with uppercase extensions were not being considered web-safe.
  • Fixed a PHP error that could occur when generating an image transform for a non-web-safe image.
  • Fixed a bug where Edit Entry pages would not show the “Parent Entry” field for Structure entries whose sections were not enabled for the current locale.
  • Fixed a bug where elements in relational fields’ selection modals would still appear highlighted (rather than just disabled) after getting selected.
  • Fixed a UI glitch that occurred when dragging elements within a Structure or Category Group.
  • Fixed a bug where entry URIs were not wrapping on the Entries index page in Firefox.
  • Fixed a bug where PHP functions that were called from Twig could receive strings as Twig_Markup objects.

Craft 2.2.2591 #

Released on Sep 26, 2014

  • Fixed a Javascript error in the Control Panel.

Craft 2.2.2590 #

Released on Sep 26, 2014

  • Fixed a bug where the Control Panel could cause Chrome to crash in rare situations.

Craft 2.2.2589 #

Released on Sep 25, 2014

  • The Control Panel is a little zippier now.
  • Live Preview now shows the ‘col-resize’ cursor style when the cursor is hovering between editor and preview panes.
  • The Find and Replace tool is now a little more defensive against the possibility that its settings are stored as invalid JSON.
  • Plugins are no longer required to extend BasePlugin, so long as they are implementing the IPlugin interface.
  • Fixed a bug where Chrome would get random scrollbars in the Control Panel.
  • Fixed a bug where you couldn’t install Craft on MySQL 5.7.
  • Fixed a bug where you might get an “invalid compression level” error when trying to upload certain PNG files.
  • Fixed a bug where it was not possible to replace a file that existed in an asset source but was not yet indexed by Craft.
  • Fixed a bug where asset index records would not be updated in some cases.

Craft 2.2.2588 #

Released on Sep 24, 2014

  • Fixed a MySQL error that could occur when saving elements on sites that have Lightswitch fields.

Craft 2.2.2587 #

Released on Sep 23, 2014

  • All Control Panel requests are now served with a “X-Robots-Tag: none” header, which tells Google/Yahoo/Bing to not index the page or follow any links on it.
  • The Password input on Edit User pages now gets Show/Hide links like the other password fields in the Control Panel.
  • When an element is saved, all of the content table columns that don’t map to fields in the element’s field layout are now explicitly set to NULL.
  • ‘Ø’ characters are now mapped to ‘O’ when converting a string to ASCII.
  • Improved the performance of CP resource requests.
  • The Control Panel no longer checks the user’s authentication status every 5 seconds when they are logged out. (Now just every 60 seconds.)
  • The onBeforeSaveEntry and onSaveEntry events now get fired when editing an entry from an Entries field.
  • Fixed a bug where the Find and Replace tool could inadvertently delete all of your textual content if its settings somehow got stored as invalid JSON.
  • Fixed a bug where some actions that should only be available to admins were not being enforced properly.
  • Fixed a bug where element parameters that had multiple values specified in a single string separated by commas were not getting parsed correctly.
  • Fixed a bug where file type validation would fail on Assets fields that had a file selected with an uppercase extension.
  • Fixed a bug where images with uppercase file extensions were not considered manipulatable, and thus didn’t get thumbnails or image transforms.
  • Fixed a bug where Matrix fields that had two Number sub-fields with the same field handle in two different block types could conflict with each other.
  • Retroactively fixed a bug where some Matrix block rows would get left behind in the database when an element was deleted that had a Matrix field.
  • Fixed a bug where CP notifications that were added via Javascript after the page load were getting 100% width.
  • Fixed a PHP error that occurred when FeedsService encountered an invalid feed.
  • Fixed a PHP error that occurred if the local copy of a remotely-stored image had not been saved successfully.

Craft 2.2.2586 #

Released on Sep 18, 2014

  • Added StringHelper::escapeCommas().
  • Added UserSessionService::shouldExtendSession().
  • Added BaseOptionsFieldType::getDefaultValue().
  • IOHelper::getExtension() no longer converts the file extension to lowercase.
  • ArrayHelper::stringToArray() now removes the comma-escaping backslashes before returning the array.
  • The CP’s user session timeout-checking Ajax requests no longer get logged in craft/storage/runtime/logs/craft.log when Craft is running in Dev Mode.
  • Improved the performance of some animations in the Control Panel.
  • Fixed a bug where the Page Break button in Rich Text fields wasn’t saving page breaks properly.
  • Fixed a bug where publishing a draft of a nested Structure section entry would result in the entry having the URL Format of top level entries.
  • Fixed a bug where quickly dragging and releasing a Structure entry or Category would result in the element getting hidden on the page.
  • Fixed a bug where saving a user with a new password and the “Password Reset Required?” checkbox checked would result in a password reset no longer being required on the user account.
  • Fixed a MySQL error that could occur if multiple Matrix block types were saved with the same handle.
  • Fixed a PHP error that could occur when HttpRequestService::close() was called before the PHP session had been started.
  • Fixed a bug where the ‘overridePhpSessionLocation’ config setting would be ignored on case-sensitive file systems.
  • Fixed a bug where files with an uppercase file extension could not be uploaded on case-sensitive file systems.
  • Fixed a bug where assets with commas in their filenames would have strange results when being indexed.
  • Fixed a bug where uploading files to a Rackspace source with an expired security token would not work as expected.
  • Fixed a bug where newly-uploaded assets wouldn’t store the default values for any Checkboxes, Multi-select, Dropdown, or Radio Button fields.
  • Fixed a bug where “AM” and “PM” might not have been translated properly when formatting a date with the ‘a’ in the date format string.
  • Fixed some broken links on the “What’s New” page.

Craft 2.2.2582 #

Released on Sep 8, 2014

  • Entry and category search results now place a 5X weight on search term matches within Title fields.
  • Included the latest and greatest Control Panel translations.
  • Fixed a bug that broke asset moving between two sources.
  • Fixed a PHP error that would occur if the defaultImageQuality config setting was set to ‘0’.
  • Fixed a bug where image quality settings were having the opposite effect for PNG files.
  • Fixed a bug where asset uploading was broken when CSRF protection was enabled.
  • Fixed a Javascript error that would occur when repositioning a category that had just been created.
  • Fixed a bug where the words “Title”, “URI”, and “Slug” were not getting translated within validation errors.

Craft 2.2.2581 #

Released on Sep 4, 2014

  • Improved the look and usability of the Fatal Error screen in Craft’s updater.
  • Craft no longer enforces auto-update permissions during an auto-update once the new files have been put into place.
  • Craft no longer throws an exception if the {% requireLogin %} tag is called from the Login page. It will vent silently in the logs instead.
  • UserSessionService::getReturnUrl() will now strip out any curly braces that may have made it into the Return URL.
  • Fixed a bug where one of the 2.2 migrations could have changed the wrong Entry Types’ Title-related settings. If you have already updated to Craft 2.2, you should verify that each of your sections’ Entry Type settings are correct, lest you find yourself with unexpected entry titles.
  • Fixed a bug where users couldn’t log in when Remember Me was checked if the userSessionDuration config setting was empty.
  • Fixed a bug where Craft was throwing a “requireLogin was used on the login page, creating an infinite loop.” error when accessing the front-end site’s login path from the CP.
  • Fixed an infinite redirect bug that would occur if a user session’s Return URL was set to the login path, somehow.
  • Fixed a bug where switching the locale on a new Structure section entry wouldn’t retain the Parent Entry value, if there was one.
  • Fixed a bug where field types’ prepValueFromPost() methods could be getting modified values passed in, rather than the raw post data.
  • Fixed a bug where the {% paginate %} tag was setting a ‘limit’ parameter on the passed-in ElementCriteriaModel (rather than a copy), which could affect the output of the ElementCriteriaModel further down the page.
  • Fixed some PHP deprecation warnings when running Craft from PHP 6+.

Craft 2.2.2579 #

Released on Sep 2, 2014

General

  • Added CSRF Protection.
  • Added logout notifications to the Control Panel.
  • Single sections’ Entry Types now have “Show the Title field?”, “Title Field Label”, and “Title Format” settings.
  • Singles now have a “Status” setting like other entries.
  • Added the new Position Select field type.
  • Added a “Purify HTML?” setting to Rich Text fields.
  • Added a “Minute Increment” setting to Date/Time fields.
  • Plain Text fields now show the remaining character count if they have a Max Length specified.
  • Yii’s validation messages can now be translated using Craft’s static translation support.
  • HTTP 503 errors now check for an offline.html template before falling back on 503.html.
  • When the system is offline, Craft now responds to front-end site requests with a HTTP 503 error.
  • When the system is offline, logged-in users who who don’t have offline access permissions will now get 503 errors rather than being automatically logged-out. The default error message also includes a link to the Logout page.
  • “author”, “authorId”, “expiryDate”, “firstName”, “handle”, “lastName”, “img”, “name”, “postDate”, “section”, “sortOrder”, “type”, and “size” are no longer reserved field handles, although they should be used with caution. (An “author” field may result in unexpected behavior on the front end when assigned to entries, for example.)
  • Matrix field values are now ElementCriteriaModel objects even during Live Preview, so templates no longer need to be defensive about the possibility of them being arrays.
  • The Resave Elements task now logs a more helpful error in the event that an exception was thrown while resaving one of the elements.
  • Single sections’ Entry Types no longer have editable names and handles, because that’s just silly.
  • Fixed a bug where Quick Post widgets would only show the first entry type, regardless of what the Entry Type setting was set to.
  • Fixed a bug where searching for “field:term1 OR field:term2” would return results where any field had a matching value.
  • Fixed a bug where site logos and user photos with spaces in their filenames would result in broken images in the CP.
  • Fixed a bug where user photo and site logo uploading was broken for small images.
  • Fixed a MySQL error that would occur if more than 128 elements were selected in a relational field.
  • Fixed a bug where front-end /login, /logout, and /setpassword requests would be treated as Login, Logout, and Set Password requests even if the loginPath, logoutPath, and setPasswordPath config settings had changed.
  • Fixed a bug where front-end Login page requests were redirecting users with CP access to the CP Dashboard if they were already logged in, rather than the site’s homepage.
  • Fixed a bug where users that logged in with “Remember Me” checked would get a basically-pointless “rememberMe” cookie that would want to stick around for the next several decades if we had let it.
  • Fixed a bug where user identity cookies were not retaining their HTTP-only status.
  • Fixed a bug where the “Username or Email” input would be auto-focussed after clicking “Forget your password?” on the CP’s Login page when using a mobile device.
  • Fixed a bug where browsers would still get user session cookies after they had been logged out due to requireMatchingUserAgentForSession config setting enforcement.
  • Fixed a bug where existing users who changed their email address would get the wrong verification email message.
  • Fixed a bug where past versions of Singles weren’t showing their version notes.
  • Fixed a PHP error that could occur if an exception was thrown during a resource request, and the error template was relying on plugin-supplied features.

Control Panel

  • Users are now warned when their session is going to expire in less than two minutes, and they’re given the option to log out now or extend their session.
  • Users are now notified when their session has ended, and they’re given the option to enter their password and be logged back in.
  • Translatable field labels are now marked with locale IDs to help identify which fields are translatable.
  • Menu options no longer have wrapped text, and menus’ alignment with their trigger buttons will be flipped if necessary to avoid bleeding out of the window.
  • If there are multiple Channel/Structure sections, the “New Entry” button on the Entries index now links to the New Entry page for the selected section, and has a small menu button next to it that provides links to create new entries in the other sections.
  • Edit Entry URLs now include the entry’s slug, so it’s easier to identify the entry by its URL.
  • Any periods that show up in a new entry’s title are no longer included in its auto-generated slug.
  • When an admin is attempting to change another user’s email or password, the Enter Password modal’s text now reads “Please enter your password.” instead of “Please enter your current password.” to help clarify whose password should be entered.
  • The Registration Date, Last Login Date, Last Invalid Login Date, and Last Password Change Date values on Edit User pages are now shown in the site’s timezone, and formatted according to the current user’s preferred locale.
  • Removed the possibility of field handles conflicting with other element attributes and causing unexpected behavior within the CP.
  • The Backup Database tool will no longer include the data in the craft_sessions table in its backup.
  • Improved the performance of the Update Asset Indexes tool.
  • Improved the performance of the CP’s layout manager.
  • When editing a user, the Command/Ctrl+S shortcut will now keep you on the current user’s edit page after saving them.
  • When editing a user account, the First Name field is now auto-focussed.
  • Adjacent checkbox fields that have instructional text now get a little spacing between them.
  • The System Status and Site URL fields in General Settings now show warnings if their values are being overridden in craft/config/general.php.
  • Fixed a bug where images within Rich Text fields’ bodies were not draggable on pages with an Assets field or where an asset selection modal had been opened (such as the one Rich Text fields’ “Choose image” menu option fires up).
  • Fixed a bug where the progress bar in the Update Asset Indexes tool would get progressively slower and less helpful as time went on.
  • Fixed a bug where background task progress icons were not getting updated with the latest progress info unless they were clicked on.
  • Fixed a bug where new background tasks created over Ajax were not getting progress icons if another task had already run and completed on the same CP page.
  • Fixed a bug where disabled lightswitch inputs looked enabled.

Assets

  • Added a “Image Format” setting to image transforms for specifying the image format that should be used.
  • Craft now automatically generates all pending image transforms that were called in a request, after it is finished serving the page, regardless of whether the browser actually requests the transforms’ temporary URLs (pretty much eliminating the need for the generateTransformsBeforePageLoad config setting).
  • Added support for a “compressed” asset file kind which includes common compression file formats such as .zip and .tar.
  • Asset transforms will now be generated in a web-safe image format if the source image is not.
  • Craft now deletes any generated image transforms for an asset when it is being moved to a new asset source.
  • When moving assets around, Craft now checks to make sure the target folder actually exists on the file system beforehand, and responds gracefully if it doesn’t.

Templating

  • Added a global getCsrfInput() template function for getting a hidden CSRF input if CSRF protection is enabled.
  • Added a using key param to the {% cache %} tag.
  • Added an if param to {% cache %} tags.
  • Added an nth() function to ElementCriteriaModel objects for fetching the element at a specific offset.
  • Added craft.userSession.getAuthTimeout(), a wrapper for UserSessionService::getAuthTimeout().
  • Added ‘positionedBefore’ and ‘positionedAfter’ parameters to ElementCriteriaModel, for finding elements that are positioned before or after another element in a Structure section or category group.
  • The replace filter now supports regular expressions, by setting the first argument to a string that begins and ends with forward slashes, e.g. '/foo/'.
  • Craft no longer gives any special treatment to template paths that include a file extension, making it possible for the template path “readme” to match a file called “readme” (with no extension), or the template path “robots.txt” to match a file called “robots.txt.twig”.
  • Craft is now forgiving of CRAFT_TEMPLATES_PATH values that don’t end in a slash.
  • It is no longer necessary to have a ‘redirect’ hidden input on Login forms. If there isn’t one, Craft will default to the URL the user was originally requesting before {% requireLogin %} did its thing, and if that’s not set, it will fall back on the new postLoginRedirect config setting.
  • Fixed a bug where the ‘search’ parameter wouldn’t be factored in when calling an ElementCriteriaModel object’s total() method.
  • Fixed a bug where .html and .htm templates were automatically getting injected with any HTML that was queued up for getHeadHtml() or getFootHtml(), even if the template had specified a content type other than “text/html” or “application/xhtml+xml” using the {% header %} tag.

Configuration

Dev Changes

Third Party Libraries

  • The CP now uses Velocity.js for all of its animations.
  • Updated Guzzle to 3.9.2.
  • Updated Imagine to 0.6.1.
  • Updated PHPUnit to 4.2.2.
  • Updated PHPUnit-Selenium to 1.4.1.
  • Updated Twig to 1.16.0.
  • Updated jQuery to 2.1.1.
  • Updated jQuery File Upload to 5.41.0.
  • Updated jQuery Placeholder to 2.0.8.
  • Updated jQuery Timepicker to 1.4.6.
  • Updated jQuery UI to 1.11.1.
  • Updated Redactor to 9.2.6.

Craft 2.1.2570 #

Released on Aug 26, 2014

  • Prevented redundant DB queries when calling UserModel::getGroups() multiple times on the same UserModel instance.
  • Fixed a bug where asset indexing was broken for non-image files.
  • Fixed a bug where asset indexing session data would not be deleted if only one session was in progress.
  • Fixed a bug where setting PHP’s memory_limit setting to -1 would break asset uploading.
  • Fixed a bug where the “Users” breadcrumb would show on the My Account page for users that didn’t actually have permission to edit other users.
  • Fixed a PHP error that would occur when FeedsService::getFeedItems() would encounter a feed that SimplePie couldn’t parse.

Craft 2.1.2569 #

Released on Aug 18, 2014

  • Fixed a bug where setting the imageDriver config setting to 'gd' would not work.
  • Fixed a Javascript error that could occur if size values in php.ini were specified with lowercase units (e.g. memory_limit = 128m).
  • Fixed a bug where MatrixService::getBlockTypesByFieldId() would return stale information if it was called on the same request that a new block type was created in.
  • Fixed a bug that broke Asset uploading on front end forms.

Craft 2.1.2568 #

Released on Aug 14, 2014

  • Drastically improved the DocBlock comments throughout all of Craft’s PHP files.
  • AssetsService::insertFileByLocalPath() now takes an optional argument defining how the function should deal with filename conflicts.
  • Added the AssetConflictResolution enum class, replacing some constants in AssetsHelper.
  • Fixed a bug where Assets fields were not disabling the “Add an asset” buttons after they had reached their limit via drag-n-drop file uploading.
  • Fixed a bug where the delete buttons in Settings → Fields were not clickable in Safari from time to time.
  • Fixed a JS error that occurred in Firefox when there were multiple Rich Text fields on a page using the ‘iframe’ and ‘css’ Redactor settings, breaking all but the first Rich Text field.
  • Fixed a bug where some assets might never be moved out of their temporary upload location.
  • Fixed a PHP error that would occur when installing Craft if the Multibyte String extension was not installed.
  • Fixed a bug where some fields’ values would not save correctly on Matrix blocks within entry drafts.
  • Fixed a bug where some requests were treated as paginated requests, when they totally should not have been.
  • Fixed a bug where user groups weren’t being ordered alphabetically.

Craft 2.1.2566 #

Released on Jul 23, 2014

  • Added a new ‘useWriteFileLock’ config setting, which can be set to ‘false’ on servers running NFS, fixing a PHP error that could occur.
  • Section names now get translated in the Recent Entries widget.
  • User custom field validation now occurs at the same time as the regular fields, so all validation errors will be set at the same time.
  • Lightswitch inputs in the Control Panel now support ‘toggle’ and ‘reverseToggle’ field-toggling params, like checkboxes and selects.
  • Fixed a “Division by zero” PHP warning that could occur when using the ‘search’ element param in some cases.
  • Fixed a couple bugs that broke drag-n-drop uploading to Assets fields in certain conditions.
  • Fixed an error that could occur when a file was uploaded from the front end that conflicted with another file.
  • Fixed a bug that prevented transforms from being created for assets in temporary sources.
  • Fixed a bug where Craft update release notes were displayed in RTL in Arabic, even though they’re in English.
  • Fixed a Twig error that would occur if there was a comment tag between a {% switch %} tag and its first {% case %} sub-tag.
  • Fixed a Twig error that would occur if a non-DateTime value was passed to the _includes/time.html template.
  • Fixed a bug where elements in the Control Panel could have multiple editing modals attached to them at the same time.
  • Fixed a bug where {% cache %} tags were caching templates that included transform-generation URLs.
  • Fixed a bug where TemplatesService::namespaceInputs() was not accounting for attributes that started with either ‘#’ or ‘.’.
  • Fixed a bug where HTML entities were getting double-encoded in the page <title> on the Edit Entry page.

Craft 2.1.2564 #

Released on Jul 15, 2014

  • Added support for the ‘cy_gb’ locale.
  • {% requireLogin %} and craft()->userSession->requireLogin() now throw an exception if called from the actual Login page, rather than creating an infinite redirect loop.
  • Fixed a couple bugs that occurred when working with entries in a Structure section that was not enabled for the current locale.
  • Fixed a bug where craft.users would return no results if the ‘can’ param was set to a permission that hadn’t been assigned before, rather than returning a list of the admins.
  • Fixed a bug where HTML entities within entry titles were not being encoded within the page title on the Edit Entry page.
  • Fixed a bug where the “Delete Stale Template Caches” task was not actually deleting stale template caches.
  • Fixed a bug where drafts and versions would not remember Entry Type changes.
  • Fixed a bug where Live Preview wasn’t showing changes to the Entry Type, Slug, Author, Post Date, Expiration Date, and Status settings.
  • Fixed a Twig error that could occur if a template had a variable named “nav” defined before using a {% nav %} tag.
  • Worked around a bug in legacy versions of IE affecting craft()->request->sendFile() over SSL.

Craft 2.1.2563 #

Released on Jul 7, 2014

  • Added StringHelper::getCharAt().
  • Added IOHelper::getLastModifiedFiles().
  • Yii’s Arabic translations are now included.
  • Fixed a bug where relational fields were returning search keywords for the previously-selected elements rather than the new ones.
  • Fixed a bug where it was not possible to assign permissions directly to a user which were nested under other permissions the user already had via a group they were assigned to.
  • Fixed a bug where the Quick Post widget would show the Title field for entry types that had “Show title fields” setting unchecked.
  • Fixed a bug where the Get Help widget was not always sending the latest database backups with new support tickets.
  • Fixed a bug with the search query parser when the search term contained multibyte characters.
  • Fixed a PHP exception that could occur when updating Craft if a plugin was installed that added its own Twig extension.

Craft 2.1.2562 #

Released on Jul 1, 2014

  • Added ‘js’ to the default allowedFileExtensions config setting value.
  • craft.request.getQuery() and craft.request.getPost() can now be used to return the entire GET and POST param arrays, if a param name is not passed as the first argument.
  • Improved the performance of ResaveElements tasks.
  • Craft now shows a confirmation dialog when leaving a Global Edit page with unsaved changes.
  • Disabled the “Clear” buttons on text fields and the “Reveal” buttons on password fields, in Internet Explorer.
  • “sortOrder” is now a reserved field handle.
  • Fixed a bug where it was not possible to upload files to newly-created asset subfolders.
  • Fixed a bug where it was possible to select image transforms on non-images when linking to assets in Rich Text fields.
  • Fixed a bug where it was not possible to upload files to Assets fields within Matrix fields from a front-end form.
  • Fixed a PHP error that occurred on sites where craft/config/general.php did not return an array.
  • Fixed a PHP notice that could occur with some versions of PHP.
  • Fixed a SQL error that could occur on sites with a custom field named “asc” or “desc”.
  • Fixed a bug where entries may have not been updated with new URIs after updating a section’s settings, if the section wasn’t enabled for the current locale.
  • Fixed a race condition that could have resulted in multiple requests trying to clean up expired template caches at the same time.
  • Fixed a bug where pagination links weren’t taking the ‘offset’ parameter into account.
  • Fixed a bug where HTML code within element labels was not getting properly encoded in the CP.
  • Fixed a couple UI glitches on field layout designers.

Craft 2.1.2561 #

Released on Jun 19, 2014

  • Users with permission to edit entries in a section, but not create new ones, are now allowed to be selected as the author of entries.
  • Fixed a bug where Craft could incorrectly determine the amount of bytes available from PHP’s memory_limit setting if it was set to a size in gigabytes.
  • Fixed a PHP that could occur when an admin attempted to log in as a pending user.
  • Fixed a bug where you could drag top-level asset sources.
  • Fixed a bug where you could drag an asset folder onto itself or any of its own children.
  • Fixed a PHP error that could occur when uploading certain types of PNG files.
  • Fixed a PHP error that could occur when the craft/storage/runtime/ folder existed but was completely empty.
  • Fixed a PHP error that could occur on fresh installs of Craft on the very first request.
  • Fixed a PHP error that could occur when trying to fetch a config setting for a plugin that didn’t provide a default config file.
  • Fixed a bug where passing ‘true’ as a second argument to NumberFormatter::formatCurrency() or the |currency filter would not work as intended with some numbers.
  • Fixed a bug where uploading files to an Assets field via drag-n-drop would not take the field’s Limit setting into account.
  • Fixed a couple UI glitches with CP grids.
  • Fixed a MySQL error that could occur when ordering elements by a MySQL function that included custom field names.

Craft 2.1.2559 #

Released on Jun 9, 2014

  • Setting the 'id' criteria parameter to any empty value besides ‘null’ will now return 0 results.
  • Added support for the ‘offset’ parameter in conjunction with the {% paginate %} tag.
  • Invalid asset source path errors now include the invalid path.
  • Improved the Javascript performance on most CP pages.
  • Fixed a bug where asset subfolders weren’t getting indexed on Windows servers.
  • Fixed a bug where it was not possible to move assets between folders on Rackspace sources.
  • Fixed a bug where it was not possible for non-admins to upload to Assets fields that were restricted to a single upload location in some cases.
  • Fixed a bug where Assets fields weren’t always respecting the “Default Upload Location” setting.
  • Fixed a JS error that occurred when selecting images from a Rich Text field.
  • Fixed a bug where user photos could get uploaded to the wrong place if the ‘useEmailAsUsername’ config setting was set to true.
  • Fixed a bug where some entries could always show a confirmation dialog before leaving the page, even if there weren't any unsaved changes.
  • Fixed some unexpected behavior with CP grids.
  • Fixed some minor styling issues.

Craft 2.1.2557 #

Released on Jun 4, 2014

  • Plugin classes are now imported before their getSettingsModel() function is called, making it possible for plugins to provide their own settings models without manually importing them.
  • Fixed a bug where asset content wasn’t saving.
  • Fixed a PHP error that occurred when publishing a draft in a section that wasn’t enabled for the current application locale.
  • Fixed a PHP error that occurred when reverting a past entry version in a section that wasn’t enabled for the current application locale.
  • Fixed a bug where Matrix fields’ menus wouldn’t expand when clicked if the Matrix field was loaded dynamically after switching the Entry Type.
  • Fixed a bug where Rich Text fields would not retain their entry/asset reference tags when re-edited.
  • Fixed a couple minor CSS glitches.

Craft 2.1.2556 #

Released on Jun 4, 2014

  • Fixed a bug that broke entry type switching when Dev Mode was enabled.

Craft 2.1.2555 #

Released on Jun 3, 2014

  • Fixed a bug that caused an unknown validation error when attempting to save Assets fields.
  • Corrected some of the CP's Norwegian translations.
  • Fixed a bug where Craft would leave some user data behind when purging stale users.

Craft 2.1.2554 #

Released on Jun 3, 2014

General

  • Admins can now manually activate pending users.
  • Craft will now automatically purge users that have been in a pending state for a certain amount of time, determined by the new purgePendingUsersDuration config setting.
  • Added an isSystemOn config setting that takes precedence over whatever is set in General Settings.
  • Added a baseCpUrl config setting, which can be used to explicitly set the base CP URL if the dynamically-determined URL is not desired for some reason.
  • Added a useEmailAsUsername config setting, which removes “Username” fields and keeps users’ usernames set to whatever their email is set to.
  • Added an autoLoginAfterAccountActivation config setting, which will automatically log users in after activating their account when set to ‘true’ (default is ‘false’).
  • Added an allowUppercaseInSlug config setting, which can be set to ‘true’ to allow uppercase letters in slugs (default is ‘false’).
  • Added a defaultTokenDuration config setting, for specifying how long tokens should be available by default.
  • Added a tokenParam config setting, for specifying the query string parameter name that tokens should be set to.
  • Added a “Clear” button to search bars on element indexes, for quickly clearing the search query.
  • Made several subtle CP UI improvements.
  • Matrix blocks now have alternating colored backgrounds.
  • The selected locale is now remembered across page loads on the Entries and Assets index pages.
  • Global sets without any custom fields will now show a notice rather than an empty form.
  • Translations for month names, weekday names, and AM/PM are now automatically available for Craft::t() and the |t filter.
  • Expired user activation links will now display a form for sending a new activation email, rather than an error message.
  • Users who are suspended are now immediately locked out of the system.
  • The profiling information in the browser console now shows the total query count for the current request, if Dev Mode is enabled.
  • HttpExceptions are now log as warnings, not errors, in craft/storage/runtime/logs/craft.log.
  • If you upload a version of Craft that is incompatible with the installed schema’s version, the error message now includes a link to download a compatible version of Craft.
  • Craft no longer backs up the database when updating a plugin if the plugin’s update doesn’t include any database changes.
  • Errors that came from external asset sources are now logged in craft/storage/runtime/logs/.
  • Subfolders are no longer visible in Assets fields that have been restricted to a single folder.
  • Fixed some styling glitches and other UI issues.

Entries

  • Added a “Share” button next to entries’ Live Preview button, which opens the current entry/draft/version on the front end, with a tokened URL that can be shared with others without requiring them to be logged in.
  • It is now possible to immediately save a new entry as a draft.
  • It is now possible to customize Draft names, and give them notes.
  • It is now possible to provide change notes when saving an entry.
  • It is now possible to revert an entry to one of its past versions.
  • Entry versioning can now be enabled/disabled on a per-section basis.
  • Users will now get prompted when leaving an Edit Entry page with unsaved changes.
  • Drafts’ default names now increment based on the number of existing drafts for the current entry and locale.
  • Version numbers now increment based on the number of existing versions for the current entry and locale.
  • Versions now show the date they were created in the entry revision menu.
  • Versions no longer have strangely-editable fields.
  • Entry action buttons have been moved to the right sidebar.
  • The “Save as a Draft” button has been moved into the Save button’s context menu.
  • The “Delete” button has been moved to the right of the Status Lightswitch input.

Assets

  • Added a maxUploadFileSize config setting, which defaults to 16MB.
  • Added a generateTransformsBeforePageLoad config setting, which forces asset transforms to be generated immediately when getUrl() is called, rather than during the actual image request.
  • Added an imageDriver config setting, which will force Craft to use a particular image manipulation library if set to ‘gd’ or ‘imagick’.
  • Asset source permissions are no longer factored into Assets fields.
  • Assets’ filenames can now be made up of almost any characters, except those which are known to cause issues on file systems or pose security risks.
  • Assets’ filenames can now be renamed from the same modal that their title and content is edited in.
  • Asset folders now show settings icons on hover, which open the folder context menu when clicked on.
  • It is no longer necessary to include a |raw filter when outputting an image transform URL within <style> tags.
  • Fixed a bug where Assets fields created before Craft 2.0 could have stopped working until re-saved.

Templating

  • Added support for a ‘title’ parameter when querying for entries, assets, and categories.
  • Added support for a ‘lastLoginDate’ parameter when querying for users.
  • Added hasDescendants() to EntryModel and CategoryModel.
  • Added craft.globals.getSetByHandle().
  • craft.globals.getSetById() now supports a second argument for specifying the locale.
  • Added craft.request.getHostInfo().
  • Added craft.request.getScriptUrl().
  • Added craft.request.getPathInfo().
  • Added craft.request.getRequestUri().
  • Added craft.request.getServerPort().
  • Added craft.request.getUrlReferrer().
  • Added craft.request.getUserAgent().
  • Added craft.request.getUserHostAddress().
  • Added craft.request.getUserHost().
  • Added craft.request.getPort().
  • The |date filter now automatically translates month names, weekday names, and AM/PM for the current locale.

Dev Changes

  • Added TokensService, providing an API for creating time-limited tokens, which map to a given route.
  • Added BaseController::requireToken() for requiring that the current request has a token in it.
  • Added HttpRequestService::getToken() for fetching the current request’s token, if there is one.
  • Added UrlHelper::getUrlWithToken() for getting a URL with a given token in its query string.
  • Added UrlHelper::getUrlWithParams() for returning a URL with additional query string parameters.
  • Added UrlHelper::isAbsoluteUrl() for determining if a URL is absolute (starts with “http://” or “https://”).
  • Added UrlHelper::isProtocolRelativeUrl() for determining if a URL is protocol-relative (starts with “//”).
  • Added UrlHelper::isRootRelativeUrl() for determining if a URL is root-relative (starts with “/”).
  • Added UrlHelper::isFullUrl() for determining if a URL is either absolute or protocol-relative.
  • Added SectionsService::isSectionTemplateValid().
  • Added GlobalsService::getSetByHandle().
  • Added a registerSiteRoutes hook.
  • Added a getSettingsUrl() method to plugins, so they can provide an alternate location for their settings.
  • Added an onBeforeInstall() method to plugins so they have a chance to run pre-installation logic.
  • Field types can now provide a getStaticHtml() method, customizing what their field should look like when viewing a static entry version.
  • It is now possible to create a field-less field type; fields that don’t have instructions and don’t have any input HTML will be omitted from edit pages.
  • CP forms can now include data-confirm-unload="1", which will show a confirmation dialog if the user tries to leave the form with unsaved changes.
  • It is now possible to provide custom instructional text when including the Field Layout Designer in a template.
  • The _layouts/cp.html template now supports a ‘docTitle’ variable, which can be used to set the document title and page heading separately.
  • UrlHelper::getUrl() now applies the $params and $protocol arguments to full URLs, if they’re set.
  • TemplatesService::findTemplate() now returns ‘false’ in the event that it can’t find the template, rather than throwing a TemplateLoaderException.
  • The onSaveAsset, onSaveCategory, onSaveEntry, onSaveTag, and onSaveUser events now get fired after all DB changes associated with the action have been committed.
  • EntryDraftModel and EntryVersionModel’s getUrl() functions now actually return a URL.
  • “Mixed” record attribute values now only get JSON-decoded if they look like they were JSON-encoded to begin with.
  • Plugin settings are now run through validation.
  • Lightswitch container divs now fire a ‘change’ event when the Lightswitch value changes.
  • EntryRevisionsService::getDraftByOffset() and getVersionByOffset() are now deprecated, as they should have been long, long ago.

Third Party Libraries

  • Update PHPMailer to 5.2.8.
  • Updated Guzzle to 3.9.1.
  • Updated PHPUnit to 4.1.1.
  • Updated Mockery to 0.9.1.
  • Updated DBUnit to 1.3.1.

Craft 2.0.2551 #

Released on Jun 1, 2014

  • Craft now respects the ‘defaultTemplateExtensions’ and ‘indexTemplateFilenames’ config settings when rendering the ‘offline’ template.
  • Fixed a PHP error that would occur when generating a transform using the Scale-to-Fit mode

Craft 2.0.2549 #

Released on May 30, 2014

  • Fixed a couple bugs that could prevent asset selection modals from displaying anything in some cases.
  • Fixed a CSS glitch.

Craft 2.0.2548 #

Released on May 29, 2014

  • Fixed a bug that could break edit pages that contained Assets fields when no Assets sources existed.
  • Fixed an error that could occur when saving a Matrix field with a long block type handle or field handle.
  • Fixed a bug where users that didn’t have permission to edit other authors’ entries within a section were still able to do so through Entries fields.
  • Fixed a bug where all template caches would get cleared every 24 hours, regardless of their duration.
  • Fixed a bug where long site names would push the CP header navigation out of view on smaller screens.
  • Fixed a bug where Matrix “add” buttons weren’t getting collapsed into a menu button when there wasn’t enough room to show them all.
  • Fixed a bug where test emails could be sent with the subject “test_email_heading” in some cases.
  • Fixed some minor CSS issues.

Craft 2.0.2543 #

Released on May 23, 2014

  • Made major performance improvements to the Users index, Edit Entry pages, and any templates using the ‘can’, ‘group’, and ‘groupId’ params when fetching users, for sites with hundreds of thousands of users.
  • The ‘Delete’ buttons next to each selected element in Entries, Assets, Tags, and Users fields no longer no longer serve as part of the drag handle.
  • Fixed a bug where Assets fields that were restricted to certain file types would only allow the first file type to save.
  • Fixed a bug where the entry revision dropdown would show revisions in chronological order rather than reverse-chronological order.
  • Fixed a bug where the current version of an entry would masquerade as a previous version in the entry revision dropdown.
  • Fixed a bug where Rich Text fields were not maintaining the correct locale when opening their entry and asset selection modals.
  • Fixed a bug where search result scoring would happen after the results had already been limited.
  • Fixed some CSS glitches here and there.

Craft 2.0.2542 #

Released on May 20, 2014

  • Added ArrayHelper::getFirstValue(), for getting the first value in an array.
  • The PHP session ID cookie is now HTTP-only for better PCI compliance.
  • Made performance improvements to the “DeleteStaleTemplateCaches” task, fixing a possible MySQL deadlock error.
  • Fixed a bug where it was possible to register a new user account on the front end without setting a password.
  • Fixed a bug where asset indexing would skip folders that had commas in their name.
  • Fixed a bug where the test email template was listing all the email settings in a single paragraph.
  • Fixed a PHP error in DbHelper::parseParam() that could occur if $values was an associative array.

Craft 2.0.2541 #

Released on May 15, 2014

  • Singles once again have permissions for publishing live changes and editing/publishing/deleting other authors’ drafts.
  • The Entries index and Recent Entries widget no longer show entries that the user doesn’t have permission to edit due to the “Edit other authors’ entries” permission.
  • It is now possible to save an Assets field from a front-end form with both existing asset IDs and new file uploads at the same time.
  • TemplatesService::namespaceInputs() now namespaces list= attributes.
  • Fixed a bug where element selector modals wouldn’t lazy-load any additional elements if the modal had a horizontal scrollbar.
  • Fixed a bug where test emails would get sent out with incorrect subject and body content when Craft was not running in the ‘en_us’ locale.
  • Fixed a bug where Arabic tab labels could get unexpected line breaks.
  • Fixed a bug that broke Rich Text fields when Craft was running a Norwegian locale.
  • Fixed a bug where Single entry drafts could forget their titles in the Edit page.
  • Fixed a bug where users could get an authentication error when saving a Single.

Craft 2.0.2540 #

Released on May 13, 2014

  • It is now possible to get the Nth-last URL segment by passing a negative number to craft.request.getSegment(). (‘-2’ will return the second-to-last URL segment, for example.)
  • ArrayHelper::stringToArray() will no longer split strings on escaped commas, e.g. "foo\, bar".
  • It is now possible to get non-resized user photo URLs by passing "original" into getPhotoUrl().
  • Added .ogv to the default list of allowed file extensions.
  • You can now pass ‘0’ to ElementCriteriaModel’s ‘id’ params to force zero results (in addition to ‘false’.)
  • Updated Redactor’s translation files, and included new translation files for Arabic and Norwegian.
  • Section titles, Global Set names, Category Group names, Table field labels, and field option labels are now translatable in several areas of the CP.
  • Fixed some bugs in the image cropping modals for user photos and login page logos.
  • Fixed a bug where non-admins were not allowed to publish edits to Singles.
  • Fixed a bug where Checkboxes, Dropdown, Multi-select, and Radio Buttons fields weren’t selecting the default option(s) on new elements
  • Fixed an infinite loop that could occur when Craft was trying to determine which language to use for the current request.
  • Fixed a PHP error that could occur when a user attempted to delete an entry in a section that was not activated for their preferred locale.
  • Fixed a bug where element index pages would always initially show elements in the user’s preferred locale, even if the user doesn’t have permission to edit elements in that locale.
  • Fixed a bug where the Recent Entries widget would show entries in the user’s preferred locale, even if the user doesn’t have permission to edit elements in that locale.
  • Fixed a bug where the Copyright text in the CP footer would get a line break in Arabic.
  • Fixed a bug where Rich Text fields weren’t showing bullets for unordered lists in Arabic.
  • Fixed a bug where some strings in the CP were not getting translated.
  • Fixed various CSS glitches throughout the CP.

Craft 2.0.2539 #

Released on May 8, 2014

  • Number fields now default to the minimum allowed value if ‘0’ is outside of the allowed range.
  • Fixed a bug where users couldn’t edit Singles created by other users.
  • Fixed a bug where Craft Client was not saving entry versions.
  • Fixed a bug where Matrix blocks were not showing up on the front end for entry locales that weren’t set to be enabled by default.
  • Fixed a bug where setting the cacheDuration config setting ‘0’ would disable data caching rather than cache the data indefinitely (like the docs say it will).
  • Fixed a bug that prevented BaseElementType::getSource() from finding nested sources.
  • Fixed a PHP warning that could occur when calling IOHelper::clearFolder() if the folder contents could not be read.

Craft 2.0.2538 #

Released on May 1, 2014

  • The link to Redactor’s settings now opens in a new window.
  • Fixed a bug where new (non-Single) entry permissions weren’t getting saved correctly.
  • Fixed a PHP warning that could occur when rendering templates in rare conditions.
  • Fixed a PHP Warning that could occur when running yiic from the command line in some environments.
  • Fixed a bug where the Login button wouldn’t become clickable if you entered your username/password with Chrome’s autofill feature.

Craft 2.0.2537 #

Released on Apr 30, 2014

  • Added ElementsService::getElementByUri() for fetching an element by a given URI.
  • All singles’ permissions are now grouped together in the permission lists, and no longer have any permissions besides "Edit”, since that’s the only entry permission that makes sense for singles.
  • Color fields now default to #000000, fixing an inconsistency between Chrome (which supports HTML5 color inputs) and every other browser.
  • Added “webm” to the ‘video’ asset file kind extension list.
  • Fixed a bug where it wasn’t possible to publish drafts on a Single.
  • Fixed a bug that broke prefixing ‘relatedTo’ param values with “and” in some cases.
  • Fixed an error with Rackspace-hosted image transforms.
  • Fixed a bug where nested structure entries could use the wrong parent locale when generating new URIs.
  • Fixed a bug where Craft would look across all locales when trying to resolve a request URL to an element, rather than just the current app locale.
  • Fixed a bug where it was not possible to save a new entry for a different locale without saving it for the current app locale first.
  • Fixed a couple 404 errors that would occur when working with entry drafts in a different locale than the current app locale.
  • Fixed a fatal PHP error that could occur on a crazy edge case involving resetting a user’s password.
  • Fixed a bug where users who registered on the front-end would be able to skip email/password verification, even if the “Verify email addresses?" user setting was checked.
  • Fixed a bug where menus within modals could show up behind the modal in some cases.
  • Fixed a bug where checkbox labels weren’t toggling their checkboxes when clicked in Firefox.
  • Fixed a bug where the German language was getting a few Arabic translation.
  • Made some CP strings translatable that weren’t.

Craft 2.0.2536 #

Released on Apr 18, 2014

  • Added caching options for Google Cloud Storage sources.
  • Lightened the shadow surrounding the Update button on the Updates page.
  • IOHelper::getMimeType() can now handle file paths that don’t map to a real file on the server, by looking at the extension instead.
  • Fixed a Twig error that occurred when editing an element that had a Categories field set to a deleted category group.
  • Fixed a bug in Craft Pro where users without permission to edit users were getting redirected to the user index after editing their own account settings.
  • Fixed a bug in Craft Pro where users without permission to edit users were still able to access the user index.
  • Fixed a bug where browsers could still load old cached assets if they lived in a remote source with caching enabled, and the asset had been changed more than once in the same day.
  • Fixed a PHP error that would occur when calling AssetFileModel::getMimeType().
  • Fixed a couple Redis cache connection bugs.

Craft 2.0.2535 #

Released on Apr 14, 2014

  • Added ElementsService::deleteElementsByType().
  • Added TasksService::getPendingTasks().
  • Added an optional $type param to TasksService::areTasksPending() and getNextPendingTask().
  • The upgrade promo is now only shown on the Settings page if you’re running Craft Client.
  • Craft no longer creates additional Delete Stale Template Caches tasks if one is already pending, when saving and deleting elements.
  • Craft no longer creates additional Resave All Elements tasks if one is already pending, when adding new site locales.
  • The default error message templates will now show the actual error message, if one is provided.
  • Updated MigrationHelper::makeElemental for Craft 2, and gave it $hasContent, $isLocalized, and $locales arguments.
  • Fixed a bug where the {% redirect %} tag would not immediately end the request.
  • Fixed a bug where Matrix block type settings could get cut off.
  • Fixed a PHP error that broke Resave (All) Elements tasks if there were any orphaned Matrix fields in the database (Part 2).
  • Fixed a MySQL error that could occur if a ton of element IDs were passed into a ‘relatedTo’ param.
  • Fixed a JS error that would occur when selecting an image with a transform in a Rich Text field.
  • Fixed a bug where the default text for a new field group’s name was “undefined”.
  • Fixed a bug where uninstalling a plugin that has element types would leave its element’s rows around in the database.

Craft 2.0.2533 #

Released on Apr 11, 2014

  • Fixed a very serious bug where an extra 14px of padding was getting added to the top of some elements in the CP.

Craft 2.0.2532 #

Released on Apr 11, 2014

  • Added a ‘slug’ route token.
  • The date-picker for CP date fields is now localized for the same locales the CP is translated into.
  • The time-picker for CP time fields is now localized for the same locales the CP is translated into.
  • Asset source names, category group names, section names, tag group names, and user group names in sidebar source lists can now be translated.
  • Field names and instructions on element edit pages can now be translated.
  • Global set names in Setting → Globals can now be translated.
  • URLs, URIs, and paths are now always displayed as LTR, even for RTL languages.
  • Craft no longer horizontally flips graphics for RTL languages. Dedicated RTL graphics are now being used where appropriate.
  • Route tokens are now always displayed in English.
  • The ‘>’ icon now uses the “rightangle” ligature.
  • The ‘go’ icon now uses the “circlerarr” ligature.
  • The ‘→’ icon now uses the “rarr” ligature.
  • The ‘←’ icon now uses the “larr” ligature.
  • Entry URI validation errors are now exposed below the Slug field.
  • Cleaned up button styles throughout the CP.
  • Improved credit card error handling in the upgrade modal.
  • Fixed a PHP error that broke the Feed widget and craft.feeds in the templates on servers with openbase_dir restrictions in effect and the idna_convert class installed in the server’s path.
  • Fixed a PHP error that could occur when editing Rackspace asset source settings.
  • Fixed a PHP error that broke Resave (All) Elements tasks if there were any orphaned Matrix fields in the database.
  • Fixed a PHP error that could occur in some user registration scenarios.
  • Fixed a MySQL error that could occur when updating to Craft 2 with a database that already had a ‘taggroups’ table.
  • Fixed a bug where the Recent Entries widget wouldn’t show any entries on Craft Personal.
  • Fixed a bug where subfolders were not accessible from asset selection modals, even if the field was not set to be restricted to a single folder.
  • Fixed a bug where the ‘nb_no’ locale was required to see the Norwegian CP translation, rather than just ‘nb’.
  • Fixed a bug where many locales were getting 2-digit years in CP date fields, rather than 4-digit.
  • Fixed several UI glitches throughout the CP for RTL languages.
  • Added some missing translation strings.
  • Fixed several UI glitches throughout the CP due to a change in Chrome 34.
  • Fixed a CSS glitch on the loading state of the submit buttons in the installer.
  • Fixed a bug where the Edit User page got a “Users” breadcrumb on Craft Personal and Craft Client, which would lead to a 404 if clicked on.
  • Fixed a bug where clicking next to (but outside of) the upgrade promo in the CP footer would still open the upgrade modal.
  • Fixed some references to Craft 1.x packages in the code.

Craft 2.0.2528 #

Released on Apr 7, 2014

  • Updated Craft’s CP translations to include all the new edition-related strings.
  • Passwords can no longer be more than 160 characters, preventing a potential DDOS attack vector with blowfish hashing.
  • Fixed a 404 error when loading entry drafts or versions on Craft Pro.
  • Fixed a CSS glitch on the Client-to-Pro upgrade purchase screen.
  • Fixed a bug where the user’s preferred locale wasn't being respected in some cases.
  • Fixed a couple timezone-related bugs when saving dates/times.
  • Fixed a MySQL error about the ‘name’ column being ambiguous when fetching tags with craft.tags.
  • Fixed a bug where Live Preview would get a black bar between the two panes on Windows browsers.
  • Fixed a z-index issue with Rich Text fields that have fixed toolbars.
  • Fixed a bug where non-admins could still see the Get Help widget if they already had it selected.
  • Re-disabled Twig’s C extension, which causes issues.

Craft 2.0.2527 #

Released on Apr 4, 2014

  • “section” is now a reserved field handle.
  • Lightened up the box shadow around submit buttons so they don’t look blurry.
  • It is now possible to zoom in on the Control Panel from mobile devices.
  • Removed any empty action="" attributes from <form>s, which it turns out is against HTML spec.
  • Added “toolbarFixedBox: true” to the default Simple.json and Standard.json Redactor configs in craft/config/redactor/. (Note this will only affect new installs.)
  • Fixed a bug where saving an element on a non-primary locale would override the element’s search keywords for the primary locale.
  • Fixed the Rebuild Search Indexes tool.
  • Fixed a bug that broke dynamic subfolder paths in Assets fields set to upload to a single folder, for new installations of Craft.
  • Fixed a Twig error that would occur if saving a user account with a validation error on Craft Personal or Craft Client.
  • Fixed a bug where dropdown menus in Rich Text fields would get clipped if they extended beyond their containing pane.
  • Fixed several z-index conflicts between Rich Text fields and everything else.
  • Fixed a bug where unordered lists wouldn’t get bullets in Rich Text fields.
  • Fixed a bug where the Redactor toolbar didn’t get a background or drop shadow when in “fixed” mode.
  • Fixed a bug where Category Groups’ Max Levels settings be hidden if the “Categories in this group have their own URLs” setting was unchecked.
  • Fixed a bug that broke category selection in Live Preview.
  • Fixed a bug where parent categories that were automatically selected in a Categories field due to being ancestors of the actually-selected category would not become disabled in the modal window.
  • Fixed a bug where Categories fields were displaying categories in the current application locale, rather than the field’s target locale.
  • Fixed a bug where elements that were chosen but not actually selected in a modal window due to the field’s Limit setting would still get disabled in the modal.
  • Fixed a bug where Structure entries and categories would still appear “active” after being selected and disabled in a modal window
  • Fixed a bug where expanding an asset source’s folder could just give the sidebar a scrollbar, rather than increasing the size of the pane.
  • Fixed a bug where some panes could have scrollbars for no good reason.
  • Fixed a bug where manually updating Craft or a plugin while logged out and while the system was offline would make it impossible to complete the update, leaving you stuck at the “Finish Up” screen forever.

Craft 2.0.2525 #

Released on Apr 3, 2014

  • Craft is now a little more graceful when running its “Resaving all elements” task, if it encounters an entry that doesn’t have a title set.
  • Fixed a MySQL error about a missing “craft_{{users}}” table that occurred when some people attempted to update to Craft 2.
  • Fixed a bug where a migration might fail during an update if Craft was set to not use a database table prefix.
  • Fixed a bug where the database rollback might not work after a failed Craft update if the craft_info table schema had changed during the update.
  • Fixed a MySQL error about how the “craft_taggroups” table already exists that could occur if a Craft 2 update failed, and the DB rollback failed, and the DB backup was restored on top of the existing database, rather than clearing all the tables first.
  • Fixed a MySQL error when updating to Craft 2 if the rackspaceaccess table didn't exist.
  • Fixed a bug where Craft wouldn’t install/run if it was put on a UNC network share that started with “\”.
  • Fixed a bug where the spinner wouldn’t show up when updating Craft or a plugin.
  • Fixed a JS error when attempting to use any of the tools in Settings.
  • Fixed a JS error when uploading a Logo or User Photo.
  • Fixed a JS error when changing the Entry Type on an existing entry.
  • Fixed a Twig error on the Recent Entries widget if one of the entries didn’t have an authorId.
  • Fixed a PHP error on the Edit Entry page if editing a Channel/Structure entry that didn’t have an authorId.
  • Fixed a couple bugs with which options were available to the Craft edition upgrade modal under certain circumstances.
  • Fixed a bug where the Save button could be positioned incorrectly after changing switching an Entry Type.
  • Fixed a z-index conflict when a Date/Time field was placed right before a Rich Text Field in a field layout.
  • Fixed a misleading deprecation error message that was logged if a plugin called Craft::getBuild().
  • Fixed the page title on the /admin/whats-new page, which still said, “What’s new in Craft 1.3”.

Craft 2.0.2524 #

Released on Apr 1, 2014

Big Stuff

  • Craft is now available in three editions: Personal, Client, and Pro. See buildwithcraft.com/pricing for the details and a FAQ.
  • Craft’s Control Panel has been redesigned, featuring a wider max width, a new layout system that offers more modularity and responsiveness, full right-to-left language support, and countless subtle improvements.
  • Craft’s Control Panel is now translated into Arabic and Norwegian.
  • Added Category management and a Categories field type.
  • Added support for APC, database, eAccelerator, Memcache(d), Redis, WinCache, XCache, and Zend Data-based caching, which can be enabled via the new cacheMethod config setting.
  • Added partial template caching support via the new {% cache %} tag.
  • Added background task support.

General

  • Added a localizable siteUrl config setting, which takes precedence over the Site URL setting in General Settings and the CRAFT_SITE_URL constant.
  • Added a slugWordSeparator config setting, for specifying the string used to separate words in auto-generated slugs.
  • Added an addTrailingSlashesToUrls config setting.
  • Added an errorTemplatePrefix config setting for defining the path prefix to HTTP error code templates, like 404.html.
  • Added a privateTemplateTrigger config setting, for customizing the template/folder name prefix that marks a template path as private.
  • Added an extraAllowedFileExtensions config setting, for specifying additional allowed file extensions without overwriting the default allowedFileExtensions list.
  • Added an allowAutoUpdates config setting, which removes the “Update” button from the Updates page, leaving only the “Download” button.
  • Added a ‘cachePath’ file-based caching config setting, for customizing the directory that file caches get saved to. (Note that this would get saved in a new config file, craft/config/filecache.php.)
  • Added a “Max Blocks” setting to Matrix fields.
  • The Date field type has been renamed to Date/Time, and now has options to show the date only, time only, or date and time.
  • Craft now checks routes defined in both craft/config/routes.php and Settings → Routes on front-end site requests (so no more ‘siteRoutesSource’ config setting).
  • Environment-specific config arrays are now merged together recursively (so each matching environment config’s ‘environmentVariables’ array would be merged together, for example).
  • Craft’s default system email messages are now translated into the same languages Craft’s CP is translated into.
  • Matrix fields now remember the expanded/collapsed state of newly-created blocks.
  • MatrixBlockModel::getOwner() now returns the owner element in the same locale as the block.
  • Inner-word punctuation is now ignored when auto-generating handles, as they are with entry slugs.
  • “firstName” and “lastName” are now reserved field handles.
  • The resourceTrigger config setting’s default value has been changed from “resources” to “cpresources”.

Localization

  • Asset and Tag content is now translatable via their editor HUDs.
  • Added the ability to disable entries on a per-locale basis.
  • Added the ability to choose which sections’ locales should be enabled by default for new entries.
  • Added a localeEnabled param to craft.entries, which determines whether elements that are disabled for the current locale should be ignored (defaults to true).
  • Matrix fields are now translatable at the top level, so each locale can have its own set of blocks.
  • Relational fields (Entries, Categories, Assets, Users, and Tags) are now translatable at the top level, so each locale can have its own set of relationships.
  • Added a “Target Locale” setting to relational fields, for specifying which locale the related elements should be pulled from. (Defaults to the same locale as the source element.)
  • Added Template Localization support.
  • Added locale data for ar, ar_sa, de_at, de_ch, es_cl, fr_be, fr_ch, it_ch, and nl_be locales.
  • Routes can now be localized (whether they come from craft/config/routes.php or Settings → Routes).
  • Elements’ getUrl() methods now factor in the locale-specific site URL, if it's set via the new siteUrl config setting.

Control Panel

  • The CP now has full right-to-left language support.
  • Added support for multi-column Dashboard widgets.
  • The Dashboard will now alert admins about any new deprecation errors occurring in the system.
  • Added a new Status menu to the Entries and Users index pages.
  • Added a new Locale menu to the Entries and Assets index pages.
  • The Sections index now includes direct links to each sections’ entry types’ edit pages.
  • Added a new Find and Replace tool in Settings, for finding/replacing text within all Rich/Plain Text fields (including ones in a Matrix field).
  • The Clear Caches tool now has options for clearing RSS caches, template caches, asset transform indexes, and asset indexing data.
  • Added a new “Server Info” page to the CP’s hidden Utilities section, located at admin/utils/serverinfo.
  • Added a new “Deprecation Logs” page to the CP’s hidden Utilities section, located at admin/utils/deprecationlogs.
  • The CP now stretches to 1294px wide, with up to four columns.
  • The CP has a new layout engine that provides much more modularity and better responsiveness.
  • The update notification badge in the CP header is now automatically refreshed after clicking the “Check Again” button in the Updates widget, and after the Updates page finishes downloading the latest update info.
  • The Settings icon in the CP header now comes with a menu that has direct links to each of the Settings sub-pages.
  • Element selector modals now take up 2/3 of the browser’s width and height.
  • Modals with custom dimensions no longer need to specify a negative top- and left-margin.
  • Some modals can now be resized.
  • Live Preview’s editor pane can now be resized.
  • Redesigned the Edit Entry page.
  • After saving an entry, the browser is redirected to the entry’s section’s index, rather than the index of the last-viewed section.
  • Redesigned the Edit User page.
  • Cleaned up the remote asset source settings.
  • Redesigned the Get Help widget, and added the ability to include your craft/templates/ folder in the support ticket.
  • The default value for the “Attach DB backup?” checkbox in the Get Help widget is now based on the ‘backupDbOnUpdate’ config setting.
  • Redesigned Lightswitch fields to be even simpler.
  • The columns within Matrix field settings now auto-expand to match the tallest columns’ height, so they no longer have inner scrollbars.
  • Turned that plugin icon’s frown upside down.
  • Removed excessive punctuation symbols in some of the language.
  • Moved the entry type field layout editor onto the same tab as the other entry type settings.
  • The site name in the CP can now be translated using Craft’s static translation support.
  • The Preferred Locale user setting now shows locales in the current language.
  • Locale names are now displayed in English if the requested translation is not available
  • Entry and Asset selection modals within Rich Text fields now respect the currently-selected locale.
  • Element selector modals no longer show the sidebar if there’s only one source to choose from.
  • Manually downloading Craft updates now happens over SSL if the CP is also being accessed over SSL.
  • Added Command/Ctrl + S support to the plugin settings page.

Users

  • Added the ability to create a “Client’s account” if Craft Client edition is installed.
  • Admins can now log in as other users.
  • Added a new “Verify email addresses?” user setting, which is enabled by default, and determines whether new user email addresses need to be verified before they get applied to the account, if set by a non-admin. (This also affects new user registration.)
  • Admins now have the option to bypass email verification when registering new users.
  • Added a new “Assign user groups and permissions” permission.
  • Users with permission to administrate users are no longer allowed to administrate Admin accounts.
  • It is now possible to set a user’s profile fields, group assignments, and permissions, during user registration.
  • The Users index page now has dedicated First Name and Last Name columns.
  • The string representation of a User is now always their Username. (Previously it would be their First/Last Name, if set.)
  • It is now possible to save a user’s account info, profile data, and photo from a single form that posts to the ‘users/saveUser’ action.
  • It is now possible to clear out a user’s avatar through the ‘users/saveUser’ action, via an input named “deleteUserPhoto” set to anything.

Entries

  • Added support for dynamic entry titles.
  • Double-clicking on entries within Entries fields will now show an editor HUD, just like assets, tags, and categories.
  • Entry URL Formats are no longer required to have a {slug} token.
  • Entry slugs no longer have to be unique within a section; only the resulting entry URI does. (Slugs are still automatically adjusted to find a unique URI, though.)
  • Improved the auto-slug generation for entries whose titles contain inner-word parentheses, square brackets, curly brackets, and colons.
  • Entry content validation no longer gets run when saving a disabled entry.
  • Entries within a Structure section now have a “level” instead of a “depth”. (Referring to it as “depth” will still work, but it has been deprecated.)
  • When an entry in a Structure section is deleted, its descendants are now moved up a level, rather than getting deleted.
  • Singles no longer get a Title field, since that should only be set from the section settings.
  • craft.entries’ section param now supports passing in a SectionModel object.
  • EntryModel::getAncestors(), getDescendants(), getChildren(), and getSiblings() now return ElementCriteriaModels prepped to return entries that match what the function names suggest. That means it’s now possible to add additional parameters, such as entry.getChildren().type('media').

Assets

  • Each asset source now has its own field layout.
  • Added a Quality setting to image transforms.
  • Added a Cache Duration setting to Amazon S3 asset sources.
  • Added “Upload files”, “Create subfolders”, and “Remove files” user permissions for each asset source.
  • Added support for animated GIFs (requires Imagick)
  • Added the ability to restrict Assets fields to only allow certain types of files.
  • Added the ability to restrict Assets fields to a single folder, which can include dynamic variables, such as “{id}” for the current element’s ID.
  • Added support for drag-n-drop file uploading on Assets fields, the Assets index page, and asset selection modals.
  • Added the ability to create new subfolders from Asset selection modals.
  • Added support for uploading files to Assets fields using normal HTML file inputs on front-end forms.
  • Added the ability to set a default upload folder for Assets fields, which is used when uploading via drag-n-drop, or normal HTML file inputs. This setting can also include dynamic variables.
  • Added AssetFileModel::getSource() for getting information about the asset’s source.
  • Added AssetFileModel::getMimeType().
  • Added AssetFolderModel::getParent() for getting the parent folder.
  • Files that begin with an underscore can now get indexed.
  • Craft now supports Rackspace’s authentication API 2.0.
  • Craft now shows a progress bar while uploading files from within Assets fields.
  • Craft now uses clearer wording on the action buttons when dealing with asset filename conflicts.
  • When an asset is replaced by another existing asset, any relations or reference tags pointing to the merged asset now get updated to point to the prevailing asset instead.
  • Simplified and sped up the image transform process, getting rid of the need for the ‘generateTransformsAfterPageLoad’ config setting.
  • It’s no longer possible to accidentally move more than one asset subfolder at the same time.
  • AssetFolderModel’s “fullPath” attribute has been renamed to “path”.

Tags

  • Tag Sets are now called Tag Groups.
  • It is now possible to edit tags’ names from their editor HUDs.
  • Tags fields now make it clear that the top item in the “Add a tag” menu is going to be a new tag, if an exact match wasn’t found.
  • Tags fields now create new tags right away, so their content is immediately editable.

Templating

  • Added the {% cache %} tag.
  • Added the ucwords filter.
  • Added craft.request.getPageNum(), which returns the current pagination page.
  • Added craft.config.get(), which can be used to fetch config settings from alternate config files.
  • Added craft.fields.getFieldByHandle().
  • Added support for passing “:empty:” and “:notempty:” to ElementCriteriaModel parameters when you’re looking for empty/non-empty values.
  • craft.session.getFlash() and getFlashes() now support a new argument that determines whether the flash messages should be deleted on retrieval (defaults to ‘true’).
  • The number filter now accepts an argument which can be set to ‘false’ to disable group symbols (e.g. commas in English) in the formatted number.
  • The currency filter now accepts a second argument, which when set to ‘true’ will strip any right-of-decimal digits if there are zero cents.
  • Added a 4th argument to craft.feeds.getFeedItems() for customizing how long the results should be cached for. (The default is still the same as the ‘cacheDuration’ config setting.)
  • The first pagination page URL no longer has a /p1 at the end.
  • Beginning a criteria parameter with “and” or “or” no longer needs to be case sensitive.
  • Front end element forms no longer need to include every last field’s input. If a field is omitted, its value will be left alone.

General Dev Changes

Control Panel Dev Changes

  • Any pane in the CP can now have a sidebar, and you can even have a pane with tabbed sidebars + content.
  • Added “info” icon + HUD support to the CP, via <span class="info">…</span>.
  • Added a new table.inputs CSS class for displaying a row of UI elements.
  • Added an _elements/structure.html include.
  • Added <h4> and <h5> CSS styles.
  • Added Craft.getElementInfo() Javascript method.
  • Added Craft.getLocalStorage() and setLocalStorage(), for saving and retrieving Javascript objectFs to the browser’s local storage, in a way that is tied to that specific Craft install in the event that multiple Craft installs live on the same domain.
  • The CP orientation (‘ltr’ or ‘rtl’) is now available to CP Javascript via Craft.orientation.
  • Added Craft.queueActionRequest().
  • Added Craft.LivePreview, replacing Craft.EntryPreviewMode.
  • Plugin settings now get output within a {% namespace %} tag pair, so the namespace is available to getSettingsHtml().
  • Modals are now 2/3 the browser’s width and height by default, unless a “fitted” class has been added to their container.
  • <table class="data">s no longer have 100% width by default. (Use the fullwidth class if that’s desired.)
  • Checkbox inputs now have a ‘checkbox’ class.
  • Collapsible tables are now only responsive on mobile devices (not including tablets).
  • It is now possible for a .fieldtoggle input to work in normal and reverse mode on separate elements. (Note that the data-reverse-target HTML attribute should now be set to the reverse-toggled selector, not just a “1” in conjunction with the data-target attribute, like before.)
  • Field-toggling dropdown inputs can now target elements based on their class name, by prefixing the option values or the ‘targetPrefix’ setting with a period.
  • Renamed Craft.language to Craft.locale for the CP Javascript.
  • Craft.postActionRequest()’s ‘options’ argument now accepts a ‘send’ callback function, which gets run immediately after the Ajax call is submitted.
  • Columns based on records’ AttributeType::ClassName attributes are now VARCHAR(150) rather than CHAR(150).

Element Type Dev Changes

  • Plugins can now provide their own Element Types.
  • Added ElementsService::saveElement() which handles all of the routine tasks that go along with saving elements, including saving their content and updating search indexes.
  • Added ElementsService::mergeElementsById(), for merging an element into another, and having the merged element’s relations and reference tags updated to point to the prevailing element.
  • Added ElementsService::getEnabledLocalesForElement().
  • Added a $localeId argument to ElementsService::getElementById(), EntriesService::getEntryById(), AssetsService::getFileById(), TagsService::getTagById(), GlobalsService::getSetById(), and MatrixService::getBlockById()
  • Added an $indexBy argument to AssetTransformService::getAllTransforms().
  • Added an ‘elements.onPopulateElement’ event that gets fired right after an element is populated from the DB, which passes ‘element’ and ‘result’ parameters to whoever’s listening.
  • ContentService has been completely refactored and simplified, and is no longer something element types need to worry about if they are using ElementsService::saveElement().
  • RelationsService has been completely rewritten.
  • Added BaseElementType::getStatuses(), for defining which statuses should show up in the element’s indexes’ Locale menus.
  • Added BaseElementType::getSource() for getting info about a source by its key.
  • Added BaseElementType::getIndexHtml(), giving element types a chance to customize their index HTML.
  • Added BaseElementModel::getContentFromPost() for getting the raw post data for an element’s content, if it is known.
  • Added BaseElementModel::setContentFromPost(), which more or less replaced ContentService::prepElementContentForSave(), but also allows you to simply pass the location of the fields in the post data (e.g. “fields”).
  • Added BaseElementModel::getContentPostLocation() and setContentPostLocation() for getting/setting the location the element’s content fields exist in the post data.
  • Added BaseElementFieldType::getInputSources(), giving child classes a chance to customize the sources.
  • Added BaseElementFieldType::getInputSelectionCriteria() for returning parameters that should limit which elements can be selected.
  • Added BaseElementType::onAfterMoveElementInStructure().
  • Added BaseElementFieldType::getInputTemplateVariables().
  • Added FieldsService::assembleLayout().
  • Added FieldLayoutModel::getFieldIds().
  • Added StructuresService, for creating and managing structures of elements.
  • Added CacheService, which provides a consistent API for saving and retrieving data caches, regardless of the chosen caching method.
  • Added TemplateCacheService class, with methods for clearing template caches.
  • Added ElementHelper, with some handy methods for dealing with elements.
  • Added BaseEnum, with isValidName() and isValidValue() static methods.
  • Added craft()->getTranslatedBrowserLanguage().
  • Added craft()->db->getNormalizedTablePrefix().
  • Added the Craft.Structure Javascript class.
  • Added Craft.BaseElementSelectorModal::addButton() for adding new buttons to element-selecting Javascript modals.
  • Craft.BaseElementSelectInput now provides several more opportunities for customization by subclasses.
  • ElementsService::getElementTypeById() now accepts an array of element IDs, and if that’s what it gets, an array of element type classes will be returned.
  • Dropped ElementsService::getElementLocaleRecord().
  • Slugs and URL formats are now central element concepts, rather than entry-specific.

Third Party Libraries

  • Updated jQuery to 2.1.0.
  • Updated jQuery UI to 1.10.4.
  • Updated jquery.fileUpload to 5.40.1.
  • Updated jquery.timepicker to 1.3.5.
  • Updated Redactor to 9.2.1.
  • Updated qUnit to 1.14.
  • Updated Guzzle to 3.8.1.
  • Updated Twig to 1.15.1.
  • Updated PHPUnit to 4.0.9.
  • Updated PHPUnit dependencies to their latest versions.
  • Updated Mockery to 0.9.

Bug Fixes

  • Fixed a bug where relational fields’ Limit settings weren’t getting enforced at the PHP level.
  • Fixed a bug where entry versions weren’t saving Matrix field data properly.
  • Fixed a bug where Matrix fields wouldn’t use the menu-style “Add Block” buttons on page load, if the Matrix field was on the first content tab.
  • Fixed a bug where it wasn’t possible to edit newly-created tags’ content until the form was saved.
  • Fixed a bug where Craft would show a new user registration page if accessing the edit page for a user that doesn’t exist.
  • Fixed a bug where saving a Single section’s entry type would redirect you to the section’s entry type index, even though there can only be one of them.
  • Fixed a bug where if you defined a custom title label other than “Title” for an entry type, any validation error message would still use the word “Title”.
  • Fixed a bug where the “Delete other authors’ entries” permission wasn’t being enforced.
  • Fixed a CSS glitch with the wildcard route token.
  • Fixed several known issues with the CP’s mobile/responsive support.
  • Fixed a MySQL error that could occur due to ordering by an ambiguous ‘dateCreated’ column.
  • Fixed a bug where craft.feeds.getFeedItems() was ignoring the passed-in offset.
  • Fixed a PHP error that could occur when passing a “raw” string into an asset’s getUrl(), getWidth(), or getHeight() methods.
  • Fixed a bug where Craft could accidentally load a CP template on the front end if a front end template shared the same path, and a plugin had loaded the CP template first.
  • Fixed a bug where clicking outside of an HUD in the CP would only close the HUD the first time.
  • Fixed a bug where passing ‘true’ into DbHelper::parseParam() wouldn't do anything.
  • Fixed a bug where thumbnails would break for external sources, if the original images were missing.
  • Fixed a bug where the ‘maxCachedCloudImageSize’ config setting was not being respected.
  • Fixed a bug where uploaded images were not getting cached properly.
  • Fixed a bug where files in Assets were not being replaced properly unless they were images.
  • Fixed a bug where setting parameters on an ElementCriteriaModel object could unexpectedly affect the same ElementCriteriaModel further down in the template.
  • Fixed a bug where if you specified more than 3 digits in a Number field types decimal settings, only 3 would be displayed in the input.

Craft 1.3.2507 #

Released on Mar 14, 2014

  • Fixed a bug where the current user would not be available in the Author menu for entries that were authored by someone else.
  • Fixed a PHP error when Craft is connected to Amazon S3 and open_basedir restrictions are in place.
  • Fixed a bug where underscores in entry slugs would get replaced with hyphens.
  • Fixed a PHP error when saving a date field that had a time filled in but no date.
  • Fixed a MySQL error that could occur due to ordering by an ambiguous ‘dateCreated’ column.

Craft 1.3.2496 #

Released on Feb 27, 2014

  • Made it possible for users to validate their accounts through the CP when the site is offline.
  • craft->on() now works when running Craft from the command line.
  • Fixed a bug where removing a locale from a section would remove that locale from all the sections.
  • Fixed infinite scrolling on the Entries, Users, and Assets indexes in some browsers.
  • Fixed a bug where Plain Text and Table fields could have incorrect dimensions if they live on a secondary content tab.
  • Fixed PHP error that could occur when renaming a file but omitting its extension.
  • Fixed a bug where anyone could access the front end login page when the site was offline.

Craft 1.3.2494 #

Released on Feb 24, 2014

  • The ‘entries/saveEntry’ action now supports passing a “fieldsLocation” GET/POST param, specifying where the fields’ post data can be found. (It’s “fields” by default.)
  • Number field inputs no longer show group symbols (e.g. commas every 3 digits in English).
  • Exact match searching is now case insensitive.
  • Improved the performance of image uploading in some scenarios.
  • Element selector modals and element indexes now scroll back to the top when loading a fresh batch of elements.
  • Updated Craft’s Amazon S3 library to the latest version, which fixed bucket fetching on PHP 5.5.
  • craft()->numberFormatter now points to an extended NumberFormatter class, which overrides formatDecimal() to add a new $withGroupSymbol argument (defaults to true).
  • Fixed a bug where tags that were first created within a Matrix field would be inaccessible, and result in MySQL errors when used.
  • Fixed a bug where tag search results would look beyond just the tag names if multiple words were searched for.
  • Fixed a bug where the ‘actionTrigger’ config setting wasn’t being respected in verification emails.
  • Fixed an error that could occur after user activation, if the user registered on the front end, but belonged to a user group that granted them CP access.
  • Fixed a MySQL error that would occur when 2+ ElementCriteriaModel’s were passed into the ‘relatedTo’ element criteria param.
  • Pruned some rows out of Matrix fields’ content tables that didn’t belong to Matrix blocks.
  • Fixed some Javascript conflicts when two Quick Post widgets were displaying entry forms that shared the same fields.
  • Fixed a bug where PHP could time out when image were being uploaded.
  • Fixed some box shadow styles for Firefox.

Craft 1.3.2487 #

Released on Feb 13, 2014

  • The search syntax now supports using asterisks in combination with double colons, for fuzzy searching against an attribute’s full value. For example, a search for “title::a*” will give you entries where the entire title begins with ‘a’, not just any word within the title.
  • Added EntriesService::deleteEntry() and deleteEntryById().
  • Added ‘beforeShowPreviewMode’, ‘showPreviewMode’, ‘beforeHidePreviewMode’, and ‘hidePreviewMode’ JS events to Craft.entryPreviewMode.
  • Rich Text fields now disable Redactor’s code view when entering/exiting Live Preview, due to a visual glitch that could occur if code view remained open.
  • Added a migration to clean up any potential gaps in structures.
  • Models’ and records’ “Number” attributes are no longer automatically converted to the English number format when calling validate() or save(). It is now up to the business logic to pass localized numbers through LocalizationHelper::normalizeNumber() on their own.
  • Fixed a bug where search results would get returned with the lowest-scoring elements listed first, when setting the ‘order’ parameter to “score”.
  • Fixed a bug where the Field Layout Designer wouldn’t get the right font when the CP was loaded over SSL.
  • Fixed a bug where UserModel::getName() would return the user's first/last name even if those fields only contained whitespace.
  • Fixed a bug where EntryModel’s getNextSibling(), getPrevSibling(), isNextSiblingOf(), and isPrevSiblingOf() could return incorrect results. (This time we mean it!)
  • Fixed a bug where integer-only Number fields could get a false validation error when submitting an integer from a locale that uses a non-comma group symbol (e.g. 1.000 in German).
  • Fixed a MySQL error that could occur when saving a Matrix field, if one of its sub-fields had been renamed, and a new sub-field was created with the other’s original name, at the same time.
  • Fixed a bug where you couldn’t delete a field if it used a custom field type provided by a plugin that was no longer installed.

Craft 1.3.2486 #

Released on Feb 10, 2014

  • Fixed a PHP error that could occur if Craft was trying to serve a resource which had been moved or deleted.

Craft 1.3.2485 #

Released on Feb 8, 2014

  • Added HeaderHelper::isHeaderSet().
  • Made major CP performance improvements when Dev Mode is disabled.
  • Number fields now use the user’s preferred locale’s number format.
  • Users with permission to administrate other users are no longer allowed to delete, suspend, unsuspend or unlock others’ Admin accounts.
  • If the Content-Type header is already set when rendering a template, Craft will no longer override it.
  • Included some improved CP translations.
  • Fixed a MySQL error that could occur when adding new Dashboard widgets.
  • Fixed a bug where HeaderHelper::removeHeader() would literally not do anything.
  • Fixed a bug where Set Password forms on the front end wouldn’t get a validation error if the password was too short.
  • Fixed a bug where Set Password forms on the front end would redirect the user to the CP after setting the password even if they didn't have CP access.
  • Fixed a bug that could prevent asset folders from being moved.
  • Fixed a bug where Craft could thinks a tag doesn't exist when it does.
  • Fixed a PHP warning that could occur when a plugin’s folder name didn’t match the identifying part of its class name.
  • Fix a bug in DateTime::diff() where you would get an invalid time format if the interval was less than one second.
  • Fixed a bug where locales would not have a name if the name wasn’t available in the requested locale.
  • Fix the sort order of the Locale menu on the edit entry page.
  • Fixed a PHP error that could occur when someone attempted to edit an entry in a section where they didn’t have permission to edit the section's first locale.
  • Fixed a bug where the Get Help widget wasn’t validating that the From Email and Message fields were filled in.
  • Wired up some CP translations that were previously MIA.

Craft 1.3.2473 #

Released on Jan 21, 2014

  • Field instructions are no longer HTML-encoded.
  • Fixed a bug where certain authors might not be excluded in the entry Author menu.
  • Fixed a bug where EntryModel’s getNextSibling(), getPrevSibling(), isNextSiblingOf(), and isPrevSiblingOf() could return incorrect results.
  • Fixed a MySQL error when converting a Structure section to a Channel when MySQL was in strict mode.
  • Fixed a bug where the auto-updater wouldn’t delete old files like it was told.
  • Fixed a bug in admin/utils/phpinfo where some values were being displayed as “Array” instead of their actual values.

Craft 1.3.2465 #

Released on Jan 13, 2014

  • Updated the ‘month’ and ‘day’ route token regular expressions so that 1-9 no longer require a ‘0’ prefix. (Note that existing routes with a ‘month’ or ‘day’ token will need to be edited, with the tokens removed and re-added, before the change will take effect.)
  • Craft will now attempt to max out PHP’s memory limit if it thinks it needs to in order to load an image.
  • ImagesService::setMemoryForImage() has been renamed to checkMemoryForImage().
  • The translations provided by Yii are now included in Craft’s translation detection script.
  • HttpRequestService::getQuery(), getRequiredQuery(), and getParam() (as well as their craft.request.* counterparts) can now return arrays, and support the dot notation for fetching nested array values.
  • Updated Redactor to 9.1.9.
  • Fixed a bug where if a Matrix field had two block type fields with the same handle, only the last one saved would ever be able to remember its content values.
  • Fixed a bug where Lightswitch fields wouldn’t work immediately after switching an Entry Type; you had to re-save the entry and come back to it.
  • Fixed a bug where EntryModel::getAncestors() and getDescendants() would treat the ‘dist’ argument as a limit, contrary to the docs.
  • Fix a bug where searching for ‘fieldHandle:value’ would return incorrect results if there was no match found.
  • Fixed a bug where Craft would think it had enough memory to load images when it might not have.
  • Fixed a bug where HttpRequestService::getParam() would return the default value if the desired value was set but equated to false (e.g. ‘0’).
  • Fixed a bug where a <td class="right"> wouldn’t get right-aligned text if it was within a <table class="data">

Craft 1.3.2462 #

Released on Dec 30, 2013

  • Added an ‘admin’ user criteria parameter for filtering users by whether they are admins.
  • Added a ‘can’ user criteria parameter for filtering users by whether they have a given permission.
  • Entries’ “Author” settings now only list users that have permission to create entries in current section.
  • Rich Text fields now remove <font> tags if the “Clean up HTML?” setting is enabled.
  • Rich Text fields now remove inline styles from more tags if the “Clean up HTML?” setting is enabled.
  • More template-based errors are now showing the misbehaving template file’s source in Dev Mode error reports.
  • Lightswitch fields now save a “0” search keyword when saved in the “No” position.
  • When adding new entries to an Entries field that’s attached to an entry, the source entry is now visible (but disabled) in the modal, rather than removed altogether. (Ditto for users, tags, and assets.)
  • Craft now displays a more helpful error message on servers without PDO installed.
  • Timestamps are no longer a factor when Craft is determining which application/plugin migrations need to be run, fixing a race condition with plugin migrations.
  • Fixed a style conflict that occurred when a Date field was displayed right before an Entries/Users/Assets/Tags field.
  • Fixed Color fields within Matrix blocks and Asset/Tag content modals for browsers that don't support <input type="color">.
  • Fixed a visual glitch where entries would go missing if dragged from a Structure view for less than 200 milliseconds.
  • Fixed a PHP error when using a {% nav %} tag pair without a {% children %} tag within it.
  • Fixed a bug where users weren’t getting redirected to their originally requested URL after logging in.
  • Fixed a bug where users with an expired session had to log in twice.
  • Fixed a bug where the “Keep me logged in” checkbox wasn’t being respected.
  • Fixed a couple bugs with the default behavior of getPrev() on entries, users, assets, tags, and Matrix blocks.
  • Fixed a MySQL error when searching for elements with the ‘offset’ param, but no ‘limit’ param.
  • Fix a bug where Craft would choke when uploading .bmp files.
  • Fixed a MySQL error when searching for something like “title:foo OR title:barr”.
  • Fixed the vertical spacing of instructions on Checkbox fields.

Craft 1.3.2461 #

Released on Dec 8, 2013

  • Added Craft.getText().
  • Live Preview now gets refreshed after updating an asset or tag’s contents.
  • Craft now reattempts to generate image transforms if more than 30 seconds have passed since the previous attempt.
  • Fixed a bug that prevented image transforms from getting generated.
  • Fixed a PHP notice that would occur when uninstalling a disabled plugin.
  • Fixed a bug where Matrix fields’ “Add block” buttons wouldn't collapse into a menu button when entering Live Preview if they were too wide to fit in the editor pane.
  • Fixed a bug where Rich Text field contents weren’t showing up in collapsed Matrix block previews.

Craft 1.3.2459 #

Released on Dec 7, 2013

  • Improved the way Craft keeps track of database migrations.
  • IOHelper::getFolderContents() now accepts a parameter for including hidden files.
  • Plugin developer links now open in a new window.
  • Fixed a bug where Craft wouldn't remember the default parent entry when clicking an “Add child” link within a Structure section.
  • Fixed a bug where cURL requests that originated from a PHP script would require a user agent string to be set.
  • Fixed a bug where Craft would choke if you tried to upload an .svg file.
  • Fixed a bug where the craft/plugins/ and craft/storage/ folders weren't getting included in the release.

Craft 1.3.2456 #

Released on Dec 2, 2013

  • Added Craft.encodeUriComponent() for a JS-facing replica of PHP’s rawurlencode().
  • Added a ‘readonly’ option to _includes/forms/text.html.
  • If Imagick is installed, but has a version less than 6.2.9, Craft will now try to use GD instead of throwing an error.
  • Twig’s date() function and date/date_modify filters now use the site’s timezone.
  • The Quick Post widget no longer shows the Entry Type setting if there’s only one entry type.
  • This update patches missing locale-specific rows in the elements_i18n and content tables.
  • Fixed a bug where editing a Structure entry with a disabled parent would lose its parent on save.
  • Fixed a bug where a new tag might not save if there was already an existing tag with a similar (but not identical) name.
  • Fixed a bug where newly uploaded assets wouldn’t save properly if assets have a required field.
  • Fixed a bug where Checkboxes, Dropdown, Multi-select, Radio Buttons, and Table fields would lose their posted values if there was a validation error when saving a brand new entry.
  • Fixed a bug that could result in having two field layout content tabs with the same name, if that name included !, *, ', (, or ) characters.
  • Fixed a bug where the getResourcePath() plugin hook wasn’t actually working.
  • Fixed a bug where Lightswitch inputs were inconsistently posting values of ‘y’ and ‘on’.
  • Fixed a bug where Rich Text fields weren’t stripping out inline styles from <a> tags.
  • Fixed a bug where Craft wasn’t HTML-encoding titles on the entry index page.
  • Fixed a FOUC bug with Firefox on pages with an autofocussed input.

Craft 1.3.2422 #

Released on Nov 15, 2013

  • The Revision dropdown on the Edit Entry page only shows the last 10 versions now, preventing the page from getting too memory hungry on entries with lots of past versions.
  • Fixed a bug where some textareas throughout the CP could lose their data when saved.
  • Fixed a bug where Rich Text fields could lose their changes if the Command/Ctrl+S shortcut was used while editing one in fullscreen mode.
  • Fixed a bug where Rich Text field menus were being cut off within Matrix fields.

Craft 1.3.2420 #

Released on Nov 15, 2013

  • The Assets index and Asset modals now show filenames with inner-word line breaks, so things don’t get too crazy.
  • The current template $context array is now passed by reference to template hooks.
  • Fixed a PHP error that could occur when running Craft in PHP 5.4 or later.
  • Fixed a DB connection error that could occur on servers where ‘localhost’ does not point to 127.0.0.1.

Craft 1.3.2419 #

Released on Nov 14, 2013

  • Fixed a couple issues with Matrix in Safari.
  • Fixed a bug where id= attribute values within Plain/Rich Text field content could get prepended with “field-.
  • Fixed a bug where the ‘unix_socket’ DB config param was being ignored.
  • Fixed a bug where non-admins couldn’t save global content if the Localize package wasn’t installed.
  • Fix a bug where an update might fail if it couldn't delete the contents of storage/runtime/assets/icons/.
  • Fixed a bug where passing multiple relation criteria to the ‘relatedTo’ element param, glued together with “and”, might not work.
  • Fixed a bug where the Entry Template section setting would get auto-updated when the section name changed on existing sections.
  • Fixed a PHP error that would occur when switching the Entry Type on an entry that had a Matrix field.

Craft 1.3.2418 #

Released on Nov 13, 2013

  • Added the ability to disable Matrix blocks.
  • Added the ability to collapse and expand Matrix blocks.
  • It is now possible to use the ‘search’ parameter on a Matrix field to find specific blocks using Craft’s search support.
  • Custom field instructions now support Markdown.
  • Matrix fields now store search keywords based on their blocks’ content.
  • Button menus are now at least as wide as their buttons.
  • When saving a revision, if there is no logged in user, Craft now defaults the revision creator to the entry’s author.
  • Filenames are now shown when viewing assets in the table view.
  • If a PHP error is directly caused by something a template is doing, Craft now shows the offending template in the error report when Dev Mode is enabled.
  • Fixed a MySQL error that could have occurred when adding a new block type field to a Matrix field, which has the same handle as a field that previously existed on the same block type.
  • Fixed a bug where Matrix fields would only show the first 100 blocks in the CP.
  • Fixed a bug where entry titles weren’t getting validated.
  • Fixed a bug where using ‘{id}’ in a section’s Entry URL Format wasn't working properly when saving a brand new entry.
  • Fixed a bug that could have prevented the Rebuild Search Indexes tool from indexing element content properly.
  • Fixed a PHP error that occurred when passing a concatenated string to the {% header %} tag.
  • Fixed a bug that prevented asset folders from getting renamed properly.
  • Fixed a PHP error that could occur if you were to update Craft at the exact moment when Craft decides it’s due for a new requirements check.
  • Re-disabled Twig’s C extension, which causes issues.

Craft 1.3.2416 #

Released on Nov 8, 2013

  • Fixed a bug that broke the entry edit page for sites without the Localize package installed.

Craft 1.3.2415 #

Released on Nov 7, 2013

  • Replaced the Delete icon within Matrix blocks with a Settings menu icon, which has options to create new blocks directly above the current block, and delete the current block.
  • Added Command/Ctrl+S support to the Globals section.
  • Added a new 'beforeSaveShortcut' event to Craft.cp.
  • The “Add block” buttons in Matrix fields now collapse into a menu button if there’s not enough room for them all on the page.
  • Added some missing translations.
  • Added ContentService::validateElementContent().
  • Cleaned up the asset file icons.
  • Failed model validations now get logged.
  • Fixed a bug that broke Live Preview.
  • Fixed a bug where assets wouldn’t show up anywhere after being uploaded in some cases.
  • Fixed a bug where you could change existing Matrix sub-field types to Matrix.
  • Fixed a bug where clicking control/command-S from within Live Preview would lose all changes made on the entry.
  • Fixed a bug where field validation would occur on fields that weren’t even in the layout being saved.
  • Fixed a PHP error that could occur when saving an element without a Matrix field attached to it
  • Fixed a PHP notice that could occur when Dev Mode was enabled and config/db.php had invalid credentials.
  • Fixed a bug where a structure's Max Depth setting could prevent other structures from adding new children from the Entries index page if they were both viewed on the same page load.
  • Fixed a bug where clicking Command/Ctrl+S when editing an entry draft would redirect to the live entry's edit page, rather than back to the draft.
  • Fixed a bug where Rich Text fields’ “Insert link” and “Unlink” menu options were being labeled as “undefined”.
  • Fixed a bug where non-image asset icons were only 30x30px in the thumbnail view.
  • Fixed a bug where non-image assets weren't getting icons at all on retina displays.
  • Fixed a bug where a plugins’ services wouldn't be available if they were listening to the onAfterInstall and onBeforeUninstall events.

Craft 1.3.2410 #

Released on Nov 7, 2013

  • Reversed the priority order that translation files are loaded, so more specific locales take precedence.
  • Added ‘size’ to the list of reserved field handle words.
  • Garnish.PasswordInput is now Craft.PasswordInput.
  • Fixed a bug where Craft’s requirement checker would not display the failed requirements list when attempting to install Craft.
  • Fixed some bugs with loading revisions for entries with Matrix fields.
  • Fixed a bug where newly-created Global Sets wouldn't show up anywhere.
  • Fixed a bug where two Matrix block type fields with the same handle could prevent one of them from being able to save content.
  • Fixed a bug where non-admins would get 500 errors when Craft was attempting to fetch update info over Ajax on CP requests.
  • Fixed bug where the Updates widget was selectable for users that didn't have update permissions.
  • Fixed a bug where the “Show” and “Hide” links weren’t getting translated for password inputs.
  • Fixed a PHP error when attempting to load .twig templates.
  • Fixed a PHP warning that could occur in IOHelper::getFolders() if glob() returned false.

Craft 1.3.2409 #

Released on Nov 5, 2013

The One

Control Panel

  • Added the ability to deep-link directly to a specific section on the Entries index page.
  • Added a “secret” new /utils section to the CP with PHP Info and Log Viewer utilities (only accessible by admin accounts).
  • Clicking on the Globals tab will now take you to the first global set’s full URL, rather than just /globals.
  • Editing global set content for a new locale now defaults to the primary locale’s content.
  • Element index pages and selection modals are now exponentially faster than they used to be.
  • The Get Help widget is no longer available to non-admins.
  • Image transforms are now ordered by name.

Elements

  • Added the ability to order by most custom fields when fetching elements, by passing the field handle into the ‘order’ param.
  • Added the ability to filter by most custom fields when fetching elements, by using the field handle as a param name.
  • Added the ‘relatedTo’ element param, replacing ‘chilfOf’ and ‘parentOf’. (The old params are still there, but deprecated.)
  • Added a ‘fixedOrder’ element criteria param. When set to ‘true’, Craft will return elements in the order defined by the ‘id’ param.
  • Added a last() output function to ElementCriteriaModel.
  • You can now treat ElementCriteriaModel objects as if they were arrays, without calling find().
  • Entries, Assets, Users, and Tags fields now return ElementCriteriaModel objects when you access their field values in the templates, so you can append additional parameters onto them before looping through them if you want, or use the first(), last(), and ids() output functions.
  • Made it possible to order elements by their relational field-defined order in some cases, by setting the ‘order’ param to “sortOrder”.
  • Element content is now loaded up front when fetching elements, reducing the number of SQL queries and page load time on most pages.
  • The ‘dateCreated’, ‘dateUpdated’, ‘postDate’, and Date field params now support prefixing the values with “<”, “>”, “<=”, or “>=”.
  • Field column names in the craftcontent DB table are now prefixed with “field” so they’re easier to distinguish from Craft’s core schema.

Templating

  • Added the ‘switch’ Twig tag.
  • Added the ‘header’ Twig tag.
  • Added the ‘indexOf’ template filter.
  • Outputting an AssetFileModel with a transform set (e.g. {{ myAsset.myTransform }}) now outputs the transform’s URL rather than the asset’s title.

Localization

  • Added support for Norwegian and Scandinavian locales.
  • Craft now looks for translation files that match the target locale’s language in addition to translation files that match the full locale. For example, the ‘fr_ca’ locale will now load both craft/translations/fr.php and fr_ca.php.
  • The ‘activateAccountFailurePath’, ‘activateAccountSuccessPath’, ‘loginPath’, ‘logoutPath’, ‘setPasswordPath’, and ‘setPasswordSuccessPath’ config settings are now localizable, by setting them to an array of paths (indexed by locale ID) rather than a single path. The first path listed will always act as the default if an exact locale match cannot be found.

General

  • Added a new Lightswitch field type.
  • Added a new “Select Transform” menu button to the image selection modals in Rich Text fields, for selecting images with a transform.
  • Craft now stores a schema version number in the craft_info DB table, which is now the key factor that determines whether you can swap to a different build of Craft.
  • Made some major performance improvements when dealing with assets by eliminating redundant DB queries.
  • Removed the free disk space requirement, since some hosts allocate disk space on demand. And then they sell out to GoDaddy.
  • It is now possible to switch a Craft installation between the Stable and Dev tracks.
  • Reworded “No sections exist.” to “No sections are available.” in the Quick Post widget settings.
  • Updated the documentation links throughout Settings to point to the new URLs on buildwithcraft.com.
  • The Get Help widget now accepts file attachments.
  • Field names are now properly escaped in the CP.
  • Assets of an unknown kind now get their Kind value set to “unknown” rather than null.
  • DbHelper::parseParam() no longer creates random param names, so it’s possible to see which queries are getting repeated when looking at DB profiling output.
  • CP front-end resource requests no longer get logged to craft.log when in Dev Mode.
  • Console logs and profile data are no longer appended to non-.html/.twig template requests when in Dev Mode.
  • Fixed a PHP error that could occur if an entry or asset didn’t have a title for some reason.
  • Fixed a bug where assets with an .ai file extension were getting stored with the Kind value “illustrato” rather than “illustrator”.
  • Fixed some permission enforcement bugs surrounding global set management and entry publishing.
  • Fixed a MySQL error in MigrationHelper::renameColumn() that would occur if the column shared an index with another column, and that index was used by the other column’s foreign key.
  • Fixed a MySQL error when saving a Number field without a value when MySQL is running in Strict Mode.

Dev Stuff

  • Added the HeaderHelper class.
  • Added IOHelper::getFolders() and getFiles() for getting the immediate folders/files of a given directory.
  • Added MysqlSchema::orderByColumnValues().
  • Added ConfigService::getLocalized() for getting the value of localizable config settings.
  • Added FieldsService::getFieldsWithContent().
  • Added FieldsService::validateField().
  • Added FieldModel::getFieldType().
  • Added BaseComponentModel::isNew().
  • Added ElementCriteriaModel::findElementAtOffset().
  • Added TemplatesService::namespaceInputName().
  • Added TemplatesService::namespaceInputId().
  • Added TemplatesService::setNamespace() for setting a default namespace for namespaceInputs(), namespaceInputName(), and namespaceInputId().
  • Added TemplatesService::formatInputId().
  • Added TemplatesService::startJsBuffer() and clearJsBuffer(), making it possible to capture scripts included with TemplatesService::includeJs().
  • Added TemplatesService::getScriptTag(), which wraps the passed-in JS in a <script> tag.
  • Added TemplatesService::hook() for plugins to latch onto template hooks (defined by the new ‘hook’ tag).
  • Added BaseFieldType::onBeforeDelete() and onAfterDelete(), which get called before and after a field is deleted.
  • Added BaseFieldType::validate() for adding custom validation checks when saving an element.
  • Added BaseFieldType::modifyElementsQuery() function which gets invoked when a template is filtering against a field of its type.
  • Added ElementsService::getElementById() with an optional $elementType parameter that can be left blank if the element type is not known.
  • Added ElementsService::getElementTypeById() for getting the element type associated with a given element ID.
  • Added HandleValidator::$handlePattern which exposes the regular expression pattern used to identify valid handles.
  • Added new entryRevisions.onSaveDraft, onPublishDraft, onBeforeDeleteDraft, and onAfterDeleteDraft events.
  • Added support for plugins to provide translation files.
  • Added support for fields to live outside of the global context.
  • Added support for fields’ content columns to be saved in alternate DB tables.
  • Added support for fields to have custom content column prefixes.
  • Added Craft.redirectTo() (JS).
  • Added Craft.escapeHtml() (JS).
  • Added Craft.formatInputId() (JS).
  • Added a ‘hook’ Twig tag which can be used by plugins to execute PHP code at given points in the templates.
  • Added a ‘namespace’ Twig tag for namespacing all of the nested ‘name’, ‘id’, and ‘for’ HTML attributes with a given namespace.
  • Added a ‘namespaceInputName’ Twig filter, which points to TemplatesService::namespaceInputName().
  • Added a ‘namespaceInputId’ Twig filter, which points to TemplatesService::namespaceInputId().
  • TemplatesService::namespaceInputs() no longer requires the $namespace argument.
  • FieldsService::saveField() has a new $validate argument which defaults to ‘true’.
  • Field type, asset source type, and widget settings are now output within a {% namespace %} tag pair, so the namespace is available to the classes’ getSettingsHtml() methods via craft()->templates->getNamespace().
  • _includes/forms/editableTable.html no longer uses ‘jsId’ and ‘jsName’ variables; the JS-facing input ID and name attributes are now auto-generated based on the ‘id’ and ‘name’ variables, taking the active template namespace into account.
  • BaseModel::defineAttributes() is no longer abstract, and thus no longer required by classes that extend it.
  • BaseSavableComponentType::setSettings() now accepts a BaseModel instance, which completely replaces the internally stored settings object, rather than just calling setAttributes() on it.
  • ElementsService::findElements() now returns an empty array right away if the ElementCriteriaModel’s ‘id’ param is set to ‘false’.
  • ArrayHelper::stringToArray() now converts ArrayObject instances to normal arrays.
  • Craft now uses the ‘namespace’ tag to wrap namespace field inputs, so the namespace is available via TemplatesService::getNamespace(), et al.
  • FieldsService::saveField() now saves the old field handle on the FieldModel via a new ‘oldHandle’ attribute.
  • Added more strings to the default list of translations available to Javascript.
  • The Quick Post widget is now using JS buffering to capture widget JS, rather than the old hacky way.
  • Changed the way Rich Text fields get initialized.
  • All built-in field types are now using prepValueFromPost() rather than the deprecated prepPostData() function.
  • Moved columnExists() from MysqlSchema to DbConnection.
  • Got rid of AttributeType::Version and AttributeType::Build.
  • Gutted everything in the RelationsService except for saveRelations(), as nothing else is necessary anymore.
  • Deprecated BaseElementModel::getRawContent() in favor of getContent()->getAttribute().
  • BaseInputGenerator (JS) now triggers a ‘textchange’ event after updating the target field’s value.

Element Type API Changes

  • Added BaseElementType::getTableAttributeHtml(), which defines the HTML that should occupy the table cell for the given element and attribute.
  • Added BaseElementType::hasContent(), which determines whether ElementsService::buildElementsQuery() should join in the content table.
  • BaseElementType::defineTableAttributes() should now just return an array in which the keys are the attribute to be sorted by, and the values are the table headings.
  • BaseElementType::isTranslatable() has been renamed to isLocalized().
  • ContentModel’s locale attribute now defaults to the primary site locale.
  • DbHelper::parseDateParam() no longer accepts an $operator argument, since the operator can now be set directly on the $value.

Third Party Libraries

  • Updated Twig to 1.14.2.
  • Updated Guzzle to 3.7.4.
  • Updated PHPUnit to 3.7.28.
  • Updated Redactor to 9.1.6.
  • Updated jQuery Timepicker to 1.2.9.

Craft 1.2.2399 #

Released on Oct 31, 2013

  • Added a new requirement check for 20MB of free disk space.
  • Fixed a bug where Craft was incorrectly returning that MySQL’s InnoDB storage engine was available when it was not.
  • Fixed a bug where Mcrypt was listed as required in the docs, but optional in the code. It is now required in the code.

Craft 1.2.2396 #

Released on Oct 31, 2013

  • Fixed a bug where the new requirements checker wouldn’t output any messages when a requirement did not pass.

Craft 1.2.2392 #

Released on Oct 30, 2013

  • Fixed a bug where the new requirement checker would output all requirements, not just the ones that failed.
  • Fixed a bug where only the first 100 authors would show up in the Author dropdown on an entry’s Settings tab.
  • Fixed a PHP warning could occur on servers with openbase_dir restrictions in place.
  • Added some missing translations.

Craft 1.2.2387 #

Released on Oct 28, 2013

  • The updater now checks for any new requirements before applying the update.
  • The updater is now much smarter about when to roll back and when not to if something goes wrong during an update.
  • Greatly reduced the chance of an infinite rollback loop during a failed update.
  • If a new Craft update was released between the time you visit the Updates page and you click the Update button, the updater will now install the update you expected to get, rather than the latest one.
  • The methods in IOHelper now have the option to suppress any PHP errors that might occur during file operations.
  • When a logged-in user goes to the path specified by the ‘actionLogin’ config setting, Craft now redirects them to the Dashboard or the site’s homepage depending on whether they have CP access.
  • The Update Asset Indexes tool is now only visible if there is at least one asset source.
  • Fixed a bug where Craft would run system requirements checks on front end requests, when it only should have run them for CP requests.
  • Fixed a PHP error that would occur when Craft made calls to its web service, but the web service was unavailable.
  • Fixed ‘attribute:*’ searches.
  • Fixed a PHP error that could occur if an entry or asset didn’t have a title for some reason.
  • Fixed a bug that would occur when a Number field was submitted without a value and MySQL Strict Mode was enabled.
  • Fixed various strings that weren’t being translated.

Craft 1.2.2375 #

Released on Oct 18, 2013

  • Made it possible to access environment-specific config variables from templates via craft.config.environmentVariables.
  • Fixed a bug where Craft wouldn’t check to make sure the craft/storage/userphotos folder was writable before generating user photo thumbnails.
  • Fixed a bug where Asset modals were not taking user/group permissions into account when deciding what Asset sources to display.
  • Fixed a bug where some possible parent entries might get omitted from the “Parent” entry setting withit a Structure section.
  • Fixed a bug where you could create a username during installation that had a space in it.
  • Fixed a bug where a user that does not have CP access would not get routed to the proper Set Password template.
  • Fixed a timezone bug when displaying dates/times.

Craft 1.2.2371 #

Released on Oct 15, 2013

  • Entries, Assets, and Users fields no longer auto-select elements after they were chosen from the modals.
  • Singles are now selectable in Rich Text fields’ “Link to an entry” modals.
  • The selected source is now remembered across HTTP requests in the “Choose image”, “Link to an entry”, and “Link to an asset” Rich Text field modals.
  • It is now possible to select the title/username text on the Entries, Assets, and Users index pages.
  • Made “status” a reserved field handle.
  • The “smtpPassword” property now gets redacted from the logs when Dev Mode is enabled.
  • Made improvements to the database backup and restoration scripts so there's now a much smaller chance of running into fatal errors due to queries that are too large for MySQL’s
  • max_packet_size setting.
  • Reduced the memory footprint of the database backup and restoration scripts.
  • Fix a bug where strings with unrecognized non-ASCII characters would get truncated, causing various problems such as file upload errors.
  • Fixed a bug where public user registration forms might not save the password properly.

Craft 1.2.2367 #

Released on Oct 9, 2013

  • It is now possible to pass Entries, Assets, Tags, and Users field values directly into ‘parentOf’ and ‘childOf’ params.
  • All pages of the CP are now capable of checking for Craft updates when the info isn’t cached, and update notifications are immediately added to the CP header and footer if an update is available.
  • Fixed a bug where user sessions weren’t being restored from cookies properly.
  • Fixed a bug where the “Current Password” input on the account settings page was broken.

Craft 1.2.2363 #

Released on Oct 8, 2013

  • Improved the performance of the ‘search’ param when searching against a specific field or attribute.
  • Added translations for a few Javascript-based strings that had been missed.
  • Fixed a bug where the “Delete” button would show up for brand new entries.
  • Fixed a bug that prevented entry saving on some servers because the slug would always be blank.
  • Fixed a bug where Craft’s InnoDB requirement checking could return false positives.
  • Fixed PHP notices that could occur on servers where PHP doesn’t have access to chmod(), chgroup(), and chown().
  • Fixed a Twig error caused by the Recent Entries widget when Publish Pro is installed and all sections are Singles.

Craft 1.2.2358 #

Released on Oct 1, 2013

  • Added paginate.firstUrl, lastUrl, getPageUrl(), getPrevUrls(), getNextUrls(), and getRangeUrls() to the {% paginate %} tag, making it much easier to build common pagination navigations.
  • Added EntryModel::isAncestorOf().
  • Added EntryModel::isDescendantOf().
  • Added EntryModel::isParentOf().
  • Added EntryModel::isChildOf().
  • Added EntryModel::isSiblingOf().
  • Added EntryModel::isPrevSiblingOf().
  • Added EntryModel::isNextSiblingOf().
  • Added HttpRequestService::getScriptName() and craft.request.getScriptName().
  • Added UrlHelper::getUrlWithProtocol().
  • Added support for root-relative Site URLs.
  • The {% nav %} tag now sets entries’ parents for them, potentially saving lots of DB queries
  • Craft now indexes empty field values, improving the reliability of exclude searches.
  • Entries, Users, Assets, and Tags fields are no longer required in the post data when saving an entry from the front end.
  • HttpRequestService::getPost() now supports fetching nested array data via a dot notation, e.g. craft()->request->getPost('some.nested.value').
  • Many of the Craft static methods have been moved to craft(), e.g. Craft::getSiteUrl() is now craft()->getSiteUrl(). The old methods are still around, but deprecated.
  • UsersService::saveUser() now updates the user’s status based on the status set on the passed-in UserModel.
  • Updated Redactor to 9.1.5.
  • Updated the translations.
  • Fixed a PHP notice caused by the Recent Entries widget when Publish Pro is not installed and Dev Mode is enabled.
  • Fixed a PHP notice that would occurr when saving a top-level entry within a Structure section with Dev Mode enabled.
  • Fixed a bug where saving a top-level entry within a Structure section would move the entry down to the last position.
  • Fixed a bug where the “Add child” context menus would show up in Structure sections with Max Entry Depth set to ‘1’.
  • Fixed a bug where users with CP access wolud be redirected to /dashboard on the front end after resetting their password.
  • Fixed a bug where failed user account activations would redirect the user to /1.
  • Fixed a PHP error when calling SectionModel::getLocales() when the section doesn't have a locale in the current app target language.
  • Fixed a bug where Chinese characters in slugs could become corrupted.
  • Fixed a couple edge case bugs related to URL generation.
  • Fixed a PHP error that could occur if a plugin were to call HttpRequestService::getPost() without passing any arguments, and the post data were to contain nested arrays.
  • Tweaked the style of element thumbnails a little bit to work around a Firefox rendering glitch that occurred on some PCs.

Craft 1.2.2339 #

Released on Sep 25, 2013

  • You can now create Singles that map to the same URIs used by your Login, Set Password, and Forgot Password pages, and the ‘entry’ variable will be available to the templates as expected.
  • Improved the wording of the Entry Template setting instructions for Singles.
  • The Entry Template section setting is now auto-populated based on the section name for new sections, just like Handle and URL Format.
  • Fixed a bug that broke new user account validation.
  • Fixed a bug that could cause long page load times when Craft is attempting to determine whether the server supports PATH_INFO and script name redirects.
  • Fixed a bug where HttpExceptions with a status code we don't have a template for would not fallback on the generic error.html template.
  • Fixed a bug where you would get conflicts if you gave an Image Transform a handle that was the same as an attribute on AssetFileModel.
  • Fixed a bug where Live Preview would not reflect any changes to Entries, Tags, Users, or Assets fields if all of the related elements were removed from the field.
  • Fixed a bug where users would get caught in an infinite redirect loop if they tried to access the Login page while already logged in.
  • Fixed a bug where auto-updating was broken for users on Craft 1.2 build 2337.

Craft 1.2.2337 #

Released on Sep 23, 2013

  • Added Craft.BaseInputGenerator::setNewSource().
  • Relaxed username validation to allow any non-whitespace character.
  • It is no longer necessary to pass the output of the ‘parseRefs’ filter through the ‘raw’ filter.
  • Fixed a bug where Rich Text fields could lose data on save if they contained links or images that were selected from the entry/asset/selection modals.
  • Fixed a bug that prevented Craft from indexing brand new asset sources.
  • Fixed a bug where entry slugs would stop getting auto-generated by Javascript after switching the Entry Type.
  • Fixed a PHP error that occurred on servers that already have HTMLPurifier installed and in the PHP path.
  • Fixed a PHP error that occurred on servers that don't allow calling set_time_limit().

Craft 1.2.2336 #

Released on Sep 20, 2013

  • Moved the Homepage icon to the left of the site name in the CP header, and made the icon and the site name a link to the site’s homepage.
  • Replaced the ‘Slug’ column with ‘URI’ in the Entries index, and now Singles get it too.
  • The Get Help widget now shows a spinner while it is submitting tickets.
  • The Entries tab now goes away the instant you delete the last section.
  • The Assets tab now goes away the instant you delete the last asset source.
  • The Globals tab now goes away the instant you delete the last global set.
  • ‘link’, ‘ref’, and ‘img’ are now reserved field handle words.
  • Text input generators (like the entry slug generator) now only update their target fields after no text has been entered for 250 milliseconds, fixing a bug where typing entry titles felt laggy due to our new full UTF-8 slug support.
  • Inner-word punctuation symbols are now removed completely from auto-generated slugs, rather than hyphenated. (“it’s” would now become “its” rather than “it-s”, for example.)
  • Improved the look of the ‘.go’ links.
  • Buttons with the ‘.active’ class no longer have a pointer cursor.
  • Refactored Craft.AdminTable JS class a bit, making it easier to read and extend.
  • Moved the id="nav-whatever" attributes in the main CP nav up to the <li> rather than the <a>.
  • Fixed a bug where editing a Single section’s entry would give you the option to “Save and add another”.
  • Fixed a bug where the Field edit form would not display inline validation errors.
  • Fixed a bug where the dump() Twig function no longer worked while Craft is in Dev Mode, due to a misunderstanding of Twig’s documentation.
  • Fixed a bug where Craft could accidentally used the “Nested Entries” URL format when re-saving top-level entries in a Structure section.
  • Fixed a bug where calling getUrl() on the homepage Single entry would return the site URL with "home" appended to it.
  • Fixed a bug where Singles’ default URIs would be camelCased rather than hyphen-ated.
  • Fixed a bug where HTML tags were not getting removed for the auto-generated entry slugs until the entry was actually saved.
  • Fixed a bug where “Entry Types” column heading in the Sections index wasn’t getting translated.

Craft 1.2.2335 #

Released on Sep 18, 2013

  • Added the radioGroupField macro to the CP’s _includes/forms.html template.
  • Added ConfigService::getResourceTrigger(), which now always returns 'resources' for CP requests, and the custom ‘resourceTrigger’ config setting for front end requests.
  • The Slug, Section, Post Date, and Expiry Date columns are no longer visible when viewing Singles in the Entries index.
  • iconv is now a recommended dependency; no longer a mandatory requirement.
  • It’s possible to set the CRAFT_BASE_PATH constant without also setting CRAFT_APP_PATH.
  • HttpRequestService no longer checks whether the current request is a resource/action request until isResourceRequest(), isActionRequest(), or getActionSegments() is actually called.
  • Craft no longer adds Twig’s Debug extension when running in Dev Mode, since it was deprecated as of Twig 1.5 in favor of the now-built-in dump() function.
  • Fixed a “You have a buggy version of iconv” error on servers with… a buggy version of iconv, by falling back on mb_detect(), mb_convert_encoding().
  • Fixed a PHP notice on servers that don’t have the CURLOPT_TIMEOUT_MS and CURLOPT_CONNECTTIMEOUT_MS constants predefined.
  • Fixed a bug where IOHelper::copyFolder() wouldn’t work if the destination folder didn’t already exist.
  • Fixed a bug where the _includes/forms.html macros (and _includes/forms/* templates) would ignore certain attributes when set to "0".
  • Fixed a Twig error that would occur when attempting to save an asset source without any setting values.
  • Fixed a bug where setting the ‘resourceTrigger’ config setting to ‘assets’ (or any other top-level CP template folder/file name) would prevent access to that section of the CP.

Craft 1.2.2333 #

Released on Sep 18, 2013

Big Stuff

  • There are now three types of sections: Singles, Channels, and Structures.
  • Channel and Structure sections can now have multiple Entry Types.
  • Added element reference tag support, e.g. {asset:100} or {entry:section/slug:link}. Templates can parse for element reference tags via the new ‘parseRefs’ filter.

Control Panel

  • Add a link to the site’s homepage in the header menu.
  • Added a “Link to an asset” option to Rich Text fields’ Link button menu.
  • Added a “Check again” button to the Updates widget.
  • Added a new “Copy reference tag” context menu option to assets within the Assets index.
  • Iterated over the entire CP design.
  • The Settings and Updates links are now presented as icons on the right-hand side of the header nav, to the left of the My Account menu, and Updates only shows up when an update is available.
  • User photos are now visible from the Users index page, Users fields, and user selection modals.
  • It is now possible to select multiple images at once in Rich Text fields.
  • All “Name” and “Handle” settings can now be up to 255 characters long.
  • The Settings ? Sections index now shows each sections’ Type and URL Format.
  • Sped up the time it takes for the CP to respond to changing sidebar/element selections in element index pages and selection modals.
  • The “New Password” input on the Reset Password page now gets auto-focused.
  • Craft now auto-scrolls the window when the cursor moves close to a window edge while dragging.
  • The view modes for element sources are now stored per source and per context (modal vs. full index), rather than per field.
  • The search text input is now cleared when switching sources in the element index pages and element selection modals.
  • Error notifications now stay visible for twice as long before fading out.
  • Compressed JS files are now even smaller in size.
  • Craft now ships with source maps for each of its compressed JS files.
  • Replaced the scary “X” button with “Done” in the Live Preview edit pane.
  • Rich Text fields now store linked entry/asset URLs as reference tags, so the field data stays updated when the entry/asset URLs change.
  • Renamed the “Updated Search Indexes” tool to “Rebuild Search Indexes”.
  • Added breadcrumbs to the Tag Set edit pages.
  • Asset and tag content modals will now save and close when the Return key is clicked.
  • Using the save shortcut (command/ctrl + S) on an entry form now keeps you on the page after saving the entry.
  • Simplified the cleanup stage of the updater.
  • Fixed auto-height sizing on Plain Text fields.
  • Fixed a bug where images added to a Rich Text field via the “Choose image” option were not immediately editable.
  • Fixed a bug where Plain Text fields wouldn’t auto-expand if they didn’t have a placeholder set.
  • Fixed a bug that could cause the page to jump when opening a tag or asset content modal.
  • Fixed a bug where asset and tag content modals would dissappear if you clicked a button within their own sub-modals, such as a Redactor modal.
  • Fixed a bug where transforms would register as being created successfully when the source image didn’t exist anymore.
  • Fixed a bug where tabbing to the ‘Login’ button on the login form would reveal an unstyled submit button.
  • Fixed a bug where the “Forget your password?” link would receive tab focus before the “Keep me logged in” checkbox on the login form.
  • Fixed a bug where disabled submit buttons would still get a hover effect.

Templating

General

  • Added the maxCachedCloudImageSize config setting.
  • Added the generateTransformsAfterPageLoad config setting.
  • Added the blowfishHashCost config setting.
  • Added the activateAccountFailurePath config setting, which replaces the now-deprecated ‘activateFailurePath’ setting.
  • The installer will now create a Single section for the homepage instead of a Global Set.
  • Now ‘entryId’ is the only required param for saving an existing entry via the entries/saveEntry controller action.
  • Changed the way Craft downloads update patches, which will improve future update performance.
  • Entry slugs can now contain any UTF-8 alphanumeric characters, as well as periods.
  • Craft now comes with Source Maps for all first party compressed JS files.
  • All GET and POST parameters are now converted to UTF-8 if they weren’t already.
  • The site URL now always ends with a slash.
  • Front-end user registration forms which supply a password no longer require the user to reset their password after validation.
  • Updated the translations.
  • Updated the mobile detection script used by HttpRequestService::isMobileBrowser(), et al.
  • Error template loading (e.g. the 404 template) now respects the indexTemplateFilenames and defaultTemplateExtensions config settings.
  • Craft will now use the CP’s Set Password template by default when a user without CP access is asked to set their password on the front end but a custom Set Password template hasn’t been created for the front end yet.
  • Craft no longer logs a user in immediately after they reset their password or after registering an account.
  • Added support for a ton more MIME types.
  • Craft now requires iconv.
  • Craft now requires PCRE to be compiled with UTF-8 support.
  • Craft now requires the Multibyte String extension with Function Overloading disabled.
  • Route params are no longer getting saved in $_GET, drastically reducing the amount of data Craft needs to log at the bottom of every page when Dev Mode is enabled (and fixing a PHP error when there’s too much data).
  • Fixed a bug where asset transforms would not load immediately after being generated on sites that have omitScriptNameInUrls set to ‘false’ (either automatically or explicitly).
  • Fixed a bug where Craft-generated URLs on sites with ‘omitScriptNameInUrls’ set to false would unnecessarily still factor in the usePathInfo config setting.
  • Fixed a bug where element selection modals would add new items to the browser’s localStorage each time they were opened.
  • Fixed a bug where Tags fields could select already-selected tags, if they had at least one tag selected.
  • Fixed an “unknown error” when a user attempts to log in while they already have a user session.
  • Fixed a bug where templates which aren’t readable by PHP would return a 404.
  • Fixed a bug where YII_DEBUG wasn't getting set if devMode was being set in an environment-specific config.
  • Fixed several errors/noticed/warnings/wonkiness on servers that have Twig’s C Extension installed.
  • Fixed a PHP warning that could occur on servers with openbase_dir restrictions in place.

Plugin Dev

  • Added ConfigService::set().
  • Added TemplatesService::doesTemplateExist().
  • Added SectionsService::getEntryTypesByHandle().
  • Added StringHelper::convertToUTF8().
  • Added StringHelper::isUTF8().
  • Added StringHelper::getEncoding().
  • Added Craft::getSiteUid() [php], craft.app.getSiteUid() [twig], and Craft.siteUid [js].
  • Added ElementsService::parseRefs().
  • Added EntryModel::getRef().
  • Added UserModel::getRef().
  • Added UrlManager::getRouteParams().
  • Added EntryModel::getSiblings().
  • Added Entrymodel::getPrevSibling().
  • Added EntryModel::getNextSibling().
  • Added ‘onBeginUpdate’ and ‘onEndUpdate’ events to UpdatesService.
  • Added ‘onBeforeVerifyUser’ event to UsersService.
  • Added a new ‘registerCachePaths’ plugin hook to the Clear Caches tool, enabling plugins to provide custom cache paths.
  • Added a new ‘ref’ param to ElementCriteriaModel.
  • Added support for a ‘.hover’ CSS class to buttons, used to simulate :hover.
  • DbHelper::parseParam() now supports explicitly setting how the conditionals will be joined by passing “and” or “or” as the first param value.
  • Craft.postActionRequest() now creates an “Unknown error occurred” CP notice when the response comes back with a non-200 status code by default, and calls the callback function regardless of the status code.
  • FieldsService::deleteLayoutById() now supports batch deletion.
  • The entries/saveEntry controller action now only the entryId param to be posted when saving an existing entry. All other params are optional and will default to the existing values.
  • BaseElementSelectorModal's onSelect callback data now includes the selected elements’ URLs.
  • ElementCriteriaModel::ids() and total() now cache their results until an attribute has changed, saving unneeded trips to the database when ids() or total() are called more than once.
  • EntryModel::getChildren() now acts as an alias of getDescendants(1) for Structure sections.

Third Party Libraries

  • Craft now uses Guzzle to make HTTP requests rather than Requests.
  • Craft no longer uses phpass to generate Blowfish-encrypted passwords, thanks to the feature now being built into Yii.
  • Updated Yii to 1.1.14
  • Updated Twig to 1.13.2
  • Updated jQuery to 2.0.3
  • Updated jQuery UI to 1.10.3
  • Updated jQuery Timepicker to 1.2.7
  • Updated Redactor to 9.1.4
  • Updated PHPMailer to 5.2.7

Craft 1.1.2321 #

Released on Sep 10, 2013

  • Fixed a few bugs related to Tags fields when there is more than one Tag Set.
  • Fixed a MySQL error when deleting a user who created any entry versions or drafts on an entry that was not authored by the user.
  • Fixed a bug where users registered from the front-end would have to enter their password twice to complete account registration.
  • Fixed a bug where no entires would show up in the recent entries widget if you had “All” selected in the widget settings.

Craft 1.1.2314 #

Released on Sep 5, 2013

  • Fixed a bug where you could not remove already-selected tags in Tags fields.
  • Fixed a bug where validation errors would incorrectly be added to required Tags fields that did in fact have selected tags.
  • Fixed a bug where entries could get deleted even after clicking “Cancel” on the entry deletion confirmation dialog.
  • Fixed a bug where user account pages would 404.
  • Fixed the position of the email icon on the confirmation dialog when a user forgets their password.

Craft 1.1.2313 #

Released on Sep 4, 2013

  • Fixed a bug where all yiic plugin migration commands were failing.
  • Fixed a bug where the Get Help widget might fail to attach logs if you had less than three log files.
  • Fixed a bug where TransformLoader wasn’t accounting for blank.gif URLs that had been encoded by Twig.
  • Fixed a bug where Entries > All Entries would include entries in sections that the user did’t have permission to edit.
  • Element fields now support ArrayAccess
  • Model attributes now support ArrayAccess
  • Craft now checks if the asset source folder exists when uploading and throws an exception if not.

Craft 1.1.2305 #

Released on Aug 27, 2013

  • Improved the handling of failed asset uploads.
  • Fixed a bug where entry URLs would not get routed properly if a Route existed that conflicted with the section’s URL Format.
  • Fixed a PHP notice that may have occurred if you had a Quick Post widget that was set to a deleted section.
  • Fixed a bug where PHP fatal errors would not get logged properly when Dev Mode wasn’t enabled.

Craft 1.1.2304 #

Released on Aug 20, 2013

  • Added MigrationHelper::dropForeignKeyIfExists() and dropIndexIfExists().
  • Added Help links to each page in Settings, which take you to the docs for that page.
  • Added the cURL extension as a requirement to run Craft, due to issues with the fallback HTTP client.
  • Tweaked the release note icons.
  • If Craft cannot connect to its web services, it will not try again for five minutes.
  • Fixed a bug where Craft was not verifying that the current user is an admin before allowing them to make changes to a section.
  • Fixed a Twig error when saving a tag set with validation errors.
  • Fixed a MySQL “max_packet_limit” error which could occur if Craft tried to restore a large database or that setting was set particularly low.
  • Fixed two migrations that might have thrown foreign key constraint violations on some databases when run.
  • Fixed a bug in EmailService where the From address might be used instead of the ReplyTo address when replying in some email clients.

Craft 1.1.2302 #

Released on Aug 13, 2013

  • The asset and tag content modals will now shake when you attempt to save them but there are validation errors.
  • Fixed a bug that would prevent Craft from being able to update to 1.1.2298 or later if the craft_relations table’s foreign keys did not have cascade deletes.
  • Fixed a PHP error that would occur when non-admin users with CP access would attempt to log into the CP while the system was off.
  • Fixed a bug where uploading files wouldn’t validate if there were any required fields in the assets field layout.
  • Fixed a bug where changing a user’s preferred locale in their account settings would have no effect.
  • Fixed a PHP error that might occur during asset indexing if an asset source path did not exist.
  • Fixed a bug where asset uploading would not work if you were using PHP’s built-in development web server.

Craft 1.1.2300 #

Released on Aug 9, 2013

  • Fixed a PHP notice that could occur during the cleanup stage of an update.
  • Fixed a bug that caused Craft to hang if an error occurred during a manual update when the user was not logged in.
  • Fixed a PHP notice that could occur when trying to send an email.
  • Fixed a bug where you could manually access Craft’s installer after Craft was already installed, even if Dev Mode was disabled.
  • Fixed a bug where DB connection error messages would not be styled.

Craft 1.1.2298 #

Released on Aug 8, 2013

  • Fixed some wonkiness with sidebar scrolling.
  • Fixed a bug where Users fields wouldn’t output anything.
  • Fixed a bug where the Users index and user selection modals could have a thumbnail view.
  • Retroactively fixed a bug where rows could remain in the craft_elements, craft_elements_i18n, and craft_content tables after deleting a Section, Asset Source, Asset Folder, Tag Set, or User.
  • Fixed a bug where Email validation errors would not show up when saving a user account if there was also a New Password validation error.
  • Fixed a PHP error when viewing an entry version or draft in a section that doesn’t have any fields.
  • Fixed a bug where all of the cells in the last table row would get a bottom border when the table is collapsed for small screens.

Craft 1.1.2293 #

Released on Aug 5, 2013

  • Craft now supports Twig’s ‘ignore missing’ include tag param.
  • Craft now supports Twig’s include tag’s template list syntax.
  • Rich Text fields are now translated into the user’s preferred locale.
  • Added ‘.svg’ to the default ‘allowedFileExtensions’ config setting value.
  • Emails sent through the EmailService now get the ‘sender’ attribute set.
  • Craft now includes jquery.min.map for easier jQuery debugging when the ‘useCompressedJs’ config setting is set to ‘true’.
  • Fixed a bug where Live Preview would use the primary site locale when previewing a non-primary locale’s content.
  • Fixed a bug where deleting a section, global set, or tag set wouldn’t delete its field layout in the database.
  • Fixed a bug where Live Preview would show the site’s homepage for unsaved entries when running Craft from a subfolder.
  • Fixed a bug where clicking “Save and continue editing” wouldn’t remember the locale you’re currently editing.
  • Fixed a bug that was causing users to get the incorrect status colors on the Users index page and user selector modals.
  • Fixed a bug where Assets fields’ Javascript wouldn’t enforce the Limit setting.
  • Fixed a bug where email and password validation errors wouldn’t display on the account settings page.
  • Fixed a bug where the sidebar could bleed outside of the main content div in the CP.
  • Fixed a bug where entries created with the Quick Post widget would initially show up in the Recent Entries widget as “undefined”.
  • Fixed a bug that made it impossible for a plugin to have both FooController and Foo_BarController classes.
  • Fixed a bug where routes that point to a plugin’s controller wouldn't get resolved correctly.
  • Fixed a bug where craft.tags would return tags sorted by name descending order instead of ascending order by default.
  • Fixed a bug where images saved in the cloud wouldn’t get their thumbnails generated locally.
  • Fixed a bug where the updater might fail during the clean-up stage due to missing manifest data on the file system.
  • Fixed a bug where database profiling data was getting logged to craft.log on every request, even when Craft was not running in Dev Mode.
  • Fixed a bug in the installer when MySQL strict mode was enabled.

Craft 1.1.2291 #

Released on Jul 29, 2013

  • Added the concept of Tag Sets, which are collections (or sets) of Tags! Each Tag Set gets its own field layout, similar to Sections.
  • Added a new Tags field type, which replaces the old Tags entry setting, and can be applied to entries, users, assets, global sets, and even other tags.
  • Assets now have titles, which default to the filename, sans-extension, and with underscores replaced with spaces.
  • Added a new Japanese CP translation.
  • Added a Max Length setting to the Plain Text field type.
  • Added support for the “attribute:*” search syntax for finding elements which have any value set for the given attribute.
  • Added a ‘shuffle’ Twig filter.
  • Added craft.request.isLivePreview().
  • Added a new ids() output function to craft.entries and craft.users.
  • Added craft.assets.
  • Added craft.tags.
  • Added getNext() and getPrev() template functions to entries, users, assets, and tags.
  • Added support for passing a craft.entries, craft.users, craft.assets, or craft.tags variable (sans the output function) into the parentOf and childOf params, e.g. “craft.entries.parentOf(craft.tags)”.
  • Added a new ‘tag’ route token.
  • Added multi-environment config support.
  • Added the ability to define environment-specific variables that are available to your Site URL and asset sources’ URL and Path settings, via the new ‘environmentVariables’ config setting.
  • Added the ability to customize the quality level of image thumbnails and transforms, via the new ‘defaultImageQuality’ config setting.
  • Added the ability to customize the template file extensions Craft will look for when matching a template path to a file, via the new ‘defaultTemplateExtensions’ config setting.
  • Added the ability to customize the template file names Craft will look for within a directory to represent the directory’s “index” template when matching a template path to a file, via the new ‘indexTemplateFilenames’ config setting.
  • Added support for defining the “Reply To” field when sending emails via the EmailService.
  • Added BaseMigration::insertOrUpdate() as a wrapper for DbCommand::insertOrUpdate().
  • Added new users.onBeforeDeleteUser, users.onDeleteUser, tags.onSaveTag, and tags.onSaveTagContent events.
  • Added LocalizationService::getAppLocaleIds().
  • Added MigrationHelper with some handy methods for migrations.
  • Gave the installer an awesome new background illustration created by Paul Burton of Vile, Inc..
  • The CP login screen now uses the new Craft logo by default.
  • It is now possible to upload assets directly from Assets field modals.
  • Added a new thumbnail view to Assets field modals.
  • It is now possible to edit selected assets’ content from Assets fields by double-clicking on them.
  • Plain Text fields now get an appropriate MySQL column type based on their Max Length setting value. (They default to TEXT if the setting was left blank.)
  • Entries, Assets, and Users fields now only save the related element’s title, filename, or user name in their search keywords.
  • The parent element is now excluded from the selection modals in Assets, Entries, and Users fields.
  • New Global Set handles are now auto-generated as you’re typing in the Name setting.
  • “Save” button context menus now open above the button if there’s not enough room for the menu to expand below without scrolling.
  • The CP is now redirected back to Settings ? Sections after saving a section.
  • The CP is now redirected back to Settings ? Assets ? Fields after saving the asset field layout.
  • The installer now checks if Craft has been translated into one of the browser’s preferred languages, and uses that if so.
  • The installer now creates a “Default” Tag Set and a Tags field, and adds the Tag field to the default News section’s field layout.
  • Redesigned the Updates page.
  • Craft’s updater now runs through the same requirement-checking process as the installer.
  • Other minor visual improvements.
  • Newly-created ‘month’ and ‘day’ route tokens are now more strict (e.g. ‘13’ would not be accepted as a valid month). Note that this does not affect existing routes.
  • Craft will now find templates with a ‘.twig’ extension by default, along with ‘.html’. (Customizable via the new ‘defaultTemplateExtensions’ config setting.)
  • The ‘loginPath’, ‘logoutPath’, ‘setPasswordPath’, and ‘forgotPasswordPath’ config settings now only affect front-end requests.
  • Page content types are now determined by the extension of the primary rendered template file, rather than the extension in the URL.
  • The site name is now prepended to DB backup filenames.
  • DB params that are just plain “not ” are now ignored.
  • Craft no longer uses the PluginRecord for determining the enabled plugins, removing a SQL query from each request.
  • Improved plugin initialization handling.
  • TemplatesService::includeHeadNode() and includeFootNode() have been renamed to includeHeadHtml() and includeFootHtml(). (The old functions still exist, but are now deprecated, and will be removed in Craft 2.0.)
  • Field types’ onAfterElementSave() functions are now called before getSearchKeywords().
  • Added a new prepValueFromPost() function to field types, which replaced prepPostData(). (prepPostData() still exists and is used, but has been deprecated and will be removed in Craft 2.0.)
  • Added the $includeAuditColumns params to BaseMigration::insertAll(), insert(), and update().
  • All image manipulation functions are now handled by the Imagine PHP library.
  • Updated Redactor to 9.0.4.
  • Fixed some issues with asset PNG transparency.
  • Fixed a bug that prevented Live Preview from working on some browsers if the CP is loaded over SSL but the main site URL is not.
  • Fixed a bug where the CP would check for the CRAFT_LOCALE constant when determining the target app language.
  • Fixed a validation bug when a user set their password via a front-end password form.
  • Fixed a PHP error if a plugin’s init() method loads a template or throws an exception.
  • Fixed a bug where calling AssetSourcesService::getAllSourceTypes() would throw a 500 error if the Cloud package isn't installed.
  • Fixed a PHP error when installing Craft via the console.

Craft 1.0.2280 #

Released on Jul 12, 2013

  • Added a new “powerpoint” file kind that consists of .ppt and .pptx files.
  • ‘@’ symbols are row allowed in asset filenames.
  • Resource requests now get a 304 Not Modified response when appropriate.
  • Fixed a bug where Craft would display a completely uninformative error during installation if the craft/config/ folder isn’t writable.
  • Fixed a bug where some cells in Table fields wouldn’t auto-expand to their proper height on page load.
  • Fixed a JS error that would occur when a Rich Text field’s Redactor config file doesn’t exist on the server.
  • Fixed a bug where the Last-Modified header was always set to ‘0’.

Craft 1.0.2278 #

Released on Jun 25, 2013

  • Added craft()->urlManager->getMatchedElement().
  • Craft now attempts to match the original image’s quality and file size when saving a cleansed uploaded image.
  • Requesting an empty CP resource no longer returns a 404 error.
  • The CP now gets redirected to Settings > Globals after saving a global set.
  • Fixed a bug where the Get Help widget would not send the logs and DB backup even if instructed to do so.
  • Fixed a bug where DateTime::diff() would not pass the ‘invert’ property to the returned DateInterval instance.
  • Fixed a bug where the Settings cog icon would be out-of-place when selecting a new field with a long name in the Field Layout pages.
  • Fixed some CSS issues with the default front-end templates.
  • Fixed a bug where Redactor toolbars would get extra height if their bottom Y position was higher than the bottom of the sidebar nav.
  • Fixed the always-present scrollbars in element selection modals.
  • Fixed a bug where Rich Text fields would get horizontal scrollbars if they contained page breaks.
  • Fixed a bug where radio buttons would lose their selections when toggling Live Preview.

Craft 1.0.2277 #

Released on Jun 21, 2013

  • Craft now only checks to make sure the craft/config/ folder is writable if the license.key file doesn’t exist already.
  • Updated Redactor to 9.0.1.
  • Fixed a bug where the Get Help widget would always send the DB backup and log files, even when instructed not to.
  • Fixed a PHP warning that would occur when using the |datetime Twig filter on a DateTime object.
  • Fixed a bug that prevented CP translations from being applied when manually updating Craft.
  • Fixed a bug where submitting a Table field with no rows would retain its previous value.
  • Fixed a bug that prevented Users fields from outputting anything in the templates.
  • Fixed a bug that broke the User Photo and Logo cropping modals.

Craft 1.0.2275 #

Released on Jun 17, 2013

  • Fixed the |length filter for Entries, Assets, Users, Checkboxes, and Multi-select fields.

Craft 1.0.2274 #

Released on Jun 17, 2013

  • Fixed a PHP error when outputting assets in a template.

Craft 1.0.2273 #

Released on Jun 17, 2013

  • Added .webm to the default list of allowed upload file extensions.
  • Tightened transform settings validation to prevent invalid transform handles from being saved.
  • Fixed a MySQL error that would occur when deleting elements that were related to other elements via an Entries, Users, or Assets field.
  • Fixed a bug where relation fields wouldn’t remember selected elements that were disabled/not-live.
  • Fixed a bug that prevented Dropdown and Radio Button fields’ values from being translatable (e.g. entry.dropdownField | translate).
  • Fixed a bug where deleting an asset wouldn't delete its row in craft_elements.

Craft 1.0.2270 #

Released on Jun 12, 2013

  • Added ArrayHelper::filterEmptyStringsFromArray().
  • Increased PHP’s timeout duration for installing and updating to 120 seconds.
  • Craft now auto-focusses the first column’s input when creating a new row in Table fields (and other Table-based settings).
  • Login error codes are now returned for non-Ajax login requests.
  • Updated the translations.
  • Made it possible for plugins to extend UserSessionService and call their own extended login() method successfully.
  • Fixed a PHP error that broke the control panel for the fr_fr locale.
  • Fixed a bug where slug segments consisting of “0” would get removed when saving an entry.
  • Fixed a Javascript “[object Object]” alert box that would pop up if you left the Settings > Packages page before it had finished making its initial Ajax request.
  • Fixed a minor visual glitch within Route modals.
  • Fixed a bug where <ul>s and <ol>s in Rich Text fields wouldn’t get the proper bulleted/numbered list styles.
  • Fixed a bug where the field layout wasn’t editable on new, unsaved Global Sets.
  • Fixed a PHP warning on the Settings > Plugins page if a plugin’s folder was missing or not readable.
  • Fixed a bug where locked user accounts wouldn’t reveal the remaining cooldown time when the user attempted to log in.
  • Fixed a bug where 404 requests would still get a MIME type based on the request’s URL, rather than text/html.

Craft 1.0.2267 #

Released on Jun 7, 2013

  • Added the ‘users.beforeSaveUser’ event.
  • Craft now displays a more user-friendly error page if it cannot connect to the database.
  • Updated the CP translations with some strings that were missed initially.
  • Fixed a bug where the ‘cpTrigger’ config setting could become exposed on the front-end of your website.
  • Fixed a bug where default field values were not getting applied when editing new content.
  • Fixed a bug where Checkboxes fields wouldn’t retain their new value if the user deselects all checkboxes.
  • Fixed a bug where stuff included by {% include* %} tags wouldn’t get included in error templates which didn’t output getHeadHtml() and getFootHtml() functions.
  • Fixed a bug that made it impossible to unlink the selected text within Rich Text fields.
  • Fixed a bug when linking some selected text within a Rich Text field to an entry, the text would be replaced by the entry’s title.
  • Fixed a bug where Rich Text field dropdown menus might be obscured in Live Preview.
  • Fixed a bug where removing all widgets from the Dashboard would trigger the Dashboard into recreating all the default widgets.
  • Fixed a bug where Date fields attached to Asset field layouts would not work after closing and re-opening an asset’s content modal.
  • Fixed a bug where the “Default Group” user setting was not saving properly.
  • Fixed a bug where clicking the “Choose image” or “Link to an entry” dropdown menu options within a Rich Text field within an Asset content modal would close the Asset content modal.

Craft 1.0.2266 #

Released on Jun 4, 2013

  • Added Live Preview.
  • Added search support.
  • Added the Color field type.
  • Replaced the Links field type with new Entries, Assets, and Users relational field types. (Don’t worry – any existing Links data will get migrated and the template syntax has not changed.)
  • Added a new “Choose image” option to the Image toolbar button menu in Rich Text fields which opens the same entry selection modal used by the new Assets field.
  • Added a new “Link an entry” option to the Link toolbar button menu in Rich Text fields which opens the same entry selection modal used by the new Entries field.
  • Added new Update Asset Indexes, Clear Caches, Backup Database, and Update Search Indexes tools to the Settings page.
  • Added a context menu to the Save button when editing a user (other than your own account) with the options “Save and continue editing” and “Save and add another”.
  • Added the ability to delete users and entry drafts, as well as the corresponding user permissions.
  • Added ‘childOf’, ‘childField’, ‘parentOf’, and ‘parentField’ params to craft.entries and craft.users
  • Added getParents() and getChildren() methods to EntryModel and UserModel.
  • Added a new ‘markdown’ filter (and an ‘md’ shortcut) for parsing text with Markdown.
  • Added craft.request.isAjax.
  • Added craft()->on() for attaching events to services without forcing them to be initialized.
  • Added new ‘entries.onSaveEntry’, ‘users.onSaveUser’, ‘users.onSaveProfile’, ‘assets.onSaveFileContent’, ‘globals.onSaveGlobalContent’, and ‘content.onSaveContent’ events.
  • Added StringHelper::parseMarkdown().
  • Added NumberHelper::makeNumeric().
  • Added a Craft.initUiElements() JS function.
  • Added new Craft.ElementSelectorModal JS class for initializing element selection modals.
  • Added CP translations for German, UK English, French, Italian, and Dutch.
  • Craft now ships with much more helpful default templates, and the installer actually creates a little content, so you can get a better sense of how the system works.
  • Refreshed the CP design.
  • The Entry and User index pages now have working search fields, infinite scrolling, table column sorting, and state memory between requests, just like Assets.
  • Updated Redactor to 9.0, dramatically improving the HTML output of Rich Text fields.
  • Most forms in the CP now support typing Command/Control + S to submit them.
  • CP modals are now dismissable by pressing the ESC key.
  • When clicking the ‘lock’ button to change a user’s email or password, the current password field is now auto-focussed.
  • Added a confirmation dialog when uninstalling a plugin.
  • Beefed up the templating options for Checkboxes, Dropdown, Multi-select, and Radio Buttons fields, adding the ability to loop through all options, output option labels, and determine whether specific options are selected.
  • When submitting entry/user/asset content on the front-end, any fields that are omitted from the POST data entirely will retain their previous values.
  • Text “hints” in the CP are now “placeholders”, and use the HTML5 ‘placeholder’ attribute. A Javascript fallback is in place for browsers that don’t support them yet.
  • Added PluginsService::call() to replace the now-deprecated callHook(), and deprecated the “hook” method name prefix requirement from the plugin methods called by the function.
  • Removed the Plain Text field type’s Max Length setting as it doesn’t have any effect yet.
  • Removed the Plugin Updates section from the Updates page since we aren’t actually checking for plugin updates yet.
  • The Field Layout pages now use a custom font rather than Times New Roman.
  • Removed some old code and DB migrations that are no longer needed thanks to the previous release being a breakpoint release.
  • Fixed several IE 8 and 9 issues.

Craft 0.9.2262 #

Released on Jun 3, 2013

  • Fixed a bug that broke the installer.

Craft 0.9.2260 #

Released on Jun 2, 2013

  • Added craft.request.isAjax().
  • ArrayHelper::StringToArray() now removes any empty array elements.
  • Updater enhancements.
  • Fixed email settings validation.
  • Fixed a PHP error when deleting a field that has a non-existent field type.

Craft 0.9.2246 #

Released on May 21, 2013

  • Admins are now allowed to change other users’ passwords.
  • Now only admins are allowed to change other users’ email addresses.
  • When editing a user’s email address or password, you must now provide your own password.
  • CP access permissions are now enforced earlier in the request cycle, preventing an error message that did not reveal the real issue when a non-permitted user attempted to access a page in the CP.
  • Apostrophes are now removed, rather than replaced with a dash, when generating entry slugs.
  • The ESC key now closes active modal windows.
  • Fixed a bug that prevented emails from being rendered correctly when the site locale is set to something besides ‘en_us’.
  • Fixed a bug preventing accurate account cooldown time calculation when your account is locked.
  • Fixed a bug with two-digit year detection.
  • Fixed a few minor front-end registration bugs.

Craft 0.9.2243 #

Released on May 15, 2013

  • Date fields now support two-digit years.
  • Added the current version’s release date to the CP footer.
  • Made minor visual improvements and fixes.
  • Fixed a bug that would cause a PHP error on many form submissions and the group filter on some versions of PHP.
  • Fixed a bug when trying to automatically detect whether the file system supports file locking when writing to a file.
  • Fixed a bug where you could not change the case of a file or folder name in Assets.
  • Fixed a bug where sections and global sets would be ordered by date modified rather than alphabetically.

Craft 0.9.2240 #

Released on May 13, 2013

  • Added UserModel::isInGroup() to check if a user belongs to a particular group.
  • Added TemplatesService::renderObjectTemplate(), powering entry URI generation, the group filter, and all redirect params.
  • Added DateTime::localeDate() and DateTime::localeTime() for accessing the date/time in the current locale’s preferred formats.
  • Added a new group Twig filter for grouping the items in an array into sub-arrays, indexed by a common property among all the items.
  • Added the full power of Twig to section URL Format settings, so you can access any entry property, apply filters, etc..
  • redirect params when saving entries, etc., also get the full power of Twig.
  • DateTime->__toString() now returns the W3C date rather than a U.S. date format.
  • redirectToPostedUrl() now accepts objects and passes the URLs through renderObjectTemplate()
  • Disabled entries no longer get to reserve a system URL.
  • Fixed a regression bug in IOHelper::writeToFile() where it would generate a PHP Error.
  • Fixed a bug that broke on-demand image transforms when the site has a protocol-relative URL.
  • Fixed a bug where Twig_Error exceptions thrown on a template that was not loaded with Craft’s default template loader would cause a second exception to get thrown, masking the original error.
  • Fixed a bug where the ‘Slug’ column on the Entries index was getting a link to nowhere for entries that don’t have URLs.
  • Fixed a bug where the Asset index page wouldn’t load if an image was missing its width or height in the database.
  • Fixed a bug that could cause a PHP notice when logging out on rare occasions.

Craft 0.9.2235 #

Released on May 9, 2013

  • Added support for protocol-relative URLs.
  • Added the 'testToEmailAddress' config variable. If set, EmailService will send to it instead of the supplied email address.
  • Added config variables 'defaultFolderPermissions', 'writableFolderPermissions' and 'writableFilePermissions'. Craft will use these when creating files and folders.
  • Craft now supports automagic detection if your file system supports file locking when writing to a file (looking at you NFS!). Removed the 'useLockWhenWritingToFile' config variable.
  • If using the date/time picker and you only select time, Craft will now default to the current date.
  • If Craft isn’t installed yet and it is a control panel request, we will pretend like it is in devMode so that you can easily see any installation error stack traces and messages.
  • Fixed a bug where the last page of a paginated list of elements would suggest it’s showing more elements than there actually are.
  • Fixed a bug where times entered via the timepicker wouldn’t be saved in the system timezone.
  • Fixed a bug where entry foreign keys might not have CASCADE deletes set properly.
  • Fixed a bug when using yiic where the runtime path was set incorrectly.
  • Fixed an incorrect mime-type message getting logged in Chrome’s console.
  • Fixed wonky right-click detection on some browsers.
  • Fixed a bug where the entry Save context menu options wouldn’t trigger if an input on the page had focus.

Craft 0.9.2222 #

Released on Apr 30, 2013

  • The updater now cleans all .bak files and folders from the app folder after running an update.
  • Fixed the installer.
  • Fixed a edge case where the installer would break if it happened to find a SomethingRecord.php.bak file in the app/records folder.
  • Fixed some wonkiness with the field layouts when there is a space in the tab name.
  • Fixed a bug where auto-redirection after logging in was broken if the config variable 'loginPath' had more than one segment in it.

Craft 0.9.2219 #

Released on Apr 29, 2013

  • Added a new “Default User Group” setting to Settings > Users > Settings for choosing which group new users should be added to by default.
  • The “Forgot your password?” link is now visible right away on the Login page.
  • Removed the ability to set other users’ passwords, even if you’re an admin. All new users must now go through account activation and set their own password.
  • Renamed some config settings: ‘validateAccountPath’ to ‘activateAccountPath’, ‘validateSuccessPath’ to ‘activateSuccessPath’, ‘validateFailurePath’ to ‘activateFailurePath’ and ‘resetPasswordPath’ to ‘setPasswordPath’
  • When attempting to log in with a user account that’s temporarily locked, the cooldown time duration now includes the number of seconds if it’s less than one minute.
  • Increased the max length of entry slugs to 255 characters.
  • Fixed a bug where a non-admin with create/administer user permissions was able to modify sensitive admin account details.
  • Fixed a permissions error when checking to see if the current user has create/edit entry privileges.
  • Fixed a bug where public user registration forms would allow empty password inputs.
  • Fixed some template errors if the system email settings get deleted for some reason, and you go to Settings > Email.

Craft 0.9.2218 #

Released on Apr 25, 2013

  • Added new forms.time() and forms.dateTimeField() macros.
  • Added the ‘useLockWhenWritingToFile’ config setting, which is taken into account whenever the LOCK_EX flag is set when calling IOHelper::writeToFile(). This fixes PHP warnings when using Craft on NFS filesystems.
  • Date and time selection now take place in separate inputs
  • Date and time formats are now fully localized within date/time fields (e.g. MM/DD/YY for en_us, DD/MM/YY for en_gb).
  • Date fields now have a “Show time?” setting (disabled by default).
  • The Timezone setting in Settings > General now lists all known timezones, not just the ones with unique abbreviations.
  • The forms.date() and forms.dateField() macros only show the date input once again.
  • Fixed a bug where escaped HTML entities in Rich Text fields would not continue to be escaped when re-editing.
  • Fixed a bug where query strings were dropped when redirecting the user back to the requested page after logging in.
  • Fixed a bug where requests would not get routed to the requested controller action if the URL path was equal to the ‘loginPath’ config setting (“login” by default).

Craft 0.9.2216 #

Released on Apr 24, 2013

  • Added the ability to set the time of day within entry Post/Expiration Date settings as well as Date fields.
  • Added page break support to the Rich Text fieldtype.
  • Added support for custom Redactor configs to the Rich Text fieldtype.
  • Craft now comes with two default Redactor configs (Simple and Standard).
  • Added a “Clean up HTML?” setting to the Rich Text fieldtype, which is enabled by default.
  • Added the ‘validateAccountPath’, ‘validateSuccessPath’, and ‘validateFailurePath’ config settings.
  • Asset field modals are now scrollable.
  • User registration no longer requires a ‘username’ input. If it’s not present in the POST data, Craft will default to using the email.
  • Updated to Redactor 8.2.6.
  • Fixed a bug that prevented public user registration from saving the submitted password correctly.
  • Fixed a bug where user account validation was incorrectly going through the Reset Password template.
  • Fixed a bug on some servers where enabling/disabling an entry would generate a SQL error.
  • Fixed a bug where craft.app.locale was only returning 'en_us' in the templates.`
  • Fixed a bug where on-demand asset transforms were not taking the requested crop positions into account.
  • Fixed a bug where the Get Help widget might not be able to send a support request on certain server configurations.

Craft 0.9.2214 #

Released on Apr 16, 2013

  • Added crop position selection support for asset image transformations.
  • If you log in and have an existing PHP CraftSessionId, we no longer manually generate a new one.
  • If you log out, we no longer manually destroy your PHP CraftSessionId.
  • Remove emailFormat settings from users and htmlBody from emailMessages. If only text and no HTML is supplied for an email, we generate the HTML body automatically.
  • Redirect back to settings/assets/transforms after saving an asset transformation.
  • Fixed a bug where sending HTML emails would generate an incorrect body.
  • Fixed a bug where the returnUrl was not getting saved to session when prompted to login thereby always redirecting you to the dashboard.
  • Fixed a bug where cleaning an uploaded image for possible embedded PHP/JS would kill the transparency of the image for GIFs and PNGs.
  • Fixed a bug where the Assets file modal could stretch beyond the size of the screen with enough fields in it.
  • Fixed a bug where the config variable 'overridePHPSessionLocation' was not getting respected.

Craft 0.9.2213 #

Released on Apr 11, 2013

  • Added the ability to force log messages in Craft::log() so that they will get logged regardless of devMode status or log levels.
  • All updates now get their diagnostic messages logged regardless of devMode status.
  • When adding default widgets to the dashboard, Craft takes into account if the user has create entry permissions for the Quick Post widget and update Craft permissions for the Updates widget.
  • Fixed a bug that broke Craft on Windows.
  • Fixed a bug that prevented nested section permissions from expanding until the user/group was saved and re-edited.
  • Fixed a bug where users could create Quick Post widgets on the dashboard for sections that they did not have create permissions for.
  • Fixed a bug where all users were being returned for all user groups on the user index page, regardless of the user group selected.
  • Fixed a PHP error when passing multiple statuses into an ElementCriteriaModel.
  • Fixed a bug where if devMode was enabled, YII_DEBUG was still set to false.
  • Fixed a bug where auto-updates might fail in certain scenarios when unzipping the patch file.
  • Fixed a bug where, if you had the Users package installed, but not the Publish Pro package and you were logged in with a user that had create entry permissions, you would be missing a "New Entry" button on the entry index page.

Craft 0.9.2211 #

Released on Apr 9, 2013

  • Added Rackspace Cloud Files and Google Cloud Storage support to the Cloud package
  • Updates will now suppress any PHP errors when clearing the cache and compiled templates.
  • A friendly error message is now displayed when creating a new user with “Require verification” checked and the email settings are invalid.
  • Added .m4a and .m4v to the default list of allowed file extensions.
  • Numbers are not automatically localized when set on a model, fixing a few bugs.
  • Fixed a bug that made it impossible to edit entries in non-primary locales.
  • Fixed a PHP error if config/storage/runtime/ does not have executable permissions
  • Fixed a bug that prevented users with permission to create entries but not publish them, from actually creating entries.
  • Fixed a PHP error when indexing a local source with an invalid path.
  • Fixed a few edge case PHP errors.

Craft 0.9.2205 #

Released on Apr 3, 2013

  • Added a new Timezone setting in Settings > General for setting the system timezone.
  • Added a new ‘postDate’ parameter to EntryCriteriaModel (for use in craft.entries, etc.).
  • The system timezone is now factored into entry Post Date and Expiration Date settings before they are saved to the database.
  • The system timezone is now factored into date criteria parameters, such as craft.entries.before(), after(), and postDate().
  • Added a $timezone argument to DateTime::createFromString(), for specifying the timezone the resulting DateTime object should be set to (defaults to UTC).
  • Added a $timezone argument to DateTime::format(), for specifying the timezone the returned string should be set to (defaults to the system timezone).
  • Fixed a “userId is not defined” error when creating a new entry.
  • Fixed a one-click updating bug where the contents of updated files would get duplicated if the user attempts the update more than once.
  • Fixed a FeedsService error that occurred on some servers with an open_basedir restriction in place.
  • Fixed some errors on servers that don't have the BCMath extension installed.

Craft 0.9.2204 #

Released on Apr 2, 2013

  • Added a new last() function to ElementCriteriaModel, as an alternative to first()
  • Added the ‘phpMaxMemoryLimit’ config setting (defaults to 256MB), which is taken into account when updating Craft.
  • Improved the performance of the entry edit page.
  • Emails are now sent with a UTF-8 character set by default.
  • craft()->fileCache->set() now uses the duration specified by the ‘cacheDuration’ config setting by default.
  • Added OpenSSL to the installer’s list of system requirements.
  • Fixed a bug where {% if entry.richTextField %} conditionals would always return true, regardless of whether the field had a value.
  • Fixed a bug where the entry ‘order’ parameter wasn't being respected when calling first().
  • Fixed a bug in the FeedsService when the PHP DOM extension is not enabled.
  • Fixed a bug that could result in file cache durations not getting set properly.
  • Found and fixed a couple places that weren't being defensive about whether a fieldtype actually exists before instantiating it.
  • Fixed a PHP error that occurred on Windows when a DateTime object was created with an invalid timestamp.
  • Fixed a bug in PclZip that would prevent unzipping on certain server configurations.
  • Fixed a bug where updating might run out of memory on certain server configurations.

Craft 0.9.2202 #

Released on Mar 28, 2013

  • Fixed an error when creating or editing a field that occurred if the Users package is installed and at least one user group had been created

Craft 0.9.2201 #

Released on Mar 27, 2013

  • Added a new “Default Values” setting to Table fields, which gives you a live preview of your table field as you edit its columns, and lets you set the default rows and values.
  • Added a Checkbox column type to Table fields.
  • Added the ability to specify default options for the Checkboxes, Dropdown, multi-select, and Radio Buttons fieldtypes
  • Added a new forms.hidden() Twig CP macro
  • Added a new Craft.expandPostArray() Javascript function
  • The Checkboxes, Dropdown, Multi-select, and Radio Buttons fieldtypes now use tabular UIs for their Options settings
  • Table column handles are now auto-generated in the same way all other Handle settings get auto-generated based on the Name setting.
  • Auto-generated Handle settings no longer stop getting auto-generated as soon as they receive focus; they now wait until their value has actually been manually changed.
  • The Table field now highlights the full text cell values when they are tabbed-into.
  • Added an initJs config option to the forms.editableTable() Twig CP macro (defaults to true)
  • The forms.select(), multiselect(), checkboxGroup(), checkboxSelect(), and radioGroup() Twig CP macros now support specifying options’ labels and values explicitly.
  • UserModel now has a getName() which returns the user’s full name, or their username as a fallback
  • Fixed a bug that prevented numeric Table field columns from receiving input
  • Fixed an error that occurred when editing an entry with pre-saved Table field data after adding a new column to the Table field
  • Fixed a bug where the input names in newly-created Table field rows would get an extra “]” appended to the end.

Craft 0.9.2200 #

Released on Mar 26, 2013

  • Fixed a bug where Links fields would always get a “field required” validation error if they marked as required.
  • Fixed a bug where packages would get badged with “UNDEFINED DAYS LEFT” right after initiating their trial.
  • Fixed a typo on field settings pages.

Craft 0.9.2199 #

Released on Mar 26, 2013

  • Added a Table fieldtype.
  • Added a Date fieldtype.
  • Added 30-day free package trials.
  • Improved error reporting for the Get Help widget.
  • The Get Help widget now creates and includes a new database backup in the event that “Include error logs and database backup” is checked.
  • Entry post dates are now only automatically set to the current date if the entry is enabled.
  • It's no longer necessary to add ‘sectionId’ and ‘slug’ inputs on front-end entry edit forms.
  • Added a data loss warning next to the Type setting when editing an existing field.
  • The CRAFT_LOCALE constant can now be set to “auto”, which takes the user’s and browser’s language preferences into account.
  • The CRAFT_LOCALE constant is now case-insensitive (so setting it to “en_US” is allowed, for example).
  • Field values are now stored on a model, which takes the fieldtype’s defineContentAttribute() return value into account, doing its best to type-cast the value accordingly.
  • Model attributes set to AttributeType::Mixed now auto-decode JSON values when set.
  • Added an $includeAuditColumns param to DbCommand::insertAll(), insert(), and update()
  • Added DbCommand::insertOrUpdate()
  • Added DateTime::createFromString().
  • The forms.date() and forms.dateField() template macros now set ‘autocomplete’ to ‘false’ by default.
  • Added a new --configPath option to yiic in the event that the craft/config/ folder has been moved outside of craft/.
  • Fixed a bug where the entry revision menu would show drafts and versions from the primary site locale, rather than the selected one.
  • Fixed a bug where globals would show content in the site’s primary locale when CRAFT_LOCALE was set to a different one.
  • Fixed a bug where UserModel::getFullName() required the Users package to be installed.
  • Fixed a bug where the ‘paginate.currentPage’ variable was getting set to a string rather than an integer.
  • Fixed an unzipping bug on servers that do not have ZipArchive installed that was preventing one-click updates from running.
  • Fixed a syntax error in the generated SQL when performing a database backup, preventing a database rollback from being able to run successfully.
  • Fixed a PHP error that could occur in the PluginsService when determining the components a plugin has available.

Craft 0.9.2194 #

Released on Mar 19, 2013

  • Added a new ‘unixSocket’ DB config setting that forces the console app to ignore the database server and port settings and connect via the socket.
  • Added new ‘requireMatchingUserAgentForSession’ and ‘requireUserAgentAndIpForSession’ config settings.
  • Added support for all of the English language locales not previously supported (e.g. en_IE).
  • The table on Settings > Assets > Image Transforms now includes the transform handles.
  • Added support for {slug}, {url}, and {cpEditUrl} tags in the ‘redirect’ param for the entries/saveEntry controller action.
  • Updated PhpMailer to version 5.2.5.
  • Added attachment support to the EmailService.
  • Fixed Asset indexing.
  • Fixed a PHP error that occurred after deleting a field that had been used by entry versions or drafts.
  • Fixed a PHP error when accessing the Globals tab when the Localize package is not installed.
  • Fixed an auto-update bug for servers that don’t have ZipArchive installed.
  • Fixed an auto-update bug that prevented files marked for deletion from getting deleted.
  • Fixed a bug when sending HTML emails.
  • Fixed a bug when determining the browser's preferred languages when the request did not specify an Accept-Language header.
  • Fixed a bug where the model column of the assettransforms table might not have the correct value.

Craft 0.9.2193 #

Released on Mar 14, 2013

  • Added a setTransform() function to AssetFileModel for applying a default transform to be used by getUrl(), getWidth(), and getHeight()
  • AssetFileModel’s magic getter now checks if the property name matches a transform handle. If it does, a new AssetFileModel instance is returned, pre-set with the matched transform.
  • Updated to Twig 1.12.2
  • Twig now gets initialized with the Twig_extension_StringLoader extension, so the template_from_string() function is available to all templates.
  • The craft/ folder now comes with .htaccess and web.config files that prevent direct HTTP access in the event that the folder is in the web root.
  • Fixed a bug where fresh installations of Craft did not get the assettransformindex table created in the database.
  • Fixed a bug where Assets didn’t know what to do if a transform was requested but a transform mode was not specified. It now defaults to “crop”.
  • Fixed a fatal error when setting a section to have URLs where previously it did not.
  • Fixed a bug where custom section title labels were not being used on the entry index or edit pages.
  • Fixed a bug where people running Craft on a custom port and in a subfolder (e.g. http://localhost:8888/subfolder) would get an extra port number appended to the end of the URL.
  • Fixed a bug where TemplatesService::namespaceInputs() would get a little over-ambitious, altering the values of any attributes that ended in ‘name’, ‘id’, etc. (e.g. ‘data-name’).
  • In Assets, fixed a bug where a file could not be replaced if it didn't exist in the database.
  • In Assets, fixed a bug where moving a file between sources would not delete it.
  • In Assets, fixed JS errors where the context menu would not work for lazy-loaded page items.

Craft 0.9.2189 #

Released on Mar 12, 2013

  • Added Global Set translations.
  • Added locale user permissions.
  • Added the |intersect Twig filter.
  • Added support for CRAFT_SITE_URL constant.
  • Added a web.config file to the craft/ folder that prohibits HTTP traffic to the directory.
  • Asset transforms are now created on demand.
  • Asset transforms can now be defined right from the templates.
  • S3 asset sources now use a bucket’s subfolder as the source root.
  • Improved error handling when Craft cannot connect to the database.
  • Craft now adds any queued-up head/foot HTML to the page in the event that getHeadNodes() or getFootNodes() is not present in the template.
  • Improved the Twig |replace filter.
  • Fixed a JS bug where checking “All” wouldn't make all the checkboxes appear checked when disabling them.
  • Fixed a bug where accessing the login page before installing might give you the "Manual Update Required" template instead of the installer.
  • Fixed a bug in IOHelper::normalizePathSeperators() that could cause a PHP Notice when open_basedir restrictions were in place.

Craft 0.9.2184 #

Released on Mar 9, 2013

  • Fixed a bug where a plugin's custom fieldtypes would not load... at all.
  • Fixed a JS error that prevented Links' modal window from functioning... at all.
  • Fixed a bug when saving a section that previously supported URIs, but no longer does.
  • CP resource URLs are now always set to https:// if the current request is served over SSL.
  • Removed the Links' Reverse Handle setting for now.

Craft 0.9.2181 #

Released on Mar 8, 2013

  • Security improvements.
  • Your credit card information now gets cleared out in Settings > Packages after the modal window has been hidden for five minutes.
  • Refactored EmailService and added support for CC and BCC recipients.
  • Increased the default timeout for calls to Craft’s web service to 30 seconds.
  • Fixed file renaming for Assets.
  • Fixed a bug where missing S3 image transforms would break file CRUD operations.
  • Fixed a bug where S3AssetSourceType was requiring the wrong package.
  • Fixed a couple of issues with the Quick Post widget if you delete the default section and create a new one.
  • Fixed a CSS issue with Redactor dropdown menus when it is being displayed in a modal.
  • Fixed a bug where some backup files might not get cleaned up during an auto-update.

Craft 0.9.2177 #

Released on Mar 5, 2013

  • Blocks is now Craft
  • Overhauled how licensing works with several critical security improvements
  • Major Assets UI cleanup
  • Made some significant CP and site performance improvements
  • Upon saving an entry, you are now redirected back to the section’s entry index by default
  • isMobileBrowser() now accepts a boolean argument specifying whether tablets should be included in the detection (defaults to false)
  • 1Password is now capable of detecting the username/password when logging in
  • Improved the bundled site templates
  • Overhauled PHP-based URL routing, making it possible to specify a controller/action rather than just a template
  • Fixed some CSS glitches in Firefox and IE 9/10
  • Some subtle CP CSS improvements
  • The jQuery UI Date Picker is now included on each page of the CP
  • In-app package purchasing
  • Global Sets (replaces Singletons/Pages and the former Globals implementation)
  • Added a “wildcard” URL routing token
  • Fixed several bugs related to Assets
  • Fixed some bugs with entry templating
  • Fixed a JS error on Settings > Fields
  • Fixed a PHP error when a user had attempted to log in too many times
  • Fixed a bug that prevented the Asset Sources Link setting from actually doing anything

Craft 0.9.2168 #

Released on Mar 1, 2013

  • Now including jQuery UI DatePicker on each page.
  • Disabled autocomplete for Post and Expiry Date settings.
  • Fixed a JS error when viewing Assets in list view.
  • Fixed a bug where the Post and Expiry Date settings would get set to the current time of day when saving an entry.
  • Fixed a bug where entries were sorted by Creation Date rather than Post Date in the Content section.

Craft 0.9.2167 #

Released on Feb 26, 2013

  • Added the ability to rename subfolders within Assets.
  • id=, for=, and a couple other attributes within plugin settings HTML are no longer getting prefixed with “settings-”.
  • Fixed a MySQL error in The Big Migration when there were orphaned rows in the craft_links table.
  • Fixed a couple bugs with craft.entries and craft.users and entry/user statuses.
  • Fixed a PHP error when deleting an entry.
  • Fixed a PHP error when sending the user verification email.
  • Fixed a bug where pending users didn’t have the option to reset their password when attempting to log in.
  • Fixed a CSS glitch where the "check your email" password reset instructions weren’t centered on the page.
  • Fixed a bug where singletons would forget their Template setting when re-edited.
  • Fixed the company logo setting in Settings > General.
  • Fixed a bug that prevented some Get Help widget submissions from going through.

Craft 0.9.2165 #

Released on Feb 24, 2013

  • Widgets and fieldtypes are now required to implement the new IWidget and IFieldType interfaces, rather than extend BaseWidget and BaseFieldType. (Extending those base classes will still get the job done though, as they implement their respective interfaces.)
  • Blocks now resets PHP’s time limit to 2 minutes before running each DB migration during a Blocks or plugin update
  • Fixed a bug where plugin components weren’t getting loaded
  • Fixed a bug where Quick Post widgets wouldn’t show a title if their associated section doesn’t exist anymore

Craft 0.9.2164 #

Released on Feb 23, 2013

  • Fixed an issue with The Big Migration when Blocks shares its database with another app
  • Fixed a PHP error when saving a new entry

Craft 0.9.2163 #

Released on Feb 23, 2013

  • Renamed Pages to Singletons.
  • Singleton settings are now managed in Settings > Singletons, rather than in Content.
  • Renamed Blocks to Fields.
  • Fields are now created globally, rather than per-use.
  • Replaced "Blocks" tabs in section/singleton/asset/user/globals settings with "Field Layout" tabs, which feature the new Field Layout Designer for customizing which tabs and fields should show up for the given element type.
  • Redesigned Settings > Languages, and renamed it to "Locales".
  • Sections and Singletons are now enabled on a per-locale basis, and have per-locale URL Format and URI settings, respectively.
  • Entries can now be translated into each of their section's locales.
  • Blocks will now display content based on a BLOCKS_LOCALE constant, which should be defined in index.php. If it's not, Blocks will default to the site's primary (first) locale.
  • Blocks now offers better protection against session hijacking, XSS attacks, account theft via DB read access, and other common attacks.
  • Restructured the blocks/app/ folder.
  • Users can now be logged in from multiple clients at once.
  • The Users CP tab is now selected when accessing /myaccount.
  • Added enclosure support to the FeedsService.
  • URL and URI validation now checks for whitespace.
  • When Blocks or a plugin is manually updated and a DB migration is needed, Blocks now redirects the browser back to the URL that the user was originally requesting after the update is complete.
  • Configured Twig to always recompile CP templates in the event that a new update has been updated manually and is pending its DB migration(s).
  • Several service API improvements.
  • Added InnoDB engine support to Blocks' requirements list.
  • Normalized the DB schema regardless of which Blocks packages are installed.
  • Minor performance improvements.
  • Minor CP design iterations.
  • Fixed a SimplePie autoload error on some versions of PHP.
  • Fixed a PHP error in the FeedsService when loading a feed that has missing or malformed item dates.
  • Fixed a bug where the 'userSessionDuration' and 'rememberedUserSessionDuration' config settings were not getting applied properly.
  • Fixed a bug where some Blocks::log() calls were not being flushed properly.
  • Fixed an auto-update errorwhen Blocks was instructed to delete a file that it was dependent on.
  • Fixed a bug where database backups had invalid SQL in some scenarios.
  • Fixed a CSS glitch in the Route settings modal.

Craft 0.9.2157 #

Released on Feb 16, 2013

  • The web.config file that comes with Blocks for IIS servers now hides “index.php” from the URL
  • Improved the wording of the error if blocks/storage/ or blocks/storage/runtime/ doesn’t exist or isn’t writable
  • blocks/config/blocks.php has been renamed to general.php, however Blocks will still look for blocks.php as a fallback if general.php doesn't exist
  • Dropped the craft_activity table
  • Fixed a bug on the Content, Assets, and Users indexes that prevented all links from being clicked on when the page had been scrolled down far enough to trigger fixed sidebar positioning
  • Fixed an error when renaming Assets folders

Craft 0.9.2151 #

Released on Feb 7, 2013

  • Added a craft()->isConsole() to determine if the current "request" is from a web app or a console app.
  • More Assets improvements including subfolder support, deleting folders, fixing an error where stale database records weren't getting deleted and displaying an icon for files with no thumbnails.
  • Blocks::hasPackage() now checks the file system and the database to determine if a package is installed.
  • Migrations run from the console now get echo'd out to the console as well as added to blocks.log.
  • Remove DbHelper::getTableNames() and use MySqlSchema->getTableNames() instead.
  • Fixed a error in the FeedsService if the feed item's date or updated date was null.
  • Fixed a bug where the SQL generated when backing up and restoring the database during an update wasn't being quoted properly preventing people with a '-' in their database name from running updates.
  • Fixed a bug where the migrations in build 2146 might not have run on some Blocks installs.
  • Fixed a bug in the updater where if a PHP fatal error occurred, the database and any files that might have been updated up until that point did not get rolled back properly.

Craft 0.9.2146 #

Released on Feb 5, 2013

  • Added craft.feeds for displaying RSS and Atom feeds on your website
  • Added the FeedsService
  • Added support for plugin migrations
  • Tons of enhancements and bugfixes for iOS
  • Sidebars are now hidden, and their elements moved up above the content, when the browser window is less than 768px wide
  • Data tables now collapse into a single column when the browser window is too narrow to contain them horizontally
  • Sidebar navigation will now get fixed positioning when the browser window has scrolled passed it
  • Updated SimplePie to 1.3.1
  • Beefed up Assets’ MIME type detection
  • Added .ogg to the list of allowed file upload extensions
  • craft()->request->isMobileBrowser() and craft.request.isMobileBrowser now return ‘true’ for tablets
  • Other minor CSS, JS, and accessibility enhancements
  • Blocks now checks to make sure you’re updating from at least the last breakpoint during a manual update
  • Fixed a MySQL error when renaming a section’s handle
  • Fixed a bug that prevented Global link blocks from showing their previously-linked entries
  • Fixed top-level image transformation generation for S3 asset sources
  • Fixed a bug where assets uploaded to S3 would be marked as private
  • Fixed a Javascript error that prevented Dashboard widgets from showing up on iPhone’s when viewing the page in portrait orientation
  • Removed a 404’d request for pages.css from Content > Pages

Craft 0.9.2137 #

Released on Feb 1, 2013

  • Updated the mobile browser detection script
  • Added craft.request.isMobileBrowser
  • Setting the ‘rememberUserNameDuration’ to ‘0’ now takes effect immediately
  • Fixed a JS error when adding new links to a Links block when there were already 3 or more links saved on the entry
  • Fixed a bug where Assets was attempting to create image transformations on non-image files
  • Updated the imageAreaSelect jQuery plugin to 0.9.10 for its jQuery 1.9 compatibility, fixing user photo and company logo uploading
  • Fixed a bug where tapping on the field hint text on the login page on a mobile browser would do nothing

Craft 0.9.2136 #

Released on Jan 31, 2013

  • Fixed a bug with the release patch script that was preventing some files from getting updated
  • Fixed a bug where “Show/Hide” labels weren’t getting right-aligned with password inputs when the input’s width didn’t span the full width of the container

Craft 0.9.2135 #

Released on Jan 30, 2013

  • Added breadcrumbs to all nested pages in the CP
  • Added user prompts when uploading files in Assets
  • Redesigned the Dev Mode strip in the CP header
  • Blocks now forces local asset sources’ Path and URL settings to end with a trailing slash
  • Renamed “Profile Blocks” to “Blocks”
  • Blocks now respects the ‘charset’ and ‘collation’ DB config values when creating new tables
  • Added dropTableIfExists(), addPrimaryKey, and dropPrimaryKey() to DbCommand
  • Renamed DbHelper::normalizeIndexName() to normalizeDbObjectName()
  • DbCommand->insertAll() now accepts an empty $vals argument
  • DbCommand->where(), andWhere(), and orWhere() now accept an empty $conditions argument
  • DbMigration now has wrappers for most of DbCommand’s methods
  • Added a new yiic querygen all command for getting the full PHP required to create a record’s table at once
  • Fixed a bug where Links blocks wouldn’t pass the linktype-specific settings off to the linktype when displaying its block settings
  • Fixed a bug where all previous links would get flushed out whenever a Links block was re-saved
  • Fixed a Twig error when viewing Assets in List View, and one of the file’s last modified date is unknown
  • Fixed a bug that prevented craft.entries.before() and after() from working
  • Fixed support for relative asset source paths
  • Fixed an error when using the yiic querygen addForeignKeysForRecord command on a record with relative records whose table doesn’t exist yet

Craft 0.9.2133 #

Released on Jan 28, 2013

  • Added a context menu to the Save button when editing entries, with options to save and continue editing, or save and create a new entry.
  • Normal (non-submit) buttons are now white rather than blue
  • Other subtle CSS tweaks

Craft 0.9.2131 #

Released on Jan 28, 2013

  • More work on the CP redesign.
  • Updated jQuery UI to 1.10.0, fixing the entry date fields
  • Blocks now uses the uncompressed version of jQuery UI when useCompressedJs is set to 'false'
  • Fixed a Twig syntax error in Content > Pages
  • Fixed some JS errors within Settings > Assets

Craft 0.9.2127 #

Released on Jan 25, 2013

  • Added access permissions for plugin CP sections
  • Redesigned the CP layout
  • Redesigned the Dashboard
  • CP section tabs are now defined as an array rather than plain old HTML
  • Offloaded the Javascript UI code to Garnish
  • Updated jQuery to 1.9.0
  • Updated Redactor to 8.2.2
  • Blocks will serve the uncompressed versions of jQuery and Redactor when the “useCompressedJs” config setting is ‘false’
  • Added a new parameter to yiic migrate create for specifying the plugin name
  • The craft_migrations table is now created during installation, rather than when first needed
  • New users will now get the default set of Dashboard widgets the first time they visit the Dashboard
  • Fixed a bug where passing 'true' to a BaseCriteria class’ magic setter methods would have no effect

Craft 0.9.2124 #

Released on Jan 21, 2013

  • Fixed a bug where a failed migration might not get logged in blocks.log.
  • Blocks now plays nice with other applications that are sharing the same database.

Craft 0.9.2123 #

Released on Jan 19, 2013

  • Added support for asset transformations with the options "scaleToFit", "scaleAndCrop" and "stretchToFit".
  • Added the concept for a 'non-patchable' update, in the case that so many files have changed, the entire 'app' folder will get downloaded and auto-updated.
  • Added the ability to auto-update entire folders, not just individual files.
  • Added 'backupDbOnUpdate' and 'restoreDbOnUpdateFailure' config vars that both default to true.
  • Added the ability for the updater to auto restore the last database backup if something goes wrong during an update.
  • Added support for hi-res asset thumbnails.
  • POSTed passwords with the keys 'password' and 'newPassword' are now redacted before they are saved to the Blocks log file in devMode.
  • Added new 'overridePHPSessionLocation' config variable with a default of 'auto' in which Blocks will attempt to determine if PHP sessions are being stored in a distributed memory caching environment (i.e. memcached).
  • Added packages column to the craft_info table with a list of the currently installed packages. Blocks::hasPackage() now checks this before it checks Info.php for packages.
  • Added new tableExists() method to BaseRecord.php to check to see if a record's underlying table exists in the database or not.
  • Added the concept of "Maintenance Mode" for the updater.
  • Added a new 'querygen' command to the CLI yiic command that generates querybuilder code for a given record.
  • Added support for more mime types in mimetypes.php.
  • New and improved AJAXified updater. Should prevent the need for the majority of manual updates from this point forward.
  • Updated to Yii 1.1.13
  • Add support for attaching blocks log files and SQL backups when creating a support ticket from the control panel.
  • Throw a 503 instead of a 404 from the front-end if the site is waiting on a manual database update to be completed.
  • getHeadNodes() renamed to getHeadHtml() and getFootNodes() renamed to getFootHtml() in TemplatesService.
  • Return Twig_Markup objects for getHeadNodes() and getFootNodes() template functions, so |raw isn't necessary.
  • Stop automatically appending .js and .css in includeCssFile() and includeJsFile().
  • Added 'allValue' config to checkboxSelect that defaults to '*'.
  • Give users a chance to log in with an account that has access to the control panel while the system is "off".
  • Database index and foreign key names are no longer MD5 hashed.
  • Dropped the $name param from the index/foreign key methods in DbCommand.
  • Assets validates that the source path exists and returns more accurate error messages.
  • Fixed a bug where Blocks couldn’t log in with web hosts that were storing PHP sessions in memcached.
  • Fixed a bug in two migrations that would occur if you were upgrading to the latest from a release before 0.9.2090.
  • Fixed a bug when performing a rollback on an entire folder after a failed update.
  • Bring the site out of maintenance mode if an error has occurred and we have successfully rolled everything back.
  • Fixed a bug in IOHelper that would skip files that started with a '.' when getting a folder's contents.
  • Make sure storage/runtime is writable very early in the request and bail if it is not.
  • Several various past migration fixes.
  • Only check for 'unsigned' and 'zerofill' for numeric column types and check for 'charset' and collation' for textual column types.
  • Fixed a bug when determining new migrations that need to be applied.
  • Fixed a bug when using CLI yiic command and an exception was thrown.
  • Fixed a bug where Blocks couldn’t log in with web hosts that were storing PHP sessions in memcached.
  • Fixed a bug in two migrations that would occur if you were upgrading to the latest from a release before 0.9.2090.
  • Fixed some logic errors when refreshing the bucket list for a new source in assets.

Craft 0.9.2117 #

Released on Dec 24, 2012

  • Fixed a PHP error when accessing the CP while the site is turned off

Craft 0.9.2116 #

Released on Dec 24, 2012

  • You can now get the URL of an asset’s resized file using {{asset.getUrl('sizeHandle')}}
  • Service name and API tweaks
  • Fixed an auto-updating error on some versions of PHP
  • Fixed an issue where CP resources were getting corrupted on delivery
  • Fixed a bug where Assets link blocks would only allow you to choose files from the first asset source
  • Fixed the remaining bugs around selecting content based on the current language

Craft 0.9.2115 #

Released on Dec 21, 2012

  • Twig no longer captures an underlying Exception and wraps it in it's own Twig_Error_Runtime exception hiding the original error.
  • Fixed several Assets bugs.
  • Fixed a syntax error in the backup SQL generated before any database migrations are ran.
  • CP logo changes and user profile image changes no longer reload the whole page.
  • Moved addTablePrefix() to DbHelper.
  • Added RTE compatibility for Asset blocks.
  • Added additional parameters to DbCommand->createTable() for defining whether the ID and audit columns should get added to the table.

Craft 0.9.2114 #

Released on Dec 20, 2012

  • Fixed an error when editing/creating a user group, or administering a user
  • Fixed an error in the Assets section when an asset source exists but has not been indexed yet

Craft 0.9.2112 #

Released on Dec 20, 2012

  • Added user permissions
  • Added support for public user registration, logging in, and password resetting from the front end of the site
  • Added the ‘loginPath’, ‘logoutPath’, ‘resetPasswordPath’, and ‘pageTrigger’ config settings
  • Added the ‘loginUrl’ and ‘logoutUrl’ global template variables
  • Added the ‘requireLogin’ and ‘requirePermission’ template tags
  • Added Settings > Users > Settings where you can toggle whether to allow public user registration
  • Finished Amazon S3 support for Assets
  • Added Settings > Assets > Sizes for defining sizes that your uploaded images should be cropped to
  • Added Settings > Assets > Operations where you can manually trigger asset indexing and size updating
  • Added the list view for assets
  • HTTP error templates are no longer prefixed with “error” (e.g. “404.html” rather than “error404.html”)
  • All dates are now stored as DATETIMEs rather than Unix timestamps
  • AccountService and craft()->account have been renamed to AccountsService and craft()->accounts
  • Security improvements
  • Added a “Download” menu option for manually downloading updates even if an auto-update is available
  • Blocks now backs up the database before running any database migrations in an update
  • Blocks will now clear the storage/runtime/cache and storage/runtime/compiled_templates folders when updated
  • Users are now automatically logged in after resetting their password
  • CP routes provided by plugins can nowow include {handle} tokens for matching handles in URLs
  • Section content tables are now named in all lowercase letters, regardless of the section’s handle’s casing
  • Fixed an error when accessing the Assets section
  • Fixed a bug that prevented entries’ Author settings from saving
  • Fixed some bugs around selecting content based on the current language
  • Fixed PATH_INFO support for Nginx

Craft 0.9.2106 #

Released on Dec 4, 2012

  • Added a new “Reverse Link Handle” setting to the Links blocktype for accessing reverse links
  • Added a new paginate tag for paginating entries, users, and sections
  • Added a new includeHiResCss tag for including CSS targeted at hi-res displays
  • Added new 'siteRoutesSource' config option, which when set to 'file' tells Blocks to pull routes from blocks/config/routes.php and removes the Settings > Routes page
  • Included the section name in the page title when authoring a new entry
  • Handles now have much more comprehensive reserved word validation
  • You can now pass params directly into craft.entries(), craft.sections(), and craft.users() rather than exclusively through their output functions.
  • Removed Blocks’ custom ‘text’ filter since it was doing the same thing as Twig’s included (and better-named) ‘striptags’ filter
  • Blocks now supports a new config file format, where the config files just return an array of values, rather than defining $blocksConfig. Config files now come with this new format out of the box.
  • Beefed up the BaseCriteria class and simplified the criteria classes that extend it
  • ArrayHelper::stringToArray() now returns an empty array when passing in an empty value
  • Fixed a bug in the automatic updater that was causing updates to fail with newly added files.
  • Fixed a bug where some HTML would get encoded in the installer if the server didn’t meet Blocks’ minimum requirements

Craft 0.9.2104 #

Released on Nov 30, 2012

  • Fixed a regression bug introduced in 0.9.2102 that would cause entries with empty tags to not be published.
  • Fixed error notification text color.

Craft 0.9.2103 #

Released on Nov 30, 2012

  • Fixed a bug where the “System Status” setting in Settings > General wouldn’t have any effect when turning the system from Off to On
  • Renamed craft.request.uri to craft.request.path to better mimic the HttpRequestService

Craft 0.9.2102 #

Released on Nov 30, 2012

  • Suppress the PHP warning that is generated in IOHelper when checking if a file is writable and it is not
  • Fixed a bug where entry.getCpUrl() wouldn’t bring you to the CP from the front-end
  • Moved entry URIs into Blocks Core from Blocks PublishPro
  • Make sure that a section has a valid URL Format before saving an entry
  • Fixed several templates that were pulling in the wrong CP template when certain packages were not installed.
  • Fixed a bug when decoding an Elliott response and there are no new releases
  • The ability to toggle the System Status under General Settings
  • Add the Updates widget to the dashboard by default for a new install.
  • Added a lightswitch input and added forms.lightswitch / forms.lightswitchField
  • Set UserCriteria->status to 'active' by default
  • Renamed global 'date' variable to 'now'
  • entry.tags is always an array now

Craft 0.9.2101 #

Released on Nov 29, 2012

  • Fixed a bug when trying to access the properties of an empty blockType that was occurring in the build 2100 migration.
  • Fixed a bug that was causing performance issues on certain host configurations when detecting if PATH_INFO is supported and if the script name should be omitted from the URL.
  • Don’t show the Suspend/Archive buttons in the user admin settings for the current user.

Craft 0.9.2100 #

Released on Nov 29, 2012

  • Auto-updating! (for updates going forward)
  • Fixed the Updates widget
  • Entry deletion
  • You no longer need to click on a section in the Content index before a “New Entry” button will show up
  • Added 'authorId', 'authorGroupId', 'authorGroup', 'before', and 'after' params to craft.entries
  • craft.entries.find now returns entries ordered by their Post Date in descending order by default
  • When deleting a section, the number of entries that will also be deleted is included in the confirmation dialog
  • Fixed a bug that prevented entries from showing up on the site when logged out
  • The “This block is translatable” setting will now always show up if the Languages package is installed
  • Added safeguards against some security vulnerabilities when uploading images
  • Woff fonts are now sent with the correct mime-type header
  • Fixed a PHP error when editing a Checkboxes, Dropdown, Multi-select, or Radio Buttons block that didn’t have any options defined
  • Vastly improved performance when Blocks is running on PHP’s built-in development server
  • Cleaned up the HTTP headers sent from craft()->request->sendFile()
  • Fixed a bug where the logo cropping modal window would show up in General Settings before it was needed
  • Handles named “uri” or “url” will no longer pass validation
  • Fixed several errors when deleting things throughout the system
  • Added the Fullscreen Redactor plugin to the Rich Text blocktype
  • Updated Redactor to 8.2.0
  • Updated Yii to 1.1.12
  • Dev Mode no longer gets its own cache duration
  • Added a new 'getResourcePath' hook so plugins can listen for additional resource paths
  • Added DbHelper::parseDateParam method for parsing date params
  • The Javascript method Blocks.postActionRequest() now accepts a 4th parameter: an onError() callback function
  • Updated several API methods to stop returning arrays indexed by the entity IDs, unless explicitly requested
  • Records now have the ability to specify what happens when a BELONGS_TO related row gets deleted (e.g. CASCADE)
  • Fixed a PHP error when uninstalling and reinstalling a plugin in the same request

Craft 0.9.2094 #

Released on Nov 23, 2012

  • A blocking bug in the installer where it would throw a foreign key constraint violation.
  • A bug when CP error templates include/extend another CP template.
  • Nicer default error templates.
  • Just throw a 503 exception when the site is offline rather than loading an _offline template.

Craft 0.9.2092 #

Released on Nov 22, 2012

  • Upgraded Twig to 1.11.1
  • Fixed some text layout issues in Firefox
  • Fixed the height of filler rows in Links blocks
  • Fixed image uploading (again)
  • Added Plugin icon support
  • Added craft()->templates->includeHiResCss() for including CSS targeted at hi-res displays

Craft 0.9.2090 #

Released on Nov 21, 2012

  • Added a new “Get Help” widget, for quickly posting to Blocks Support
  • Gave sections a new setting for customizing the “Title” field’s label for their entries
  • Templates no longer need to use the |raw filter when outputting Rich Text blocks
  • Handles now get auto-generated in camelCase
  • Admins accessing the CP while Blocks is in Dev Mode will see a black & yellow strip across the top of the CP
  • Added support for the HTML5 'autofocus' attribute to all the macros in the CP’s _includes/forms.html template
  • Removed a couple out-of-place “entry” references
  • The bundled htaccess file now prevents /favicon.png and /apple-touch-icon.png requests from getting routed to Blocks
  • The bundled htaccess file no longer assumes that Blocks is going to be installed in the web root
  • Improved the installer’s PDO driver requirement checking
  • Fixed page routing
  • Fixed some wonkiness caused by the jQuery UI Datepicker
  • Fixed various errors that occurred throughout the CP after disabling/uninstalling a plugin that provided widgets and/or blocktypes that were in use
  • Fixed image uploading when Blocks is not running in Dev Mode
  • Fixed a bug where unchecking the section setting “Entries in this section have their own URLs” would have no effect on save
  • BaseModel’s static populateModels() method now always returns an array

Craft 0.9.2084 #

Released on Nov 18, 2012

  • phperrors.log path to storage/logs/phperrors.log
  • Empty HttpException status codes are now allowed which will resolve to the generic error.html template.

Craft 0.9.2083 #

Released on Nov 18, 2012

  • Changed "URL" to "URI" in the routes UI.
  • Checks for PDO and PDO_MYSQL now display a more appropriate error message if they are not available.
  • In config/defaults/db.php, set default collation to utf8_unicode_ci instead of utf8_general_ci.
  • An exception that was getting thrown when adding a UserLinkType to a section's blocks.

Craft 0.9.2081 #

Released on Nov 17, 2012

  • Entry drafts and versions
  • Fixed a bug where Blocks would route requests without any URI to the first entry in the database, when there’s no homepage set
  • Other minor improvements

Craft 0.9.2080 #

Released on Nov 17, 2012

  • Email setting testing can now be performed without actually saving the new email settings, via a new “Test” button
  • Fixed a Twig error on any template using {{ forms.textarea() }} or {{ forms.textareaField() }}
  • UrlHelper::getActionUrl() now includes the script name (e.g. index.php) even if Blocks is configured to omit it from URLs, so that multipart form data is not lost in POST requests

Craft 0.9.2079 #

Released on Nov 16, 2012

  • Fixed an “unknown error” when updating Blocks

Craft 0.9.2078 #

Released on Nov 16, 2012

  • The CP is now accessed via a trigger segment in the URL path (“admin” by default), rather than the BLOCKS_CP_REQUEST constant (previously found in admin.php)
  • Renamed the 'logoutTriggerWord' config setting to 'logoutTrigger'
  • Removed the 'urlFormat' config setting in favor of the new 'usePathInfo' setting
  • Added a new 'omitScriptNameInUrls' config setting
  • The index.php redirect in the bundled htaccess file now includes a QSA flag, so query strings aren’t lost in the redirect
  • Plugins are now sorted by name in the sidebar and in Settings > Plugins
  • {% includeCssFile %}, {% includeJsFile %}, {% includeCssResource %}, and {% includeJsResource %} tags no longer require .css and .js extensions
  • Added {{ craft.session.hasFlash(messageKey) }} to the templates
  • Fixed URL validation for URLs that don’t have a TLD
  • Got rid of that rogue ‘R’ next to the ‘Delete’ button when editing a route
  • Fixed The Darth alignment in the Users index
  • Fixed a bug where preselected entities would still show up in Add Links modals after a page refresh
  • Fixed a bug where entities don't re-appear in the Add Links modal after being deselected
  • Fixed some text encoding issues on the “Can’t install Blocks” screen
  • Plugin hook methods must now begin with “hook”
  • Moved automatic table creation/deletion for plugins into BasePlugin->createTables() and dropTables()
  • Fixed a MySQL error when deleting a plugin that has record classes representing tables that don’t exist
  • craft()->request->getType() has been removed in favor of isCpRequest(), isSiteRequest(), isResourceRequest(), isActionRequest(), and isTemplateRequest()
  • Added UrlHelper::getCpUrl() and UrlHelper::getSiteUrl() for generating URLs explicitely to the CP or front-end site.
  • Added craft()->request->getCookie($name)
  • Added a new addTwigExtension plugin hook
  • Renamed craft()->config->getItem() to get(), and the magic getter has been removed from the ConfigService (so craft()->config->itemName is no longer possible)
  • Removed 'urlFormat' and 'useCompressedJs' settings from blocks/config/blocks.php
  • Text fields in the CP are now sized using box-sizing: border-box, and are made to span the full width of their container using a .fullwidth class, rather than <div class="textwrapper">
  • requirePostRequest() and requireAjaxRequest() controller methods no longer get any special treatment when Blocks is in Dev Mode

Craft 0.9.2071 #

Released on Nov 14, 2012

  • PHP error when saving a Links block
  • PHP error when PHP < 5.3 is running; now a friendly "PHP 5.3+ is required" message displays instead. Requires that you update index.php and admin.php in your web root.

Craft 0.9.2068 #

Released on Nov 13, 2012

  • Url route input focussing in Chrome.
  • Missing package class errors.

Craft 0.9.2065 #

Released on Nov 13, 2012

  • Entry URLs were relative to the CP URL when outputting them from within the CP
  • an error when editing a page block

Craft 0.9.2064 #

Released on Nov 13, 2012

  • Delete buttons for Sections and Content Blocks

Craft 0.9.2063 #

Released on Nov 13, 2012

  • Private Beta kickoff!