/** * Register to the event dispatcher in the provided service container. * * @param MetaModelsBootEvent $event The event. * * @return void */ public function handleEvent(MetaModelsBootEvent $event) { $this->serviceContainer = $event->getServiceContainer(); $dispatcher = $this->getServiceContainer()->getEventDispatcher(); $dispatcher->addListener(CollectMetaModelAttributeInformationEvent::NAME, array($this, 'collectMetaModelAttributeInformation')); $dispatcher->addListener(CollectMetaModelTableNamesEvent::NAME, array($this, 'collectMetaModelTableNames')); $dispatcher->addListener(CreateMetaModelEvent::NAME, array($this, 'createMetaModel')); $dispatcher->addListener(GetMetaModelNameFromIdEvent::NAME, array($this, 'getMetaModelNameFromId')); }
/** * Boot the system in the backend. * * @param MetaModelsBootEvent $event The event. * * @return void * * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.CamelCaseVariableName) */ public function perform(MetaModelsBootEvent $event) { $container = $event->getServiceContainer(); $viewCombinations = new ViewCombinations($container, $GLOBALS['container']['user']); $container->setService($viewCombinations, 'metamodels-view-combinations'); $menuBuilder = new BackendModuleBuilder($container, $viewCombinations); $menuBuilder->export(); // Prepare lazy loading of the data containers. foreach ($viewCombinations->getParentedInputScreenNames() as $metaModelName) { $parent = $viewCombinations->getParentOf($metaModelName); if (substr($parent, 0, 3) === 'mm_') { continue; } LoadDataContainerHookListener::attachFor($parent, function () use($metaModelName, $viewCombinations, $container) { $inputScreen = $viewCombinations->getInputScreenDetails($metaModelName); $builder = new MetaModelDcaBuilder($container); $builder->injectOperationButton($inputScreen); }); } $dispatcher = $container->getEventDispatcher(); foreach ($container->getFactory()->collectNames() as $metaModelName) { $this->attachLoadDataContainerHook($metaModelName, $container); $dispatcher->addListener(PreCreateDcGeneralEvent::NAME, function (PreCreateDcGeneralEvent $event) use($metaModelName, $viewCombinations, $container) { $factory = $event->getFactory(); $name = $factory->getContainerName(); if ($name !== $metaModelName) { return; } $inputScreen = $viewCombinations->getInputScreenDetails($metaModelName); $factory->setContainerClassName('MetaModels\\DcGeneral\\DataDefinition\\MetaModelDataDefinition'); $dispatcher = $container->getEventDispatcher(); $generator = new Builder($container, $inputScreen); $dispatcher->addListener(BuildDataDefinitionEvent::NAME, function (BuildDataDefinitionEvent $event) use($metaModelName, $generator) { if ($event->getContainer()->getName() !== $metaModelName) { return; } $generator->build($event); }, $generator::PRIORITY); $dispatcher->addListener(PopulateEnvironmentEvent::NAME, function (PopulateEnvironmentEvent $event) use($metaModelName, $generator) { if ($event->getEnvironment()->getDataDefinition()->getName() !== $metaModelName) { return; } $generator->populate($event); $GLOBALS['TL_CSS'][] = 'system/modules/metamodels/assets/css/style.css'; }, $generator::PRIORITY); }); } // Register the global subscriber. new Subscriber($container); $this->overrideFilePicker(); }