From d33fb3f7bc8d9dca3141e4a2c09208efe377003e Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Thu, 29 Apr 2010 15:24:09 -0400 Subject: [PATCH] allow removing all of a devices state without knowing a synckey --- .../ActiveSync/lib/Horde/ActiveSync/State/Base.php | 7 +++++-- .../ActiveSync/lib/Horde/ActiveSync/State/File.php | 5 ++++- .../lib/Horde/ActiveSync/State/History.php | 24 ++++++++++++++++------ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php b/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php index f48e8b8d1..7c5a0d3fd 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/State/Base.php @@ -546,9 +546,12 @@ abstract class Horde_ActiveSync_State_Base /** * Explicitly remove a state from storage. * - * @param string $synckey + * @param string $synckey The specific state to remove + * @param string $devId Remove all state for this device (ignores synckey) + * + * @throws Horde_ActiveSyncException */ - abstract public function removeState($synckey); + abstract public function removeState($synckey = null, $devId = null); /** * Return the heartbeat interval, or zero if we have no existing state diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/State/File.php b/framework/ActiveSync/lib/Horde/ActiveSync/State/File.php index 2f8f24027..8752834d1 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/State/File.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/State/File.php @@ -588,8 +588,11 @@ class Horde_ActiveSync_State_File extends Horde_ActiveSync_State_Base * storage clean. * */ - public function removeState($syncKey) + public function removeState($syncKey = null, $devId = null) { + if ($devId) { + throw new Horde_ActiveSync_Exception('Not implemented.'); + } $this->_gc($syncKey, true); } diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/State/History.php b/framework/ActiveSync/lib/Horde/ActiveSync/State/History.php index d68874095..b3cfa38a5 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/State/History.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/State/History.php @@ -757,17 +757,29 @@ class Horde_ActiveSync_State_History extends Horde_ActiveSync_State_Base * Explicitly remove a state from storage. * * @param string $synckey The specific state to remove + * @param string $devId Remove all state for this device (ignores synckey) * * @throws Horde_ActiveSyncException */ - public function removeState($synckey) + public function removeState($synckey = null, $devId = null) { - $this->_logger->debug('[' . $this->_devId . '] Removing device state.'); - $state_query = 'DELETE FROM ' . $this->_syncStateTable . ' WHERE sync_key = ?'; - $map_query = 'DELETE FROM ' . $this->_syncMapTable . ' WHERE sync_key = ?'; + $state_query = 'DELETE FROM ' . $this->_syncStateTable . ' WHERE'; + $map_query = 'DELETE FROM ' . $this->_syncMapTable . ' WHERE'; + if ($devId) { + $state_query .= ' sync_devid = ?'; + $map_query .= ' sync_devid = ?'; + $values = array($devId); + $this->_logger->debug('[' . $devId . '] Removing device state.'); + } else { + $state_query .= ' sync_key = ?'; + $map_query .= ' sync_key = ?'; + $values = array($synckey); + $this->_logger->debug('[' . $this->_devId . '] Removing device state.'); + } + try { - $this->_db->delete($state_query, array($synckey)); - $this->_db->delete($map_query, array($synckey)); + $this->_db->delete($state_query, $values); + $this->_db->delete($map_query, $values); } catch (Horde_Db_Exception $e) { throw new Horde_ActiveSync_Exception($e); } -- 2.11.0