Skip to content

Commit

Permalink
Fix error displaying scout messages
Browse files Browse the repository at this point in the history
In the `displayGrouped` and `displayMessage` functions, we now return
the constructed message (an array) instead of passing in the message
box by reference and appending to it inside the functions.

This fixes an issue with scout messages where the "GroupedMessages"
element did not yet exist, but we were passing it by reference to the
`displayMessage` function as if it were an array. This caused the
following error:

> TypeError: displayMessage(): Argument #1 ($messageBox) must be of type array, null given
  • Loading branch information
hemberger committed Aug 20, 2021
1 parent 9815538 commit 98f8816
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/engine/Default/message_view.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
$template->unassign('NextPageHREF'); // always displaying all scout messages?
} else {
foreach ($dbResult->records() as $dbRecord) {
displayMessage($messageBox, $dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), $var['folder_id'], $player->getAccount());
$messageBox['Messages'][] = displayMessage($dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), $var['folder_id'], $player->getAccount());
}
}
if (!USING_AJAX) {
Expand Down Expand Up @@ -115,7 +115,7 @@ function displayScouts(array &$messageBox, SmrPlayer $player) : void {
$totalUnread = $dbRecord->getInt('total_unread');
$message = 'Your forces have spotted ' . $sender->getBBLink() . ' passing your forces ' . $dbRecord->getInt('number') . ' ' . pluralise('time', $dbRecord->getInt('number'));
$message .= ($totalUnread > 0) ? ' (' . $totalUnread . ' unread).' : '.';
displayGrouped($messageBox, $sender, $message, $dbRecord->getInt('first'), $dbRecord->getInt('last'), $totalUnread > 0, $player->getAccount());
$messageBox['Messages'][] = displayGrouped($sender, $message, $dbRecord->getInt('first'), $dbRecord->getInt('last'), $totalUnread > 0, $player->getAccount());
}

// Now display individual messages in each group
Expand All @@ -131,15 +131,15 @@ function displayScouts(array &$messageBox, SmrPlayer $player) : void {
$groupBox =& $messageBox['GroupedMessages'][$dbRecord->getInt('sender_id')];
// Limit the number of messages in each group
if (!isset($groupBox['Messages']) || count($groupBox['Messages']) < MESSAGE_SCOUT_GROUP_LIMIT) {
displayMessage($groupBox, $dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), MSG_SCOUT, $player->getAccount());
$groupBox['Messages'][] = displayMessage($dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), MSG_SCOUT, $player->getAccount());
}
}

// In the default view (groups), we're always displaying all messages
$messageBox['NumberMessages'] = $dbResult->getNumRecords();
}

function displayGrouped(array &$messageBox, SmrPlayer $sender, string $message_text, int $first, int $last, bool $star, SmrAccount $displayAccount) : void {
function displayGrouped(SmrPlayer $sender, string $message_text, int $first, int $last, bool $star, SmrAccount $displayAccount) : array {
// Define a unique array so we can delete grouped messages
$array = array(
$sender->getAccountID(),
Expand All @@ -154,10 +154,10 @@ function displayGrouped(array &$messageBox, SmrPlayer $sender, string $message_t
$message['SenderDisplayName'] = $sender->getLinkedDisplayName(false);
$message['SendTime'] = date($displayAccount->getDateTimeFormat(), $first) . " - " . date($displayAccount->getDateTimeFormat(), $last);
$message['Text'] = $message_text;
$messageBox['Messages'][] = $message;
return $message;
}

function displayMessage(array &$messageBox, int $message_id, int $receiver_id, int $sender_id, int $game_id, string $message_text, int $send_time, bool $msg_read, int $type, SmrAccount $displayAccount) : void {
function displayMessage(int $message_id, int $receiver_id, int $sender_id, int $game_id, string $message_text, int $send_time, bool $msg_read, int $type, SmrAccount $displayAccount) : array {
$message = array();
$message['ID'] = $message_id;
$message['Text'] = $message_text;
Expand Down Expand Up @@ -201,6 +201,5 @@ function displayMessage(array &$messageBox, int $message_id, int $receiver_id, i
$message['ReceiverDisplayName'] = create_link($container, $receiver->getDisplayName());
}

// Append the message to this box
$messageBox['Messages'][] = $message;
return $message;
}

0 comments on commit 98f8816

Please sign in to comment.