Translations
Info
All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh

TYPO3.CMS/Releases/7.2/Feature

From TYPO3Wiki
Jump to: navigation, search

Contents

Feature: #20555 - Strip empty HTML tags in HtmlParser

Description

A new functionality is introduced in the HtmlParser that allows the stripping of empty HTML tags.

It can be used in the Frontend by using the HTMLparser <t3tsref:htmlparser> TypoScript configuration of stdWrap <t3tsref:stdwrap-htmlparser>:

stdWrap {

    // If this is set all empty tags are stripped, unless a list of tags is provided below.
    HTMLparser.stripEmptyTags = 1

    // This setting can be used to filter the tags that should be stripped if they are empty.
    HTMLparser.stripEmptyTags.tags = h2, h3
}

It is also possible to use it in the HTMLparser_rte or HTMLparser_db <t3api:transformations-tsconfig-processing-htmlparser> in Page TSconfig:

// For rtehtmlarea we need to use the entry parser because otherwise the p tags will
// be converted to linebreaks during the RTE transformation.
RTE.default.proc.entryHTMLparser_db {
    stripEmptyTags = 1
    stripEmptyTags.tags = p

    // Since rtehtmlarea adds non breaking spaces in empty <p> tags we need to
    // tell the parser that &nbsp; should be treated as an empty string:
    stripEmptyTags.treatNonBreakingSpaceAsEmpty = 1
}

Hint! Please note that the HTMLparser will strip all unknown tags by default. If you only want to strip empty tags, you need to set keepNonMatchedTags to TRUE or configure the allowed tags:

stdWrap {
    HTMLparser.keepNonMatchedTags = 1
    HTMLparser.stripEmptyTags = 1
    HTMLparser.stripEmptyTags.tags = h2, h3
}

Impact

If the configuration is not set, the HtmlParser behaves like before so there is no impact to existing systems (unless they already have used the stripEmptyTags setting for whatever reason).

Feature: #32651 - Add scheduler task to remove deleted records

Description

A new scheduler task for removing deleted records has been added. The maximum age and the affected tables are configurable in the task's settings.

Feature: #36743 - Registry for adding text extractor classes

Description

Text extraction from files is a complex task. Thus it would be un-wise to implement that over and over again if needed. By providing a registry, text extraction services can be provided to other extensions.

It is expected that there won't ever be a lot of implementations for text extractors. The core ships with an extractor for plain text files (.txt file extension).

When asking the registry to provide a text extractor for a file it will "ask" the registered text extractors whether they can read the file. The first text extractor returning TRUE will be returned and can then be used to actually read/extract text from the file.

Every registered text extractor class needs to implements the TextExtractorInterface with the following methods:

  • canExtractText() gets a file reference and returns TRUE if the text extractor can extract text from that file. How this is determined is up to the text extractor, f.e. by using MIME type or file extension as indicators.
  • extractText() gets a file reference and is expected to return the file's text content as string.

It is possible to register your own text extractor classes in the ext_localconf.php of an extension.

Examples

Text extractor registration

$textExtractorRegistry = \TYPO3\CMS\Core\Resource\TextExtraction\TextExtractorRegistry::getInstance();
$textExtractorRegistry->registerTextExtractor(
    \TYPO3\CMS\Core\Resource\TextExtraction\PlainTextExtractor::class
);

Usage

$textExtractorRegistry = \TYPO3\CMS\Core\Resource\TextExtraction\TextExtractorRegistry::getInstance();
$extractor = $textExtractorRegistry->getTextExtractor($file);
if ($extractor !== NULL) {
    $content = $extractor->extractText($file);
}

Impact

The registry on its own doesn't do anything. It provides a facility in the core that allows extensions to provide text extraction services to be used by other extensions.

Feature: #47712 - New Locking API

Description

The new Locking API follows a new approach. Due to the problem of a very scattered support of locking methods in the various operating systems, the new API introduces a locking service, which provides access to the various locking methods. Some basic methods are shipped with the Core, but the available methods may be extended by extensions.

