Skip to content

Commit b0f1bf0

Browse files
authored
Merge pull request #1635 from kambereBr/apply-ews-patch
fix(backend): fix EWS issues and enhance interoperability
2 parents 5b81b38 + 34dbbf6 commit b0f1bf0

File tree

7 files changed

+195
-89
lines changed

7 files changed

+195
-89
lines changed

composer.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/app.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,9 @@
434434
| 'cache_class' => env('CACHE_CLASS')
435435
*/
436436

437+
'allow_session_cache' => env('ALLOW_SESSION_CACHE', false),
437438

439+
'cache_class' => env('CACHE_CLASS'),
438440
/*
439441
| -------------
440442
| Redis Support

modules/contacts/modules.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,18 @@ public function process() {
9797
*/
9898
class Hm_Handler_find_message_contacts extends Hm_Handler_Module {
9999
public function process() {
100-
$contacts = array();
101100
$existing = $this->get('contact_store');
102101
$addr_headers = array('to', 'cc', 'bcc', 'sender', 'reply-to', 'from');
103102
$headers = $this->get('msg_headers', array());
104103
$addresses = array();
105104
foreach ($headers as $name => $value) {
106105
if (in_array(mb_strtolower($name), $addr_headers, true)) {
107-
foreach (Hm_Address_Field::parse($value) as $vals) {
108-
if (!$existing->search(array('email_address' => $vals['email']))) {
109-
$addresses[] = $vals;
106+
$values = is_array($value) ? $value : array($value);
107+
foreach ($values as $val) {
108+
foreach (Hm_Address_Field::parse($val) as $v) {
109+
if (!$existing->search(array('email_address' => $v['email']))) {
110+
$addresses[] = $v;
111+
}
110112
}
111113
}
112114
}

modules/imap/functions.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false,
250250
else {
251251
$from = $msg['from'];
252252
}
253-
$from = format_imap_from_fld($from);
253+
$from = format_imap_from_fld(is_array($from) ? implode(', ', $from) : $from);
254254
$nofrom = '';
255255
if (!trim($from)) {
256256
$from = '[No From]';

modules/imap/handler_modules.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,9 +559,29 @@ public function process() {
559559
if (array_key_exists('folder_label', $this->request->get)) {
560560
$folder = $this->request->get['folder_label'];
561561
$this->out('folder_label', $folder);
562+
} else {
563+
$folder = hex2bin($parts[2]);
562564
}
565+
563566
$mailbox = Hm_IMAP_List::get_mailbox_without_connection($details);
564567
$label = $mailbox->get_folder_name($folder);
568+
if(!$label) {
569+
if ($this->config->get('allow_session_cache', false)) {
570+
$paths = explode("_", $path);
571+
$short_path = $paths[0] . "_" . $paths[1] . "_";
572+
$cached_folders = $this->cache->get('imap_folders_'.$short_path, true);
573+
$label = !empty($cached_folders[$folder]['name']) ? $cached_folders[$folder]['name'] : '';
574+
} else {
575+
Hm_Msgs::add('Folder name loaded directly from the server. This may be slower. Enable session caching for better performance.', 'warning');
576+
if (isset($details['type']) && $details['type'] === 'ews') {
577+
$connected_mailbox = Hm_IMAP_List::get_connected_mailbox($parts[1], $this->cache);
578+
if ($connected_mailbox && $connected_mailbox->authed()) {
579+
$folder_status = $connected_mailbox->get_folder_status($folder, false);
580+
$label = $folder_status['name'] ?? null;
581+
}
582+
}
583+
}
584+
}
565585
$title = array(strtoupper($details['type'] ?? 'IMAP'), $details['name'], $label);
566586
if ($this->get('list_page', 0)) {
567587
$title[] = sprintf('Page %d', $this->get('list_page', 0));
@@ -932,7 +952,7 @@ public function process() {
932952
}
933953

934954
$mailbox = Hm_IMAP_List::get_connected_mailbox($form['imap_server_id'], $this->cache);
935-
if ($mailbox && ! $mailbox->is_imap() && empty($archive_folder)) {
955+
if ($mailbox && ! $mailbox->is_imap()) {
936956
// EWS supports archiving to user archive folders
937957
$status = $mailbox->message_action($form_folder, 'ARCHIVE', array($form['imap_msg_uid']))['status'];
938958
} else {
@@ -1588,6 +1608,7 @@ public function process() {
15881608
];
15891609
$this->user_config->set('special_imap_folders', $specials);
15901610
}
1611+
Hm_Msgs::add("EWS server saved. To preserve these settings after logout, please go to <a class='alert-link' href='/?page=save'>Save Settings</a>.");
15911612
$this->session->record_unsaved('EWS server added');
15921613
$this->session->secure_cookie($this->request, 'hm_reload_folders', '1');
15931614
}
@@ -1992,6 +2013,7 @@ public function process() {
19922013

19932014
$mailbox = Hm_IMAP_List::get_connected_mailbox($server_id, $this->cache);
19942015
if ($mailbox && $mailbox->authed()) {
2016+
$prefetch = true;
19952017
$mailbox->set_read_only($prefetch);
19962018
$part = false;
19972019
list($msg_struct, $msg_struct_current, $msg_text, $part) = $mailbox->get_structured_message(hex2bin($folder), $uid, $part, $this->user_config->get('text_only_setting', false));

0 commit comments

Comments
 (0)