Skip to content

Commit d93a9c8

Browse files
committed
fix(backend): restore archive_items & keep it the way Exchange was supposed to work
1 parent 25e135c commit d93a9c8

File tree

1 file changed

+19
-31
lines changed

1 file changed

+19
-31
lines changed

modules/imap/hm-ews.php

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,40 +1098,28 @@ protected function is_distinguished_folder(&$folder) {
10981098

10991099
protected function archive_items($itemIds) {
11001100
$result = true;
1101-
try {
1102-
$archiveFolder = null;
1101+
$folders = $this->get_parent_folders_of_items($itemIds);
1102+
foreach ($folders as $folder => $itemIds) {
1103+
if ($this->is_distinguished_folder($folder)) {
1104+
$folder = new Type\DistinguishedFolderIdType($folder);
1105+
} else {
1106+
$folder = new Type\FolderIdType($folder);
1107+
}
1108+
$request = [
1109+
'ArchiveSourceFolderId' => $folder->toArray(true),
1110+
'ItemIds' => [
1111+
'ItemId' => $itemIds = array_map(function($itemId) {
1112+
return (new Type\ItemIdType($itemId))->toArray();
1113+
}, $itemIds),
1114+
]
1115+
];
1116+
$request = Type::buildFromArray($request);
11031117
try {
1104-
$archiveFolder = $this->api->getFolderByDistinguishedId(Enumeration\DistinguishedFolderIdNameType::ARCHIVE_INBOX);
1118+
$result = $result && $this->ews->ArchiveItem($request);
11051119
} catch (\Exception $e) {
1106-
try {
1107-
$rootFolder = new Type\DistinguishedFolderIdType(Enumeration\DistinguishedFolderIdNameType::MESSAGE_ROOT);
1108-
$createRequest = [
1109-
'Folders' => ['Folder' => [
1110-
'DisplayName' => 'Archive'
1111-
]],
1112-
'ParentFolderId' => $rootFolder->toArray(true),
1113-
];
1114-
$createResult = $this->ews->CreateFolder($createRequest);
1115-
$archiveFolder = $this->api->getFolderByDisplayName('Archive', Enumeration\DistinguishedFolderIdNameType::MESSAGE_ROOT);
1116-
} catch (\Exception $createE) {
1117-
Hm_Msgs::add('Unable to create or find archive folder: ' . $createE->getMessage(), 'danger');
1118-
return false;
1119-
}
1120-
}
1121-
1122-
if (!$archiveFolder) {
1123-
Hm_Msgs::add('Archive folder not available', 'danger');
1124-
return false;
1120+
Hm_Msgs::add($e->getMessage(), 'danger');
1121+
$result = false;
11251122
}
1126-
1127-
// use move_items to archive the items
1128-
$archiveFolderId = $archiveFolder->getFolderId()->getId();
1129-
$newIds = $this->move_items($itemIds, $archiveFolderId);
1130-
$result = !empty($newIds);
1131-
1132-
} catch (\Exception $e) {
1133-
Hm_Msgs::add('Archive operation failed: ' . $e->getMessage(), 'danger');
1134-
$result = false;
11351123
}
11361124
return $result;
11371125
}

0 commit comments

Comments
 (0)