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 { ...@@ -57,23 +57,30 @@ class ItemOperations extends RequestProcessor {
if(!self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_ITEMOPERATIONS)) if(!self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_ITEMOPERATIONS))
return false; 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 //TODO check if multiple item operations are possible in one request
$el = self::$decoder->getElement(); $el = self::$decoder->getElement();
if($el[EN_TYPE] != EN_TYPE_STARTTAG) if($el[EN_TYPE] != EN_TYPE_STARTTAG)
return false; return false;
//ItemOperations can either be Fetch, EmptyFolderContents or Move
$fetch = $efc = $move = false; $fetch = $efc = $move = false;
$operation = array();
if($el[EN_TAG] == SYNC_ITEMOPERATIONS_FETCH) { if($el[EN_TAG] == SYNC_ITEMOPERATIONS_FETCH) {
$fetch = true; $fetch = true;
$operation['operation'] = SYNC_ITEMOPERATIONS_FETCH;
self::$topCollector->AnnounceInformation("Fetch", true); self::$topCollector->AnnounceInformation("Fetch", true);
} }
else if($el[EN_TAG] == SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS) { else if($el[EN_TAG] == SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS) {
$efc = true; $efc = true;
$operation['operation'] = SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS;
self::$topCollector->AnnounceInformation("Empty Folder", true); self::$topCollector->AnnounceInformation("Empty Folder", true);
} }
else if($el[EN_TAG] == SYNC_ITEMOPERATIONS_MOVE) { else if($el[EN_TAG] == SYNC_ITEMOPERATIONS_MOVE) {
$move = true; $move = true;
$operation['operation'] = SYNC_ITEMOPERATIONS_MOVE;
self::$topCollector->AnnounceInformation("Move", true); self::$topCollector->AnnounceInformation("Move", true);
} }
...@@ -86,30 +93,30 @@ class ItemOperations extends RequestProcessor { ...@@ -86,30 +93,30 @@ class ItemOperations extends RequestProcessor {
if ($fetch) { if ($fetch) {
if(!self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_STORE)) if(!self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_STORE))
return false; return false;
$store = self::$decoder->getElementContent(); $operation['store'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false;//SYNC_ITEMOPERATIONS_STORE return false;//SYNC_ITEMOPERATIONS_STORE
if(self::$decoder->getElementStartTag(SYNC_SEARCH_LONGID)) { if(self::$decoder->getElementStartTag(SYNC_SEARCH_LONGID)) {
$longid = self::$decoder->getElementContent(); $operation['longid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false;//SYNC_SEARCH_LONGID return false;//SYNC_SEARCH_LONGID
} }
if(self::$decoder->getElementStartTag(SYNC_FOLDERID)) { if(self::$decoder->getElementStartTag(SYNC_FOLDERID)) {
$folderid = self::$decoder->getElementContent(); $operation['folderid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false;//SYNC_FOLDERID return false;//SYNC_FOLDERID
} }
if(self::$decoder->getElementStartTag(SYNC_SERVERENTRYID)) { if(self::$decoder->getElementStartTag(SYNC_SERVERENTRYID)) {
$serverid = self::$decoder->getElementContent(); $operation['serverid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false;//SYNC_SERVERENTRYID return false;//SYNC_SERVERENTRYID
} }
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_FILEREFERENCE)) { if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_FILEREFERENCE)) {
$filereference = self::$decoder->getElementContent(); $operation['filereference'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false;//SYNC_AIRSYNCBASE_FILEREFERENCE return false;//SYNC_AIRSYNCBASE_FILEREFERENCE
} }
...@@ -124,31 +131,31 @@ class ItemOperations extends RequestProcessor { ...@@ -124,31 +131,31 @@ class ItemOperations extends RequestProcessor {
//rm:RightsManagementSupport //rm:RightsManagementSupport
// Save all OPTIONS into a ContentParameters object // Save all OPTIONS into a ContentParameters object
$collection["cpo"] = new ContentParameters(); $operation["cpo"] = new ContentParameters();
while(1) { while(1) {
while (self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_BODYPREFERENCE)) { while (self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_BODYPREFERENCE)) {
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_TYPE)) { if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_TYPE)) {
$bptype = self::$decoder->getElementContent(); $bptype = self::$decoder->getElementContent();
$collection["cpo"]->BodyPreference($bptype); $operation["cpo"]->BodyPreference($bptype);
if(!self::$decoder->getElementEndTag()) { if(!self::$decoder->getElementEndTag()) {
return false; return false;
} }
} }
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_TRUNCATIONSIZE)) { 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()) if(!self::$decoder->getElementEndTag())
return false; return false;
} }
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_ALLORNONE)) { 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()) if(!self::$decoder->getElementEndTag())
return false; return false;
} }
if(self::$decoder->getElementStartTag(SYNC_AIRSYNCBASE_PREVIEW)) { 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()) if(!self::$decoder->getElementEndTag())
return false; return false;
} }
...@@ -158,7 +165,7 @@ class ItemOperations extends RequestProcessor { ...@@ -158,7 +165,7 @@ class ItemOperations extends RequestProcessor {
} }
if(self::$decoder->getElementStartTag(SYNC_MIMESUPPORT)) { if(self::$decoder->getElementStartTag(SYNC_MIMESUPPORT)) {
$collection["cpo"]->SetMimeSupport(self::$decoder->getElementContent()); $operation["cpo"]->SetMimeSupport(self::$decoder->getElementContent());
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false; return false;
} }
...@@ -175,15 +182,15 @@ class ItemOperations extends RequestProcessor { ...@@ -175,15 +182,15 @@ class ItemOperations extends RequestProcessor {
if ($efc) { if ($efc) {
if(self::$decoder->getElementStartTag(SYNC_FOLDERID)) { if(self::$decoder->getElementStartTag(SYNC_FOLDERID)) {
$folderid = self::$decoder->getElementContent(); $operation['folderid'] = self::$decoder->getElementContent();
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false;//SYNC_FOLDERID return false;//SYNC_FOLDERID
} }
if(self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_OPTIONS)) { if(self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_OPTIONS)) {
if(self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_DELETESUBFOLDERS)) { if(self::$decoder->getElementStartTag(SYNC_ITEMOPERATIONS_DELETESUBFOLDERS)) {
$deletesubfolders = true; $operation['deletesubfolders'] = true;
if (($dsf = self::$decoder->getElementContent()) !== false) { if (($dsf = self::$decoder->getElementContent()) !== false) {
$deletesubfolders = (boolean)$dsf; $operation['deletesubfolders'] = (boolean)$dsf;
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false; return false;
} }
...@@ -192,14 +199,23 @@ class ItemOperations extends RequestProcessor { ...@@ -192,14 +199,23 @@ class ItemOperations extends RequestProcessor {
} }
} }
//TODO EmptyFolderContents
//TODO move //TODO move
if(!self::$decoder->getElementEndTag()) if(!self::$decoder->getElementEndTag())
return false; //SYNC_ITEMOPERATIONS_FETCH or SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS or SYNC_ITEMOPERATIONS_MOVE return false; //SYNC_ITEMOPERATIONS_FETCH or SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS or SYNC_ITEMOPERATIONS_MOVE
if(!self::$decoder->getElementEndTag()) $itemoperations[] = $operation;
return false;//SYNC_ITEMOPERATIONS_ITEMOPERATIONS //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; $status = SYNC_ITEMOPERATIONSSTATUS_SUCCESS;
//TODO status handling //TODO status handling
...@@ -214,21 +230,22 @@ class ItemOperations extends RequestProcessor { ...@@ -214,21 +230,22 @@ class ItemOperations extends RequestProcessor {
self::$encoder->startTag(SYNC_ITEMOPERATIONS_RESPONSE); self::$encoder->startTag(SYNC_ITEMOPERATIONS_RESPONSE);
foreach ($itemoperations as $operation) {
// fetch response // fetch response
if ($fetch) { if ($operation['operation'] == SYNC_ITEMOPERATIONS_FETCH) {
self::$encoder->startTag(SYNC_ITEMOPERATIONS_FETCH); self::$encoder->startTag(SYNC_ITEMOPERATIONS_FETCH);
self::$encoder->startTag(SYNC_ITEMOPERATIONS_STATUS); self::$encoder->startTag(SYNC_ITEMOPERATIONS_STATUS);
self::$encoder->content($status); self::$encoder->content($status);
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_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->startTag(SYNC_FOLDERID);
self::$encoder->content($folderid); self::$encoder->content($operation['folderid']);
self::$encoder->endTag(); // end SYNC_FOLDERID self::$encoder->endTag(); // end SYNC_FOLDERID
self::$encoder->startTag(SYNC_SERVERENTRYID); self::$encoder->startTag(SYNC_SERVERENTRYID);
self::$encoder->content($serverid); self::$encoder->content($operation['serverid']);
self::$encoder->endTag(); // end SYNC_SERVERENTRYID self::$encoder->endTag(); // end SYNC_SERVERENTRYID
self::$encoder->startTag(SYNC_FOLDERTYPE); self::$encoder->startTag(SYNC_FOLDERTYPE);
...@@ -237,33 +254,33 @@ class ItemOperations extends RequestProcessor { ...@@ -237,33 +254,33 @@ class ItemOperations extends RequestProcessor {
self::$topCollector->AnnounceInformation("Fetching data from backend with item and folder id"); 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)) { if (isset($longid)) {
self::$encoder->startTag(SYNC_SEARCH_LONGID); self::$encoder->startTag(SYNC_SEARCH_LONGID);
self::$encoder->content($longid); self::$encoder->content($operation['longid']);
self::$encoder->endTag(); // end SYNC_FOLDERID self::$encoder->endTag(); // end SYNC_FOLDERID
self::$encoder->startTag(SYNC_FOLDERTYPE); self::$encoder->startTag(SYNC_FOLDERTYPE);
self::$encoder->content("Email"); self::$encoder->content("Email");
self::$encoder->endTag(); self::$encoder->endTag();
$tmp = explode(":", $longid); $tmp = explode(":", $operation['longid']);
self::$topCollector->AnnounceInformation("Fetching data from backend with long id"); 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->startTag(SYNC_AIRSYNCBASE_FILEREFERENCE);
self::$encoder->content($filereference); self::$encoder->content($operation['filereference']);
self::$encoder->endTag(); // end SYNC_AIRSYNCBASE_FILEREFERENCE self::$encoder->endTag(); // end SYNC_AIRSYNCBASE_FILEREFERENCE
self::$topCollector->AnnounceInformation("Get attachment data from backend with file reference"); 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 //TODO put it in try catch block
...@@ -279,12 +296,12 @@ class ItemOperations extends RequestProcessor { ...@@ -279,12 +296,12 @@ class ItemOperations extends RequestProcessor {
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_FETCH self::$encoder->endTag();//SYNC_ITEMOPERATIONS_FETCH
} }
// empty folder contents operation // empty folder contents operation
else if ($efc) { else if ($operation['operation'] == SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS) {
try { try {
self::$topCollector->AnnounceInformation("Emptying folder"); self::$topCollector->AnnounceInformation("Emptying folder");
// send request to backend // send request to backend
self::$backend->EmptyFolder($folderid, $deletesubfolders); self::$backend->EmptyFolder($operation['folderid'], $operation['deletesubfolders']);
} }
catch (StatusException $stex) { catch (StatusException $stex) {
$status = $stex->getCode(); $status = $stex->getCode();
...@@ -296,9 +313,9 @@ class ItemOperations extends RequestProcessor { ...@@ -296,9 +313,9 @@ class ItemOperations extends RequestProcessor {
self::$encoder->content($status); self::$encoder->content($status);
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_STATUS self::$encoder->endTag();//SYNC_ITEMOPERATIONS_STATUS
if (isset($folderid)) { if (isset($operation['folderid'])) {
self::$encoder->startTag(SYNC_FOLDERID); self::$encoder->startTag(SYNC_FOLDERID);
self::$encoder->content($folderid); self::$encoder->content($operation['folderid']);
self::$encoder->endTag(); // end SYNC_FOLDERID self::$encoder->endTag(); // end SYNC_FOLDERID
} }
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS self::$encoder->endTag();//SYNC_ITEMOPERATIONS_EMPTYFOLDERCONTENTS
...@@ -315,6 +332,7 @@ class ItemOperations extends RequestProcessor { ...@@ -315,6 +332,7 @@ class ItemOperations extends RequestProcessor {
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_MOVE self::$encoder->endTag();//SYNC_ITEMOPERATIONS_MOVE
} }
}
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_RESPONSE self::$encoder->endTag();//SYNC_ITEMOPERATIONS_RESPONSE
self::$encoder->endTag();//SYNC_ITEMOPERATIONS_ITEMOPERATIONS 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