1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13: namespace DcGeneral\Contao\Dca\Builder\Legacy;
14:
15: use ContaoCommunityAlliance\Contao\Bindings\ContaoEvents;
16: use ContaoCommunityAlliance\Contao\Bindings\Events\Controller\LoadDataContainerEvent;
17: use ContaoCommunityAlliance\Contao\Bindings\Events\System\LoadLanguageFileEvent;
18: use DcGeneral\DataDefinition\Builder\AbstractEventDrivenDataDefinitionBuilder;
19: use Symfony\Component\EventDispatcher\EventDispatcherInterface;
20:
21: 22: 23:
24: abstract class DcaReadingDataDefinitionBuilder extends AbstractEventDrivenDataDefinitionBuilder
25: {
26: 27: 28: 29: 30:
31: protected $dca;
32:
33: 34: 35:
36: public function loadDca($dcaName, EventDispatcherInterface $dispatcher)
37: {
38: $this->dca = null;
39: $previousDca = isset($GLOBALS['TL_DCA']) ? $GLOBALS['TL_DCA'] : null;
40: $GLOBALS['TL_DCA'] = array();
41:
42: $event = new LoadDataContainerEvent($dcaName, true);
43: $dispatcher->dispatch(ContaoEvents::CONTROLLER_LOAD_DATA_CONTAINER, $event);
44:
45: if (isset($GLOBALS['TL_DCA'][$dcaName]))
46: {
47: $this->dca = $GLOBALS['TL_DCA'][$dcaName];
48: }
49:
50: $GLOBALS['TL_DCA'] = $previousDca;
51: unset($GLOBALS['loadDataContainer'][$dcaName]);
52:
53: $event = new LoadLanguageFileEvent($dcaName);
54: $dispatcher->dispatch(ContaoEvents::SYSTEM_LOAD_LANGUAGE_FILE, $event);
55:
56: return $this->dca !== null;
57: }
58:
59: 60: 61: 62: 63: 64: 65: 66: 67:
68: protected function getFromDca($path)
69: {
70: $chunks = explode('/', trim($path, '/'));
71: $dca = $this->dca;
72:
73: while (($chunk = array_shift($chunks)) !== null)
74: {
75: if (!array_key_exists($chunk, $dca))
76: {
77: return null;
78: }
79:
80: $dca = $dca[$chunk];
81: }
82:
83: return $dca;
84: }
85: }
86: