3.0.0-beta2

Base Distribution

[TASK] Update PHPUnit and vfsStream dependencies

This updates PHPUnit from 4.5 to 4.6 and vfsStream from 1.4 to 1.5.

[TASK] Fix dependencies to branch versions

[TASK] Adjust to changed parameters for commit_manifest_update

Related: NEOS-1216 Depends: I791174633d2b1b0fb7263504744901d87bbb1ec6

TYPO3.Eel

[FEATURE] Add isFloat, isObject & isScalar to TypeHelper

Adds three additional functions to the TypeHelper, which were left out in the first implementation.

[FEATURE] Add TypeHelper to get variable type information

This helper allows to get information about variable types in EEL expressions.

[BUGFIX] EEL expressions should be trimmed before parsing

As the EEL parser will not accept expressions that start or end with a whitespace the evaluators should trim given expressions to avoid hard to spot errors due to additional whitespaces.

Fixes: FLOW-278

[TASK] Relax dependencies to allow any branch version

TYPO3.Flow

[TASK] Update references in documentation

See https://ci.neos.typo3.org/job/typo3-flow-release/41/

[TASK] Remove AvailableProxyClasses when flushing all caches

When caches are flushed via \\TYPO3\\Flow\\Cache\\CacheManager::flushCaches() then the AvailableProxyClasses were not removed. This could lead to weired issues because new classes were not loaded from the proxy cache.

Related: FLOW-291

[BUGFIX] Flush configuration cache upon PackageStates update

This change makes sure that the configuration cache is flushed whenever the PackageStates.php file is being updated.

Background: Since I1f9d560303758c87b81a8b5578f1b80b76deb398 a compile time configuration cache is built even in Development context. When this cache is not flushed after creating a new package, this leads to an fatal error:

Argument 1 passed to ActionController::injectSettings() must be
of the type array, null given

The reason is, that we currently initialize an empty setting for every package in the ConfigurationManager. If the cache is not rebuilt upon creation of new Packages, this initialization is skipped and:

ConfigurationManager::getConfiguration('Settings', 'New.Package');

returns NULL.

Fixes: FLOW-291

[TASK] Update contributors list in guide

[BUGFIX] Avoid “too many open files” exception during I18n filesystem scan

The I18n Service scans the filesystem for localized files in order to build a list of available locales, this is done with a RecursiveIterator, which will keep handles open in nested structures. A simple stack like now used in the FileMonitor prevents the problem of “too many open files” (leading to a fatal error) and at the same time brings clear performance boost. Additionally hidden directories and files (starting with ”.”) are ignored now.

Fixes: NEOS-111 (cherry picked from commit e6b5455225cf649de9ca2a2f919094b07429da01)

[TASK] Add request method in CurlEngineException

This change display the current request method in the CurlEngineException message.

(cherry picked from commit 93a763d6c5a8b60ca74b1640230832ff1d25efb6)

[BUGFIX] Fix configuration option name for token in documentation

The security documentation referred to an authentication provider option tokenClass but the correct setting is token.

Fixes: FLOW-51

[BUGFIX] Improve resolution of core migration version argument

By specifying the version flag on the ./flow core:migrate command a specific core migration can be targeted.

This change improves the regular expression that extracts the numeric identifier from that flag: Previously when specifying the whole version string as in TYPO3.Fluid-20150214130800 the resulting version number would include the “3” of the package key.

Related: FLOW-179

[BUGFIX] Less verbose exception rendering in CLI

This change introduces several improvements addressing rendering of exceptions in CLI mode:

  • Move echoExceptionCli() up to AbstractExceptionHandler to unify rendering throughout different contexts
  • Remove rendering of debug backtrace (this has been introduced with Ic4801947e60738f2693fb75590b5c9ba8b67f0ed but in the meantime the backtrace of Flow exceptions is stored in the log anyways)
  • Use sparse highlighting if available (requires posix PHP extension)
  • Output relative paths not only for files in /Packages

Fixes: FLOW-285

[BUGFIX] Rename resource:repair to resource:clean in the exception message

[TASK] Get package version from composer.lock

Currently the PackageManager don’t show the package version information.

This patch parse the composer.lock to get the current package version. This patch also add internal caching to avoid multiple parsing of the composer.lock

Resolves: NEOS-189 Resolves: FLOW-19

[BUGFIX] Isolated behat steps should clear configuration caches

The change I65211ddd90484ec1a9d970394f0b9d268805ea9f uncovered an issue with isolated behat steps as they relied on the wrong behavior that configuration caches would be cleared on every development request. This change adds clearing of Configuration caches to the other cache clearings happening for each isolated step.

[!!!][TASK] Remove unnecessary use of ReflectionService

This removes a few usages of the ReflectionService and additionally removes initialization from two methods in the ReflectionService as those do not use any state in the ReflectionService.

This change is not breaking in itself but deprecates the method \\TYPO3\\Flow\\Reflection\\ReflectionService::getClassNameByObject() please use \\TYPO3\\Flow\\Utility\\TypeHandling::getTypeForValue() instead which has the same functionality.

[BUGFIX] Only monitor YAML files in global Configuration folder

The generated IncludeCachedConfigurations.php file was also monitored for changes which actually resulted in configuration changes on each hit in development.

[TASK] Relax dependencies to allow any branch version

[TASK] Update Security Documentation

This updates the security chapter to the new security concepts.

Related: NEOS-5

[BUGFIX] Initialize Router lazily

The Router should be able to initialize configured routes lazily exept when explicitly told not to do so. This change allows the Router to get the configuration directly from the ConfigurationManager if no other routing configuration exists. If some routing configuration was set, this is used.

Fixes: FLOW-192 Fixes: FLOW-205

[BUGFIX] Support serialization of classes with static properties

When trying to serialize a proxied class that contains static properties an exception is thrown:

Runtime Notice: Accessing static property [...] as non static

The reason is that the DependencyInjection\\\\ProxyClassBuilder overrides the magic __sleep() method of the proxy class, accessing all properties as $this->\\$propertyName.

This change fixes the issue by skipping static properties.

Fixes: FLOW-282

[TASK] Make FileMonitor Strategy changes non breaking

Splits the new method setFileDeleted into a new marker interface for ChangeDetectionStrategies to allow old strategies to work without changes.

[TASK] Adjust ACL migration to cover content security

This is a follow-up to the “Restructure policy component to new Policy.yaml format” change (I84e188e89a05ec0dd1f9ee96fe312dac81806759) that adjusts the provided core migration to cover “entities” resources too. Previously a warning was shown when applying the core migration to Policy.yaml files that contained resources of type “entities”.

Related: FLOW-11 Related: FLOW-10

[BUGFIX] Repository string in the namespace break ENTITY_CLASSNAME

This change replace the call to str_replace, by preg_replace to replace only the string “Repository” at the end of the string, to avoid the bug if the Package name or any namespace segement contain the “Repository” string.

[FEATURE] Make ignoredClasses for debugger configurable in settings

Classes that should be ignored while dumping the object tree are now configurable in the settings. This makes it extendable in other packages. A default in the debugger is available, if the configurationManager is not available.

Example:

TYPO3:
  Flow:
    error:
      debugger:
        ignoredClasses:
          'Acme\\\\Test\\\\.*TestClass': TRUE

Adds a unit test for the processing of the settings Adds a functional test for merging of settings over the default

Resolves: NEOS-1140

(cherry picked from commit 33627e6d566431aaf02b473cdaf07b46c89a79fa)

[BUGFIX] Avoid Cache FileBackend tests to create actual files

Running the FileBackend unit tests, will create some test files in the current directory. This change adjusts the SimpleFileBackend unit tests in order to avoid this side-effect.

Background: This is a follow up to the “Add tests for Cache FileBackends”-change (Iee5d0de460bd7ac72018015a4cd3dad4af859868) that added unit tests that expose the side-effect.

[BUGFIX] ClassLoader should check sub namespaces

This change cleans the ClassLoader up and fixes a problem with nested autoloading namespaces. Before a nested namespace got preference and was only tried for loading a class. Now every possible path is tried for nested namespaces.

An example are the two packages:

  • guzzlehttp/guzzle
    Which declares autoloading as: "GuzzleHttp\\\\": "src/"
  • guzzlehttp/log-subscriber
    Which delcares autoloading as: "GuzzleHttp\\\\Subscriber\\\\Log\\\\": "src/"

As the second declaration was nested in the first one it got precedence for all classes inside of GuzzleHttp\\\\Subscriber\\\\ making it impossible to load classes inside that namespace from the first package. With this change both paths are tried in order of their nesting level.

