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