1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13:
14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
28: class Horde_Core_Factory_Cache extends Horde_Core_Factory_Injector
29: {
30: 31: 32: 33: 34: 35:
36: public function create(Horde_Injector $injector)
37: {
38: $driver = empty($GLOBALS['conf']['cache']['driver'])
39: ? 'Null'
40: : $GLOBALS['conf']['cache']['driver'];
41: if (strcasecmp($driver, 'None') === 0) {
42: $driver = 'Null';
43: }
44:
45: $lc_driver = Horde_String::lower($driver);
46:
47: if (Horde_Cli::runningFromCLI() && $lc_driver == 'xcache') {
48: $driver = 'Null';
49: $lc_driver = 'null';
50: }
51:
52: $params = Horde::getDriverConfig('cache', $driver);
53: if (isset($GLOBALS['conf']['cache']['default_lifetime'])) {
54: $params['lifetime'] = $GLOBALS['conf']['cache']['default_lifetime'];
55: }
56: $params['compress'] = !empty($GLOBALS['conf']['cache']['compress']);
57: $params['logger'] = $injector->getInstance('Horde_Log_Logger');
58:
59: switch ($lc_driver) {
60: case 'memcache':
61: $params['memcache'] = $injector->getInstance('Horde_Memcache');
62: break;
63:
64: case 'sql':
65: $params['db'] = $injector->getInstance('Horde_Db_Adapter');
66: break;
67: }
68:
69: $storage = $this->_getStorage($driver, $params);
70:
71: if (!empty($GLOBALS['conf']['cache']['use_memorycache']) &&
72: in_array($lc_driver, array('file', 'sql'))) {
73: if (strcasecmp($GLOBALS['conf']['cache']['use_memorycache'], 'Memcache') === 0) {
74: $params['memcache'] = $injector->getInstance('Horde_Memcache');
75: }
76:
77: $storage = new Horde_Cache_Storage_Stack(array(
78: 'stack' => array(
79: $this->_getStorage($GLOBALS['conf']['cache']['use_memorycache'], $params),
80: $storage
81: )
82: ));
83: }
84:
85: return new Horde_Cache($storage, $params);
86: }
87:
88: 89: 90: 91: 92: 93: 94: 95:
96: protected function _getStorage($driver, $params)
97: {
98: $driver = ucfirst(basename($driver));
99: $classname = 'Horde_Cache_Storage_' . $driver;
100:
101: if (!class_exists($classname)) {
102: $classname = 'Horde_Cache_Storage_Null';
103: }
104:
105: return new $classname($params);
106: }
107:
108: }
109: