1: <?php
2:
3: namespace PHPixie\Template;
4:
5: class Extensions
6: {
7: protected $configData;
8: protected $externalExtensions;
9:
10: protected $extensions;
11: protected $methods;
12: protected $aliases;
13:
14: protected $extensionNames = array('html');
15: protected $classMap = array(
16: 'html' => '\PHPixie\Template\Extensions\Extension\HTML'
17: );
18:
19: public function __construct($configData, $externalExtensions)
20: {
21: $this->configData = $configData;
22: $this->externalExtensions = $externalExtensions;
23: }
24:
25: public function get($name)
26: {
27: $this->requireMappedExtensions();
28: return $this->extensions[$name];
29: }
30:
31: public function getMethod($name)
32: {
33: $this->requireMappedExtensions();
34: return $this->methods[$name];
35: }
36:
37: public function aliases()
38: {
39: $this->requireMappedExtensions();
40: return $this->aliases;
41: }
42:
43: protected function requireMappedExtensions()
44: {
45: if($this->extensions === null) {
46: $this->mapExtensions();
47: }
48: }
49:
50: protected function mapExtensions()
51: {
52: $extensions = array();
53:
54: foreach($this->extensionNames as $name) {
55: $extension = $this->buildExtension($name);
56: $extensions[$extension->name()] = $extension;
57: }
58:
59: foreach($this->externalExtensions as $extension) {
60: $extensions[$extension->name()] = $extension;
61: }
62:
63: $methods = array();
64: $aliases = array();
65: foreach($extensions as $name => $extension) {
66:
67: foreach($extension->methods() as $methodAlias => $method) {
68: $methods[$methodAlias] = array($extension, $method);
69: }
70:
71: foreach($extension->aliases() as $alias => $method) {
72: $aliases[$alias] = array($extension, $method);
73: }
74: }
75:
76: $configAliases = $this->configData->get('aliases', array());
77:
78: foreach($configAliases as $alias => $config) {
79: $aliases[$alias] = array(
80: $extensions[$config['extension']],
81: $config['method']
82: );
83: }
84:
85: $this->extensions = $extensions;
86: $this->methods = $methods;
87: $this->aliases = $aliases;
88: }
89:
90: protected function buildExtension($name)
91: {
92: $class = $this->classMap[$name];
93: return new $class;
94: }
95: }