========
Flow 7.3
========

This release of Flow comes with some great new features, bugfixes and a lot of modernisation of the existing code base.

As usual, we worked hard to keep this release as backwards compatible as possible but, since it's a major release, some of the changes might require manual
adjustments. So please make sure to carefully read the upgrade instructions below.


************
New Features
************

FEATURE: Make backtrace code expandable with HTML5 <summary> element
--------------------------------------------------------------------

The backtrace code is printed when the DebugExceptionHandler is active (in "Development" context).

This can be quite a mouthful for new users and developers. The backtrace go all the way back to the Flow Bootstrapping - things that are interesting when you get more into Flow.

This is changed, by using the HTML5 element ``<summary>`` element that support collapsing without any extra libraries or code



Related issue: `#2367 <https://github.com/neos/flow-development-collection/issues/2367>`_

FEATURE: Add case-insensitive filter operators for FlowQuery
------------------------------------------------------------

I added case-insensitive filter operators for FlowQuery::

  ExactMatchInsensitive: =~
  NotEqualMatchInsensitive: !=~
  SuffixMatchInsensitive: $=~
  PrefixMatchInsensitive: ^=~
  SubstringMatchInsensitive: *=~

I extended the FilterOperation Class. Also I extended the Fizzle.peg.inc and compiled the FizzleParser.php with generateEelParser.sh.

I extended the related tests for FizzleParser and FlowQuery. And run the test. Both have passed.


FEATURE: CLI command to list all connected signals with their slots
-------------------------------------------------------------------

The CLI command lists all signals with their slots. As parameter it accepts the class name and method name of the signal to filter the output.

Help output::

  Lists all connected signals with their slots.

  COMMAND:
    neos.flow:signal:listconnected

  USAGE:
    ./flow signal:listconnected [<options>]

  OPTIONS:
    --class-name
    --method-name
  ```

  Example output:
  ```
  $ ./flow signal:listconnected
  Connected signals with their slots.

  Neos\\Flow\\Mvc\\Dispatcher
    afterControllerInvocation
      [0] Closure

  Neos\\Flow\\Cli\\SlaveRequestHandler
    dispatchedCommandLineSlaveRequest
      [0] Neos\\Flow\\Persistence\\PersistenceManagerInterface::persistAll

  Neos\\Flow\\Core\\Booting\\Sequence
    afterInvokeStep
      [0] Closure
      [1] Closure
      [2] Closure
      [3] Closure

  Neos\\Flow\\Monitor\\FileMonitor
    filesHaveChanged
      [0] Closure
      [1] Neos\\Flow\\Cache\\CacheManager::flushSystemCachesByChangedFiles
      [2] Closure
      [3] Closure
      [4] Closure
      [5] Closure

  Neos\\Flow\\Core\\Bootstrap
    bootstrapShuttingDown
      [0] Neos\\Flow\\ObjectManagement\\ObjectManagerInterface::shutdown
      [1] Neos\\Flow\\Configuration\\ConfigurationManager::shutdown
      [2] Neos\\Flow\\Reflection\\ReflectionService::saveToCache

  ...

  $ ./flow signal:listconnected --class-name "Neos\\Media\\Domain\\Service\\AssetService" --method-name assetRemoved
  Connected signals with their slots.

  Neos\\Media\\Domain\\Service\\AssetService
    assetRemoved
      [0] Neos\\Media\\Domain\\Model\\ImportedAssetManager::registerRemovedAsset


Related issue: `#535 <https://github.com/neos/flow-development-collection/issues/535>`_

********************
Upgrade Instructions
********************

This section contains instructions for upgrading your Flow **7.2**
based applications to Flow **7.3**.

In general just make sure to run the following commands:

To clear all file caches::

 ./flow flow:cache:flush --force

If you have additional cache backends configured, make sure to flush them too.

To apply core migrations::

  ./flow flow:core:migrate <Package-Key>

For every package you have control over (see `Upgrading existing code`_ below).

To validate/fix the database encoding, apply pending migrations and to (re)publish file resources::

 ./flow database:setcharset
 ./flow doctrine:migrate
 ./flow resource:publish

If you are upgrading from a lower version than 7.2, be sure to read the
upgrade instructions from the previous Release Notes first.

Upgrading your Packages
=======================

Upgrading existing code
-----------------------

There have been major API changes in Flow 7.3 which require your code to be adjusted. As with earlier changes to Flow
that required code changes on the user side we provide a code migration tool.

Given you have a Flow system with your (outdated) package in place you should run the following before attempting to fix
anything by hand::

 ./flow core:migrate Acme.Demo

This will adjust the package code automatically and/or output further information.
Read the output carefully and manually adjust the code if needed.

To see all the other helpful options this command provides, make sure to run::

 ./flow help core:migrate

Also make sure to read about the `Potentially breaking changes`_ below.

Inside core:migrate
^^^^^^^^^^^^^^^^^^^

The tool roughly works like this:

* Collect all code migrations from packages

* Collect all files from the specified package
* For each migration

  * Check for clean git working copy (otherwise skip it)
  * Check if migration is needed (looks for Migration footers in commit messages)
  * Apply migration and commit the changes

Afterwards you probably get a list of warnings and notes from the
migrations, check those to see if anything needs to be done manually.

Check the created commits and feel free to amend as needed, should
things be missing or wrong. The only thing you must keep in place from
the generated commits is the migration data in ``composer.json``. It is
used to detect if a migration has been applied already, so if you drop
it, things might get out of hands in the future.
