. * * Consult LICENSE file for details ************************************************/ class MoveItems extends RequestProcessor { /** * Handles the MoveItems command * * @param int $commandCode * * @access public * @return boolean */ public function Handle($commandCode) { if(!self::$decoder->getElementStartTag(SYNC_MOVE_MOVES)) return false; $moves = array(); while(self::$decoder->getElementStartTag(SYNC_MOVE_MOVE)) { $move = array(); if(self::$decoder->getElementStartTag(SYNC_MOVE_SRCMSGID)) { $move["srcmsgid"] = self::$decoder->getElementContent(); if(!self::$decoder->getElementEndTag()) break; } if(self::$decoder->getElementStartTag(SYNC_MOVE_SRCFLDID)) { $move["srcfldid"] = self::$decoder->getElementContent(); if(!self::$decoder->getElementEndTag()) break; } if(self::$decoder->getElementStartTag(SYNC_MOVE_DSTFLDID)) { $move["dstfldid"] = self::$decoder->getElementContent(); if(!self::$decoder->getElementEndTag()) break; } array_push($moves, $move); if(!self::$decoder->getElementEndTag()) return false; } if(!self::$decoder->getElementEndTag()) return false; self::$encoder->StartWBXML(); self::$encoder->startTag(SYNC_MOVE_MOVES); foreach($moves as $move) { self::$encoder->startTag(SYNC_MOVE_RESPONSE); self::$encoder->startTag(SYNC_MOVE_SRCMSGID); self::$encoder->content($move["srcmsgid"]); self::$encoder->endTag(); $status = SYNC_MOVEITEMSSTATUS_SUCCESS; $result = false; try { // if the source folder is an additional folder the backend has to be setup correctly if (!self::$backend->Setup(ZPush::GetAdditionalSyncFolderStore($move["srcfldid"]))) throw new StatusException(sprintf("HandleMoveItems() could not Setup() the backend for folder id '%s'", $move["srcfldid"]), SYNC_MOVEITEMSSTATUS_INVALIDSOURCEID); $importer = self::$backend->GetImporter($move["srcfldid"]); if ($importer === false) throw new StatusException(sprintf("HandleMoveItems() could not get an importer for folder id '%s'", $move["srcfldid"]), SYNC_MOVEITEMSSTATUS_INVALIDSOURCEID); $result = $importer->ImportMessageMove($move["srcmsgid"], $move["dstfldid"]); // We discard the importer state for now. } catch (StatusException $stex) { if ($stex->getCode() == SYNC_STATUS_FOLDERHIERARCHYCHANGED) // same as SYNC_FSSTATUS_CODEUNKNOWN $status = SYNC_MOVEITEMSSTATUS_INVALIDSOURCEID; else $status = $stex->getCode(); } self::$topCollector->AnnounceInformation(sprintf("Operation status: %s", $status), true); self::$encoder->startTag(SYNC_MOVE_STATUS); self::$encoder->content($status); self::$encoder->endTag(); self::$encoder->startTag(SYNC_MOVE_DSTMSGID); self::$encoder->content( (($result !== false ) ? $result : $move["srcmsgid"])); self::$encoder->endTag(); self::$encoder->endTag(); } self::$encoder->endTag(); return true; } } ?>