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_Alarm extends Horde_Core_Factory_Base
29: {
30: 31: 32: 33: 34:
35: protected $_alarm;
36:
37: 38: 39: 40: 41:
42: public function create()
43: {
44: if (isset($this->_alarm)) {
45: return $this->_alarm;
46: }
47:
48: $driver = empty($GLOBALS['conf']['alarms']['driver'])
49: ? 'Null'
50: : $GLOBALS['conf']['alarms']['driver'];
51: $params = Horde::getDriverConfig('alarms', $driver);
52:
53: if (strcasecmp($driver, 'Sql') === 0) {
54: $params['db'] = $this->_injector->getInstance('Horde_Db_Adapter');
55: }
56:
57: $params['logger'] = $this->_injector->getInstance('Horde_Log_Logger');
58: $params['loader'] = array($this, 'load');
59:
60: $class = 'Horde_Alarm_' . $driver;
61: $this->_alarm = new $class($params);
62: $this->_alarm->initialize();
63: $this->_alarm->gc();
64:
65: 66:
67: $this->_alarm->addHandler('notify', new Horde_Core_Alarm_Handler_Notify());
68:
69: $handler_params = array(
70: 'js_notify' => array('Horde', 'addInlineScript'),
71: 'icon' => (string)Horde_Themes::img('alerts/alarm.png')
72: );
73: $this->_alarm->addHandler('desktop', new Horde_Alarm_Handler_Desktop($handler_params));
74:
75: $handler_params = array(
76: 'identity' => $this->_injector->getInstance('Horde_Core_Factory_Identity'),
77: 'mail' => $this->_injector->getInstance('Horde_Mail'),
78: );
79: $this->_alarm->addHandler('mail', new Horde_Alarm_Handler_Mail($handler_params));
80:
81: return $this->_alarm;
82: }
83:
84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
96: public function load($user = null, $preload = true)
97: {
98: global $session;
99:
100: $driver = empty($GLOBALS['conf']['alarms']['driver'])
101: ? 'Null'
102: : $GLOBALS['conf']['alarms']['driver'];
103: $params = Horde::getDriverConfig('alarms', $driver);
104:
105: if (!isset($params['ttl'])) {
106: $params['ttl'] = 0;
107: }
108:
109: if ($session->exists('horde', 'alarm_loaded') &&
110: (time() - $session->get('horde', 'alarm_loaded')) < $params['ttl']) {
111: return;
112: }
113:
114: foreach ($GLOBALS['registry']->listApps(null, false, Horde_Perms::READ) as $app) {
115:
116: if ($preload) {
117: try {
118: $alarms = $GLOBALS['registry']->callAppMethod($app, 'listAlarms', array('args' => array(time() + $params['ttl'], $user), 'noperms' => true));
119: } catch (Horde_Exception $e) {
120: continue;
121: }
122: } else {
123: $alarms = array();
124: }
125:
126: 127:
128: if (!$preload || !$session->get('horde', 'alarm_loaded')) {
129: try {
130: $app_alarms = $GLOBALS['registry']->callAppMethod($app, 'listAlarms', array('args' => array(time(), $user), 'noperms' => true));
131: } catch (Horde_Exception $e) {
132: Horde::logMessage($e);
133: $app_alarms = array();
134: }
135: $alarms = array_merge($alarms, $app_alarms);
136: }
137:
138: foreach ($alarms as $alarm) {
139: $this->_alarm->set($alarm, true);
140: }
141: }
142:
143: $session->set('horde', 'alarm_loaded', time());
144: }
145:
146: }
147: