Correctly handle shorthand byte values (see #6345).
Also update the sitemap if a news/event feed is updated (see #5727).
Correctly sort by date in the listing module (see #5609).
Correctly handle the autologin key if a member is duplicated (see #5945).
Correctly export pages as PDF (see #6317).
Do not show the debug bar in the modal dialog (see #6302).
Ignore the "maxlength" setting in certain form fields (see #6283).
Correctly show the "toggle page status" icon (see #6282).
Removed the TinyMCE spell checker (see #6247).
Updated TCPDF to version 3.0.38 (see #6268).
Correctly render the pages breadcrumb menu for non-admin users (see #6067).
Correctly handle the accordion fields during the version 3.1 update (see #6229).
Correctly handle special characters in page aliases (see #6232).
Consider the additional arguments in Frontend::jumpToOrReload()
(see #5734).
Prevent article aliases from using reserved names (see #6066).
Correctly update the RSS feeds if a news item or event changes (see #6102).
Correctly link to news and calendar feeds via insert tag (see #6164).
Make the CSS ID available in the custom navigation module (see #6129).
Do not cache the "toggle_view" insert tag (see #6172).
Unset the primary key if a model is deleted (see #6162).
Support tel:
and sms:
upon IDNA conversion (see #6148).
Apply the width and height to the audio player as well (see #6114).
Do not exit after a template has been output (see #5570).
Drop the database query cache (see #6070). This renders executeUncached()
and
executeCached()
deprecated. Use execute()
instead.
Handle all possible errors when uploading files (see #5934).
Add the global date format in PageModel::loadDetails()
(see #6104).
Do not override the referer upon Ajax requests (see #5956).
Fixed the content slider in IE < 9 (see #5878).
Do not set a database driver by default (see #6088).
Decode punycode domains in the listing module (see #5946).
Show all themes a template is defined in (see #6071).
Do not add the domain name twice in redirectToFrontendPage()
(see #6076).
Use the currentLogin
field to sort users by their last login (see #5949).
Fix the offset handling in the CSS grid (see #5943).
Do not use the date
, time
and datetime
input types (see #5918).
Show tooltips for selected single images in the file picker (see #6031).
Correctly synchronize if a sub folder is selected (see #5979).
Correctly handle password which are longer than 64 characters (see #6015).
Added missing Vietnamese characters to the UFT8 mapper (see #6010).
Decode entities in the page and file pickers (see #5989).
Ensure that the default user and group are integer values (see #6017).
Added the Czech typolinks translations (thanks to ShiraNai7) (see #6051).
Added an option to purge the search cache (see #6041).
Preserve the repository tables when importing a theme (see #6037).
Pass the module to getAttributesFromDca()
in the registration and personal
data module classes (see #6002).
Validate the e-mail address when creating an admin user (see #6003).
Fix the newslist pagination count (see #5997).
Make the GD image max width and height parameters mandatory (see #5940).
Replace all insert tags when exporting a page as PDF (see #5990).
Correctly validate the options in Widget::isValidOption()
(see #5951).
Decode IDNA domains in any system mail (see #5932).
Store integers bigger than PHP_INT_MAX
as string (see #5939).
Fix the alignment of the versions menu in IE (see #5962).
Do not cache the result of Model::count*()
(see #5973).
Added some missing office file extensions to the configuration (see #6021).
Fixed the "indexPage" hook (see #5967).
Do not copy the autologin hash when duplicating members (see #5945).
Added .svgz support to the default .htaccess
file (see #5938).
Append the query string when forwarding (see #5867).
Decouple the file/page picker breadcrumb from the file/page manager (see #5899).
Also show the mandatory star in password confirmation fields (see #5926).
Only return one IP address in Environment::get('ip')
(see #5830).
Explicitly check for .php
files when scanning DCA files (see #5898).
Replaced all dummy .htaccess
files with .gitignore
files.
Quote wildcard characters in MySQL LIKE
queries (see #5896).
Correctly align the version drop-down menu in Safari (see #5854).
Make sure window.$
is mapped to MooTools (see #5892).
Do not add sort buttons to table row headers (see #5845).
Show the newsletter channels upon registration (see #5874).
Updated ACE to version 1.1.01 (fixes #5852).
Correctly handle hidden pages in the custom navigation module (see #5832).
Support FAQs with images on the FAQ page (see #5810).
Support using commas in folder names in the file selector (see #5823).
Ignore the auto_item
parameter when forwarding internally (see #5886).
Added support for old IE versions to swipe.js (see #5862).
Correctly bypass the cache if bypassCache
is set (see #5872).
Preserve the CSS3PIE behavior file path when combining style sheets (see #5848).
Support all known template types in the autoload creator (see #5857).
Correctly adjust the accordion elements to the new DB structure (see #5820).
Added E_USER_DEPRECATED
to the list of error constants (see #5839).
Set the image dimensions if an image is added in TinyMCE (see #5790).
Pass the host and language to subpages when generating the menu (see #3765).
Improve the timeout calculation of the command scheduler to better support minutely jobs (see #5775).
Do not used cached scan()
results in the Files
class (see #5795).
Do not throw an exception during RSS feed generation if a news archive or calendar is linked to an invalid target page (see #5781).
Fix the tabindexes if there are multiple wizards on the same apge (see #5779).
Also support textareas when autofocusing input fields (see #5774).
Add a page to the XML sitemap even if it is not indexed internally (see #5714).
Correctly auto-create the page aliases (see #5765).
Limit the width of the table names in the version overview (see #5769).
Urldecode file names in the file manager in "edit multiple" mode (see #5764).
Do not propagate the click events of the edit icons (see #5731).
Fix the return value of ModuleLoader::getDisabled()
(see #5726).
Re-add the website title to the login screen (see #5749).
Store the language when creating an administrator account (see #5718).
Do not show the URL encoded file name on the confirmation screen (see #5543).
Correctly add image enclosures to calendar feeds (see #5685).
Pass the news count to ModuleNews::parseArticle()
(see #5708).
Detect the Silk user agent of the Kindle Fire (see #5679).
Correctly auto-generate folder URL aliases (see #5697).
Register the CSV import in the news and calendar modules (see #5701).
Do not run the database updates in a fresh installation (see #5694).
Correctly update the edit links in the module wizard (see #5687).
Make sure the jQuery related database fields exist when the version 3.1 update is executed (see #5689).
Convert the page language to a locale when looking for meta data (see #5678).
Replace existing file
parameters in the download elements (see #5683).
Do not use count()
in a for
loop condition (see #5681).
Hide the back link and "save and back" buttons in the modal dialog.
Do not store an empty tl_versions.editUrl
field upon Ajax requests.
Correctly reload or redirect upon Ajax requests (see #5647).
Preserve protocol relative URLs when minifying the HTML markup (see #5664).
Correctly export the pubDate
of calendar feeds (see #5641).
Remove script tags when printing an article as PDF (see #5626).
Purge the internal cache when disabling the Contao safe mode (see #5579).
Correctly set the end date of duplicated events (see #5608).
Apply the access restrictions of content elements and modules in the front end only (see #5603).
Correctly detect open HTML tags in String::substrHtml()
(see #5669).
Added the "initializeSystem" hook (see #5665).
Do not trigger the "setNewPassword" hook twice (see #5247).
Inject the command scheduler script inline to reduce the number of JS files.
Store IDN domains in Punycode format (see #5571).
Re-added the row classes to the image gallery (see #5658).
Added the File::getModel()
and Folder::getModel()
methods (see #5656).
Made the error screens translatable.
Updated SwiftMailer to version 4.3.1.
Removed the MooTools mediaelement.js version.
Show a hint if a content element needs a MooTools or jQuery template.
Support assigning icons for global operations in the DCA (see #5541).
Show the edit buttons of selected nodes in the file manager.
Do not rebuild the URLs for the search index (see #5509).
Updated TCPDF to version 6.0.010 (see #5614).
The tablesort script can now be added as moo_
or j_
template in the page
layout, so the library can be replaced if needed.
Updated Swipe.js to version 2.0 and reworked the slider implementation.
Updated Picker.Date to version 2.0.0.
Updated Colorbox to version 1.4.11.
Updated jQuery UI to version 1.10.2.
Updated jQuery to version 1.9.1 (see #5600).
Updated html5shiv to version 3.6.2.
You can now click elements to edit them:
[Ctrl] + click
: edit the element[Ctrl] + [Shift] + click
: edit the element's header
On Mac OS the command key is used instead:
[Cmd] + click
: edit the element[Cmd] + [Shift] + click
: edit the element's header
On touch devices, you can to touch an element twice to edit it.
Allow to set the slider delay and speed in the wrapper element.
Always check the /templates
folder for customized templates even if there is
a theme-specific template folder (see #5547).
Make $this->inColumn
available in content elements and hybrids (see #5442).
Support all white-space
settings in the style sheet editor (see #4519).
Show a preview image when editing image meta data (see #4948).
Merge the custom layout sections upon theme import (see #5000).
Support creating indexes on multiple columns in the DCA. Usage example:
'sql' => array
(
'keys' => array
(
'id' => 'primary',
'pid,name' => 'unique',
)
)
This will create a unique index over the pid
and name
columns.
Added a $GLOBALS['TL_BODY']
array to add custom code at the end of a page
independent from MooTools or jQuery (see #5583).
Edit all related elements (e.g. alias elements) in a modal dialog.
Added an option to disable modules in the page layout (see #5558).
Added a vendor library to parse the Contao changelog file (see #5569).
Added the "parseWidget" hook (see #5553).
Link insert tags and navigation modules are now domain-aware (see #3765).
Improved the database-assisted file system:
- The file picker now shows the file system instead of the database
- You can switch from the file picker to the file manager in the popup dialog
- The file picker automatically adds the selected resources to the database
This means that you do not have to manually synchronize the file system and the database anymore. Further improvements:
- Added a breadcrumb menu to limit the nodes of the page and file picker
md5_file()
is no longer applied to files bigger than 2 GB- A folder hash is now calculated of the file names instead of their hashes
- All DBAFS-related routines have been centralized in the
Dbafs
class - Permission to synchronize the file system can be given to regular users
Use the Contao page and file pickers in TinyMCE (see #1698).
Pre-fill the "alt" and "caption" fields with the file meta data (see #5225).
Override the page description if a certain article is requested (see #4742).
Moved System::reload()
, System::redirect()
and System::addToUrl()
to the
Controller
class (see #4698).
Always show the image thumbnails in the "FileTree" widget (see #4358).
Added a location field to the calendar module (see #1870).
Added new methods to models and model collections:
Model::getResult()
: returns the database objectCollection::fetchAll()
: returns the data of all models as arrayCollection::getResult()
: returns the database object
Insert tags now support flags (see #4717). Usage example:
{{ua::browser|uncached}}
{{page::title|decodeEntities|strtoupper}}
Currently supported flags are:
uncached
: preserve the tag when writing the cache filerefresh
: regenerate the output ignoring any cached versionaddslashes
: quote the output with slashesstripslashes
: un-quote the outputstandardize
: standardize the outputampersand
: convert ampersands to entitiesspecialchars
: convert special characters to entitiesnl2br
: new line to<br>
nl2br_pre
: new line to<br>
except in preformatted textstrtolower
: string to lower caseutf8_strtolower
: Unicode aware string to lowercasestrtoupper
: string to upper caseutf8_strtoupper
: Unicode aware string to uppercaseucfirst
: make first character uppercaselcfirst
: make first character lowercaseucwords
: uppercase the first characeter of each wordtrim
: strip whitespace from the beginning and endrtrim
: strip whitespace from the beginningltrim
: strip whitespace from the endutf8_romanize
: romanize the outputstrrev
: reverse the output stringencodeEmail
: decode encoded e-mail addressesdecodeEntities
: decode entitiesnumber_format
: format a number (System::getFormattedNumber()
)currency_format
: format a currency (System::getFormattedNumber()
)readable_size
: convert the output to a human readable size
Custom flags can be added via the "insertTagFlags" hook.
Added an option to purge the system log to the maintenance module (see #4701).
Added the File::resizeTo()
method (see #3883).
Use the new HTML5 form fields in the front end (see #4138).
Added the "getPageLayout" hook (see #4736).
Added more options to the event list module (see #5481):
- show upcoming events of the next month/year
- show past events of the previous month/year
Added the "modifyFrontendPage" hook (see #4291).
Replaced CodeMirror with ACE (see #5332).
The newsletter subscription module now also stores the confirmation date of the double opt-in subscription (see #5200).
Comments with a reply now have a special icon (see #3202).
Renamed responsive.css
to grid.css
(see #5475).
Updated mediaelement.js to version 2.11.3 (see #5495).
Made the number of pagination links configurable (see #4601).
Added an option to disable CSS3PIE in the style sheet settings (see #4985).
Link the file/page picker and file/page manager (see #4856).
Made the years in monthly archive menus clickable (see #4450).
The form generator now supports the "novalidate" attribute (see #4263).
Added access protection for articles (see #1869).
Added the Widget::addAttribute()
method (see #4744).
Back end forms are no longer saved if the form is auto-submitted (see #4077). This will prevent empty field warnings when switching element types.
The "show details" link now opens in a modal window (see #5188).
The search index is now rebuilt via Ajax requests.
Improved the back end referer management to support multiple tabs (see #5436).
Automatically synchronize the database when working on a file or folder in the
upload directory with the File
or Folder
class (see #4991).
Moved the "protect folder" settings to the edit screen (see #5376). Also, Contao now shows a "possibly not working" note if not an Apache server is used.
Added a "file upload" button to each folder in the file manager (see #3432).
Added a "default" option to the login language select menu (see #5088).
Show the database ID of a file in the file popup (see #5211).
Made Config::get()
static (see #3135).
Add the autoloader files to the internal cache.
Support multiple filter panels in the DCA (see #4542).
// Define the panel layout
$GLOBALS['TL_DCA']['…']['panelLayout'] = 'filter;filter;sort,limit';
// Assign the filters to the panels
$GLOBALS['TL_DCA']['…']['fields']['country']['filter'] = 1; // or true
$GLOBALS['TL_DCA']['…']['fields']['groups']['filter'] = 2;
Added the "panel_callback" to add custom panels to a DCA view (see #4542).
Added a content element slider based on swipe.js (see #4600).
Replaced the up and down arrows with a drag handle where applicable and made the items sortable via drag and drop (see #4434). This includes:
- the checkbox wizard
- the list wizard (content element)
- the table wizard (content element)
- the module wizard (page layout)
- the options wizard (form generator)
- the key/value wizard
The parent view now uses the drag handle to move items, too.
Handle the plus in words like "Google+" or "A+B" in the seach (see #4497). This will require to rebuild the search index after the update!
Decouple the Automator
class from Backend
, so the database connection is not
established by default (see #5362).
Moved Controller::getTimeZones()
to System::getTimeZones()
.
Moved System::getModelClassFromTable()
to Model::getClassFromTable()
.
Moved System::parseDate()
to Date::parse()
.
Moved Controller::prepareForWidget()
to Widget::setAttributesFromDca()
.
Make sure to always call the inherited method of the specific widget class and not the one of the parent class:
// Wrong
new TextField(Widget::setAttributesFromDca(…));
// Correct
new TextField(TextField::setAttributesFromDca(…));
See #4697 for more information.
Added the redirect status code 307 to System::redirect()
(see #5375).
Added the File::sendToBrowser()
method (see #4696).
Made all static methods of the Input
class public (see #3382).
Optionally connect to the database via socket (see #5181).
Allow to scroll the page when moving elements via drag and drop (see #5081).
Use a local version of "Architects Daughter" in the back end (see #5312).
Do not build the internal cache automatically (see #5307).
Replaced the member select menu in the front end preview pane with a text field to enter a username (see #5320). The text field supports autocompletion based on an HTML5 data list which is dynamically filled via Ajax.
Fixed the moo_mediaelement.xhtml
template (see #5309).
Allow users to edit comments of news archives and calendars even if they are not allowed to access the news or calendar module (see #5174).
Better file synchronization statistics (see #4908).
Always show the mandatory star in the field labels (see #4730).
Trigger the error 404 page if a request parameter is set twice (see #4277).
Moved the Transifex .xlf
files to the languages
folders of the modules and
tweaked the System::loadLanguageFile()
method to handle them (see #5005).
Moved Controller::getPageDetails()
to PageModel::findWithDetails()
and
PageModel->loadDetails()
(see #4692).
Moved Controller::findContentElement()
to ContentElement::findClass()
and
Controller::findFrontendModule()
to Module::findClass()
(see #4684).
Moved Controller::optionChecked()
and Controller::optionSelected()
to the
Widget
class (see #4665).
Moved System::getIndexFreeRequest()
to Environment::get('indexFreeRequest')
(see #4685).
Moved Controller::printArticleAsPdf()
to ModuleArticle::generatePdf()
(see #4683).
Moved Controller::generateImage()
to Image::getHtml()
(see #4664).
Moved System::splitFriendlyName()
to String::splitFriendlyEmail()
and
made the Email
class independent from the System
class (see #4694).
Moved Controller::getBackendThemes()
to Backend::getThemes()
(see #4694).
Moved Controller::getTheme()
to Backend::getTheme()
(see #4662).
Added the classes "toggle_desktop" and "toggle_mobile" to the desktop/mobile switch link (see #4975).
Language dialects such as fr_FR
are now supported (see #4836). Note that
locales like fr_FR
(used to store user languages) differ from language codes
like fr-FR
(used to define page languages).
The pageTree widget is now sortable just like the fileTree widget and the custom and quick navigation modules consider the custom order (see #4936).