Base Distribution

[TASK] Add flowpack/behat to distribution

We have Behat tests in the Flow package, but the base distribution lacks the needed tooling to easily run them. With this change, you can do this:

cd Build/Behat
composer install

When this is finished, running the tests is possible:

bin/behat --ansi -f progress -v -c Packages/Framework/TYPO3.Flow/Tests/Behavior/behat.yml.dist


[BUGFIX] Nested object literals not supported

The parser does not support nested object literals like:

{bar: {foo: 'baz'}}

but only object literals containing literal values.

Fixes: FLOW-314

[TASK] Relax dependencies to allow any branch version


[TASK] Update references in documentation

See https://jenkins.neos.io/job/typo3-flow-release/55/

[BUGFIX] Reset class loader after recompiling proxies

The class loader holds a list of available proxy classes to prevent unnecessary calls to the proxy class cache. This list is loaded early in the bootstrap and needs to be refreshed when a sub request changed the proxies.

Fixes: FLOW-309

[BUGFIX] Support composer replace directive

Packages that are required but were replaced by using replace (see https://getcomposer.org/doc/04-schema.md#replace) in composer.json would to load with Flow as the replaced package would have no name in the package map. Ignoring the dependency is no problem as we do not use it anywhere where replaced packages could be important.

This is a bugfix that should be replaced with a more robust solution in a future Flow version. For example by not trying to match composer requirements to Flow packages.

Fixes: FLOW-287

[BUGFIX] Filenames need to be rawurlencoded

The new resource management does not urlencode filenames of resources in URLs. This leads to invalid URLs for file paths/names containing special characters or spaces.

This patch fixes the issue by applying rawurlencode() to all path segments in FileSystemTarget::getPublicStaticResourceUri() and FileSystemTarget::getPublicPersistentResourceUri()

Fixes: FLOW-321

[BUGFIX] Use rawurl(de|en)code in path segments

According to RFC 3986 the space character has to be percent encoded (%20) which is correctly done by rawurlencode. Using urlencode will lead to spaces being encoded as + signs which is technically incorrect for path segments and should only happen for query string values.

[TASK] Decrease session GC probability to 1% (was 30%)

Garbage collection of expired sessions should occur less often since it’s trigger for every third request right now on average. A 1% value matches the PHP default value and should be sufficient for most setups.

Resolves: FLOW-146

[BUGFIX] 1st level cache for QueryResult::count()

Counting the results of the QueryResultInterface proxy that is returned by Repository finder methods always executed a COUNT query, even if the results have been fetched or counted already.

With this patch the number of results is cached as soon as the result is initialized and/or counted once.

Fixes: FLOW-326

[TASK] Update “Quickstart” tutorial

Adjusts the Quickstart tutorial to be in sync with recent Flow changes.

Resolves: FLOW-298

[TASK] Support dynamic return types for PhpStorm IDE

This adds configuration for the PhpStorm IDE so it can infer the return type of the get() method in ObjectManagerInterface.

[BUGFIX] Accept incoming HTTPS headers

This removes a check from Http\\Headers that prevented any header starting with “HTTP”.

Background: A recent version of Google Chrome seems to send a HTTPS header for requests via SSL (see https://code.google.com/p/chromium/issues/detail?id=501095). This header translates to $_SERVER['HTTP_HTTPS'] which triggered the exception.

Fixes: FLOW-324

[TASK] Tweak doc comments in two classes.

[BUGFIX] Failing unit test in XliffModelTest

Regression of I3b5f7e06eca6a2e7e7aa31148c1d031295964c92 which didn’t adjust the test accordingly.

[TASK] Lower log level for I18n sub package

This change lower the log level of the I18n package from LOG_WARNING to LOG_DEBUG.

[BUGFIX] Clear PHP Opcode Caches in Caching, PackageManager and ConfigurationManager

This solves a lot of bugs when people use a wrongly configured opcode cache (e.g. part of Bitnami MAMP stack).

Check the ticket for further background and how I could reproduce the error on Bitnami MAMP stack.

Thanks to the TYPO3 CMS project for inspiration on the solution!

Resolves: FLOW-320

(cherry picked from commit ad3b949d65dc2f1d585a28119452692a153f2f4f)

[BUGFIX] Make resource:// URIs work with 40 character Package Keys

The Flow ResourceStreamWrapper transparently handles resource URLs in the formats resource://<SHA1> (referring to the SHA1 hash of a Flow Resource) and resource://Package.Key/some/path (referring to a local file path relative to the specified package’s Resources directory).

Currently the detection of a SHA1 hash is unreliably only checking for the string length being 40 characters. If a Package Key happens to be exactly 40 characters long, static resources can’t be loaded. This change fixes the issue by replacing the strlen check with a simple regular expression lookup that only accepts valid SHA1 hashes.

Fixes: FLOW-250

[BUGFIX] Fix warning about undefined index in Autowiring

The Autowiring annotation did not check the existence the existence of the value key, leading to a warning, followed by an exception, when the annotation was used like:


instead of:


and the ReflectionService was asked for reflection data on such a class.

The same problem could affect Proxy annotation, so it is fixed as well.

[BUGFIX] Prevent creation of too many directories for resources

Currently resource files are stored by splitting the SHA1 hash into chunks of 5 characters in order to prevent the creation of too many files per directory (for performance reasons). This has been implemented with the new “Multi-Storage / Multi-Target Resource Management” (see Ia2b47b4070a2dfabf4833bf1f0f3967ba3b032a7).

The drawback of the current implementation is that it leads to the creation of a directory per file which strains the file system, too.

With this change a persistent resource will no longer be stored in:




leading to a tremendously reduced amount of folders to be created.

This also adjusts the path of published resources from:




Note: This is only true, if the subdivideHashPathSegment is set for the corresponding PublishingTarget. Otherwise the path is not changed.

Related: FLOW-294

[TASK] Show expected targetType on “Object not found” errors

If the PersistentObjectConverter cannot find an object by given identity the error message shows the identity but not the expected oject type. Adding it helps a lot in debugging such errors.

[BUGFIX] Allow explicit privileges for Everybody role

The TYPO3.Flow:Everybody role that is always active by design gets an ABSTAIN permission for all defined PrivilegeTargets so that permission to restricted privileges is not granted by default.

Due to a bug this ABSTAIN permission was also set when a privilege was explicitly configured for the Everybody role as soon as the same PrivilegeTarget was used for another role, effectively overriding the permission.

This change allows for explicitly allowing or denying privileges to the Everybody role. It also adds some unit tests for the PolicyService.

Fixes: FLOW-308

[TASK] Add missing changelogs

[TASK] Fix rST rendering warnings

[TASK] Show version and release in front matter

[TASK] Simplify appendix TOC generation

[TASK] Rename Index.rst to index.rst

This is our workaround for an issue with rtfd.org so the documentation can be browsed when it has been rendered there.

(See https://github.com/rtfd/readthedocs.org/issues/1279 for details.)

[TASK] Switch to plain Sphinx build configuration

Switches to a more standard setup for rendering rST using Sphinx. A simple make html renders the documentation, if sphinx is installed.

The conf.py contains a tweak to allow using the RTD theme without confusing the renderer over at RDT itself.

[BUGFIX] Relax YAML schema to work with PECL parser

This adjusts the Objects.yaml schema so that:

./flow configuration:validate

does not complain about:

Objects.TYPO3.Flow.DateTime.autowiring -> expected: type=string found: type=boolean

Background: The PECL YAML parser interprets the strings “on” and “off” as booleans so we need to adjust the schema accordingly.

[BUGFIX] ReflectionService should use normalized simple types

The method parameter and property type reflection should contain type names for simple types that are already normalized so you can rely on that in comparisons later on. The method expandType now normalizes the type if it detects a simple type.

[BUGFIX] Adjust YAML schema to recent changes

This is a follow-up to the “Make ignoredClasses for debugger configurable in settings” feature (If4a692168d317cbcb7527fb28ebb113705f7c500) adjusting the YAML schema.

Related: NEOS-1140

[BUGFIX] Adjust YAML schema to recent changes

This is a follow-up to the “Centralized Neos user domain service” feature (I8a4c7010e25842583538e32dc8ef9cd851f306b4) adjusting the YAML schema.

Related: NEOS-962

[BUGFIX] Adjust YAML schema to recent changes

This is a follow-up to the “Make custom Doctrine mapping types configurable” feature (Iab0f14117b30a4924a7947af44b9516c241912da) adjusting the YAML schema.

This also tweaks the existing schema rules according to our CGL.

[BUGFIX] Adjust YAML schema to “Persistent Caches”

This is a follow-up to the “Persistent Caches” feature (I0e18122d74807a75c6e544c5074c8e924e21c649) adjusting the YAML schema.

Related: FLOW-261

[BUGFIX] EntityPrivilege expressions should be trimmed

The EelEvaluator trims expressions before parsing as spaces at the beginning or end might break the parser for no good reason. Same is done in the EntityPrivilegeExpressionParser now.

[TASK] Relax dependencies to allow any branch version

[BUGFIX] Controller changes trigger AOP class rebuild

This is a pragmatic fix to avoid clearing all caches when you add an action to a protected controller. Controllers will now be watched by the FileMonitor to trigger rebuilding the policy information.

[TASK] Improve PackageManager speed

The main improvement is the addition of a first level cache for composer manifest data that was read once to avoid reading the files multiple times.

Additionally the package path is reused in the PackageFactory to reduce the amount of concatinated path segments.

[TASK] Use StringFrontend for HashService cache

The use of StringFrontend was intended, but not configured in Caches.yaml, so a VariableFrontend was used instead for the persistent cache.


[BUGFIX] Fix doc comment about string comparison in IfViewHelper

The inline documentation in the IfViewHelper states, that strings can not be compared directly but arrays should be used as workaround. This isn’t true anymore since direct string comparison works.

Fixes: FLOW-328

[BUGFIX] Only count items in ForViewHelper when iteration argument is set

When using the iteration argument, the ForViewHelper provides information about the current iteration, including the cycle and total. Therefore it needs to count all elements. The problem is, that this happens even if the iteration argument is not specified leading to performance issues especially when iterating over a (subset of a) lot of (remote) items.

This patch fixes this by adding a check for the iteration argument.

Fixes: FLOW-325

[BUGFIX] Fix support for mixed case namespace identifiers

This change adjusts the TemplateParser to support namespace aliases containing upper case characters:

{namespace someNamespace=Some\\Package\\ViewHelpers}
<someNamespace:someViewHelper />

Without this fix the above ViewHelper tag would not be resolved but rendered as is.

Background: This is a regression introduced with the stricter namespace resolution (see I9c63e7d0b116f9d1baabf09c6c18e97d8deb83fa).

Fixes: FLOW-290 Related: FLOW-150

[TASK] Relax dependencies to allow any branch version


[TASK] Relax dependencies to allow any branch version


[TASK] Relax dependencies to allow any branch version