From d999a797d43db2896ec47eacff5856f10fbb68b1 Mon Sep 17 00:00:00 2001 From: Lars Kneschke Date: Wed, 4 Oct 2006 18:16:58 +0000 Subject: [PATCH] made refresh from server working the new funambol outlook client support this --- .../inc/horde/Horde/SyncML/Command/Alert.php | 4 +- .../inc/horde/Horde/SyncML/Command/Sync.php | 1 + .../SyncML/Sync/RefreshFromServerSync.php | 111 +++++++++++------- .../inc/horde/Horde/SyncML/Sync/SlowSync.php | 33 +++--- .../horde/Horde/SyncML/Sync/TwoWaySync.php | 7 -- 5 files changed, 86 insertions(+), 70 deletions(-) diff --git a/phpgwapi/inc/horde/Horde/SyncML/Command/Alert.php b/phpgwapi/inc/horde/Horde/SyncML/Command/Alert.php index 3c3d6185b0..01c2304d8a 100644 --- a/phpgwapi/inc/horde/Horde/SyncML/Command/Alert.php +++ b/phpgwapi/inc/horde/Horde/SyncML/Command/Alert.php @@ -102,7 +102,7 @@ class Horde_SyncML_Command_Alert extends Horde_SyncML_Command { $state->setServerAnchorLast($type, 0); } - Horde::logMessage("SyncML: checking anchor \$clientlast " . $clientlast .' '. $this->_metaAnchorLast .' '. $clientlast == $this->_metaAnchorLast, __FILE__, __LINE__, PEAR_LOG_DEBUG); + Horde::logMessage('SyncML: checking anchor targetLocURI: clientlast: ' . $clientlast .' / '. $this->_metaAnchorLast, __FILE__, __LINE__, PEAR_LOG_DEBUG); // Set Server Anchor for this sync to current time. $state->setServerAnchorNext($type,time()); @@ -339,7 +339,7 @@ class Horde_SyncML_Command_Alert extends Horde_SyncML_Command { $state->setSync($this->_targetLocURI, $sync); - if($this->_alert == ALERT_SLOW_SYNC) { + if($this->_alert == ALERT_SLOW_SYNC || $this->_alert == ALERT_REFRESH_FROM_SERVER) { $state->removeAllUID($this->_targetLocURI); } } diff --git a/phpgwapi/inc/horde/Horde/SyncML/Command/Sync.php b/phpgwapi/inc/horde/Horde/SyncML/Command/Sync.php index addcd4c199..0aeca15732 100644 --- a/phpgwapi/inc/horde/Horde/SyncML/Command/Sync.php +++ b/phpgwapi/inc/horde/Horde/SyncML/Command/Sync.php @@ -6,6 +6,7 @@ include_once 'Horde/SyncML/Command/Sync/SyncElement.php'; include_once 'Horde/SyncML/Sync/TwoWaySync.php'; include_once 'Horde/SyncML/Sync/SlowSync.php'; include_once 'Horde/SyncML/Sync/OneWayFromServerSync.php'; +include_once 'Horde/SyncML/Sync/RefreshFromServerSync.php'; /** * $Horde: framework/SyncML/SyncML/Command/Sync.php,v 1.17 2004/07/03 15:21:14 chuck Exp $ diff --git a/phpgwapi/inc/horde/Horde/SyncML/Sync/RefreshFromServerSync.php b/phpgwapi/inc/horde/Horde/SyncML/Sync/RefreshFromServerSync.php index a7dd1612a8..61e58c7cbd 100644 --- a/phpgwapi/inc/horde/Horde/SyncML/Sync/RefreshFromServerSync.php +++ b/phpgwapi/inc/horde/Horde/SyncML/Sync/RefreshFromServerSync.php @@ -15,50 +15,75 @@ include_once 'Horde/SyncML/Sync.php'; * @since Horde 3.0 * @package Horde_SyncML */ -class Horde_SyncML_Sync_RefreshFromServerSync extends Horde_SyncML_Sync { - - function endSync($currentCmdID, &$output) - { - global $registry; - $state = &$_SESSION['SyncML.state']; - - // counter for synced items - $syncItems = 0; - - if(!$adds = &$state->getAddedItems($hordeType)) - { - Horde::logMessage("SyncML: reading list of added items", __FILE__, __LINE__, PEAR_LOG_DEBUG); - $adds = $registry->call($this->targetLocURI, '/list', array()); - $adds = &$state->getAddedItems($hordeType); - } - Horde::logMessage("SyncML: ....... ".count($adds).' items to send ..............', __FILE__, __LINE__, PEAR_LOG_DEBUG); - - #foreach ($add as $adds) { - while($guid = array_shift($adds)) - { - $locid = $this->_currentState->getLocID($this->targetLocURI, $guid); - // Add a replace. - $add = &new Horde_SyncML_Command_Sync_ContentSyncElement(); - - $add->setContent($registry->call($this->targetLocURI . '/listByAction', - array($this->_currentState->getPreferedContentType($this->targetLocURI)))); - - $currentCmdID = $add->outputCommand($currentCmdID, $output, 'Add'); +class Horde_SyncML_Sync_RefreshFromServerSync extends Horde_SyncML_Sync_TwoWaySync { + function handleSync($currentCmdID, $hordeType, $syncType, &$output, $refts) { + global $registry; - $syncItems++; - // return if we have to much data - if($syncItems >= MAX_ENTRIES) - { - $state->setMoreDataPending(); - return $currentCmdID; + $history = $GLOBALS['egw']->contenthistory; + $state = &$_SESSION['SyncML.state']; + + $adds = &$state->getAddedItems($hordeType); + + Horde::logMessage("SyncML: ".count($adds). ' added items found for '.$hordeType , __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $serverAnchorNext = $state->getServerAnchorNext($syncType); + $counter = 0; + + if(is_array($adds)) { + while($guid = array_shift($adds)) { + if ($locID = $state->getLocID($syncType, $guid)) { + Horde::logMessage("SyncML: RefreshFromServerSync add to client: $guid ignored, already at client($locID)", __FILE__, __LINE__, PEAR_LOG_DEBUG); + continue; + } + + $contentType = $state->getPreferedContentTypeClient($this->_sourceLocURI); + if(is_a($contentType, 'PEAR_Error')) { + // Client did not sent devinfo + $contentType = array('ContentType' => $state->getPreferedContentType($this->_targetLocURI)); + } + + $cmd = &new Horde_SyncML_Command_Sync_ContentSyncElement(); + $c = $registry->call($hordeType . '/export', array('guid' => $guid, 'contentType' => $contentType)); + Horde::logMessage("SyncML: slowsync add to client $c", __FILE__, __LINE__, PEAR_LOG_DEBUG); + if (!is_a($c, 'PEAR_Error')) { + $cmd->setContent($c); + if($hordeType == 'sifcalendar' || $hordeType == 'sifcontacts' || $hordeType == 'siftasks') { + $cmd->setContentFormat('b64'); + } + + $cmd->setContentType($contentType['ContentType']); + $cmd->setSourceURI($guid); + $currentCmdID = $cmd->outputCommand($currentCmdID, $output, 'Add'); + $state->log('Server-Add'); + + // return if we have to much data + if(++$counter >= MAX_ENTRIES && $hordeType != 'sifcalendar' && $hordeType != 'sifcontacts' && $hordeType != 'siftasks') { + $state->setSyncStatus(SERVER_SYNC_DATA_PENDING); + return $currentCmdID; + } + } + } } + + #Horde::logMessage("SyncML: handling sync ".$currentCmdID, __FILE__, __LINE__, PEAR_LOG_DEBUG); + + $state->clearSync($syncType); + + return $currentCmdID; + } + + function loadData() { + global $registry; + + $state = &$_SESSION['SyncML.state']; + $syncType = $this->_targetLocURI; + $hordeType = str_replace('./','',$syncType); + + Horde::logMessage("SyncML: reading added items from database for $hordeType", __FILE__, __LINE__, PEAR_LOG_DEBUG); + $state->setAddedItems($hordeType, $registry->call($hordeType. '/list', array())); + $adds = &$state->getAddedItems($hordeType); + $this->_syncDataLoaded = TRUE; + + return count($state->getAddedItems($hordeType)); } - - // TODO deletes - - // TODO modifies - - return $currentCmdID; - } - } diff --git a/phpgwapi/inc/horde/Horde/SyncML/Sync/SlowSync.php b/phpgwapi/inc/horde/Horde/SyncML/Sync/SlowSync.php index 77d89db804..48664573b5 100644 --- a/phpgwapi/inc/horde/Horde/SyncML/Sync/SlowSync.php +++ b/phpgwapi/inc/horde/Horde/SyncML/Sync/SlowSync.php @@ -173,22 +173,19 @@ class Horde_SyncML_Sync_SlowSync extends Horde_SyncML_Sync_TwoWaySync { return true; } - - - function loadData() - { - global $registry; - - $state = &$_SESSION['SyncML.state']; - $syncType = $this->_targetLocURI; - $hordeType = str_replace('./','',$syncType); - - Horde::logMessage("SyncML: reading added items from database for $hordeType", __FILE__, __LINE__, PEAR_LOG_DEBUG); - $state->setAddedItems($hordeType, $registry->call($hordeType. '/list', array())); - $adds = &$state->getAddedItems($hordeType); - $this->_syncDataLoaded = TRUE; - - return count($state->getAddedItems($hordeType)); - } - + + function loadData() { + global $registry; + + $state = &$_SESSION['SyncML.state']; + $syncType = $this->_targetLocURI; + $hordeType = str_replace('./','',$syncType); + + Horde::logMessage("SyncML: reading added items from database for $hordeType", __FILE__, __LINE__, PEAR_LOG_DEBUG); + $state->setAddedItems($hordeType, $registry->call($hordeType. '/list', array())); + $adds = &$state->getAddedItems($hordeType); + $this->_syncDataLoaded = TRUE; + + return count($state->getAddedItems($hordeType)); + } } diff --git a/phpgwapi/inc/horde/Horde/SyncML/Sync/TwoWaySync.php b/phpgwapi/inc/horde/Horde/SyncML/Sync/TwoWaySync.php index 47c78574b4..fac31906c5 100644 --- a/phpgwapi/inc/horde/Horde/SyncML/Sync/TwoWaySync.php +++ b/phpgwapi/inc/horde/Horde/SyncML/Sync/TwoWaySync.php @@ -36,13 +36,6 @@ class Horde_SyncML_Sync_TwoWaySync extends Horde_SyncML_Sync { $output, $refts); - #if ($syncType == 'calendar' && $state->handleTasksInCalendar()) { - # Horde::logMessage("SyncML: handling tasks in calendar sync", __FILE__, __LINE__, PEAR_LOG_DEBUG); - # - # $currentCmdID = $this->handleSync($currentCmdID, 'tasks', $syncType, - # $output, $refts); - #} - return $currentCmdID; }