Kudos go to Jens Schulze for reporting, preparing an initial fix and the test.

Fixes: FLOW-238

[BUGFIX] Test whether the current entity matches a privilege

This decouples the check, whether a query has to be modified by a EntityPrivilege SQL constraint from the generation of the actual SQL query. By this it is possible to skip not matching privileges before the SQL is generated.

One use case for this is an EntityPrivilege with a fixed entity type, where no matcher expression has to be evaluated to check the target entity type.

Additionally this adds a FalseConditionGenerator to be able to add a FALSE condition part in the SQL generation process. Furthermore this renames the AnyEntityConditionGenerator to TrueConditionGenerator respectively for consistency reasons.

[BUGFIX] Disable authorization checks in functional tests

This adjusts the FunctionalTestCase base class to disable authorization checks if the testableSecurityEnabled is not set.

Background: If security is not enable for functional tests, the Security\\\\Context is not initialized. This leads to exceptions in case the PolicyEnforcement kicks in. Because functional tests inherit the configuration of the default contexts, this happens very likely, especially when making use of node related privileges in Neos sites.

Related: NEOS-5

[BUGFIX] Simplify and stabilize security context hash calculation

This simplifies Security\\\\Context::getContextHash() and makes sure that it never returns a hash over an empty string which could be the case before.

Background: The Security Context Hash used to be generated by iterating over a list of “ContextHashComponents”. Those could be influenced using the setContextHashComponent() method. The drawback of this approach is a pretty complex mechanism that is not easy to comprehend. Besides resetting of the hash was error-prone and could lead to hash components being ignored.

This also removes the method getRolesHash() that was neither documented nor used outside of the Security\\\\Context.

Related: NEOS-5 Related: NEOS-433

[BUGFIX] Storage Object: Media type is not updated if file name changed

This changes an issue with the Resource Storage Object which might contain a media type not matching the actual file when setFilename() has been called to update the object.

[TASK] Output actual exception message for failed core migrations

Exceptions that are thrown during application of core migrations are caught in the Migrations\\Manager masking the actual error message.

This change adds the actual exception message to the re-thrown RuntimeException.

Related: FLOW-179

[BUGFIX] Fix unit test for CacheManager

This is a follow-up to the “Improve security performance” change (If6ccf8d7bbbe25cfcd6596a88a6192bf051bc9f5) fixing a unit test.

Background: The backport of this change from master to the 3.0 branch did not include all the required changes in the unit test case.

[BUGFIX] Tweaks and fixes to security:showeffectivepolicy command

This change removes some left-over references to the PrivilegeVoteResult class that no longer exists.

Besides this renames the “role-identifiers” parameter to “roles” and expands those roles in order to cover parent roles, too. Lastly this fixes support for custom privilege types allowing the “privilege-type” parameter to refer to any class implementing PrivilegeInterface.

[BUGFIX] Fix re-submission of file uploads

When using the <f:form.upload /> ViewHelper to upload a file previously uploaded resources are re-displayed via hidden fields so that they don’t have to be transmitted again. With the new Resource Management (FLOW-108) these hidden fields have been renamed from submittedFile to originallySubmittedResource (see Ic72a4ba780ebdef8b0940f3b9d20fa2c8840f834). But the ResourceTypeConverter was not adjusted accordingly.

Fixes: FLOW-214

[BUGFIX] Don’t evaluate SecurityContextHash if authorization checks are disabled

Previously Security\\Context::getContextHash() evaluated all contextHashComponents even if areAuthorizationChecksDisabled() returned TRUE. This could lead to data that was fetched within the withoutAuthorizationChecks closure to be stored in the wrong caches.

Related: NEOS-5 Related: NEOS-433

[TASK] Reset ResourceManager for functional tests

Due to the way HTTP requests are triggered in functional tests the ResourceManager was initialized very early in the process. As a result the FileSystemTarget::baseUri was initialized with an empty string.

With this change the ResourceManager is re-initialized for every test.

[TASK] Improve security performance

This solves two problems. First it eliminates the need to use eval for AOP runtime expressions by caching the found expressions in a PhpBackend during compile time and requiring the code as actual closures during runtime. This also reduces the cache size as the closure code is no longer included as strings.

Additionally the methodPermissions data is changed to be static as it will be the same across all instances of MethodPrivilege anyway. This drastically reduces memory usage and also runtime due to less cache requests which are especially costly for a file based cache.

[BUGFIX] Only monitor files with relevant file extensions

This change adjusts the ClassFiles, ConfigurationFiles and TranslationFiles file monitors to only track changes in files with the corresponding extension (php for classes, yaml for configuration and xlf for translations).

Background: With the fixed PSR-4 support (introduced with I9c613df54a8b650c53b4ab8e03071432e13d3c4e) we no longer determine PHP classes from the corresponding file path and -name, but by analyzing the contents of the file. Because the Flow_ClassFiles file monitor watched for changes in all files within the classes root of all packages, this could lead to binary files being analyzed. In some PHP versions this seem to trigger a warning.

Fixes: FLOW-271 Related: FLOW-238

[!!!][TASK] Use a persistent cache for storing encryption key

This change takes advantage of the new persistent caches feature and stores the encryption key used by the Hash Service in such a persistent cache. If an EncryptionKey file exists in Data/Persistent from earlier Flow versions, that file will be used instead.

This change may require your attention if you tailored your automated deployment to the encryption key file being located in Data/Persistent.

[!!!][FEATURE] Persistent Caches

This change introduces the concept of persistent caches. Caches which are configured to be “persistent” will be skipped by the Cache Manager when flushing all caches or flushing caches by tag. Therefore it is now possible to use the caching framework as a low level key-value-store for storing keys, preferences, tokens or other artifacts which usually would have been stored in the Data/Persistent directory.

If persistent caches are used consequently, it is possible to configure a Flow application to not store any persistent data in the file system. This allows for clustering and more flexible management in cloud environments.

A cache is marked as “persistent” by setting the respective flag in the configuration in Caches.yaml:

Acme_MyCache:
  frontend: TYPO3\\Flow\\Cache\\Frontend\\StringFrontend
  backend: TYPO3\\Flow\\Cache\\Backend\\SimpleFileBackend
  persistent: true

Persistent caches won’t be flushed by the flow:cache:flush commands, and for file based caches, the data is not stored in Data/Temporary/Cache by default, but in Data/Persistent/Cache.

Note: This change might break unit tests which mock cache frontend / backend combinations because a new lifecycle method (initializeObject) has been introduced to the AbstractFrontend. In order to fix these tests, simply make sure to call initializeObject() after the frontend has been instantiated.

Resolves: FLOW-261

[TASK] Add tests for Cache FileBackends

Besides adding unit tests covering the basic functionality of the SimpleFileBackend this change introduces tests for the recently modified way of including PHP files via SimpleFileBackend::requireOnce().

Background: Previously files where included within a try/catch block swallowing errors in included PHP files. With Ied1dd72d4d9035a6f7673ceb096cc908c767d80c the try/catch block was removed for performance reasons, with the side-effect that errors and exceptions are no longer silently skipped.

Depends: Ied1dd72d4d9035a6f7673ceb096cc908c767d80c

[BUGFIX] Properly expand parent roles in Policy.yaml core migration

The core migration TYPO3.Flow-20141113121400 that rewrites existing Policy.yaml files to match the reworked Security Framework also adjusted the role identifiers that were allowed to only contain the role name without package key prefix if used in the current package.

With this fix the role identifier expansion now also works for referenced parent roles.

Fixes: FLOW-221 Related: FLOW-11

[!!!][BUGFIX] Make bidirectional OneToOne relations work correctly

This change fixes bidirectional OneToOne relations, which previously resulted in foreign keys being created on both sides. Therefore the related entities could no longer be deleted.

The problem was that the joinColum mapping was created in every case, which doctrine interprets as a secondary hint for the owning side. The joinColumn should only be created for the owning side, i.e. only for unidirectional OneToOne and for the inversedBy side of a bidirectional OneToOne.

This change is not breaking, but needs manual attention to fix the schema of own projects as follows:

After upgrading to this change, you should run following commands from command line to update your projects:

flow doctrine:migrationgenerate
-> check the created migration file, it should contain a number of
“DROP FOREIGN KEY”, “DROP INDEX” and “DROP {column}” statements for each of your bidirectional OneToOne relations.
flow doctrine:migrate
-> applies the changes

Fixes: FLOW-87

[TASK] Move a unit test fixture class out of test class

A trivial change, but it is cleaner and allow to use brianium/paratest for running the unit tests.

[TASK] Better configuration error handling in EntityManagerFactory

The Doctrine\EntityManagerFactory in Flow gets slightly better error handling covering configuration of Doctrine and backend options.

[TASK] Store nicely formatted JSON with JsonArrayType

[!!!][TASK] Remove compileConfigurationFiles setting

Since the configuration cache is now cleared when changes are detected, the possibility to actually enable/disable that caching is no longer needed.

[TASK] Only flush AOP proxy classes if needed by config change

This change does no longer remove the AOP proxy classes upon every change to configuration, since e.g. Views.yaml or changes to NodeTypes in Neos do not need a proxy class rebuild.

With this only changes to Settings, Objects and Policy configuration flush the AOP proxies.

[TASK] Flush configuration cache through file monitor

If the file monitoring detects changes to configuration files, flush the configuration cache.

With this in place, the change also removes the settings for Development and Testing context that switched caching off. This improves performance in those contexts.

[TASK] Cleanup FileMonitor

This does a cleanup of the FileMonitor at the same time improving performance. Reading the current state of directories is now done with a Generator method to reduce memory footprint. Additionally the amount of looping was reduced.

Finally you can now exclude whole subdirectories by adding an empty file named .flowFileMonitorIgnore to it.

[TASK] Optimize garbageCollection in FileBackend

We can retrieve the cache identifier for a given cache file much easier with the directoryIterator than is done currently.

[TASK] Optimize requireOnce in SimpleFileBackend

We go back using a is_file check before trying to require a cache file. This is the safest way to detect existence and is_file is still faster than file_exists.

This also prevents errors that happen because a previous exception in file requires was caught.

[BUGFIX] The EntityPrivilegeExpressionEvaluator is singleton

The EntityPrivilegeExpressionEvaluator is already annotated as scope singleton but was instanciated in the EntityPrivilege. That is quite costly with a lot of queries. Now the ObjectManager is asked for an instance of the evaluator.

[BUGFIX] Fix PSR-4 support for Flow packages

Basic support for PSR-4 structured packages has been added with Flow 2.2 (see I9b2dae7761ef48389d9915c1269df2fdf771af8c).

However, automatic re-reflection didn’t work for PSR-4 Flow packages. Besides, custom Package.php files were expected to be located at Acme.PackageKey/Classes/Acme/PackageKey/Package.php which is not in sync with PSR-4.

This change fixes the two issues by extracting the actual class name from the actual PHP files instead of trying to defer it from the file path. Besides it replaces the static lookup path for custom Package.php files taking the autoload property of the composer manifest into account.

Note: While this fixes basic support for PSR-4 Flow still doesn’t support all composer features. Primarily there is a 1:1 mapping from package to autoloading type and classes path while composer manifests support multiple mappings by namespace.

Related: FLOW-238

[TASK] Use doctrine caching in functional tests

Enable doctrine caches for functional tests to avoid slowdowns due to recalculation of Query filters. Two tests clear the caches to avoid side effects.

[BUGFIX] ValidatorResolver shouldn’t ask class loader for simple types

The ValidatorResolver generates a Validator conjunction for a given class if that class exists. Problem is that there is no check for simple types before this, so a simple type will trigger the class loader (every time). To avoid that we now check if the given type is a simple type.

Related: Icefc6eadbe7cae2e12cc2204ec6de3f25370aefa

[BUGFIX] Setting properties from Objects.yaml should invoke setter

If you configure simple values via Objects.yaml they should be set via setter if one exists, as the setter could manipulate the incoming value. Without this change the injected values are directly set to the property circumventing the setter.

Fixes: FLOW-30

[BUGFIX] Fix “Call to undefined method ...::getPrototype()”

When injecting dependencies that take prototype-scoped objects as constructor parameter, the ProxyClassBuilder class tries to instantiate these objects using the getPrototype method. This method is apparently supposed to be implemented by the proxy class, but never is.

This results in a fatal error when the owning object is instantiated:

Fatal error: Call to undefined method My\Class::getPrototype() in ...

This commit fixes this behaviour by replacing the getPrototype call with a simple constructor call and adds a (kind-of) simple functional test for this behaviour.

