From 917159316e5146e186c97fc5f96ca7aa138a0959 Mon Sep 17 00:00:00 2001 From: christer kahasha <62720246+christer77@users.noreply.github.com> Date: Fri, 13 Sep 2024 12:02:37 +0200 Subject: [PATCH] [ENH]message list: Preview of message when viewing message list --- modules/core/message_list_functions.php | 14 +++++++++++--- modules/imap/functions.php | 9 +++++++-- modules/imap/handler_modules.php | 9 +++++++++ modules/imap/site.js | 2 +- .../modules/core/message_list_functions.php | 4 ++-- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/modules/core/message_list_functions.php b/modules/core/message_list_functions.php index eac7e95a2f..3a2960d6f9 100644 --- a/modules/core/message_list_functions.php +++ b/modules/core/message_list_functions.php @@ -295,15 +295,23 @@ function checkbox_callback($vals, $style, $output_mod) { if (!hm_exists('subject_callback')) { function subject_callback($vals, $style, $output_mod) { $img = ''; + $preview_msg = ''; + $subject = ''; if (count($vals) == 4 && $vals[3]) { $img = ''; } - $subject = $output_mod->html_safe($vals[0]); + if (is_array($vals[0])) { + $preview_msg = $output_mod->html_safe($vals[0]['preview_msg']); + $subject = $output_mod->html_safe($vals[0]['subject']); + } else { + $subject = $output_mod->html_safe($vals[0]); + } + $hl_subject = preg_replace("/^(\[[^\]]+\])/", '$1', $subject); if ($style == 'news') { - return sprintf('
%s %s
', $output_mod->html_safe(implode(' ', $vals[2])), $subject, $img, $output_mod->html_safe($vals[1]), $hl_subject); + return sprintf('
%s %s

'. $preview_msg .'

', $output_mod->html_safe(implode(' ', $vals[2])), $subject, $img, $output_mod->html_safe($vals[1]), $hl_subject); } - return sprintf('
%s
', $output_mod->html_safe(implode(' ', $vals[2])), $subject, $output_mod->html_safe($vals[1]), $hl_subject); + return sprintf('
%s

'. $preview_msg .'

', $output_mod->html_safe(implode(' ', $vals[2])), $subject, $output_mod->html_safe($vals[1]), $hl_subject); }} /** diff --git a/modules/imap/functions.php b/modules/imap/functions.php index 107f95daec..34cd753584 100644 --- a/modules/imap/functions.php +++ b/modules/imap/functions.php @@ -216,6 +216,11 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false, $msg['subject'] = '[No Subject]'; } $subject = $msg['subject']; + $preview_msg = ""; + if (isset($msg['preview_msg'])) { + $preview_msg = $msg['preview_msg']; + } + if ($parent_list == 'sent') { $icon = 'sent'; $from = $msg['to']; @@ -291,7 +296,7 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false, $res[$id] = message_list_row(array( array('checkbox_callback', $id), array('icon_callback', $flags), - array('subject_callback', $subject, $url, $flags, $icon), + array('subject_callback', array("subject" => $subject, "preview_msg" => $preview_msg), $url, $flags, $icon), array('safe_output_callback', 'source', $source), array('safe_output_callback', 'from'.$nofrom, $from, null, str_replace(array($from, '<', '>'), '', $msg['from'])), array('date_callback', $date, $timestamp), @@ -307,7 +312,7 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false, array('checkbox_callback', $id), array('safe_output_callback', 'source', $source, $icon), array('safe_output_callback', 'from'.$nofrom, $from, null, str_replace(array($from, '<', '>'), '', $msg['from'])), - array('subject_callback', $subject, $url, $flags), + array('subject_callback', array("subject" => $subject, "preview_msg" => $preview_msg), $url, $flags), array('date_callback', $date, $timestamp, $is_snoozed), array('icon_callback', $flags) ), diff --git a/modules/imap/handler_modules.php b/modules/imap/handler_modules.php index 9008f4e99a..96a48ffd8a 100644 --- a/modules/imap/handler_modules.php +++ b/modules/imap/handler_modules.php @@ -852,6 +852,14 @@ public function process() { $msg['server_id'] = $form['imap_server_id']; $msg['server_name'] = $details['name']; $msg['folder'] = $form['folder']; + $uid = $msg['uid']; + $part = true; + $max = 87; + $msg_struct = $imap->get_message_structure($uid); + $struct = $imap->search_bodystructure($msg_struct, array('imap_part_number' => $part)); + $msg_struct_current = array_shift($struct); + $msg_text = $imap->get_message_content($uid, $part, $max, $msg_struct_current); + $msg['preview_msg'] = $msg_text; $msgs[] = $msg; } if ($imap->selected_mailbox) { @@ -2191,3 +2199,4 @@ function process_move_messages_in_screen_email_enabled_callback($val) { return $ process_site_setting('move_messages_in_screen_email', $this, 'process_move_messages_in_screen_email_enabled_callback', true, true); } } + diff --git a/modules/imap/site.js b/modules/imap/site.js index 5017f139dc..0723c1e1a7 100644 --- a/modules/imap/site.js +++ b/modules/imap/site.js @@ -1378,7 +1378,7 @@ var add_email_in_contact_trusted = function(list_email) { } ); } - }; +}; $('.screen-email-unlike').on("click", function() { imap_screen_email(); return false; }); diff --git a/tests/phpunit/modules/core/message_list_functions.php b/tests/phpunit/modules/core/message_list_functions.php index f27acb3ffb..38919e29c4 100644 --- a/tests/phpunit/modules/core/message_list_functions.php +++ b/tests/phpunit/modules/core/message_list_functions.php @@ -80,8 +80,8 @@ public function test_checkbox_callback() { */ public function test_subject_callback() { $mod = new Hm_Output_Test(array('foo' => 'bar', 'bar' => 'foo'), array('bar')); - $this->assertEquals('
foo
', subject_callback(array('foo', 'bar', array()), 'email', $mod)); - $this->assertEquals('
foo
', subject_callback(array('foo', 'bar', array(), 'code'), 'news', $mod)); + $this->assertEquals('
foo

', subject_callback(array('foo', 'bar', array()), 'email', $mod)); + $this->assertEquals('
foo

', subject_callback(array('foo', 'bar', array(), 'code'), 'news', $mod)); } /** * @preserveGlobalState disabled