Skip to content

Commit

Permalink
feat(backend): Fix php error Call to a member function authed() on null
Browse files Browse the repository at this point in the history
  • Loading branch information
amaninyumu1 authored and josaphatim committed Feb 11, 2025
1 parent aed9a95 commit fcbc065
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 27 deletions.
3 changes: 3 additions & 0 deletions modules/core/hm-mailbox.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ public function server_type() {
}

public function authed() {
if (! $this->connection) {
return false;
}
if ($this->is_imap()) {
return $this->connection->get_state() == 'authenticated' || $this->connection->get_state() == 'selected';
} elseif ($this->is_smtp()) {
Expand Down
27 changes: 11 additions & 16 deletions modules/core/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -528,21 +528,11 @@ function Message_List() {
var aval;
var bval;
var sort_result = listitems.sort(function(a, b) {
switch (Math.abs(fld)) {
case 1:
case 2:
case 3:
aval = $($('td', a)[Math.abs(fld)]).text().replace(/^\s+/g, '');
bval = $($('td', b)[Math.abs(fld)]).text().replace(/^\s+/g, '');
break;
case 4:
default:
aval = $('input', $($('td', a)[Math.abs(fld)])).val();
bval = $('input', $($('td', b)[Math.abs(fld)])).val();
break;
}
if (fld == 4 || fld == -4 || !fld) {
if (fld == -4) {
const sortField = fld.replace('-', '');
if (['arrival', 'date'].includes(sortField)) {
aval = new Date($(`input.${sortField}`, $('td.dates', a)).val());
bval = new Date($(`input.${sortField}`, $('td.dates', b)).val());
if (fld.startsWith('-')) {
return aval - bval;
}
return bval - aval;
Expand Down Expand Up @@ -1735,6 +1725,12 @@ var hm_spinner = function(type = 'border', size = '') {
</div>`
};

var hm_spinner_text = function(text, id = 'spinner-text') {
return `<div class="d-flex justify-content-between align-items-center p-2 border-bottom" id="${id}">
<span class="mailbox-name text-primary">${text}</span>
<span class="spinner-border spinner-border-sm text-primary" role="status" aria-hidden="true"></span>
</div>`;
};
var fillImapData = function(details) {
$('#srv_setup_stepper_imap_address').val(details.server);
$('#srv_setup_stepper_imap_port').val(details.port);
Expand Down Expand Up @@ -1811,7 +1807,6 @@ var hasLeadingOrTrailingSpaces = function(str) {
var Hm_Message_List = new Message_List();

function sortHandlerForMessageListAndSearchPage() {
$('.combined_sort').on("change", function() { Hm_Message_List.sort($(this).val()); });
$('.source_link').on("click", function() { $('.list_sources').toggle(); $('#list_controls_menu').hide(); return false; });
if (getListPathParam() == 'unread' && $('.menu_unread > a').css('font-weight') == 'bold') {
$('.menu_unread > a').css('font-weight', 'normal');
Expand Down
67 changes: 59 additions & 8 deletions modules/imap/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false,
array('subject_callback', $subject, $url, $flags, $icon, $preview_msg),
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),
array('date_callback', $date, $timestamp, $is_snoozed || $is_scheduled),
array('dates_holders_callback', $msg['internal_date'], $msg['date']),
),
$id,
Expand All @@ -336,7 +336,8 @@ function format_imap_message_list($msg_list, $output_module, $parent_list=false,
array('safe_output_callback', 'from'.$nofrom, $from, null, str_replace(array($from, '<', '>'), '', $msg['from'])),
array('subject_callback', $subject, $url, $flags, null, $preview_msg),
array('date_callback', $date, $timestamp, $is_snoozed || $is_scheduled),
array('icon_callback', $flags)
array('icon_callback', $flags),
array('dates_holders_callback', $msg['internal_date'], $msg['date']),
),
$id,
$style,
Expand Down Expand Up @@ -1608,9 +1609,34 @@ function connect_to_imap_server($address, $name, $port, $user, $pass, $tls, $ima
}
}

function getCombinedMessagesLists($sources, $cache, $searchTerms, $listPage, $limit, $offsets = [], $defaultOffset = 0, $filter = 'ALL') {
/**
* @param array $sources
* @param object $cache
* @param array $search
*/
function getCombinedMessagesLists($sources, $cache, $search) {
$defaultSearch = [
'filter' => 'ALL',
'sort' => 'ARRIVAL',
'reverse' => true,
'terms' => [],
'limit' => 10,
'offsets' => [],
'defaultOffset' => 0,
'listPage' => 1
];
$search = array_merge($defaultSearch, $search);

$filter = $search['filter'];
$sort = $search['sort'];
$reverse = $search['reverse'];
$searchTerms = $search['terms'];
$limit = $search['limit'];
$offsets = $search['offsets'];
$listPage = $search['listPage'];

$totalMessages = 0;
$offset = $defaultOffset;
$offset = $search['defaultOffset'];
$messagesLists = [];
$status = [];
foreach ($sources as $index => $dataSource) {
Expand All @@ -1623,14 +1649,27 @@ function getCombinedMessagesLists($sources, $cache, $searchTerms, $listPage, $li

$mailbox = Hm_IMAP_List::get_connected_mailbox($dataSource['id'], $cache);
if ($mailbox && $mailbox->authed()) {
$connection = $mailbox->get_connection();

$folder = $dataSource['folder'];
$state = $mailbox->get_connection()->get_mailbox_status(hex2bin($folder));
$mailbox->select_folder(hex2bin($folder));
$state = $connection->get_mailbox_status(hex2bin($folder));
$status['imap_'.$dataSource['id'].'_'.$folder] = $state;

$uids = $mailbox->search(hex2bin($folder), $filter, false, $searchTerms);
if ($mailbox->is_imap()) {
if ($connection->is_supported( 'SORT' )) {
$sortedUids = $connection->get_message_sort_order($sort, $reverse, $filter);
} else {
$sortedUids = $connection->sort_by_fetch($sort, $reverse, $filter);
}

$uids = $mailbox->search(hex2bin($folder), $filter, $sortedUids, $searchTerms);
} else {
// EWS
$uids = $connection->search($folder, $sort, $reverse, $filter, 0, $limit, $searchTerms);
}

$total = count($uids);
// most recent messages at the top
$uids = array_reverse($uids);
$uids = array_slice($uids, $offset, $limit);

$headers = $mailbox->get_message_list(hex2bin($folder), $uids);
Expand Down Expand Up @@ -1682,6 +1721,18 @@ function flattenMessagesLists($messagesLists, $listSize) {
return ['messages' => $endList, 'offsets' => $sizesTaken];
}

function sortCombinedMessages($list, $sort) {
usort($list, function($a, $b) use ($sort) {
$sortField = str_replace(['arrival', '-'], ['internal_date', ''], $sort);
if (strpos($sort, '-') === 0) {
return strtotime($a[$sortField]) - strtotime($b[$sortField]);
}
return strtotime($b[$sortField]) - strtotime($a[$sortField]);
});

return $list;
}

if (!hm_exists('save_sent_msg')) {
function save_sent_msg($handler, $imap_id, $mailbox, $imap_details, $msg, $msg_id, $show_errors = true) {
$specials = get_special_folders($handler, $imap_id);
Expand Down
6 changes: 3 additions & 3 deletions modules/smtp/modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -1576,7 +1576,7 @@ public function process() {

foreach ($servers as $server_id => $config) {
$mailbox = new Hm_Mailbox($server_id, $this->user_config, $this->session, $config);
if ($mailbox->get_connection() != null && $mailbox->connect()) {
if ($mailbox->authed()) {
$folder = 'Scheduled';
$ret = $mailbox->get_messages($folder, 'DATE', false, 'ALL');
foreach ($ret[1] as $msg) {
Expand Down Expand Up @@ -1621,7 +1621,7 @@ public function process() {
$imap_server = Hm_IMAP_List::getForMailbox($imap_server_id);

$mailbox = new Hm_Mailbox($imap_server_id, $this->user_config, $this->session, $imap_server);
if ($mailbox->get_connection() != null && $mailbox->connect()) {
if ($mailbox->authed()) {
$folder = hex2bin($folder);
if (reschedule_message_sending($this, $mailbox, $msg_id, $folder, $new_schedule_date)) {
$scheduled_msg_count++;
Expand Down Expand Up @@ -2047,7 +2047,7 @@ function save_imap_draft($atts, $id, $session, $mod, $mod_cache, $uploaded_files
return -1;
}
$mailbox = new Hm_Mailbox($imap_profile['id'], $mod->user_config, $session, $imap_profile);
if (! $mailbox || ! $mailbox->connect()) {
if (! $mailbox->authed()) {
return -1;
}

Expand Down

0 comments on commit fcbc065

Please sign in to comment.