1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13: namespace DcGeneral\Contao\Dca\Populator;
14:
15: use DcGeneral\Contao\Dca\ContaoDataProviderInformation;
16: use DcGeneral\Data\DataProviderInterface;
17: use DcGeneral\EnvironmentInterface;
18: use DcGeneral\EnvironmentPopulator\AbstractEventDrivenEnvironmentPopulator;
19: use DcGeneral\Exception\DcGeneralRuntimeException;
20:
21: 22: 23: 24: 25: 26: 27: 28:
29: class DataProviderPopulator extends AbstractEventDrivenEnvironmentPopulator
30: {
31: const PRIORITY = 100;
32:
33: 34: 35: 36: 37: 38: 39: 40: 41:
42: public function populate(EnvironmentInterface $environment)
43: {
44: $definition = $environment->getDataDefinition();
45:
46: foreach ($definition->getDataProviderDefinition() as $dataProviderInformation)
47: {
48: if ($dataProviderInformation instanceof ContaoDataProviderInformation)
49: {
50: if ($environment->hasDataProvider($dataProviderInformation->getName()))
51: {
52: throw new DcGeneralRuntimeException(sprintf(
53: 'Data provider %s already added to environment.',
54: $dataProviderInformation->getName()
55: ));
56: }
57:
58: $providerClass = new \ReflectionClass($dataProviderInformation->getClassName());
59:
60:
61: $dataProvider = $providerClass->newInstance();
62: if ($initializationData = $dataProviderInformation->getInitializationData())
63: {
64: $dataProvider->setBaseConfig($initializationData);
65: }
66:
67: $environment->addDataProvider($dataProviderInformation->getName(), $dataProvider);
68: }
69: }
70: }
71: }
72: