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 craft_content 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!