A locking method has to implement the LockingStrategyInterface. Each method has a set of capabilities, which may vary depending on the current system, and a priority.

If a function requires a lock, the locking service is asked for the best fitting mechanism matching the requested capabilities. e.g. Semaphore locking is only available on Linux systems.

Usage example

Acquire a simple exclusive lock:

$lockFactory = GeneralUtility::makeInstance(LockFactory::class);
$locker = $lockFactory->createLocker('someId');
$locker->acquire() || die('ups, lock couldn\'t be acquired. That should never happen.');
...
$locker->release();

Some methods also support non-blocking locks:

$lockFactory = GeneralUtility::makeInstance(LockFactory::class);
$locker = $lockFactory->createLocker(
    'someId',
    LockingStrategyInterface::LOCK_CAPABILITY_SHARED | LockingStrategyInterface::LOCK_CAPABILITY_NOBLOCK
);
try {
    $result = $locker->acquire(LockingStrategyInterface::LOCK_CAPABILITY_SHARED | LockingStrategyInterface::LOCK_CAPABILITY_NOBLOCK);
catch (LockAcquireWouldBlockException $e) {
    // some process owns the lock, let's do something else meanwhile
}
if ($result) {
    $locker->release();
}

Feature: #50136 - Add SVG support

Description

Added rendering support for SVG images. When an SVG image is scaled there is no processed file created but only a sys_file_processedfile record with the calculated new dimensions.

When a mask of explicit cropping is set for an SVG image, the a processed file is created like for all other images.

An extra fallback is added to ImageInfo to determine SVG dimensions when IM/GM fails. The new fallback reads the contents of the SVG file as a normal XML file and tries to find width and height in the outer tag. When no width and height are found viewBox is checked and when present the 3th and 4th value are used as width and height.

Impact

SVG is added as default supported image file extension to $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'].

Feature: #50501 - Extension Manager: Disable automatic installation

Description

The extension manager currently downloads and installs an extension from TER directly. Some people want to do audits or modifications before installing an extension, therefore there is now an option to disable the automatic installation process and just download an extension.

The option is located in the settings of the extension manager itself (Extensions > Installed > Extension Manager).

Feature: #59646 - Add TSFE property $requestedId

Description

A new property within the main TypoScriptFrontendController for the frontend called $requestedId stores the information about the page ID which is set before the page ID processing and resolving. It is accessible via $TSFE->getRequestedId(). Also see $TSFE->fetch_the_id() method.

Feature: #58621 - FormatCaseViewHelper

Description

Add a format case view helper to change casing of strings.

Possible modes are: * upper Transforms the input string to its uppercase representation * lower Transforms the input string to its lowercase representation * capital Transforms the input string to its first letter upper-cased * uncapital Transforms the input string to its first letter lower-cased

<f:format.case>Some Text with miXed case</f:format.case> renders "SOME TEXT WITH MIXED CASE"

<f:format.case mode="capital">someString</f:format.case> renders "SomeString"

Impact

The new ViewHelper can be used in all new projects. There is no interference with any part of existing code.

Feature: #59646 - Add RTE configuration property buttons.link.[type].properties.target.default

Description

New RTE configuration property buttons.link.[*type*].properties.target.default may be used in Page TSconfig to configure a default target for links of a given type.

Possible link types are: page, file, url, mail, spec. More types may be provided by extensions.

Feature: #59712 - Additional params for HTMLparser userFunc

Description

It is now possible to supply additional parameters to a userFunc of the HTMLparser:

myobj = TEXT
myobj.value = <a href="/" class="myclass">MyText</a>
myobj.HTMLparser.tags.a.fixAttrib.class {
    userFunc = Tx\MyExt\Myclass->htmlUserFunc
    userFunc.myparam = test1
}

By default only the value of the processed attribute is passed to the userFunc as the first parameter:

function htmlUserFunc($attributeValue, HtmlParser $htmlParser) {
    // $attributeValue is set to the current attribute value "myclass"
}

When additional options are provided as described above, these options will be passed in the first function parameter as an array. The attribute value is passed in the array with the `attributeValue` array key.

function htmlUserFunc(array $params, HtmlParser $htmlParser) {
    // $params['attributeValue'] contains the current attribute value "myclass".
    // $params['myparam'] is set to "test" in the current example.
}

Impact

If additional parameters are provided to the HTMLparser userFunc setting the first parameter passed to the called function changes from a string with the attribute value to an array containing the attributeValue key and all additional settings.

This has an impact to all installations where additional parameters are used in the userFunc setting of the HTMLparser.

Feature: #61463 - Allow processed folders in different storage

Description

The processing folder of a storage can now be a combined identifier. This makes it possible to have the processed files outside of the storage in case of a read-only storage for instance.

Impact

For existing systems there is no impact. When the processing folder is changed to a folder in a different storage you need to make sure the folder exists and is writable.

Feature: #63040 - Add RTE configuration property buttons.abbreviation.removeFieldsets

Description

The new property buttons.abbreviation.removeFieldsets may be used in Page TSconfig to configure the abbreviation dialogue.

If set, the listed fieldsets of the Abbreviation dialogue are not shown.

Possible values in the list are: acronym, definedAcronym, abbreviation, definedAbbreviation

Impact

The acronym tag is deprecated in HTML5. Installations that want to use the Abbreviation feature of the RTE, but do not wish to use the acronym setting tab of the Abbreviation dialogue, may set this property in the Page TSconfig of the RTE, specifying buttons.abbreviation.removeFieldsets = acronym,definedAcronym

Feature: #63703 - Add option to stop a running task in the scheduler

Description

The scheduler CLI has received an option to stop a running task. The new option can be used with "-s".

Feature: #64686 - Add backend user groups to backend user module

Description

The backend user groups can now be maintained in a sub-module of the "Backend users" backend module.

Feature: #65584 - Add image cropping

Description

A new functionality is introduced that allows the editor to define image cropping settings to a sys_file_reference.

The current support crop setting is a comma separated string defining: offsetX,offsetY,width,height

Impact

The value set for a sys_file_reference will be passed through to the image rendering of TYPO3 by default. The new option of sys_file_reference is defined as exclude field in TCA so it needs to be enabled for editors.

Disable cropping of image when used with typoscript rendering:

# Disable cropping for all images
tt_content.image.20.1.file.crop =

Set custom cropping setting for when used with typoscript rendering:

# Overrule/set cropping for all images
tt_content.image.20.1.file.crop = 50,50,100,100

Disable cropping of image when used in fluid:

<f:image image="{imageObject}" crop="" />

Set custom cropping setting for image when used in fluid:

<f:image image="{imageObject}" crop="50,50,100,100" />

Feature: #65585 - Add TCA type imageManipulation

Description

TCA type imageManipulation brings a image manipulation wizard to the core.

This first version brings image cropping with the possibility to set a certain aspect ratio for the cropped area. The sys_file_reference.crop property is extended and can now also hold a json string to describe the image manipulation.

The LocalCropScaleMaskHelper that is used by the core to create adjusted images is also adjusted to handle the new format.

Impact

There is an new TCA type column type imageManipulation it supports the following config:

  • file_field: string, default uid_local
  • enableZoom: bool, default FALSE
  • allowedExtensions: string, default $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
  • ratios: array, default
    • '1.7777777777777777' => '16:9',
    • '1.3333333333333333' => '4:3',
    • '1' => '1:1',
    • 'NaN' => 'Free',

When ratios is set in TCA the defaults are neglected.

Property sys_file_reference.crop can now hold a string representing a json object. LocalCropScaleMaskHelper checks if the it can parse the string as json. If it can it assumes it holds the properties: x, y, width and height.

Feature: #65767 - System Information Dropdown

Description

A new, extensible flyout menu item is introduced that contains information about the system TYPO3 is installed on.

Impact

In a default installation. the new flyout item will be placed between the "help" and the "user" flyout items and is accessible by administrators only.

Items

It is possible to add own system information items by creating a slot. The slot must be registered in an extension's ext_localconf.php

$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$signalSlotDispatcher->connect(
    \TYPO3\CMS\Backend\Backend\ToolbarItems\SystemInformationToolbarItem::class,
    'getSystemInformation',
    \Vendor\Extension\SystemInformation\Item::class,
    'getItem'
);

This requires the class Item and its method getItem() in EXT:extensionClassesSystemInformationItem.php:

class Item {
    public function getItem() {
        return array(array(
            'title' => 'The title shown on hover',
            'value' => 'Description shown in the list',
            'status' => SystemInformationHookInterface::STATUS_OK,
            'count' => 4,
            'icon' => \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon('extensions-example-information-icon')
        ));
    }
}

Due to the SignalSlot internals, the data array must be encapsulated with another array! If there is no data to return, return NULL.

The icon extensions-example-information-icon must be registered in ext_localconf.php:

\TYPO3\CMS\Backend\Sprite\SpriteManager::addSingleIcons(
    array(
        'information-icon' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath($_EXTKEY) . 'Resources/Public/Images/Icons/information-icon.png'
    ),
    $_EXTKEY
);

"extensions-" is a hardcoded prefix, combined with $_EXTKEY (e.g. "example") creates the prefix "extensions-example-" to be used with every icon being registered. Since the first parameter of SpriteManager::addSingleIcons() is an array, multiple icons can be registered at once.

Messages

Messages are shown at the bottom og the dropdown. An extension can provide its own slot to fill the messages:

$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$signalSlotDispatcher->connect(
    \TYPO3\CMS\Backend\Backend\ToolbarItems\SystemInformationToolbarItem::class,
    'loadMessages',
    \Vendor\Extension\SystemInformation\Message::class,
    'getMessage'
);

This requires the class Message and its method getMessage() in EXT:extensionClassesSystemInformationMessage.php:

class Message {
    public function getMessage() {
        return array(array(
            'status' => SystemInformationHookInterface::STATUS_OK,
            'text' => 'Something went somewhere terribly wrong. Take a look at the reports module.'
        ));
    }
}

Due to the SignalSlot internals, the data array must be encapsulated with another array! If there is no data to return, return NULL.

Feature: #65996 - Show confirm message on closing an edit form with unsaved changes

Description

A new functionality is introduced that asks the editor to confirm closing an edit form with unsaved changes.

Impact

When clicking the close icon of an edit form with unsaved changes, a confirmation modal will be shown.

Feature: #66029 - Show remaining characters below text fields

Description

The amount of remaining characters is displayed below text fields.

Impact

When focusing a form field, the amount of remaining characters gets rendered below the form field, if a TCA field definition has the "max" definition.

Feature: #66042 - Web Libraries are included via bower

Description

Web libraries like Bootstrap, jQuery or Font Awesome are now installed via bower package management, see http://bower.io/ for details on how bower is set up.

All third-party libraries needed to build final CSS or JS files that will be shipped with the core are excluded from the TYPO3 Core Git and installed via bower when building e.g. a new CSS file out of less.

For setting up a development environment working with web libraries bower (which can be installed via npm on a local machine) installs all needed dependencies defined in bower.json. The file .bowerrc describes where the files are put. To set up the third-party libraries and their dependencies, execute the following command.

bower install

For updating the code-base to a new version, the bower.json in the root directory can be adapted. Executing bower update will then update the third-party libraries.

Impact

Setting up a development environment when working with frontend libraries (e.g. LESS) requires npm and bower to be installed on the local machine.

Feature: #66047 - Introduce JavaScript notification API

Description

The Flashmessages API has been moved from TYPO3.Flashmessages to top.TYPO3.Flashmessages in TYPO3 CMS 7.0.

Now we introduce the new JavaScript Notification API and remove the refactoring of the FlashMessage API which was made for TYPO3 CMS 7.0.

The compatibility layer for TYPO3.FlashMessage has changed to use the new Notification API and will be removed with TYPO3 CMS 9 as before.

The new Notification API works similar to old Flashmessages, you can use it from the Top-Frame, where is it loaded one time for the complete backend.

Please look at the examples section in this document for more details.

Migration

The affected 3rd party extensions must be modified to use top.TYPO3.Notification instead of top.TYPO3.Flashmessages.

Examples:

  1. Old and new syntax in general
// Old and deprecated:
top.TYPO3.Flashmessages.display(TYPO3.Severity.notice)

// New and the only correct way:
top.TYPO3.Notification.notice(title, message)
  1. Notice notification
// duration is optional, default is 5 seconds
top.TYPO3.Notification.notice(title, message, duration)
  1. Info notification
// duration is optional, default is 5 seconds
top.TYPO3.Notification.info(title, message, duration)
  1. Success notification
// duration is optional, default is 5 seconds
top.TYPO3.Notification.success(title, message, duration)
  1. Warning notification
// duration is optional, default is 5 seconds
top.TYPO3.Notification.warning(title, message, duration)
  1. Error notification
// duration is optional, default is 0 seconds which means sticky!
top.TYPO3.Notification.error(title, message, duration)

Feature: #66077 - Introduce callouts to replace content alerts

Description

In several places alerts (flashmessages) were used to display context information. We introduce content info boxes and replace all occurrences where flashmessages were used.

Impact

We introduced a new layout for context information and added a ViewHelper to render the markup.

Examples

Simple infobox with a title

<f:be.infobox title="Message title">your box content</f:be.infobox>

All options

<f:be.infobox title="Message title" message="your box content" state="-2" iconName="check" disableIcon="TRUE" />

Feature: #66370 - Add flexible Preview URL configuration

Description

It is now possible to configure the preview link generated for the save+view button in Backend.

This allows to have different preview URLs depending on the record type.

Common usecase is to have previews for blog or news records, but this feature now allows you to define a different preview page for content elements as well, which might be handy if those are stored in a sysfolder.

Impact

New page TSconfig is introduced. The options are:

TCEMAIN.preview {
    <table name> {
        previewPageId = 123
        useDefaultLanguageRecord = 0
        fieldToParameterMap {
            uid = tx_myext_pi1[showUid]
        }
        additionalGetParameters {
            tx_myext_pi1[special] = HELLO
        }
    }
}

The previewPageId is the uid of the page to use for preview. If this setting is omitted the current page will be used. If the current page is not a normal page, the root page will be chosen.

The useDefaultLanguageRecord defaults to 1 and ensures that translated records will use the uid of the default record for the preview link. You may disable this, if your extension can deal with the uid of translated records.

The fieldToParameterMap is a mapping which allows you to select fields of the record to be included as GET-parameters in the preview link. The key specifies the field name and the value specifies the GET-parameter name.

Finally additionalGetParameters allow you to add arbitrary GET-parameters and even override others.

Predefined GET-parameters

The Core automatically sets the no_cache and the L parameter. The language matches the language of the current record. You may override each parameter by using the additionalGetParameters configuration option.

Feature: #66445 - Add file extension to mimeType mapping

Description

As a fix for wrong mimeType detection for SVG files without XML prologue we added a new setting to map known file extensions to mimeTypes. The new setting is $GLOBALS['TYPO3_CONF_VARS']['SYS']['FileInfo']['fileExtensionToMimeType'] which contains an array:

array(
    'svg' => 'image/svg+xml'
)

Impact

The automatic detection for mimeTypes works great, but in some special cases not. This new setting should only be used, if the automatic detection fails.