If there were more than one message sent by the sender then attempting
to display the individual message would not work. This was because we
were going by msg_nbr but the msg_nbr did not really relate to the
message shown on the detail.cti web page. Here we change the alogrithm
to use the message date instead as it uniquely identifies the message.
Note that there still may be times when one sender/msg_date relates to
more than one message (think two messages with the exact same
timestamp). I'm not sure if this is possible nor if it's really that
important.
my $messages = 1;
for (@msgs) {
my $messages = 1;
for (@msgs) {
- my $msg_date = pop @{$_};
- my $subject = pop @{$_};
+ my $msg_date = pop @{$_};
+ my $link_date = $msg_date;
+ my $subject = pop @{$_};
if ($date eq substr ($msg_date, 0, 10)) {
$msg_date = b font {-color => 'green'}, SQLDatetime2UnixDatetime $msg_date;
if ($date eq substr ($msg_date, 0, 10)) {
$msg_date = b font {-color => 'green'}, SQLDatetime2UnixDatetime $msg_date;
-cellspacing => 2,
-border => 0,
-width => '100%'};
-cellspacing => 2,
-border => 0,
-width => '100%'};
- my $msg_nbr = $messages;
print
Tr [
td {-class => 'msgnbr',
print
Tr [
td {-class => 'msgnbr',
td {-class => 'subject',
-valign => 'middle',
-bgcolor => '#ffffff'},
td {-class => 'subject',
-valign => 'middle',
-bgcolor => '#ffffff'},
- a {-href => "display.cgi?sender=$sender;msg_nbr=$msg_nbr"}, $subject,
+ a {-href => "display.cgi?sender=$sender;msg_date=$link_date"}, $subject,
td {-class => 'date',
-width => '150',
-valign => 'middle'}, $msg_date
td {-class => 'date',
-width => '150',
-valign => 'middle'}, $msg_date
my $userid = cookie('MAPSUser');
my $sender = param('sender');
my $userid = cookie('MAPSUser');
my $sender = param('sender');
-my $msg_nbr = param('msg_nbr');
+my $msg_date = param('msg_date');
my $table_name = 'message';
sub ParseEmail(@) {
my $table_name = 'message';
sub ParseEmail(@) {
} # ParseEmail
sub Body($) {
} # ParseEmail
sub Body($) {
+ # Find unique message using $date
+ my $handle = FindEmail $sender, $date;
- my $handle = FindEmail $sender;
-
- my ($userid, $sender, $subject, $timestamp, $message);
-
- # Need to handle multiple messages
- for (my $i = 0; $i < $count; $i++) {
- ($userid, $sender, $subject, $timestamp, $message) = GetEmail $handle;
- } # for
+ my ($userid, $sender, $subject, $timestamp, $message) = GetEmail $handle;
my $parser = MIME::Parser->new();
my $parser = MIME::Parser->new();
- $parser->output_to_core (1);
+ $parser->output_to_core(1);
my $entity = $parser->parse_data ($message);
my $entity = $parser->parse_data ($message);
-bgcolor => "#ece9d8",
-width => "100%"}) . "\n";
-bgcolor => "#ece9d8",
-width => "100%"}) . "\n";
- foreach (keys (%header)) {
- my $str = decode_mimewords ($header{$_});
+ my $str = decode_mimewords($header{$_});
print Tr ([
th ({-align => "right",
print Tr ([
th ({-align => "right",
-width => "8%"}, "$_:") . "\n" .
td ({-bgcolor => "white"}, $str)
]);
-width => "8%"}, "$_:") . "\n" .
td ({-bgcolor => "white"}, $str)
]);
print end_table;
print "</td></tr>";
print end_table;
print "</td></tr>";
} # for
} elsif ($part->mime_type eq 'multipart/related') {
# Sometimes parts are 'multipart/relative'...
} # for
} elsif ($part->mime_type eq 'multipart/related') {
# Sometimes parts are 'multipart/relative'...
} else {
if ($part->mime_type =~ /text/) {
my $encoding = '';
} else {
if ($part->mime_type =~ /text/) {
my $encoding = '';
SetContext($userid);
NavigationBar($userid);
SetContext($userid);
NavigationBar($userid);
return $row[0];
} # Encrypt
return $row[0];
} # Encrypt
-sub FindEmail(;$) {
- my ($sender) = @_;
+sub FindEmail(;$$) {
+ my ($sender, $date) = @_;
- if (!defined $sender || $sender eq '') {
- $statement = "select * from email where userid = '$userid'";
- } else {
- $statement = "select * from email where userid = '$userid' and sender = '$sender'";
- } # if
+ $sender //= '';
+ $date //= '';
+
+ $statement = "select * from email where userid = '$userid'";
+
+ # Add conditions if present
+ $statement .= " and sender = '$sender'" if $sender;
+ $statement .= " and timestamp = '$date'" if $date;
my $sth = $DB->prepare($statement)
or DBError('FindEmail: Unable to prepare statement', $statement);
my $sth = $DB->prepare($statement)
or DBError('FindEmail: Unable to prepare statement', $statement);