Don't reset snooze when passively updating the alarms.
authorJan Schneider <jan@horde.org>
Wed, 14 Apr 2010 09:57:24 +0000 (11:57 +0200)
committerJan Schneider <jan@horde.org>
Wed, 14 Apr 2010 10:36:31 +0000 (12:36 +0200)
framework/Alarm/lib/Horde/Alarm.php
framework/Alarm/lib/Horde/Alarm/Sql.php

index 1c951ef..dc6c8bc 100644 (file)
@@ -129,19 +129,22 @@ class Horde_Alarm
      *
      * The alarm will be added if it doesn't exist, and updated otherwise.
      *
-     * @param array $alarm  An alarm hash. See self::get() for format.
+     * @param array $alarm         An alarm hash. See self::get() for format.
+     * @param boolean $keepsnooze  Whether to keep the snooze value unchanged.
      *
      * @return TODO
      */
-    public function set($alarm)
+    public function set($alarm, $keepsnooze = false)
     {
         if (isset($alarm['mail']['body'])) {
             $alarm['mail']['body'] = $this->_toDriver($alarm['mail']['body']);
         }
 
-        return $this->exists($alarm['id'], isset($alarm['user']) ? $alarm['user'] : '')
-            ? $this->_update($alarm)
-            : $this->_add($alarm);
+        if ($this->exists($alarm['id'], isset($alarm['user']) ? $alarm['user'] : '')) {
+            $this->_update($alarm, $keepsnooze);
+        } else {
+            $this->_add($alarm);
+        }
     }
 
     /**
@@ -320,7 +323,7 @@ class Horde_Alarm
             }
 
             foreach ($alarms as $alarm) {
-                $this->set($alarm);
+                $this->set($alarm, true);
             }
         }
 
index a4e417a..b5915da 100644 (file)
@@ -212,12 +212,16 @@ class Horde_Alarm_Sql extends Horde_Alarm
     /**
      * Updates an alarm hash in the backend.
      *
-     * @param array $alarm  An alarm hash.
+     * @param array $alarm         An alarm hash.
+     * @param boolean $keepsnooze  Whether to keep the snooze value unchanged.
+     *
+     * @throws Horde_Alarm_Exception
      */
-    protected function _update($alarm)
+    protected function _update($alarm, $keepsnooze = false)
     {
-        $query = sprintf('UPDATE %s set alarm_start = ?, alarm_end = ?, alarm_methods = ?, alarm_params = ?, alarm_title = ?, alarm_text = ?, alarm_snooze = NULL WHERE alarm_id = ? AND %s',
+        $query = sprintf('UPDATE %s set alarm_start = ?, alarm_end = ?, alarm_methods = ?, alarm_params = ?, alarm_title = ?, alarm_text = ?%s WHERE alarm_id = ? AND %s',
                          $this->_params['table'],
+                         $keepsnooze ? '' : ', alarm_snooze = NULL',
                          isset($alarm['user']) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)');
         $values = array((string)$alarm['start']->setTimezone('UTC'),
                         empty($alarm['end']) ? null : (string)$alarm['end']->setTimezone('UTC'),