@@ -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