Skip to content
Snippets Groups Projects
Commit 0ad328c2 authored by Benjamin Franzke's avatar Benjamin Franzke Committed by Benni Mack
Browse files

[BUGFIX] Fix PackageManager event binding

PackageManager can not have DI tags assigned as it is a early container
instance (injected from core Bootstrap). That caused the
'packagesMayHaveChanged' event to never be executed.

We rather need to hookup the event listener using a service
provider that extends the ListenerProvider. (That's pretty much
the same, what the DI tags do in the background as well.)

Notes:
 1) To avoid similar future mistakes we also remove the unneeded
    `autoconfigure: false` from Configuration.yaml
 2) This restriction (no DI tag configuration) does only apply to early
    instance services, which is a static list of core TYPO3 services.
 3) We additionally drop the currently unused event callback
    PackageManager::beforeInstallationEventListener.
    It was not fully migrated to a PSR-14 event callback in #90249, which
    revealed that it is actually unneeded. The signal callback was
    introduced with #52766 in EXT:extensionmanager/ext_localconf.php,
    but became obsolete with later fixes: #71071 and #71455
    ExtensionManagementService now calls (through Install/ListUtility)
    directly into packageManager instead of (mis-)using a signal/event.

Resolves: #90955
Related: #90249
Releases: master
Change-Id: I8943e6149743d527c9e1157e425eed3afa98b0d4
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64156


Tested-by: default avatarTYPO3com <noreply@typo3.com>
Tested-by: default avatarSimon Gilli <typo3@gilbertsoft.org>
Tested-by: default avatarBenni Mack <benni@typo3.org>
Reviewed-by: default avatarSimon Gilli <typo3@gilbertsoft.org>
Reviewed-by: default avatarHelmut Hummel <typo3@helhum.io>
Reviewed-by: default avatarAndreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: default avatarBenni Mack <benni@typo3.org>
parent b15a8a00
No related merge requests found
......@@ -21,7 +21,6 @@ use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
use TYPO3\CMS\Core\Core\ClassLoadingInformation;
use TYPO3\CMS\Core\Core\Environment;
use TYPO3\CMS\Core\Information\Typo3Version;
use TYPO3\CMS\Core\Package\Event\BeforePackageActivationEvent;
use TYPO3\CMS\Core\Package\Event\PackagesMayHaveChangedEvent;
use TYPO3\CMS\Core\Package\Exception\InvalidPackageKeyException;
use TYPO3\CMS\Core\Package\Exception\InvalidPackageManifestException;
......@@ -316,13 +315,6 @@ class PackageManager implements SingletonInterface
$this->scanAvailablePackages();
}
public function beforeInstallationEventListener(BeforePackageActivationEvent $event): void
{
if (TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_BE) {
$this->scanAvailablePackages();
}
}
/**
* Scans all directories for a certain package.
*
......
......@@ -53,6 +53,7 @@ class ServiceProvider extends AbstractServiceProvider
{
return [
EventDispatcherInterface::class => [ static::class, 'provideFallbackEventDispatcher' ],
EventDispatcher\ListenerProvider::class => [ static::class, 'extendEventListenerProvider' ],
] + parent::getExtensions();
}
......@@ -105,6 +106,18 @@ class ServiceProvider extends AbstractServiceProvider
return new EventDispatcher\ListenerProvider($container);
}
public static function extendEventListenerProvider(
ContainerInterface $container,
EventDispatcher\ListenerProvider $listenerProvider
): EventDispatcher\ListenerProvider {
$listenerProvider->addListener(
Package\Event\PackagesMayHaveChangedEvent::class,
Package\PackageManager::class,
'packagesMayHaveChanged'
);
return $listenerProvider;
}
public static function getDependencyOrderingService(ContainerInterface $container): Service\DependencyOrderingService
{
return new Service\DependencyOrderingService();
......
......@@ -56,14 +56,6 @@ services:
arguments:
$configPath: "%env(TYPO3:configPath)%/sites"
TYPO3\CMS\Core\Package\PackageManager:
autoconfigure: false
tags:
- name: event.listener
identifier: 'typo3-core'
method: 'packagesMayHaveChanged'
event: TYPO3\CMS\Core\Package\Event\PackagesMayHaveChangedEvent
TYPO3\CMS\Core\Package\FailsafePackageManager:
autoconfigure: false
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment