X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=Civi%2FCore%2FContainer.php;h=9b0d6848c87f35851714748ca11573231a17eb20;hb=95d9cb655144abe69ca3daef970f446d59cc85a2;hp=5e064cae445098ccda8f7df12b79feb74230ebbf;hpb=57bab6b5fb5bdc40ef82371c8f0b29cf9237c619;p=civicrm-core.git diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index 5e064cae44..9b0d6848c8 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -121,32 +121,32 @@ class Container { 'Civi\Angular\Manager', [] )) - ->setFactory([new Reference(self::SELF), 'createAngularManager']); + ->setFactory([new Reference(self::SELF), 'createAngularManager'])->setPublic(TRUE); $container->setDefinition('dispatcher', new Definition( 'Civi\Core\CiviEventDispatcher', - [new Reference('service_container')] + [] )) - ->setFactory([new Reference(self::SELF), 'createEventDispatcher']); + ->setFactory([new Reference(self::SELF), 'createEventDispatcher'])->setPublic(TRUE); $container->setDefinition('magic_function_provider', new Definition( 'Civi\API\Provider\MagicFunctionProvider', [] - )); + ))->setPublic(TRUE); $container->setDefinition('civi_api_kernel', new Definition( 'Civi\API\Kernel', [new Reference('dispatcher'), new Reference('magic_function_provider')] )) - ->setFactory([new Reference(self::SELF), 'createApiKernel']); + ->setFactory([new Reference(self::SELF), 'createApiKernel'])->setPublic(TRUE); $container->setDefinition('cxn_reg_client', new Definition( 'Civi\Cxn\Rpc\RegistrationClient', [] )) - ->setFactory('CRM_Cxn_BAO_Cxn::createRegistrationClient'); + ->setFactory('CRM_Cxn_BAO_Cxn::createRegistrationClient')->setPublic(TRUE); - $container->setDefinition('psr_log', new Definition('CRM_Core_Error_Log', [])); + $container->setDefinition('psr_log', new Definition('CRM_Core_Error_Log', []))->setPublic(TRUE); $basicCaches = [ 'js_strings' => 'js_strings', @@ -176,7 +176,7 @@ class Container { $container->setDefinition("cache.{$cacheSvc}", new Definition( 'CRM_Utils_Cache_Interface', [$definitionParams] - ))->setFactory('CRM_Utils_Cache::create'); + ))->setFactory('CRM_Utils_Cache::create')->setPublic(TRUE); } // PrevNextCache cannot use memory or array cache at the moment because the @@ -189,22 +189,22 @@ class Container { 'type' => ['SqlGroup'], ], ] - ))->setFactory('CRM_Utils_Cache::create'); + ))->setFactory('CRM_Utils_Cache::create')->setPublic(TRUE); $container->setDefinition('sql_triggers', new Definition( 'Civi\Core\SqlTriggers', [] - )); + ))->setPublic(TRUE); $container->setDefinition('asset_builder', new Definition( 'Civi\Core\AssetBuilder', [] - )); + ))->setPublic(TRUE); $container->setDefinition('themes', new Definition( 'Civi\Core\Themes', [] - )); + ))->setPublic(TRUE); $container->setDefinition('pear_mail', new Definition('Mail')) ->setFactory('CRM_Utils_Mail::createMailer'); @@ -228,47 +228,47 @@ class Container { $container->setDefinition($name, new Definition( $class )) - ->setFactory([$class, 'singleton']); + ->setFactory([$class, 'singleton'])->setPublic(TRUE); } $container->setAlias('cache.short', 'cache.default'); $container->setDefinition('resources', new Definition( 'CRM_Core_Resources', [new Reference('service_container')] - ))->setFactory([new Reference(self::SELF), 'createResources']); + ))->setFactory([new Reference(self::SELF), 'createResources'])->setPublic(TRUE); $container->setDefinition('prevnext', new Definition( 'CRM_Core_PrevNextCache_Interface', [new Reference('service_container')] - ))->setFactory([new Reference(self::SELF), 'createPrevNextCache']); + ))->setFactory([new Reference(self::SELF), 'createPrevNextCache'])->setPublic(TRUE); $container->setDefinition('prevnext.driver.sql', new Definition( 'CRM_Core_PrevNextCache_Sql', [] - )); + ))->setPublic(TRUE); $container->setDefinition('prevnext.driver.redis', new Definition( 'CRM_Core_PrevNextCache_Redis', [new Reference('cache_config')] - )); + ))->setPublic(TRUE); $container->setDefinition('cache_config', new Definition('ArrayObject')) - ->setFactory([new Reference(self::SELF), 'createCacheConfig']); + ->setFactory([new Reference(self::SELF), 'createCacheConfig'])->setPublic(TRUE); $container->setDefinition('civi.mailing.triggers', new Definition( 'Civi\Core\SqlTrigger\TimestampTriggers', ['civicrm_mailing', 'Mailing'] - ))->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo']); + ))->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo'])->setPublic(TRUE); $container->setDefinition('civi.activity.triggers', new Definition( 'Civi\Core\SqlTrigger\TimestampTriggers', ['civicrm_activity', 'Activity'] - ))->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo']); + ))->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo'])->setPublic(TRUE); $container->setDefinition('civi.case.triggers', new Definition( 'Civi\Core\SqlTrigger\TimestampTriggers', ['civicrm_case', 'Case'] - ))->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo']); + ))->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo'])->setPublic(TRUE); $container->setDefinition('civi.case.staticTriggers', new Definition( 'Civi\Core\SqlTrigger\StaticTriggers', @@ -291,22 +291,22 @@ class Container { ], ] )) - ->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo']); + ->addTag('kernel.event_listener', ['event' => 'hook_civicrm_triggerInfo', 'method' => 'onTriggerInfo'])->setPublic(TRUE); $container->setDefinition('civi_token_compat', new Definition( 'Civi\Token\TokenCompatSubscriber', [] - ))->addTag('kernel.event_subscriber'); + ))->addTag('kernel.event_subscriber')->setPublic(TRUE); $container->setDefinition("crm_mailing_action_tokens", new Definition( "CRM_Mailing_ActionTokens", [] - ))->addTag('kernel.event_subscriber'); + ))->addTag('kernel.event_subscriber')->setPublic(TRUE); foreach (['Activity', 'Contribute', 'Event', 'Mailing', 'Member'] as $comp) { $container->setDefinition("crm_" . strtolower($comp) . "_tokens", new Definition( "CRM_{$comp}_Tokens", [] - ))->addTag('kernel.event_subscriber'); + ))->addTag('kernel.event_subscriber')->setPublic(TRUE); } \CRM_Api4_Services::hook_container($container); @@ -324,14 +324,11 @@ class Container { } /** - * @param \Symfony\Component\DependencyInjection\ContainerInterface $container - * @return \Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher + * @return \Symfony\Component\EventDispatcher\EventDispatcher */ - public function createEventDispatcher($container) { - $dispatcher = new CiviEventDispatcher($container); - if (\CRM_Core_Config::isUpgradeMode()) { - $dispatcher->setDispatchPolicy(\CRM_Upgrade_DispatchPolicy::get('upgrade.main')); - } + public function createEventDispatcher() { + // Continue building on the original dispatcher created during bootstrap. + $dispatcher = static::getBootService('dispatcher.boot'); $dispatcher->addListener('civi.core.install', ['\Civi\Core\InstallationCanary', 'check']); $dispatcher->addListener('civi.core.install', ['\Civi\Core\DatabaseInitializer', 'initialize']); @@ -355,6 +352,7 @@ class Container { $dispatcher->addListener('hook_civicrm_coreResourceList', ['\CRM_Utils_System', 'appendCoreResources']); $dispatcher->addListener('hook_civicrm_getAssetUrl', ['\CRM_Utils_System', 'alterAssetUrl']); $dispatcher->addListener('hook_civicrm_alterExternUrl', ['\CRM_Utils_System', 'migrateExternUrl'], 1000); + $dispatcher->addListener('hook_civicrm_triggerInfo', ['\CRM_Contact_BAO_RelationshipCache', 'onHookTriggerInfo']); $dispatcher->addListener('civi.dao.postInsert', ['\CRM_Core_BAO_RecurringEntity', 'triggerInsert']); $dispatcher->addListener('civi.dao.postUpdate', ['\CRM_Core_BAO_RecurringEntity', 'triggerUpdate']); $dispatcher->addListener('civi.dao.postDelete', ['\CRM_Core_BAO_RecurringEntity', 'triggerDelete']); @@ -501,6 +499,17 @@ class Container { $bootServices['paths'] = new \Civi\Core\Paths(); + $bootServices['dispatcher.boot'] = new CiviEventDispatcher(); + + // Quality control: There should be no pre-boot hooks because they make it harder to understand/support/refactor. + // If a pre-boot hook sneaks in, we'll raise an error. + $bootDispatchPolicy = [ + '/^hook_/' => 'not-ready', + '/^civi\./' => 'run', + ]; + $mainDispatchPolicy = \CRM_Core_Config::isUpgradeMode() ? \CRM_Upgrade_DispatchPolicy::get('upgrade.main') : NULL; + $bootServices['dispatcher.boot']->setDispatchPolicy($bootDispatchPolicy); + $class = $runtime->userFrameworkClass; $bootServices['userSystem'] = $userSystem = new $class(); $userSystem->initialize(); @@ -522,6 +531,7 @@ class Container { \CRM_Utils_Hook::singleton(TRUE); \CRM_Extension_System::singleton(TRUE); \CRM_Extension_System::singleton(TRUE)->getClassLoader()->register(); + $bootServices['dispatcher.boot']->setDispatchPolicy($mainDispatchPolicy); $runtime->includeCustomPath(); @@ -532,6 +542,9 @@ class Container { } \Civi::$statics[__CLASS__]['container'] = $container; } + else { + $bootServices['dispatcher.boot']->setDispatchPolicy($mainDispatchPolicy); + } } public static function getBootService($name) {