/**
* 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();
}