5.3.2 Migration to Flux 7.0

Users of TYPO3 6.1.7 or below will experience problems upgrading Flux and using the ViewHelpers it includes. The reason is a bug in the TYPO3 core itself which prevents aliased ViewHelper classes from working correctly: http://forge.typo3.org/issues/54115. Users of TYPO3 6.1.8 or above are completely unaffected by this issue.

If you are on a 6.1.7 or below and must upgrade Flux but cannot upgrade the core itself (which is of course the recommended thing to do, upgrading the core itself) you can manually add the missing code line in the TYPO3 source code, as described in this link:

https://review.typo3.org/#/c/25814/9/typo3/sysext/fluid/Classes/Core/Parser/TemplateParser.php

New ViewHelper Names

To migrate your templates, change every occurence of the following ViewHelpers (see script below - no need to do this by hand)

  • flux:flexform to flux:form
  • flux:flexform.grid to flux:grid
  • flux:flexform.grid.column to flux:grid.column
  • flux:flexform.grid.row to flux:grid.row
  • flux:flexform.container to flux:form.container
  • flux:flexform.data to flux:form.data
  • flux:flexform.object to flux:form.object
  • flux:flexform.section to flux:form.section
  • flux:flexform.sheet to flux:form.sheet
  • flux:flexform.field.wizard.add to flux:wizard.add
  • flux:flexform.field.wizard.colorPicker to flux:wizard.colorPicker
  • flux:flexform.field.wizard.edit to flux:wizard.edit
  • flux:flexform.field.wizard.link to flux:wizard.link
  • flux:flexform.field.wizard.list to flux:wizard.list
  • flux:flexform.field.wizard.select to flux:wizard.select
  • flux:flexform.field.wizard.slider to flux:wizard.slider
  • flux:flexform.field.wizard.suggest to flux:wizard.suggest
  • flux:flexform.field.checkbox to flux:field.checkbox
  • flux:flexform.field.controllerActions to flux:field.controllerActions
  • flux:flexform.field.custom to flux:field.custom
  • flux:flexform.field.file to flux:field.file
  • flux:flexform.field.inline to flux:field.inline
  • flux:flexform.field.inline.fal to flux:field.inline.fal
  • flux:flexform.field.input to flux:field.input
  • flux:flexform.field.relation to flux:field.relation
  • flux:flexform.field.select to flux:field.select
  • flux:flexform.field.text to flux:field.text
  • flux:flexform.field.tree to flux:field.tree
  • flux:flexform.field.userFunc to flux:field.userFunc
  • flux:flexform.content to flux:form.content
  • flux:flexform.renderContent to flux:content.render

And make sure you change the Flux namespace inclusion in all templates as well:

  • {namespace flux=Tx_Flux_ViewHelpers} to {namespace flux=FluidTYPO3\Flux\ViewHelpers}

This can be done automatically using the following script:

Use at your own risk, change $directory

<?php

$directory = '/Users/danilo/Sites/hmspl/typo3conf/ext/';

$replaceNamespaces = array(
    '{namespace flux=Tx_Flux_ViewHelpers}' => '{namespace flux=FluidTYPO3\Flux\ViewHelpers}',
);

$replaceViewHelpers = array(
    'flux:flexform' => 'flux:form',
    'flux:flexform.grid' => 'flux:grid',
    'flux:flexform.grid.column' => 'flux:grid.column',
    'flux:flexform.grid.row' => 'flux:grid.row',
    'flux:flexform.container' => 'flux:form.container',
    'flux:flexform.data' => 'flux:form.data',
    'flux:flexform.object' => 'flux:form.object',
    'flux:flexform.section' => 'flux:form.section',
    'flux:flexform.sheet' => 'flux:form.sheet',
    'flux:flexform.field.wizard.add' => 'flux:wizard.add',
    'flux:flexform.field.wizard.colorPicker' => 'flux:wizard.colorPicker',
    'flux:flexform.field.wizard.edit' => 'flux:wizard.edit',
    'flux:flexform.field.wizard.link' => 'flux:wizard.link',
    'flux:flexform.field.wizard.list' => 'flux:wizard.list',
    'flux:flexform.field.wizard.select' => 'flux:wizard.select',
    'flux:flexform.field.wizard.slider' => 'flux:wizard.slider',
    'flux:flexform.field.wizard.suggest' => 'flux:wizard.suggest',
    'flux:flexform.field.checkbox' => 'flux:field.checkbox',
    'flux:flexform.field.controllerActions' => 'flux:field.controllerActions',
    'flux:flexform.field.custom' => 'flux:field.custom',
    'flux:flexform.field.file' => 'flux:field.file',
    'flux:flexform.field.inline' => 'flux:field.inline',
    'flux:flexform.field.inline.fal' => 'flux:field.inline.fal',
    'flux:flexform.field.input' => 'flux:field.input',
    'flux:flexform.field.relation' => 'flux:field.relation',
    'flux:flexform.field.select' => 'flux:field.select',
    'flux:flexform.field.text' => 'flux:field.text',
    'flux:flexform.field.tree' => 'flux:field.tree',
    'flux:flexform.field.userFunc' => 'flux:field.userFunc',
    'flux:flexform.content' => 'flux:form.content',
    'flux:flexform.renderContent' => 'flux:content.render',
);

die('MAKE A DAMN BACKUP, YOU COWBOY!' . PHP_EOL);

$dir = new RecursiveDirectoryIterator($directory);
$ite = new RecursiveIteratorIterator($dir);
foreach($ite as $file) {
    if ('html' !== $file->getExtension()) {
        continue;
    }

    $content = file_get_contents($file->getPathname());

    $hasNamespace = FALSE;
    foreach ($replaceNamespaces as $oldNamespace => $newNamespace) {
        if (FALSE === strpos($content, $oldNamespace)) {
            continue;
        }

        $hasNamespace = TRUE;
        $content = str_replace($oldNamespace, $newNamespace, $content);
    }

    if (FALSE === $hasNamespace) {
        continue;
    }

    foreach ($replaceViewHelpers as $oldViewHelper => $newViewHelper) {
        $newViewHelper = str_replace('$', '\\$', $newViewHelper);
        $content = preg_replace('/<(\/?)' . preg_quote($oldViewHelper) . '([\s\/>])/', '<$1' . $newViewHelper . '$2', $content);
    }

    file_put_contents($file->getPathname(), $content);

    print_r('Modified ' . $file->getFilename() . PHP_EOL);
}

?>