Commit 08b80723 authored by mku's avatar mku

ZP-254 #comment Sending a email with multiple pictures results in errors when...

ZP-254 #comment Sending a email with multiple pictures results in errors when fetching the pictures on WM 7.5  #time 2h

git-svn-id: https://z-push.org/svn/z-push/trunk@1477 b7dd7b3b-3a3c-0410-9da9-bee62a6cc5b5
parent 82f0ae8d
......@@ -57,23 +57,30 @@ class ItemOperations extends RequestProcessor {
if(!self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_ITEMOPERATIONS))
return false;
$itemoperations = array();
//ItemOperations can either be Fetch, EmptyFolderContents or Move
while (1) {
//TODO check if multiple item operations are possible in one request
$el = self::$decoder->getElement();
if($el[EN_TYPE] != EN_TYPE_STARTTAG)
return false;
//ItemOperations can either be Fetch, EmptyFolderContents or Move
$fetch = $efc = $move = false;
$operation = array();
if($el[EN_TAG] == SYNC_ITEMOPERATIONS_FETCH) {
$fetch = true;
$operation['operation'] = SYNC_ITEMOPERATIONS_FETCH;
self::$topCollector->AnnounceInformation("Fetch", true);
}
else if($el[EN_TAG] == SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS) {
$efc = true;
$operation['operation'] = SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS;
self::$topCollector->AnnounceInformation("Empty Folder", true);
}
else if($el[EN_TAG] == SYNC_ITEMOPERATIONS_MOVE) {
$move = true;
$operation['operation'] = SYNC_ITEMOPERATIONS_MOVE;
self::$topCollector->AnnounceInformation("Move", true);
}
......@@ -86,30 +93,30 @@ class ItemOperations extends RequestProcessor {
if ($fetch) {
if(!self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_STORE))
return false;
$store = self::$decoder->getElementContent();
$operation['store'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag())
return false;//SYNC_ITEMOPERATIONS_STORE
if(self::$decoder->getElementStartTag(SYNC_SEARCH_LONGID)) {
$longid = self::$decoder->getElementContent();
$operation['longid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag())
return false;//SYNC_SEARCH_LONGID
}
if(self::$decoder->getElementStartTag(SYNC_FOLDERID)) {
$folderid = self::$decoder->getElementContent();
$operation['folderid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag())
return false;//SYNC_FOLDERID
}
if(self::$decoder->getElementStartTag(SYNC_SERVERENTRYID)) {
$serverid = self::$decoder->getElementContent();
$operation['serverid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag())
return false;//SYNC_SERVERENTRYID
}
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_FILEREFERENCE)) {
$filereference = self::$decoder->getElementContent();
$operation['filereference'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag())
return false;//SYNC_AIRSYNCBASE_FILEREFERENCE
}
......@@ -124,31 +131,31 @@ class ItemOperations extends RequestProcessor {
//rm:RightsManagementSupport
// Save all OPTIONS into a ContentParameters object
$collection["cpo"] = new ContentParameters();
$operation["cpo"] = new ContentParameters();
while(1) {
while (self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_BODYPREFERENCE)) {
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_TYPE)) {
$bptype = self::$decoder->getElementContent();
$collection["cpo"]->BodyPreference($bptype);
$operation["cpo"]->BodyPreference($bptype);
if(!self::$decoder->getElementEndTag()) {
return false;
}
}
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_TRUNCATIONSIZE)) {
$collection["cpo"]->BodyPreference($bptype)->SetTruncationSize(self::$decoder->getElementContent());
$operation["cpo"]->BodyPreference($bptype)->SetTruncationSize(self::$decoder->getElementContent());
if(!self::$decoder->getElementEndTag())
return false;
}
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_ALLORNONE)) {
$collection["cpo"]->BodyPreference($bptype)->SetAllOrNone(self::$decoder->getElementContent());
$operation["cpo"]->BodyPreference($bptype)->SetAllOrNone(self::$decoder->getElementContent());
if(!self::$decoder->getElementEndTag())
return false;
}
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_PREVIEW)) {
$collection["cpo"]->BodyPreference($bptype)->SetPreview(self::$decoder->getElementContent());
$operation["cpo"]->BodyPreference($bptype)->SetPreview(self::$decoder->getElementContent());
if(!self::$decoder->getElementEndTag())
return false;
}
......@@ -158,7 +165,7 @@ class ItemOperations extends RequestProcessor {
}
if(self::$decoder->getElementStartTag(SYNC_MIMESUPPORT)) {
$collection["cpo"]->SetMimeSupport(self::$decoder->getElementContent());
$operation["cpo"]->SetMimeSupport(self::$decoder->getElementContent());
if(!self::$decoder->getElementEndTag())
return false;
}
......@@ -175,15 +182,15 @@ class ItemOperations extends RequestProcessor {
if ($efc) {
if(self::$decoder->getElementStartTag(SYNC_FOLDERID)) {
$folderid = self::$decoder->getElementContent();
$operation['folderid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag())
return false;//SYNC_FOLDERID
}
if(self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_OPTIONS)) {
if(self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_DELETESUBFOLDERS)) {
$deletesubfolders = true;
$operation['deletesubfolders'] = true;
if (($dsf = self::$decoder->getElementContent()) !== false) {
$deletesubfolders = (boolean)$dsf;
$operation['deletesubfolders'] = (boolean)$dsf;
if(!self::$decoder->getElementEndTag())
return false;
}
......@@ -192,14 +199,23 @@ class ItemOperations extends RequestProcessor {
}
}
//TODO EmptyFolderContents
//TODO move
if(!self::$decoder->getElementEndTag())
return false; //SYNC_ITEMOPERATIONS_FETCH or SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS or SYNC_ITEMOPERATIONS_MOVE
if(!self::$decoder->getElementEndTag())
return false;//SYNC_ITEMOPERATIONS_ITEMOPERATIONS
$itemoperations[] = $operation;
//break if it reached the endtag
$e = self::$decoder->peek();
if($e[EN_TYPE] == EN_TYPE_ENDTAG) {
self::$decoder->getElementEndTag(); //SYNC_ITEMOPERATIONS_ITEMOPERATIONS
break;
}
}
// if(!self::$decoder->getElementEndTag())
// return false;//SYNC_ITEMOPERATIONS_ITEMOPERATIONS
$status = SYNC_ITEMOPERATIONSSTATUS_SUCCESS;
//TODO status handling
......@@ -214,21 +230,22 @@ class ItemOperations extends RequestProcessor {
self::$encoder->startTag(SYNC_ITEMOPERATIONS_RESPONSE);
foreach ($itemoperations as $operation) {
// fetch response
if ($fetch) {
if ($operation['operation'] == SYNC_ITEMOPERATIONS_FETCH) {
self::$encoder->startTag(SYNC_ITEMOPERATIONS_FETCH);
self::$encoder->startTag(SYNC_ITEMOPERATIONS_STATUS);
self::$encoder->content($status);
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_STATUS
if (isset($folderid) && isset($serverid)) {
if (isset($operation['folderid']) && isset($operation['serverid'])) {
self::$encoder->startTag(SYNC_FOLDERID);
self::$encoder->content($folderid);
self::$encoder->content($operation['folderid']);
self::$encoder->endTag(); // end SYNC_FOLDERID
self::$encoder->startTag(SYNC_SERVERENTRYID);
self::$encoder->content($serverid);
self::$encoder->content($operation['serverid']);
self::$encoder->endTag(); // end SYNC_SERVERENTRYID
self::$encoder->startTag(SYNC_FOLDERTYPE);
......@@ -237,33 +254,33 @@ class ItemOperations extends RequestProcessor {
self::$topCollector->AnnounceInformation("Fetching data from backend with item and folder id");
$data = self::$backend->Fetch($folderid, $serverid, $collection["cpo"]);
$data = self::$backend->Fetch($operation['folderid'], $operation['serverid'], $operation["cpo"]);
}
if (isset($longid)) {
self::$encoder->startTag(SYNC_SEARCH_LONGID);
self::$encoder->content($longid);
self::$encoder->content($operation['longid']);
self::$encoder->endTag(); // end SYNC_FOLDERID
self::$encoder->startTag(SYNC_FOLDERTYPE);
self::$encoder->content("Email");
self::$encoder->endTag();
$tmp = explode(":", $longid);
$tmp = explode(":", $operation['longid']);
self::$topCollector->AnnounceInformation("Fetching data from backend with long id");
$data = self::$backend->Fetch($tmp[0], $tmp[1], $collection["cpo"]);
$data = self::$backend->Fetch($tmp[0], $tmp[1], $operation["cpo"]);
}
if (isset($filereference)) {
if (isset($operation['filereference'])) {
self::$encoder->startTag(SYNC_AIRSYNCBASE_FILEREFERENCE);
self::$encoder->content($filereference);
self::$encoder->content($operation['filereference']);
self::$encoder->endTag(); // end SYNC_AIRSYNCBASE_FILEREFERENCE
self::$topCollector->AnnounceInformation("Get attachment data from backend with file reference");
$data = self::$backend->GetAttachmentData($filereference);
$data = self::$backend->GetAttachmentData($operation['filereference']);
}
//TODO put it in try catch block
......@@ -279,12 +296,12 @@ class ItemOperations extends RequestProcessor {
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_FETCH
}
// empty folder contents operation
else if ($efc) {
else if ($operation['operation'] == SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS) {
try {
self::$topCollector->AnnounceInformation("Emptying folder");
// send request to backend
self::$backend->EmptyFolder($folderid, $deletesubfolders);
self::$backend->EmptyFolder($operation['folderid'], $operation['deletesubfolders']);
}
catch (StatusException $stex) {
$status = $stex->getCode();
......@@ -296,9 +313,9 @@ class ItemOperations extends RequestProcessor {
self::$encoder->content($status);
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_STATUS
if (isset($folderid)) {
if (isset($operation['folderid'])) {
self::$encoder->startTag(SYNC_FOLDERID);
self::$encoder->content($folderid);
self::$encoder->content($operation['folderid']);
self::$encoder->endTag(); // end SYNC_FOLDERID
}
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS
......@@ -315,6 +332,7 @@ class ItemOperations extends RequestProcessor {
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_MOVE
}
}
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_RESPONSE
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_ITEMOPERATIONS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment