forked from extern/egroupware
commit for Lars: latest SyncML updates
This commit is contained in:
parent
f4703004e3
commit
83b0801533
@ -19,6 +19,8 @@
|
|||||||
function exportVTODO($_taskID, $_version)
|
function exportVTODO($_taskID, $_version)
|
||||||
{
|
{
|
||||||
$taskData = $this->read($_taskID);
|
$taskData = $this->read($_taskID);
|
||||||
|
|
||||||
|
$taskData = $GLOBALS['egw']->translation->convert($taskData,$GLOBALS['egw']->translation->charset(),'UTF-8');
|
||||||
|
|
||||||
//_debug_array($taskData);
|
//_debug_array($taskData);
|
||||||
|
|
||||||
@ -88,13 +90,14 @@
|
|||||||
foreach($component->_attributes as $attributes)
|
foreach($component->_attributes as $attributes)
|
||||||
{
|
{
|
||||||
#print $attributes['name'].' - '.$attributes['value'].'<br>';
|
#print $attributes['name'].' - '.$attributes['value'].'<br>';
|
||||||
|
#$attributes['value'] = $GLOBALS['egw']->translation->convert($attributes['value'],'UTF-8');
|
||||||
switch($attributes['name'])
|
switch($attributes['name'])
|
||||||
{
|
{
|
||||||
case 'CLASS':
|
case 'CLASS':
|
||||||
$taskData['info_access'] = strtolower($attributes['value']);
|
$taskData['info_access'] = strtolower($attributes['value']);
|
||||||
break;
|
break;
|
||||||
case 'DESCRIPTION':
|
case 'DESCRIPTION':
|
||||||
$taskData['info_des'] = $botranslation->convert($attributes['value'],'utf-8');
|
$taskData['info_des'] = $attributes['value'];
|
||||||
break;
|
break;
|
||||||
case 'DUE':
|
case 'DUE':
|
||||||
$taskData['info_enddate'] = $attributes['value'];
|
$taskData['info_enddate'] = $attributes['value'];
|
||||||
|
@ -39,7 +39,7 @@ class Horde_RPC_syncml extends Horde_RPC {
|
|||||||
/**
|
/**
|
||||||
* Debug directory, if set will store copies of all packets.
|
* Debug directory, if set will store copies of all packets.
|
||||||
*/
|
*/
|
||||||
var $_debugDir = '/var/www/groupware.groupwareappliance.com/htdocs/syncml/';
|
var $_debugDir = '/var/www/html/syncdebug/';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default character set. Only supports UTF-8(ASCII?).
|
* Default character set. Only supports UTF-8(ASCII?).
|
||||||
|
@ -536,8 +536,8 @@ class Horde_SyncML_SyncMLBody extends Horde_SyncML_ContentHandler {
|
|||||||
}
|
}
|
||||||
Horde::logMessage('SyncML: summary:' . $s, __FILE__, __LINE__, PEAR_LOG_INFO);
|
Horde::logMessage('SyncML: summary:' . $s, __FILE__, __LINE__, PEAR_LOG_INFO);
|
||||||
// session can be closed here!
|
// session can be closed here!
|
||||||
session_unset();
|
//session_unset();
|
||||||
session_destroy();
|
//session_destroy();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -66,6 +66,10 @@ class Horde_SyncML_Command {
|
|||||||
|
|
||||||
function characters($str)
|
function characters($str)
|
||||||
{
|
{
|
||||||
|
$tempValue = trim($str);
|
||||||
|
|
||||||
|
if(empty($tempValue)) return;
|
||||||
|
|
||||||
if (isset($this->_chars)) {
|
if (isset($this->_chars)) {
|
||||||
$this->_chars = $this->_chars . $str;
|
$this->_chars = $this->_chars . $str;
|
||||||
} else {
|
} else {
|
||||||
|
@ -200,6 +200,19 @@ class Horde_SyncML_Command_Alert extends Horde_SyncML_Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
$status = &new Horde_SyncML_Command_Status(RESPONSE_OK, 'Alert');
|
||||||
|
$status->setCmdRef($this->_cmdID);
|
||||||
|
if ($this->_sourceLocURI != null) {
|
||||||
|
$status->setSourceRef($this->_sourceLocURI);
|
||||||
|
}
|
||||||
|
if ($this->_targetLocURI != null) {
|
||||||
|
$status->setTargetRef((isset($this->_targetLocURIParameters) ? $this->_targetLocURI.'?/'.$this->_targetLocURIParameters : $this->_targetLocURI));
|
||||||
|
}
|
||||||
|
|
||||||
|
$currentCmdID = $status->output($currentCmdID, $output);
|
||||||
|
}
|
||||||
|
/* else
|
||||||
{
|
{
|
||||||
if ($state->isAuthorized()) {
|
if ($state->isAuthorized()) {
|
||||||
$output->startElement($state->getURI(), 'Alert', $attrs);
|
$output->startElement($state->getURI(), 'Alert', $attrs);
|
||||||
@ -238,8 +251,7 @@ class Horde_SyncML_Command_Alert extends Horde_SyncML_Command {
|
|||||||
|
|
||||||
$currentCmdID++;
|
$currentCmdID++;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,8 @@ class Horde_SyncML_Command_Sync extends Horde_Syncml_Command {
|
|||||||
$state = $_SESSION['SyncML.state'];
|
$state = $_SESSION['SyncML.state'];
|
||||||
if($state->getSyncStatus() == CLIENT_SYNC_FINNISHED || $state->getSyncStatus() == SERVER_SYNC_DATA_PENDING)
|
if($state->getSyncStatus() == CLIENT_SYNC_FINNISHED || $state->getSyncStatus() == SERVER_SYNC_DATA_PENDING)
|
||||||
{
|
{
|
||||||
##############
|
##############
|
||||||
|
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
||||||
$targets = $state->getTargets();
|
$targets = $state->getTargets();
|
||||||
Horde::logMessage('SyncML: starting sync to client '.$targets[0], __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
Horde::logMessage('SyncML: starting sync to client '.$targets[0], __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
$attrs = array();
|
$attrs = array();
|
||||||
@ -139,7 +140,7 @@ class Horde_SyncML_Command_Sync extends Horde_Syncml_Command {
|
|||||||
|
|
||||||
$output->endElement($state->getURI(), 'Sync');
|
$output->endElement($state->getURI(), 'Sync');
|
||||||
|
|
||||||
if($currentCmdID > MAX_DATA) break;
|
break;
|
||||||
}
|
}
|
||||||
#Horde::logMessage('SyncML: ending sync to client '.$targets[0], __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
#Horde::logMessage('SyncML: ending sync to client '.$targets[0], __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
|
|
||||||
|
@ -17,9 +17,11 @@ include_once 'Horde/SyncML/Command/Sync/SyncElement.php';
|
|||||||
*/
|
*/
|
||||||
class Horde_SyncML_Command_Sync_Add extends Horde_SyncML_Command_Sync_SyncElement {
|
class Horde_SyncML_Command_Sync_Add extends Horde_SyncML_Command_Sync_SyncElement {
|
||||||
|
|
||||||
|
var $_status = RESPONSE_ITEM_ADDED;
|
||||||
|
|
||||||
function output($currentCmdID, &$output)
|
function output($currentCmdID, &$output)
|
||||||
{
|
{
|
||||||
$status = &new Horde_SyncML_Command_Status(RESPONSE_ITEM_ADDED, 'Add');
|
$status = &new Horde_SyncML_Command_Status($this->_status, 'Add');
|
||||||
$status->setCmdRef($this->_cmdID);
|
$status->setCmdRef($this->_cmdID);
|
||||||
|
|
||||||
if (isset($this->_luid)) {
|
if (isset($this->_luid)) {
|
||||||
|
@ -127,7 +127,7 @@ class Horde_SyncML_Command_Sync_ContentSyncElement extends Horde_SyncML_Command_
|
|||||||
}
|
}
|
||||||
if (isset($this->_content)) {
|
if (isset($this->_content)) {
|
||||||
$output->startElement($state->getURI(), 'Data', $attrs);
|
$output->startElement($state->getURI(), 'Data', $attrs);
|
||||||
$chars = $this->_content;
|
$chars = '<![CDATA['.$this->_content.']]>';
|
||||||
$output->characters($chars);
|
$output->characters($chars);
|
||||||
$output->endElement($state->getURI(), 'Data');
|
$output->endElement($state->getURI(), 'Data');
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ class Horde_SyncML_Command_Sync_Delete extends Horde_SyncML_Command_Sync_SyncEle
|
|||||||
|
|
||||||
function output($currentCmdID, &$output)
|
function output($currentCmdID, &$output)
|
||||||
{
|
{
|
||||||
$status = &new Horde_SyncML_Command_Status(RESPONSE_OK, 'Delete');
|
$status = &new Horde_SyncML_Command_Status($this->_status, 'Delete');
|
||||||
$status->setCmdRef($this->_cmdID);
|
$status->setCmdRef($this->_cmdID);
|
||||||
|
|
||||||
if (isset($this->_luid)) {
|
if (isset($this->_luid)) {
|
||||||
|
@ -19,7 +19,7 @@ class Horde_SyncML_Command_Sync_Replace extends Horde_SyncML_Command_Sync_SyncEl
|
|||||||
|
|
||||||
function output($currentCmdID, &$output)
|
function output($currentCmdID, &$output)
|
||||||
{
|
{
|
||||||
$status = &new Horde_SyncML_Command_Status(RESPONSE_OK, 'Replace');
|
$status = &new Horde_SyncML_Command_Status($this->_status, 'Replace');
|
||||||
$status->setCmdRef($this->_cmdID);
|
$status->setCmdRef($this->_cmdID);
|
||||||
|
|
||||||
if (isset($this->_luid)) {
|
if (isset($this->_luid)) {
|
||||||
|
@ -22,6 +22,7 @@ class Horde_SyncML_Command_Sync_SyncElement extends Horde_SyncML_Command {
|
|||||||
var $_isSource;
|
var $_isSource;
|
||||||
var $_content;
|
var $_content;
|
||||||
var $_contentType;
|
var $_contentType;
|
||||||
|
var $_status = RESPONSE_OK;
|
||||||
|
|
||||||
function &factory($command, $params = null)
|
function &factory($command, $params = null)
|
||||||
{
|
{
|
||||||
@ -52,6 +53,8 @@ class Horde_SyncML_Command_Sync_SyncElement extends Horde_SyncML_Command {
|
|||||||
|
|
||||||
function endElement($uri, $element)
|
function endElement($uri, $element)
|
||||||
{
|
{
|
||||||
|
$search = array('/ *\n/','/ *$/m');
|
||||||
|
$replace = array('','');
|
||||||
switch ($this->_xmlStack) {
|
switch ($this->_xmlStack) {
|
||||||
case 1:
|
case 1:
|
||||||
// Need to add sync elements to the Sync method?
|
// Need to add sync elements to the Sync method?
|
||||||
@ -61,7 +64,9 @@ class Horde_SyncML_Command_Sync_SyncElement extends Horde_SyncML_Command {
|
|||||||
if ($element == 'Source') {
|
if ($element == 'Source') {
|
||||||
$this->_isSource = false;
|
$this->_isSource = false;
|
||||||
} elseif ($element == 'Data') {
|
} elseif ($element == 'Data') {
|
||||||
$this->_content = trim($this->_chars);
|
$this->_content = $this->_chars;
|
||||||
|
} elseif ($element == 'MoreData') {
|
||||||
|
$this->_moreData = TRUE;
|
||||||
} elseif ($element == 'Type') {
|
} elseif ($element == 'Type') {
|
||||||
if(!isset($this->_contentType))
|
if(!isset($this->_contentType))
|
||||||
$this->_contentType = trim($this->_chars);
|
$this->_contentType = trim($this->_chars);
|
||||||
@ -73,6 +78,8 @@ class Horde_SyncML_Command_Sync_SyncElement extends Horde_SyncML_Command {
|
|||||||
$this->_luid = trim($this->_chars);
|
$this->_luid = trim($this->_chars);
|
||||||
} elseif ($element == 'Type') {
|
} elseif ($element == 'Type') {
|
||||||
$this->_contentType = trim($this->_chars);
|
$this->_contentType = trim($this->_chars);
|
||||||
|
} elseif ($element == 'Size') {
|
||||||
|
$this->_contentSize = trim($this->_chars);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -119,5 +126,9 @@ class Horde_SyncML_Command_Sync_SyncElement extends Horde_SyncML_Command {
|
|||||||
{
|
{
|
||||||
$this->_content = $content;
|
$this->_content = $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setStatus($_status)
|
||||||
|
{
|
||||||
|
$this->_status = $_status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,8 @@ define('CLIENT_SYNC_FINNISHED', 2);
|
|||||||
define('SERVER_SYNC_DATA_PENDING', 3);
|
define('SERVER_SYNC_DATA_PENDING', 3);
|
||||||
define('SERVER_SYNC_FINNISHED', 4);
|
define('SERVER_SYNC_FINNISHED', 4);
|
||||||
|
|
||||||
define('MAX_DATA', 30);
|
define('MAX_DATA', 19);
|
||||||
|
define('MAX_ENTRIES', 10);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Horde_SyncML_State class provides a SyncML state object.
|
* The Horde_SyncML_State class provides a SyncML state object.
|
||||||
|
@ -89,9 +89,9 @@ class Horde_SyncML_Sync {
|
|||||||
* Command takes place. Entries are added, deleted or replaced
|
* Command takes place. Entries are added, deleted or replaced
|
||||||
* from the server database by using Horde API (Registry) calls.
|
* from the server database by using Horde API (Registry) calls.
|
||||||
*/
|
*/
|
||||||
function runSyncCommand($command)
|
function runSyncCommand(&$command)
|
||||||
{
|
{
|
||||||
Horde::logMessage('SyncML: content type is ' . $command->getContentType(), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
Horde::logMessage('SyncML: content type is ' . $command->getContentType() .' moreData '. $command->_moreData, __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
global $registry;
|
global $registry;
|
||||||
|
|
||||||
#require_once 'Horde/History.php';
|
#require_once 'Horde/History.php';
|
||||||
@ -99,6 +99,63 @@ class Horde_SyncML_Sync {
|
|||||||
$history = $GLOBALS['phpgw']->contenthistory;
|
$history = $GLOBALS['phpgw']->contenthistory;
|
||||||
|
|
||||||
$state = &$_SESSION['SyncML.state'];
|
$state = &$_SESSION['SyncML.state'];
|
||||||
|
|
||||||
|
if(isset($state->_moreData['luid']))
|
||||||
|
{
|
||||||
|
if(($command->_luid == $state->_moreData['luid']))
|
||||||
|
{
|
||||||
|
$lastChunks = implode('',$state->_moreData['chunks']);
|
||||||
|
$command->_content = $lastChunks.$command->_content;
|
||||||
|
$stringlen1 = strlen($lastChunks);
|
||||||
|
$stringlen2 = strlen($command->_content);
|
||||||
|
|
||||||
|
if(!$command->_moreData &&
|
||||||
|
strlen($command->_content)
|
||||||
|
!= $state->_moreData['contentSize']
|
||||||
|
)
|
||||||
|
{
|
||||||
|
$command->_status = RESPONSE_SIZE_MISMATCH;
|
||||||
|
$state->_moreData = array();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
elseif(!$command->_moreData &&
|
||||||
|
strlen($command->_content)
|
||||||
|
== $state->_moreData['contentSize']
|
||||||
|
)
|
||||||
|
{
|
||||||
|
$state->_moreData = array();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// alert 223 needed too
|
||||||
|
#$command->_status = ALERT_NO_END_OF_DATA;
|
||||||
|
|
||||||
|
$state->_moreData = array();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// don't add/replace the data currently, they are not yet complete
|
||||||
|
if($command->_moreData == TRUE)
|
||||||
|
{
|
||||||
|
$state->_moreData['chunks'][] = $command->_content;
|
||||||
|
$state->_moreData['luid'] = $command->_luid;
|
||||||
|
|
||||||
|
// gets only set with the first chunk of data
|
||||||
|
if(isset($command->_contentSize))
|
||||||
|
$state->_moreData['contentSize'] = $command->_contentSize;
|
||||||
|
|
||||||
|
$command->_status = RESPONSE_CHUNKED_ITEM_ACCEPTED_AND_BUFFERED;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$hordeType = $type = $this->_targetLocURI;
|
$hordeType = $type = $this->_targetLocURI;
|
||||||
// remove the './' from the beginning
|
// remove the './' from the beginning
|
||||||
$hordeType = str_replace('./','',$hordeType);
|
$hordeType = str_replace('./','',$hordeType);
|
||||||
|
@ -64,7 +64,7 @@ class Horde_SyncML_Sync_OneWayFromServerSync extends Horde_SyncML_Sync {
|
|||||||
|
|
||||||
$syncItems++;
|
$syncItems++;
|
||||||
// return if we have to much data
|
// return if we have to much data
|
||||||
if($syncItems > MAX_DATA)
|
if($syncItems >= MAX_ENTRIES)
|
||||||
{
|
{
|
||||||
$state->setMoreDataPending();
|
$state->setMoreDataPending();
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
|
@ -47,7 +47,7 @@ class Horde_SyncML_Sync_RefreshFromServerSync extends Horde_SyncML_Sync {
|
|||||||
|
|
||||||
$syncItems++;
|
$syncItems++;
|
||||||
// return if we have to much data
|
// return if we have to much data
|
||||||
if($syncItems > MAX_DATA)
|
if($syncItems >= MAX_ENTRIES)
|
||||||
{
|
{
|
||||||
$state->setMoreDataPending();
|
$state->setMoreDataPending();
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
|
@ -38,18 +38,19 @@ class Horde_SyncML_Sync_SlowSync extends Horde_SyncML_Sync_TwoWaySync {
|
|||||||
|
|
||||||
Horde::logMessage("SyncML: ".count($adds). ' added items found for '.$hordeType , __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
Horde::logMessage("SyncML: ".count($adds). ' added items found for '.$hordeType , __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
$serverAnchorNext = $state->getServerAnchorNext($syncType);
|
$serverAnchorNext = $state->getServerAnchorNext($syncType);
|
||||||
|
$counter = 0;
|
||||||
|
|
||||||
while($guid = array_shift($adds))
|
while($guid = array_shift($adds))
|
||||||
{
|
{
|
||||||
#$guid_ts = max($history->getTSforAction($guid, 'add'),$history->getTSforAction($guid, 'modify'));
|
#$guid_ts = max($history->getTSforAction($guid, 'add'),$history->getTSforAction($guid, 'modify'));
|
||||||
$sync_ts = $state->getChangeTS($syncType, $guid);
|
$sync_ts = $state->getChangeTS($syncType, $guid);
|
||||||
#Horde::logMessage("SyncML: timestamp add: $guid sync_ts: $sync_ts anchorNext: ". $serverAnchorNext.' / '.time(), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
Horde::logMessage("SyncML: slowsync timestamp add: $guid sync_ts: $sync_ts anchorNext: ". $serverAnchorNext.' / '.time(), __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
// $sync_ts it got synced from client to server someone
|
// $sync_ts it got synced from client to server someone
|
||||||
// $sync_ts >= $serverAnchorNext it got synced from client to server in this sync package already
|
// $sync_ts >= $serverAnchorNext it got synced from client to server in this sync package already
|
||||||
if ($sync_ts && $sync_ts >= $serverAnchorNext) {
|
if ($sync_ts && $sync_ts >= $serverAnchorNext) {
|
||||||
// Change was done by us upon request of client.
|
// Change was done by us upon request of client.
|
||||||
// Don't mirror that back to the client.
|
// Don't mirror that back to the client.
|
||||||
#Horde::logMessage("SyncML: add: $guid ignored, came from client", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
//Horde::logMessage("SyncML: slowsync add: $guid ignored, came from client", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +65,7 @@ class Horde_SyncML_Sync_SlowSync extends Horde_SyncML_Sync_TwoWaySync {
|
|||||||
$c = $registry->call($hordeType . '/export',
|
$c = $registry->call($hordeType . '/export',
|
||||||
array('guid' => $guid,
|
array('guid' => $guid,
|
||||||
'contentType' => $contentType));
|
'contentType' => $contentType));
|
||||||
|
Horde::logMessage("SyncML: slowsync add to server $c", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
if (!is_a($c, 'PEAR_Error')) {
|
if (!is_a($c, 'PEAR_Error')) {
|
||||||
// Item in history but not in database. Strange, but
|
// Item in history but not in database. Strange, but
|
||||||
// can happen.
|
// can happen.
|
||||||
@ -75,7 +77,7 @@ class Horde_SyncML_Sync_SlowSync extends Horde_SyncML_Sync_TwoWaySync {
|
|||||||
$state->log('Server-Add');
|
$state->log('Server-Add');
|
||||||
|
|
||||||
// return if we have to much data
|
// return if we have to much data
|
||||||
if($currentCmdID > MAX_DATA)
|
if(++$counter >= MAX_ENTRIES)
|
||||||
{
|
{
|
||||||
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
@ -100,7 +102,6 @@ class Horde_SyncML_Sync_SlowSync extends Horde_SyncML_Sync_TwoWaySync {
|
|||||||
Horde::logMessage("SyncML: reading added items from database for $hordeType", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
Horde::logMessage("SyncML: reading added items from database for $hordeType", __FILE__, __LINE__, PEAR_LOG_DEBUG);
|
||||||
$state->setAddedItems($hordeType, $registry->call($hordeType. '/list', array()));
|
$state->setAddedItems($hordeType, $registry->call($hordeType. '/list', array()));
|
||||||
$adds = &$state->getAddedItems($hordeType);
|
$adds = &$state->getAddedItems($hordeType);
|
||||||
|
|
||||||
$this->_syncDataLoaded = TRUE;
|
$this->_syncDataLoaded = TRUE;
|
||||||
|
|
||||||
return count($state->getAddedItems($hordeType));
|
return count($state->getAddedItems($hordeType));
|
||||||
|
@ -56,6 +56,7 @@ class Horde_SyncML_Sync_TwoWaySync extends Horde_SyncML_Sync {
|
|||||||
#$history = &Horde_History::singleton();
|
#$history = &Horde_History::singleton();
|
||||||
$history = $GLOBALS['phpgw']->contenthistory;
|
$history = $GLOBALS['phpgw']->contenthistory;
|
||||||
$state = &$_SESSION['SyncML.state'];
|
$state = &$_SESSION['SyncML.state'];
|
||||||
|
$counter = 0;
|
||||||
|
|
||||||
$changes = &$state->getChangedItems($hordeType);
|
$changes = &$state->getChangedItems($hordeType);
|
||||||
$deletes = &$state->getDeletedItems($hordeType);
|
$deletes = &$state->getDeletedItems($hordeType);
|
||||||
@ -104,7 +105,7 @@ class Horde_SyncML_Sync_TwoWaySync extends Horde_SyncML_Sync {
|
|||||||
$state->log('Server-Replace');
|
$state->log('Server-Replace');
|
||||||
|
|
||||||
// return if we have to much data
|
// return if we have to much data
|
||||||
if($currentCmdID > MAX_DATA)
|
if(++$counter >= MAX_ENTRIES)
|
||||||
{
|
{
|
||||||
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
@ -141,7 +142,7 @@ class Horde_SyncML_Sync_TwoWaySync extends Horde_SyncML_Sync {
|
|||||||
$state->removeUID($syncType, $locid);
|
$state->removeUID($syncType, $locid);
|
||||||
|
|
||||||
// return if we have to much data
|
// return if we have to much data
|
||||||
if($currentCmdID > MAX_DATA)
|
if(++$counter >= MAX_ENTRIES)
|
||||||
{
|
{
|
||||||
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
@ -200,7 +201,7 @@ class Horde_SyncML_Sync_TwoWaySync extends Horde_SyncML_Sync {
|
|||||||
$state->log('Server-Add');
|
$state->log('Server-Add');
|
||||||
|
|
||||||
// return if we have to much data
|
// return if we have to much data
|
||||||
if($currentCmdID > MAX_DATA)
|
if(++$counter >= MAX_ENTRIES)
|
||||||
{
|
{
|
||||||
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
$state->setSyncStatus(SERVER_SYNC_DATA_PENDING);
|
||||||
return $currentCmdID;
|
return $currentCmdID;
|
||||||
|
@ -406,7 +406,6 @@ class Horde_iCalendar {
|
|||||||
*/
|
*/
|
||||||
function parsevCalendar($text, $base = 'VCALENDAR', $charset = 'utf-8', $clear = true)
|
function parsevCalendar($text, $base = 'VCALENDAR', $charset = 'utf-8', $clear = true)
|
||||||
{
|
{
|
||||||
$botranslation = CreateObject('phpgwapi.translation');
|
|
||||||
if ($clear) {
|
if ($clear) {
|
||||||
$this->clear();
|
$this->clear();
|
||||||
}
|
}
|
||||||
@ -494,18 +493,18 @@ class Horde_iCalendar {
|
|||||||
$value = quoted_printable_decode($value);
|
$value = quoted_printable_decode($value);
|
||||||
// Quoted printable is normally encoded as utf-8.
|
// Quoted printable is normally encoded as utf-8.
|
||||||
if (isset($params['CHARSET'])) {
|
if (isset($params['CHARSET'])) {
|
||||||
$value = $botranslation->convert($value, $params['CHARSET']);
|
$value = $GLOBALS['egw']->translation->convert($value, $params['CHARSET'],'iso-8859-1');
|
||||||
} else {
|
} else {
|
||||||
$value = $botranslation->convert($value, 'utf-8');
|
$value = $GLOBALS['egw']->translation->convert($value, 'utf-8');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($params['CHARSET'])) {
|
if (isset($params['CHARSET'])) {
|
||||||
$value = $botranslation->convert($value, $params['CHARSET']);
|
$value = $GLOBALS['egw']->translation->convert($value, $params['CHARSET']);
|
||||||
} else {
|
} else {
|
||||||
// As per RFC 2279, assume UTF8 if we don't have
|
// As per RFC 2279, assume UTF8 if we don't have
|
||||||
// an explicit charset parameter.
|
// an explicit charset parameter.
|
||||||
$value = $botranslation->convert($value, $charset);
|
$value = $GLOBALS['egw']->translation->convert($value, 'utf-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($tag) {
|
switch ($tag) {
|
||||||
@ -1177,7 +1176,7 @@ class Horde_iCalendar {
|
|||||||
* @access private
|
* @access private
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function EncodeQP ($str) {
|
function EncodeQP_old ($str) {
|
||||||
$encoded = $this->FixEOL($str);
|
$encoded = $this->FixEOL($str);
|
||||||
#$encoded = $str;
|
#$encoded = $str;
|
||||||
#if (substr($encoded, -(strlen($this->LE))) != $this->LE)
|
#if (substr($encoded, -(strlen($this->LE))) != $this->LE)
|
||||||
@ -1189,6 +1188,8 @@ class Horde_iCalendar {
|
|||||||
$encoded = preg_replace('/([\000-\012\015\016\020-\037\075\177-\377])/e',
|
$encoded = preg_replace('/([\000-\012\015\016\020-\037\075\177-\377])/e',
|
||||||
"'='.sprintf('%02X', ord('\\1'))", $encoded);
|
"'='.sprintf('%02X', ord('\\1'))", $encoded);
|
||||||
// Replace every spaces and tabs when it's the last character on a line
|
// Replace every spaces and tabs when it's the last character on a line
|
||||||
|
#$encoded = preg_replace("/([\011\040])".$this->LE."/e",
|
||||||
|
# "'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded);
|
||||||
$encoded = preg_replace("/([\011\040])".$this->LE."/e",
|
$encoded = preg_replace("/([\011\040])".$this->LE."/e",
|
||||||
"'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded);
|
"'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded);
|
||||||
|
|
||||||
@ -1205,7 +1206,7 @@ class Horde_iCalendar {
|
|||||||
* @access private
|
* @access private
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function WrapText($message, $length, $qp_mode = false) {
|
function WrapText_old($message, $length, $qp_mode = false) {
|
||||||
$soft_break = ($qp_mode) ? "=\r\n" : $this->LE;
|
$soft_break = ($qp_mode) ? "=\r\n" : $this->LE;
|
||||||
|
|
||||||
#$message = $this->FixEOL($message);
|
#$message = $this->FixEOL($message);
|
||||||
@ -1291,5 +1292,110 @@ class Horde_iCalendar {
|
|||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode string to quoted-printable.
|
||||||
|
* @access private
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function EncodeQP ($str) {
|
||||||
|
$encoded = $this->FixEOL($str);
|
||||||
|
if (substr($encoded, -(strlen($this->LE))) != $this->LE)
|
||||||
|
$encoded .= $this->LE;
|
||||||
|
|
||||||
|
// Replace every high ascii, control and = characters
|
||||||
|
#$encoded = preg_replace('/([\000-\010\013\014\016-\037\075\177-\377])/e',
|
||||||
|
# "'='.sprintf('%02X', ord('\\1'))", $encoded);
|
||||||
|
$encoded = preg_replace('/([\000-\012\015\016\020-\037\075\177-\377])/e',
|
||||||
|
"'='.sprintf('%02X', ord('\\1'))", $encoded);
|
||||||
|
// Replace every spaces and tabs when it's the last character on a line
|
||||||
|
$encoded = preg_replace("/([\011\040])".$this->LE."/e",
|
||||||
|
"'='.sprintf('%02X', ord('\\1')).'".$this->LE."'", $encoded);
|
||||||
|
|
||||||
|
// Maximum line length of 76 characters before CRLF (74 + space + '=')
|
||||||
|
#$encoded = $this->WrapText($encoded, 74, true);
|
||||||
|
|
||||||
|
return $encoded;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps message for use with mailers that do not
|
||||||
|
* automatically perform wrapping and for quoted-printable.
|
||||||
|
* Original written by philippe.
|
||||||
|
* @access private
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function WrapText($message, $length, $qp_mode = false) {
|
||||||
|
$soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE;
|
||||||
|
$soft_break = "..=";
|
||||||
|
|
||||||
|
$message = $this->FixEOL($message);
|
||||||
|
if (substr($message, -1) == $this->LE)
|
||||||
|
$message = substr($message, 0, -1);
|
||||||
|
|
||||||
|
$line = explode($this->LE, $message);
|
||||||
|
$message = "";
|
||||||
|
for ($i=0 ;$i < count($line); $i++)
|
||||||
|
{
|
||||||
|
$line_part = explode(" ", $line[$i]);
|
||||||
|
$buf = "";
|
||||||
|
for ($e = 0; $e<count($line_part); $e++)
|
||||||
|
{
|
||||||
|
$word = $line_part[$e];
|
||||||
|
if ($qp_mode and (strlen($word) > $length))
|
||||||
|
{
|
||||||
|
$space_left = $length - strlen($buf) - 1;
|
||||||
|
if ($e != 0)
|
||||||
|
{
|
||||||
|
if ($space_left > 20)
|
||||||
|
{
|
||||||
|
$len = $space_left;
|
||||||
|
if (substr($word, $len - 1, 1) == "=")
|
||||||
|
$len--;
|
||||||
|
elseif (substr($word, $len - 2, 1) == "=")
|
||||||
|
$len -= 2;
|
||||||
|
$part = substr($word, 0, $len);
|
||||||
|
$word = substr($word, $len);
|
||||||
|
$buf .= " " . $part;
|
||||||
|
$message .= $buf . sprintf("=%s", $this->LE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$message .= $buf . $soft_break;
|
||||||
|
}
|
||||||
|
$buf = "";
|
||||||
|
}
|
||||||
|
while (strlen($word) > 0)
|
||||||
|
{
|
||||||
|
$len = $length;
|
||||||
|
if (substr($word, $len - 1, 1) == "=")
|
||||||
|
$len--;
|
||||||
|
elseif (substr($word, $len - 2, 1) == "=")
|
||||||
|
$len -= 2;
|
||||||
|
$part = substr($word, 0, $len);
|
||||||
|
$word = substr($word, $len);
|
||||||
|
|
||||||
|
if (strlen($word) > 0)
|
||||||
|
$message .= $part . sprintf("=%s", $this->LE);
|
||||||
|
else
|
||||||
|
$buf = $part;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$buf_o = $buf;
|
||||||
|
$buf .= ($e == 0) ? $word : (" " . $word);
|
||||||
|
|
||||||
|
if (strlen($buf) > $length and $buf_o != "")
|
||||||
|
{
|
||||||
|
$message .= $buf_o . $soft_break;
|
||||||
|
$buf = $word;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$message .= $buf . $this->LE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $message;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ class XML_WBXML_ContentHandler {
|
|||||||
function XML_WBXML_ContentHandler()
|
function XML_WBXML_ContentHandler()
|
||||||
{
|
{
|
||||||
$this->_currentUri = &new XML_WBXML_LifoQueue();
|
$this->_currentUri = &new XML_WBXML_LifoQueue();
|
||||||
|
$this->_output = '<?xml version="1.0" encoding="UTF-8" ?>';
|
||||||
}
|
}
|
||||||
|
|
||||||
function raiseError($error)
|
function raiseError($error)
|
||||||
|
@ -100,3 +100,13 @@ $this->applications['egwcalendarsync'] = array(
|
|||||||
'menu_parent' => 'organizing'
|
'menu_parent' => 'organizing'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->applications['egwtaskssync'] = array(
|
||||||
|
'fileroot' => EGW_SERVER_ROOT.'/syncml/tasks',
|
||||||
|
'webroot' => $this->applications['horde']['webroot'] . '/mnemo',
|
||||||
|
'icon' => $this->applications['horde']['webroot'] . '/mnemo/graphics/mnemo.gif',
|
||||||
|
'name' => _("Tasks"),
|
||||||
|
'status' => 'active',
|
||||||
|
'provides' => 'tasks',
|
||||||
|
'menu_parent' => 'organizing'
|
||||||
|
);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user