Use global injector binder to get Alarm object using Horde alarm config
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Mar 2010 23:34:10 +0000 (17:34 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Mar 2010 23:34:10 +0000 (17:34 -0600)
15 files changed:
framework/Alarm/lib/Horde/Alarm.php
framework/Alarm/package.xml
framework/Core/lib/Horde/Core/Binder/Alarm.php [new file with mode: 0644]
framework/Core/lib/Horde/Core/Binder/Notification.php
framework/Core/lib/Horde/Registry.php
framework/Core/package.xml
horde/admin/alarms.php
horde/bin/alarms
horde/services/snooze.php
kronolith/lib/Application.php
kronolith/lib/Block/tree_alarms.php
kronolith/lib/Driver/Sql.php
kronolith/lib/Event.php
nag/lib/Block/tree_alarms.php
nag/lib/Driver.php

index ecc14e4..4423b47 100644 (file)
 class Horde_Alarm
 {
     /**
+     * Logger.
+     *
+     * @var Horde_Log_Logger
+     */
+    protected $_logger;
+
+    /**
      * Hash containing connection parameters.
      *
      * @var array
      */
-    protected $_params = array('ttl' => 300);
+    protected $_params = array(
+        'ttl' => 300
+    );
 
     /**
      * Attempts to return a concrete instance based on $driver.
@@ -37,40 +46,42 @@ class Horde_Alarm
      * @return Horde_Alarm  The newly created concrete instance.
      * @throws Horde_Alarm_Exception
      */
-    static public function factory($driver = null, $params = null)
+    static public function factory($driver = null, $params = array())
     {
-        if (is_null($driver)) {
-            $driver = $GLOBALS['conf']['alarms']['driver'];
-        }
         if (empty($driver)) {
-            return new Horde_Alarm();
+            return new Horde_Alarm($params);
         }
 
         $driver = ucfirst(basename($driver));
-
-        if (is_null($params)) {
-            $params = Horde::getDriverConfig('alarms', $driver);
-        }
-
         $class = __CLASS__ . '_' . $driver;
 
-        if (class_exists($class)) {
-            $alarm = new $class($params);
-            $alarm->initialize();
-            $alarm->gc();
-            return $alarm;
+        if (!class_exists($class)) {
+            throw new Horde_Alarm_Exception('Could not find driver.');
         }
 
-        throw new Horde_Alarm_Exception('Could not find driver.');
+        $alarm = new $class($params);
+        $alarm->initialize();
+        $alarm->gc();
+
+        return $alarm;
     }
 
     /**
      * Constructor.
      *
-     * @param array $params  Any parameters needed for this driver.
+     * @param array $params  Configuration parameters:
+     * <pre>
+     * 'logger' - (Horde_Log_Logger) A logger instance.
+     * 'ttl' - (integer) Time to live value, in seconds.
+     * </pre>
      */
     public function __construct($params = array())
     {
+        if (isset($params['logger'])) {
+            $this->_logger = $params['logger'];
+            unset($params['logger']);
+        }
+
         $this->_params = array_merge($this->_params, $params);
     }
 
@@ -300,7 +311,9 @@ class Horde_Alarm
                 try {
                     $app_alarms = $GLOBALS['registry']->callByPackage($app, 'listAlarms', array(time(), $user), array('noperms' => true));
                 } catch (Horde_Exception $e) {
-                    Horde::logMessage($e, 'ERR');
+                    if ($this->_logger) {
+                        $this->_logger->log($e, 'ERR');
+                    }
                     $app_alarms = array();
                 }
                 $alarms = array_merge($alarms, $app_alarms);
@@ -374,7 +387,9 @@ class Horde_Alarm
         try {
             $alarms = $this->listAlarms($user, null, $load, $preload);
         } catch (Horde_Alarm_Exception $e) {
-            Horde::logMessage($e, 'ERR');
+            if ($this->_logger) {
+                $this->_logger->log($e, 'ERR');
+            }
             throw $e;
         }
 
@@ -390,7 +405,9 @@ class Horde_Alarm
                     try {
                         $this->{'_' . $alarm_method}($alarm);
                     } catch (Horde_Alarm_Exception $e) {
-                        Horde::logMessage($e, 'ERR');
+                        if ($this->_logger) {
+                            $this->_logger->log($e, 'ERR');
+                        }
                     }
                 }
             }
index de323e8..512d834 100644 (file)
@@ -57,10 +57,24 @@ http://pear.php.net/dtd/package-2.0.xsd">
     <min>1.5.0</min>
    </pearinstaller>
    <package>
+    <name>Core</name>
+    <channel>pear.horde.org</channel>
+   </package>
+   <package>
     <name>Date</name>
     <channel>pear.horde.org</channel>
    </package>
+   <package>
+    <name>Exception</name>
+    <channel>pear.horde.org</channel>
+   </package>
   </required>
+  <optional>
+   <package>
+    <name>Log</name>
+    <channel>pear.horde.org</channel>
+   </package>
+  </optional>
  </dependencies>
  <phprelease>
   <filelist>
diff --git a/framework/Core/lib/Horde/Core/Binder/Alarm.php b/framework/Core/lib/Horde/Core/Binder/Alarm.php
new file mode 100644 (file)
index 0000000..5bc3601
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+class Horde_Core_Binder_Alarm implements Horde_Injector_Binder
+{
+    public function create(Horde_Injector $injector)
+    {
+        if (empty($GLOBALS['conf']['alarms']['driver'])) {
+            $driver = null;
+        } else {
+            $driver = $GLOBALS['conf']['alarms']['driver'];
+            $params = Horde::getDriverConfig('alarms', $driver);
+        }
+
+        $params['logger'] = $injector->getInstance('Horde_Log_Logger');
+
+        return Horde_Alarm::factory($driver, $params);
+    }
+
+    public function equals(Horde_Injector_Binder $binder)
+    {
+        return false;
+    }
+}
index dd3b32d..35e83d6 100644 (file)
@@ -8,7 +8,7 @@ class Horde_Core_Binder_Notification implements Horde_Injector_Binder
         $notify->addType('default', '*', 'Horde_Core_Notification_Status');
         $notify->addType('status', 'horde.*', 'Horde_Core_Notification_Status');
 
-        $notify->addDecorator(new Horde_Notification_Handler_Decorator_Alarm(Horde_Alarm::factory(), Horde_Auth::getAuth()));
+        $notify->addDecorator(new Horde_Notification_Handler_Decorator_Alarm($injector->getInstance('Horde_Alarm'), Horde_Auth::getAuth()));
         $notify->addDecorator(new Horde_Core_Notification_Hordelog());
 
         return $notify;
index 20438bd..0435fcd 100644 (file)
@@ -234,6 +234,7 @@ class Horde_Registry
 
         /* Define binders. */
         $binders = array(
+            'Horde_Alarm' => new Horde_Core_Binder_Alarm(),
             'Horde_Cache' => new Horde_Core_Binder_Cache(),
             'Horde_Db_Adapter_Base' => new Horde_Core_Binder_Db('reader'),
             'Horde_Log_Logger' => new Horde_Core_Binder_Logger(),
index d470e1e..3e25521 100644 (file)
@@ -64,6 +64,7 @@ Application Framework.
        </dir> <!-- /lib/Horde/Core/Autoloader/Callback -->
       </dir> <!-- /lib/Horde/Core/Autoloader -->
       <dir name="Binder">
+       <file name="Alarm.php" role="php" />
        <file name="Cache.php" role="php" />
        <file name="Db.php" role="php" />
        <file name="Dns.php" role="php" />
@@ -193,6 +194,7 @@ Application Framework.
    <install name="lib/Horde/Config/Form.php" as="Horde/Config/Form.php" />
    <install name="lib/Horde/Core/Autoloader/Callback/Auth.php" as="Horde/Core/Autoloader/Callback/Auth.php" />
    <install name="lib/Horde/Core/Autoloader/Callback/Mime.php" as="Horde/Core/Autoloader/Callback/Mime.php" />
+   <install name="lib/Horde/Core/Binder/Alarm.php" as="Horde/Core/Binder/Alarm.php" />
    <install name="lib/Horde/Core/Binder/Cache.php" as="Horde/Core/Binder/Cache.php" />
    <install name="lib/Horde/Core/Binder/Db.php" as="Horde/Core/Binder/Db.php" />
    <install name="lib/Horde/Core/Binder/Dns.php" as="Horde/Core/Binder/Dns.php" />
index a83ac53..865274d 100644 (file)
@@ -11,7 +11,7 @@
 require_once dirname(__FILE__) . '/../lib/Application.php';
 Horde_Registry::appInit('horde', array('admin' => true));
 
-$horde_alarm = Horde_Alarm::factory();
+$horde_alarm = $injector->getInstance('Horde_Alarm');
 $methods = array();
 foreach ($horde_alarm->notificationMethods() as $name => $method) {
     $methods[$name] = $method['__desc'];
index 10e1d97..cfb3ed8 100755 (executable)
@@ -12,4 +12,4 @@
 require_once dirname(__FILE__) . '/../lib/Application.php';
 Horde_Registry::appInit('horde', array('authentication' => 'none', 'cli' => true, 'user_admin' => true));
 
-Horde_Alarm::factory()->notify(null, true, false, array('notify'));
+$injector->getInstance('Horde_Alarm')->notify(null, true, false, array('notify'));
index ac4025c..7f00b55 100644 (file)
@@ -11,7 +11,7 @@
 require_once dirname(__FILE__) . '/../lib/Application.php';
 Horde_Registry::appInit('horde', array('nologintasks' => true));
 
-$alarm = Horde_Alarm::factory();
+$alarm = $injector->getInstance('Horde_Alarm');
 $id = Horde_Util::getPost('alarm');
 $snooze = Horde_Util::getPost('snooze');
 
index 1a2fad0..58d7462 100644 (file)
@@ -171,7 +171,7 @@ class Kronolith_Application extends Horde_Registry_Application
             try {
                 $alarms = $GLOBALS['registry']->callByPackage('kronolith', 'listAlarms', array($_SERVER['REQUEST_TIME']));
                 if (!empty($alarms)) {
-                    $horde_alarm = Horde_Alarm::factory();
+                    $horde_alarm = $GLOBALS['injector']->getInstance('Horde_Alarm');
                     foreach ($alarms as $alarm) {
                         $alarm['start'] = new Horde_Date($alarm['start']);
                         $alarm['end'] = new Horde_Date($alarm['end']);
index 2c7c508..39088d2 100644 (file)
@@ -12,10 +12,7 @@ class Horde_Block_kronolith_tree_alarms extends Horde_Block {
 
     function _buildTree(&$tree, $indent = 0, $parent = null)
     {
-        $horde_alarm = null;
-        if (!empty($GLOBALS['conf']['alarms']['driver'])) {
-            $horde_alarm = Horde_Alarm::factory();
-        }
+        $horde_alarm = $GLOBALS['injector']->getInstance('Horde_Alarm');
 
         $alarmCount = 0;
         try {
@@ -27,7 +24,7 @@ class Horde_Block_kronolith_tree_alarms extends Horde_Block {
         }
         foreach ($alarms as $calId => $calAlarms) {
             foreach ($calAlarms as $event) {
-                if ($horde_alarm && $horde_alarm->isSnoozed($event->uid, Horde_Auth::getAuth())) {
+                if ($horde_alarm->isSnoozed($event->uid, Horde_Auth::getAuth())) {
                     continue;
                 }
                 $alarmCount++;
index 3db4643..9df2e58 100644 (file)
@@ -737,10 +737,7 @@ class Kronolith_Driver_Sql extends Kronolith_Driver
         }
 
         /* Remove any pending alarms. */
-        if (@include_once 'Horde/Alarm.php') {
-            $alarm = Horde_Alarm::factory();
-            $alarm->delete($event->uid);
-        }
+        $GLOBALS['injector']->getInstance('Horde_Alarm')->delete($event->uid);
 
         /* Remove any tags */
         $tagger = Kronolith::getTagger();
index 69d9402..4fbb5b2 100644 (file)
@@ -479,14 +479,10 @@ abstract class Kronolith_Event
             }
         }
 
-        if (!empty($GLOBALS['conf']['alarms']['driver'])) {
-            $alarm = $this->toAlarm(new Horde_Date($_SERVER['REQUEST_TIME']));
-            if ($alarm) {
-                $alarm['start'] = new Horde_Date($alarm['start']);
-                $alarm['end'] = new Horde_Date($alarm['end']);
-                $horde_alarm = Horde_Alarm::factory();
-                $horde_alarm->set($alarm);
-            }
+        if ($alarm = $this->toAlarm(new Horde_Date($_SERVER['REQUEST_TIME']))) {
+            $alarm['start'] = new Horde_Date($alarm['start']);
+            $alarm['end'] = new Horde_Date($alarm['end']);
+            $GLOBALS['injector']->getInstance('Horde_Alarm')->set($alarm);
         }
 
         return $result;
index 8bc9488..3fa9629 100644 (file)
@@ -12,10 +12,7 @@ class Horde_Block_nag_tree_alarms extends Horde_Block {
 
     function _buildTree(&$tree, $indent = 0, $parent = null)
     {
-        $horde_alarm = null;
-        if (!empty($GLOBALS['conf']['alarms']['driver'])) {
-            $horde_alarm = Horde_Alarm::factory();
-        }
+        $horde_alarm = $GLOBALS['injector']->getInstance('Horde_Alarm');
 
         // Get any alarms in the next hour.
         $now = time();
@@ -26,8 +23,7 @@ class Horde_Block_nag_tree_alarms extends Horde_Block {
 
         $alarmCount = 0;
         foreach ($alarms as $taskId => $task) {
-            if ($horde_alarm &&
-                $horde_alarm->isSnoozed($task->uid, Horde_Auth::getAuth())) {
+            if ($horde_alarm->isSnoozed($task->uid, Horde_Auth::getAuth())) {
                 continue;
             }
             $alarmCount++;
index 44e78c5..a50780c 100644 (file)
@@ -241,13 +241,10 @@ class Nag_Driver
         }
 
         /* Add an alarm if necessary. */
-        if (!empty($GLOBALS['conf']['alarms']['driver']) && !empty($alarm)) {
-            $alarm = $task->toAlarm();
-            if ($alarm) {
-                $alarm['start'] = new Horde_Date($alarm['start']);
-                $horde_alarm = Horde_Alarm::factory();
-                $horde_alarm->set($alarm);
-            }
+        if (!empty($alarm) &&
+            ($alarm = $task->toAlarm())) {
+            $alarm['start'] = new Horde_Date($alarm['start']);
+            $GLOBALS['injector']->getInstance('Horde_Alarm')->set($alarm);
         }
 
         return array($taskId, $uid);
@@ -340,17 +337,15 @@ class Nag_Driver
         }
 
         /* Update alarm if necessary. */
-        if (!empty($GLOBALS['conf']['alarms']['driver'])) {
-            $horde_alarm = Horde_Alarm::factory();
-            if (empty($alarm) || $completed) {
-                $horde_alarm->delete($task->uid);
-            } else {
-                $task = $this->get($taskId);
-                $alarm = $task->toAlarm();
-                if ($alarm) {
-                    $alarm['start'] = new Horde_Date($alarm['start']);
-                    $horde_alarm->set($alarm);
-                }
+        $horde_alarm = $GLOBALS['injector']->getInstance('Horde_Alarm');
+        if (empty($alarm) || $completed) {
+            $horde_alarm->delete($task->uid);
+        } else {
+            $task = $this->get($taskId);
+            $alarm = $task->toAlarm();
+            if ($alarm) {
+                $alarm['start'] = new Horde_Date($alarm['start']);
+                $horde_alarm->set($alarm);
             }
         }
 
@@ -407,10 +402,8 @@ class Nag_Driver
         }
 
         /* Delete alarm if necessary. */
-        if (!empty($GLOBALS['conf']['alarms']['driver']) &&
-            !empty($task->alarm)) {
-            $horde_alarm = Horde_Alarm::factory();
-            $horde_alarm->delete($task->uid);
+        if (!empty($task->alarm)) {
+            $GLOBALS['injector']->getInstance('Horde_Alarm')->delete($task->uid);
         }
 
         return true;