Fixes: FLOW-175

[BUGFIX] Add format to encoded DateTime objects in JsonArrayType

To be able to convert the stored DateTime back into the object we add the format as well. The stored array can directly be used with a DateTimeConverter.

Related: I7eeb7d55e8ee593cae5bccf98211e4a2ff83b1d8

[FEATURE] JsonArrayType for doctrine persistence

This adds an extended JsonArrayType that can en-/decode Flow entities. It is not used anywhere for now.

Related: NEOS-427

[BUGFIX] Persisting of objects as serialized data not supported

The ReflectionService does not add properties to metadata information of classes if they are not tagged with @Flow\\Entity or @Flow\\ValueObject. This makes it f.e. impossible to store an object as serialized object. Previously any object (except some whitelisted) needed at least a @ORM\\OneToOne annotation to be persisted in a property.

To be able to store f.e. UserSettings, BasketItems, Sessions or DTOs the doctrine Annotation @ORM\\Column(type="object") is now supported.

The whitelist was removed from ReflectionService in order to allow any class to define custom column types.

The ClassSchema does no longer contain information about properties declared @Flow\\Transient, the same is true for properties annotated with @Flow\\Inject so that injected properties are never persisted.

If an object has a property which holds an object and that property is annotated with @ORM\\Column(type="object") that will be stored as expected (i.e. as a serialized PHP object). If no such annotation is given and no other relation type annotation is given, an exception is thrown as before.

Working Example:

/**
* @var \\Acme\\Foo\\Bar;
* @ORM\\Column(type="object")
*/
protected $bar;

In the example above the doctrine behavior for object types matches and invokes \\Doctrine\\DBAL\\Types\\ObjectType

Also added some tests for other extended types supported by Doctrine:

  • \Doctrine\DBAL\Types\Type::SIMPLE_ARRAY
  • \Doctrine\DBAL\Types\Type::JSON_ARRAY
  • \Doctrine\DBAL\Types\Type::DATETIME
  • \Doctrine\DBAL\Types\Type::DATETIMETZ
  • \Doctrine\DBAL\Types\Type::DATE
  • \Doctrine\DBAL\Types\Type::TIME

Please note:

Fixes: FLOW-254

[BUGFIX] Don’t store SecurityContextHash in session

Adds Flow\\Transient annotations to Security\\Context::contextHash and Security\\Context::contextHashComponents so that they won’t be stored in the session and refreshed for every request.

Related: NEOS-433

[TASK] Refactor initialization of security operations in behat tests

This change leave the decision, if security should be initialized or not to the respective behat context. As tests executing code, which uses security features all need an initialized security component, we cannot initialize only when steps of the security trait are called in the tests explicitly.

[BUGFIX] Don’t skip core migrations quietly

This change makes sure that ./flow core:migrate always informs the user about skipped packages even if the verbose flag is not set.

Background: This is a follow up to the “Improve handling of core migrations” change (If66a2dff21b239963728963f15437599a8442f72) that introduced this new behavior.

Related: FLOW-179

[BUGFIX] Whitelist added objects to resource repository

When an image variant or thumbnail could not be generated during the import of the image. The generation on the first GET request failed also due to the missing whitelisting.

(cherry picked from commit 5c7e3a803f627389c3718fd4cd8008517f791344)

[BUGFIX] Re-activate authorization checks only when not disabled already

This change fixes the re-enabling of authorization checks, when calling Security\\Context::withoutAuthorizationChecks() in nested calls.

Fixes: FLOW-249

[BUGFIX] Remove Persistent Resource Rewrite Rules and Update Documentation

For Flow 3.0 and the new Resource Management, these lines in the config are not needed anymore; in fact, they even harm because they prevent file uploads from working correctly.

Resolves: FLOW-246 Related: NEOS-1111

[TASK] Add a place for release notes to documentation

This adds a home for release notes to the documentation.

[TASK] Proper(er) solution for connection issue hotfix

Right before the release of 3.0.0 beta 1 a hotfix was added to enable proxy compilation even if no database connection is possible. Said problem is caused by the update to Doctrine ORM 2.4 which pulls in a new DBAL version as well. That offers version-aware platform handling and in turn tries to connect and read the server software version used whenever the database platform instance is fetched.

