Skip to content

Commit 6335a60

Browse files
committed
fix(backend): improve archive item handling with enhanced error management and folder creation
1 parent ce55bb5 commit 6335a60

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

modules/imap/hm-ews.php

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,28 +1102,40 @@ protected function is_distinguished_folder(&$folder) {
11021102

11031103
protected function archive_items($itemIds) {
11041104
$result = true;
1105-
$folders = $this->get_parent_folders_of_items($itemIds);
1106-
foreach ($folders as $folder => $itemIds) {
1107-
if ($this->is_distinguished_folder($folder)) {
1108-
$folder = new Type\DistinguishedFolderIdType($folder);
1109-
} else {
1110-
$folder = new Type\FolderIdType($folder);
1111-
}
1112-
$request = [
1113-
'ArchiveSourceFolderId' => $folder->toArray(true),
1114-
'ItemIds' => [
1115-
'ItemId' => $itemIds = array_map(function($itemId) {
1116-
return (new Type\ItemIdType($itemId))->toArray();
1117-
}, $itemIds),
1118-
]
1119-
];
1120-
$request = Type::buildFromArray($request);
1105+
try {
1106+
$archiveFolder = null;
11211107
try {
1122-
$result = $result && $this->ews->ArchiveItem($request);
1108+
$archiveFolder = $this->api->getFolderByDistinguishedId(Enumeration\DistinguishedFolderIdNameType::ARCHIVE_INBOX);
11231109
} catch (\Exception $e) {
1124-
Hm_Msgs::add($e->getMessage(), 'danger');
1125-
$result = false;
1110+
try {
1111+
$rootFolder = new Type\DistinguishedFolderIdType(Enumeration\DistinguishedFolderIdNameType::MESSAGE_ROOT);
1112+
$createRequest = [
1113+
'Folders' => ['Folder' => [
1114+
'DisplayName' => 'Archive'
1115+
]],
1116+
'ParentFolderId' => $rootFolder->toArray(true),
1117+
];
1118+
$createResult = $this->ews->CreateFolder($createRequest);
1119+
$archiveFolder = $this->api->getFolderByDisplayName('Archive', Enumeration\DistinguishedFolderIdNameType::MESSAGE_ROOT);
1120+
} catch (\Exception $createE) {
1121+
Hm_Msgs::add('Unable to create or find archive folder: ' . $createE->getMessage(), 'danger');
1122+
return false;
1123+
}
11261124
}
1125+
1126+
if (!$archiveFolder) {
1127+
Hm_Msgs::add('Archive folder not available', 'danger');
1128+
return false;
1129+
}
1130+
1131+
// use move_items to archive the items
1132+
$archiveFolderId = $archiveFolder->getFolderId()->getId();
1133+
$newIds = $this->move_items($itemIds, $archiveFolderId);
1134+
$result = !empty($newIds);
1135+
1136+
} catch (\Exception $e) {
1137+
Hm_Msgs::add('Archive operation failed: ' . $e->getMessage(), 'danger');
1138+
$result = false;
11271139
}
11281140
return $result;
11291141
}
@@ -1138,7 +1150,7 @@ protected function move_items_to_junk($itemIds) {
11381150
$folder = new Type\FolderIdType($folder);
11391151
}
11401152

1141-
$junkFolder = new Type\DistinguishedFolderIdType(Type\DistinguishedFolderIdType::JUNK);
1153+
$junkFolder = new Type\DistinguishedFolderIdType(Enumeration\DistinguishedFolderIdNameType::JUNK);
11421154
$request = [
11431155
'SourceFolderId' => $folder->toArray(true),
11441156
'DestinationFolderId' => $junkFolder->toArray(true),

0 commit comments

Comments
 (0)