1: <?php
2: /**
3: * The factory for the calendars handler.
4: *
5: * See the enclosed file COPYING for license information (GPL). If you
6: * did not receive this file, see http://www.horde.org/licenses/gpl.
7: *
8: * @author Gunnar Wrobel <wrobel@pardus.de>
9: * @package Kronolith
10: */
11: class Kronolith_Factory_Calendars
12: {
13: /**
14: * Calendars drivers already created.
15: *
16: * @var array
17: */
18: private $_instances = array();
19:
20: /**
21: * The injector.
22: *
23: * @var Horde_Injector
24: */
25: private $_injector;
26:
27: /**
28: * Constructor.
29: *
30: * @param Horde_Injector $injector The injector to use.
31: */
32: public function __construct(Horde_Injector $injector)
33: {
34: $this->_injector = $injector;
35: }
36:
37: /**
38: * Return a Kronolith_Calendars instance.
39: *
40: * @return Kronolith_Calendars
41: */
42: public function create()
43: {
44: if (!isset($GLOBALS['conf']['calendars']['driver'])) {
45: $driver = 'Default';
46: } else {
47: $driver = Horde_String::ucfirst($GLOBALS['conf']['calendars']['driver']);
48: }
49: if (empty($this->_instances[$driver])) {
50: $class = 'Kronolith_Calendars_' . $driver;
51: if (class_exists($class)) {
52: $params = array();
53: switch ($driver) {
54: case 'Default':
55: $params['identity'] = $this->_injector->getInstance('Horde_Core_Factory_Identity')->create();
56: break;
57: }
58: $this->_instances[$driver] = new $class(
59: $GLOBALS['kronolith_shares'],
60: $GLOBALS['registry']->getAuth(),
61: $params
62: );
63: } else {
64: throw new Kronolith_Exception(sprintf('Unable to load the definition of %s.', $class));
65: }
66: }
67: return $this->_instances[$driver];
68: }
69: }