This change drops the unconditional try/catch hotfix and replaces it by more (but not less awkward) code. If a connection is not possible, the generic platform tied to a driver will be used, which is sufficient for the tasks that make sense without a connection.

[BUGFIX] Fix error in PostgreSQL down migration

In the down migration of Version20141113145146 the dtype column was added again, even though it was already present (from the previous down in Version20141118174722).

The removal of the dtype column in the up migration is removed as well, since the whole table is dropped in the next up anyway.

[TASK] Add “cleanup” schema migrations

This adds migrations for MySQL and PostgreSQL that tweak the DB schema a bit, cleaning up some leftover discrepancies.

[TASK] Tweak schema migrations to Flow/Party decoupling

This adjusts schema migrations to that it is actually possible to:

  • install Flow without Party
  • add Party to a “clean” Flow setup

Related: FLOW-5

[TASK] Add @covers to list of ignored annotations

With recent PHPUnit versions phpdocumentor/reflection-docblock is pulled in. This contains a @covers annotation that triggers an exception during reflection. To avoid this, it is added to Flows default list of ignored annotations.

[TASK] Adjust unit tests to “Flush compiled configuration”

The reworking of the change Ic3af97d652e87271ed7c2dfbc1091ea4cb7e1973 forgot to adjust the unit tests. This reverts the needed changes.

Related: FLOW-229

[BUGFIX] Flush compiled configuration on cache:flush

The ConfigurationManager writes compiled configuration to disk (if this is enabled, by default this is the case in Production context). But this compiled configuration is not removed when flushing caches, so that changes never become active.

This change adjusts the CacheManager to be aware of this compiled configuration and remove it during flushCaches().

Fixes: FLOW-229

[TASK] Remove unused injection of Doctrine EntityManager

The Doctrine EntityManager is injected in the ResourceManager, but never used.

Additionally removes the unused protected property importedResources. The getter (which is tagged @api) is still there but already gets the information from the ResourceRepository.

[BUGFIX] Fix resolving of imported interface namespaces

Dependency injection and property mapping does not work for interfaces of the current namespace if the code does not refer to the fully qualified name.

Fixes: FLOW-34

[TASK] Bump version in Documentation/Settings.yml

[BUGFIX] Resource should not unpublish if file is in use

This change fixes an issue with the Resource Manager’s deleteResource method which unpublished the respective resource data even if it was still in use by other ressources.

Additionaly optimise resource deletion so that the resource manager will only unpublish / try to unpublish resources once. Previously deleteResource was triggered through a direct method call (for example by an ImageVariant) and then additionally through the Doctrine lifecycle event.

[TASK] Tiny fix to TranslationHelper docblock

Simply fixes a copy-and-paste error.

[FEATURE] Make custom Doctrine mapping types configurable

This removes the hardcoded registration of the ObjectArray mapping type and instead introduces mapping type configuration from settings:

TYPO3:
  Flow:
    persistence:
      doctrine:
        # DBAL custom mapping types can be registered here
        dbal:
          mappingTypes:
            'mytype':
              dbType: 'db_mytype'
              className: 'Acme\\Demo\\Doctrine\\DataTypes\\MyType'

See the Doctrine documentation for more details: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html

[TASK] Add changelog for TYPO3 Flow 2.3.2

See https://ci.neos.typo3.org/job/typo3-flow-release/37/

[BUGFIX] Fix hostname option name for Redis backend

Redis backend option for specifying a hostname is not host but hostname.

[BUGFIX] Don’t append subrequest arguments to toplevel request

For sub-requests the Uribuilder would append the sub-request arguments again without namespace prefix if addQueryString was set. This can lead to invalid URLs and possible side-effects. An example of this would be that having this URL:

some/action?namespace[argument]=foo

And building a URL in the subrequest with addQueryString enabled and arguments set to array('argument' => 'bar'). Previously the resulting URL was:

some/action?namespace[argument]=bar&argument=foo

With this change it is:

some/action?namespace[argument]=bar

Fixes: NEOS-1027

[BUGFIX] Pointed the issue tracker URL to the new JIRA instance

TYPO3.Fluid

[BUGFIX] Hidden checkbox fields are disabled correctly

Until now checkboxes that were disabled would still have their empty hidden value be submitted, leading to checkbox values being overwritten.

This change correctly sets the hidden fields to the same disabled state as the related field by adjusting the form viewhelper variable ‘emptyHiddenFieldNames’.

Fixes: FLOW-255

[TASK] Remove unused method parameter

[TASK] Relax dependencies to allow any branch version

[BUGFIX] Stabilize “Consistent escaping behavior” core migration

This tweaks the TYPO3.Fluid-20150214130800 core migration to always include the ViewHelper file before adding the escapeOutput flag. Besides it now uses the PhpAnalyzer class to extract the ViewHelper class name.

Background: When executing core migrations the class loader might not be initialized yet. This makes sure the ViewHelpers can be adjusted anyways.

Related: FLOW-26

[BUGFIX] Preselect active options in property bound Select ViewHelper

Resolution of FLOW-213 introduced a regression that in some cases prevents the SelectViewHelper from pre-selecting property-bound values.

Background: The change I80e7e664e7a1fa41dc36bdf89e331086c6815f78 deprecated the method AbstractFormFieldViewHelper::getValue() in favor of a newly introduced method getValueAttribute(). That method always converts object values using the PersistenceManager. In case the object is not known to the PersistenceManager it thus returns NULL leading to the above issue when using the SelectViewHelper in “objectAccessorMode” with the multiple argument.

Related: FLOW-213

[TASK] Support for quoted keys in Fluid arrays

The syntax for Fluid arrays is based on the JSON syntax, but up to now it didn’t support quoted arrays, so:

{x:someViewHelper(arrayArgument: '{"foo": "bar"}')}

wouldn’t parse.

With this change the parser is a little less strict for arrays allowing the keys to be quoted with single or double quotes. It also allows to use square brackets and dots within quoted keys:

<x:someViewHelper arrayArgument="{'this[will]': 'work'}" />
{x:someViewhelper(arrayArgument: '{"and.so": "will.this"}'}

Resolves: FLOW-248

[BUGFIX] Fix support for “value” argument on the form.upload ViewHelper

When specifying the value argument on the form.upload ViewHelper the generated hidden field was named something like:

object[property][__identity][originallySubmittedResource][__identity]

since the adjustments to the new Resource Management (see Ic72a4ba780ebdef8b0940f3b9d20fa2c8840f834).

This change fixes the name to exclude the first “__identity”. Besides it fixes the behavior when specifying a “default resource” using the value argument:

  • If a form is re-displayed due to validation errors, any originally transmitted resource will survive the re-submission.
  • Otherwise, if a resource (or its identifier) is specified as “value” argument, that resource will be used by default
  • Finally, when in “object accessor mode”, the value of the bound property will be used as fallback.

Any newly uploaded file will of course overrule the hidden field as before.

Related: FLOW-214

[TASK] Translate labels in paginate widget

The previous / next labels in the paginate widget are replaced with translations.

[BUGFIX] Fix support for multi-part namespace identifiers

This change fixes support for namespaces containing dots. Previously the TemplateParser skipped those when used in “shorthand syntax” and something like:

{foo.bar:baz()}

was never replaced.

Background: This limitation is not new but it was easy to work around in previous versions. Since Flow package keys are registered as namespace identifiers (see FLOW-151) this issue became more urgent.

Fixes: FLOW-228

[BUGFIX] Always respect property binding in hidden fields

This is a follow up to the Submitted form data has precedence over value argument change (I80e7e664e7a1fa41dc36bdf89e331086c6815f78) that had the nasty side effect of breaking hidden fields bound to properties of a view model.

Before this fix, a template like:

<f:form.hidden property="someProperty" />

Would lead to a hidden field with an empty value attribute.

Background: The custom implementation of the getValueAttribute() in the HiddenViewHelper was missing the evaluation of getPropertyValue(). This is now fixed for all of the form ViewHelpers by making AbstractFormFieldViewHelper::getValueAttribute() more generic. The bug only really occurred for hidden fields though because checkbox and radio fields require the value argument to be specified explicitly.

Related: FLOW-213

TYPO3.Kickstart

[TASK] Relax dependencies to allow any branch version

[BUGFIX] Use propertyName instead of modelName for form labels

The NewTemplate used the modelName for each property as label instead of the propertyName, this commit fixes that to be in line with the EditTemplate.

Kudos for finding and fixing to Guido.

TYPO3.Welcome

[TASK] Relax dependencies to allow any branch version