|
From: <jgr...@us...> - 2003-04-18 18:58:27
|
Update of /cvsroot/popfile/engine/UI
In directory sc8-pr-cvs1:/tmp/cvs-serv7209/UI
Modified Files:
HTML.pm
Log Message:
Completed the implementation of QuickMagnets, moved the viewing of a message to its own page (/view)
Index: HTML.pm
===================================================================
RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v
retrieving revision 1.134
retrieving revision 1.135
diff -C2 -d -r1.134 -r1.135
*** HTML.pm 16 Apr 2003 23:48:31 -0000 1.134
--- HTML.pm 18 Apr 2003 18:58:23 -0000 1.135
***************
*** 190,194 ****
# This needs to occur at launch, but after initialization
!
$self->remove_mail_files();
$self->calculate_today();
--- 190,194 ----
# This needs to occur at launch, but after initialization
!
$self->remove_mail_files();
$self->calculate_today();
***************
*** 299,304 ****
# true if the file exists).
! $self->invalidate_history_cache() if ( !$found && ( -e ($self->global_config_( 'msgdir' ) . "$file") ) );
! $self->http_redirect_( $client, "/history?session=$self->{session_key__}&start_message=0&view=$self->{form_}{view}#$self->{form_}{view}" );
return 1;
}
--- 299,304 ----
# true if the file exists).
! $self->invalidate_history_cache() if ( !$found && ( -e ( $self->global_config_( 'msgdir' ) . $file ) ) );
! $self->http_redirect_( $client, "/view?session=$self->{session_key__}&view=$self->{form_}{view}&start_message=$self->{form_}{start_message}" );
return 1;
}
***************
*** 363,366 ****
--- 363,367 ----
'/advanced' => \&advanced_page,
'/history' => \&history_page,
+ '/view' => \&view_page,
'/' => \&history_page );
***************
*** 1211,1250 ****
my $magnet_message = '';
! if ( ( defined($self->{form_}{type}) ) && ( $self->{form_}{bucket} ne '' ) && ( $self->{form_}{text} ne '' ) ) {
! my $found = 0;
! for my $bucket ($self->{classifier__}->get_buckets_with_magnets()) {
! my %magnets = $self->{classifier__}->get_magnets( $bucket, $self->{form_}{type} );
! if ( defined( $magnets{$self->{form_}{text}}) ) {
! $found = 1;
! $magnet_message = "<blockquote>\n<div class=\"error02\">\n<b>";
! $magnet_message .= sprintf( $self->{language__}{Magnet_Error1}, "$self->{form_}{type}: $self->{form_}{text}", $bucket );
! $magnet_message .= "</b>\n</div>\n</blockquote>\n";
! }
! }
! if ( $found == 0 ) {
! for my $bucket ($self->{classifier__}->get_buckets_with_magnets()) {
! my %magnets = $self->{classifier__}->get_magnets( $bucket, $self->{form_}{type} );
! for my $from (keys %magnets) {
! if ( ( $self->{form_}{text} =~ /\Q$from\E/ ) || ( $from =~ /\Q$self->{form_}{text}\E/ ) ) {
! $found = 1;
! $magnet_message = "<blockquote><div class=\"error02\"><b>" . sprintf( $self->{language__}{Magnet_Error2}, "$self->{form_}{type}: $self->{form_}{text}", "$self->{form_}{type}: $from", $bucket ) . "</b></div></blockquote>";
}
}
- }
- }
! if ( $found == 0 ) {
! # It is possible to type leading or trailing white space in a magnet definition
! # which can later cause mysterious failures because the whitespace is eaten by
! # the browser when the magnet is displayed but is matched in the regular expression
! # that does the magnet matching and will cause failures... so strip off the whitespace
! $self->{form_}{text} =~ s/^[ \t]+//;
! $self->{form_}{text} =~ s/[ \t]+$//;
! $self->{classifier__}->create_magnet( $self->{form_}{bucket}, $self->{form_}{type}, $self->{form_}{text});
! $magnet_message = "<blockquote>" . sprintf( $self->{language__}{Magnet_Error3}, "$self->{form_}{type}: $self->{form_}{text}", $self->{form_}{bucket} ) . "</blockquote>";
}
}
--- 1212,1264 ----
my $magnet_message = '';
! if ( defined( $self->{form_}{count} ) ) {
! for my $i ( 1 .. $self->{form_}{count} ) {
! my $mtype = $self->{form_}{"type$i"};
! my $mtext = $self->{form_}{"text$i"};
! my $mbucket = $self->{form_}{"bucket$i"};
! if ( ( defined($mbucket) ) && ( $mbucket ne '' ) && ( $mtext ne '' ) ) {
! my $found = 0;
!
! for my $bucket ($self->{classifier__}->get_buckets_with_magnets()) {
! my %magnets = $self->{classifier__}->get_magnets( $bucket, $mtype );
!
! if ( defined( $magnets{$mtext} ) ) {
! $found = 1;
! $magnet_message .= "<blockquote>\n<div class=\"error02\">\n<b>";
! $magnet_message .= sprintf( $self->{language__}{Magnet_Error1}, "$mtype: $mtext", $bucket );
! $magnet_message .= "</b>\n</div>\n</blockquote>\n";
! last;
}
}
! if ( $found == 0 ) {
! for my $bucket ($self->{classifier__}->get_buckets_with_magnets()) {
! my %magnets = $self->{classifier__}->get_magnets( $bucket, $mtype );
! for my $from (keys %magnets) {
! if ( ( $mtext =~ /\Q$from\E/ ) || ( $from =~ /\Q$mtext\E/ ) ) {
! $found = 1;
! $magnet_message .= "<blockquote><div class=\"error02\"><b>" . sprintf( $self->{language__}{Magnet_Error2}, "$mtype: $mtext", "$mtype: $from", $bucket ) . "</b></div></blockquote>";
! last;
! }
! }
! }
! }
! if ( $found == 0 ) {
! # It is possible to type leading or trailing white space in a magnet definition
! # which can later cause mysterious failures because the whitespace is eaten by
! # the browser when the magnet is displayed but is matched in the regular expression
! # that does the magnet matching and will cause failures... so strip off the whitespace
!
! $mtext =~ s/^[ \t]+//;
! $mtext =~ s/[ \t]+$//;
!
! $self->{classifier__}->create_magnet( $mbucket, $mtype, $mtext );
! $magnet_message .= "<blockquote>" . sprintf( $self->{language__}{Magnet_Error3}, "$mtype: $mtext", $mbucket ) . "</blockquote>";
! }
! }
}
}
***************
*** 1316,1331 ****
# Magnet Type widget
$body .= "<label class=\"magnetsLabel\" for=\"magnetsAddType\">$self->{language__}{Magnet_MagnetType}:</label><br />\n";
! $body .= "<select name=\"type\" id=\"magnetsAddType\">\n<option value=\"from\">\n$self->{language__}{From}</option>\n";
$body .= "<option value=\"to\">\n$self->{language__}{To}</option>\n";
$body .= "<option value=\"subject\">\n$self->{language__}{Subject}</option>\n</select>\n";
$body .= "<input type=\"hidden\" name=\"session\" value=\"$self->{session_key__}\" />\n<br /><br />\n";
# Value widget
$body .= "<label class=\"magnetsLabel\" for=\"magnetsAddText\">$self->{language__}{Magnet_Value}:</label><br />\n";
! $body .= "<input type=\"text\" name=\"text\" id=\"magnetsAddText\" />\n<br /><br />\n";
# Always Goes to Bucket widget
$body .= "<label class=\"magnetsLabel\" for=\"magnetsAddBucket\">$self->{language__}{Magnet_Always}:</label><br />\n";
! $body .= "<select name=\"bucket\" id=\"magnetsAddBucket\">\n<option value=\"\"></option>\n";
my @buckets = $self->{classifier__}->get_buckets();
--- 1330,1346 ----
# Magnet Type widget
$body .= "<label class=\"magnetsLabel\" for=\"magnetsAddType\">$self->{language__}{Magnet_MagnetType}:</label><br />\n";
! $body .= "<select name=\"type1\" id=\"magnetsAddType\">\n<option value=\"from\">\n$self->{language__}{From}</option>\n";
$body .= "<option value=\"to\">\n$self->{language__}{To}</option>\n";
$body .= "<option value=\"subject\">\n$self->{language__}{Subject}</option>\n</select>\n";
$body .= "<input type=\"hidden\" name=\"session\" value=\"$self->{session_key__}\" />\n<br /><br />\n";
+ $body .= "<input type=\"hidden\" name=\"count\" value=\"1\" />\n";
# Value widget
$body .= "<label class=\"magnetsLabel\" for=\"magnetsAddText\">$self->{language__}{Magnet_Value}:</label><br />\n";
! $body .= "<input type=\"text\" name=\"text1\" id=\"magnetsAddText\" />\n<br /><br />\n";
# Always Goes to Bucket widget
$body .= "<label class=\"magnetsLabel\" for=\"magnetsAddBucket\">$self->{language__}{Magnet_Always}:</label><br />\n";
! $body .= "<select name=\"bucket1\" id=\"magnetsAddBucket\">\n<option value=\"\"></option>\n";
my @buckets = $self->{classifier__}->get_buckets();
***************
*** 2647,2678 ****
$start_message = $self->{form_}{start_message} if ( ( defined($self->{form_}{start_message}) ) && ($self->{form_}{start_message} > 0 ) );
my $stop_message = $start_message + $self->config_( 'page_size' ) - 1;
-
- # Verify that a message we are being asked to view (perhaps from a /jump_to_message URL) is actually between
- # the $start_message and $stop_message, if it is not then move to that message
-
- if ( defined($self->{form_}{view}) ) {
- my $found = 0;
- foreach my $i ($start_message .. $stop_message) {
- if ( defined ( $self->{history_keys__}[$i] ) ) {
- my $mail_file = $self->{history_keys__}[$i];
- if ( $self->{form_}{view} eq $mail_file ) {
- $found = 1;
- last;
- }
- }
- }
-
- if ( $found == 0 ) {
- foreach my $i ( 0 .. ( $self->history_size() - 1 ) ) {
- my $mail_file = $self->{history_keys__}[$i];
- if ( $self->{form_}{view} eq $mail_file ) {
- $start_message = $i;
- $stop_message = $i + $self->config_( 'page_size' ) - 1;
- last;
- }
- }
- }
- }
-
$stop_message = $self->history_size() - 1 if ( $stop_message >= $self->history_size() );
--- 2662,2665 ----
***************
*** 2759,2763 ****
$body .= "<tr";
! if ( ( ( defined($self->{form_}{view}) ) && ( $self->{form_}{view} eq $mail_file ) ) || ( ( defined($self->{form_}{file}) && ( $self->{form_}{file} eq $mail_file ) ) ) || ( $highlight_message eq $mail_file ) ) {
$body .= " class=\"rowHighlighted\"";
} else {
--- 2746,2750 ----
$body .= "<tr";
! if ( ( ( defined($self->{form_}{file}) && ( $self->{form_}{file} eq $mail_file ) ) ) || ( $highlight_message eq $mail_file ) ) {
$body .= " class=\"rowHighlighted\"";
} else {
***************
*** 2773,2777 ****
$mail_file =~ /popfile\d+=(\d+)\.msg$/;
$body .= "<a title=\"$from\">$short_from</a></td>\n";
! $body .= "<td><a class=\"messageLink\" title=\"$subject\" href=\"/history?view=$mail_file&start_message=$start_message&session=$self->{session_key__}&sort=$self->{form_}{sort}&filter=$self->{form_}{filter}&search=$self->{form_}{search}#$mail_file\">";
$body .= "$short_subject</a></td>\n<td>";
if ( $reclassified ) {
--- 2760,2764 ----
$mail_file =~ /popfile\d+=(\d+)\.msg$/;
$body .= "<a title=\"$from\">$short_from</a></td>\n";
! $body .= "<td><a class=\"messageLink\" title=\"$subject\" href=\"/view?view=$mail_file&start_message=$start_message&session=$self->{session_key__}&sort=$self->{form_}{sort}&filter=$self->{form_}{filter}&search=$self->{form_}{search}\">";
$body .= "$short_subject</a></td>\n<td>";
if ( $reclassified ) {
***************
*** 2796,2803 ****
}
$body .= "</select>\n";
-
- if ( ( defined($self->{form_}{view}) ) && ( $self->{form_}{view} eq $mail_file ) ) {
- $body .= "<input type=\"submit\" class=\"reclassifyButton\" name=\"change\" value=\"$self->{language__}{Reclassify}\" />";
- }
} else {
$body .= " ($self->{language__}{History_MagnetUsed}: $self->{history__}{$mail_file}{magnet})";
--- 2783,2786 ----
***************
*** 2811,2898 ****
- # Check to see if we want to view a message
- if ( ( defined($self->{form_}{view}) ) && ( $self->{form_}{view} eq $mail_file ) ) {
- $body .= "<tr>\n<td></td>\n<td colspan=\"5\" valign=\"top\">\n";
- $body .= "<table class=\"openMessageTable\" cellpadding=\"10%\" cellspacing=\"0\" width=\"100%\" summary=\"$self->{language__}{History_OpenMessageSummary}\">\n";
-
- # Close button
- $body .= "<tr>\n<td class=\"openMessageCloser\">\n";
- $body .= "<a class=\"messageLink\" href=\"/history?start_message=$start_message&session=$self->{session_key__}&sort=$self->{form_}{sort}&search=$self->{form_}{search}&filter=$self->{form_}{filter}\">\n";
- $body .= "<span class=\"historyLabel\">$self->{language__}{Close}</span></a>\n";
- $body .= "<br /><br />\n</td>\n</tr>\n";
-
- # Message body
- $body .= "<tr>\n<td class=\"openMessageBody\">";
-
- if ( $self->{history__}{$mail_file}{magnet} eq '' ) {
- $body .= $self->{classifier__}->get_html_colored_message($self->global_config_( 'msgdir' ) . $self->{form_}{view});
- } else {
- $self->{history__}{$mail_file}{magnet} =~ /(.+): ([^\r\n]+)/;
- my $header = $1;
- my $text = $2;
- $body .= "<tt>";
-
- open MESSAGE, '<' . $self->global_config_( 'msgdir' ) . "$self->{form_}{view}";
- my $line;
- # process each line of the message
- while ($line = <MESSAGE>) {
- $line =~ s/</</g;
- $line =~ s/>/>/g;
-
- $line =~ s/([^\r\n]{100,150} )/$1<br \/>/g;
- $line =~ s/([^ \r\n]{150})/$1<br \/>/g;
- $line =~ s/[\r\n]+/<br \/>/g;
-
- if ( $line =~ /^([A-Za-z-]+): ?([^\n\r]*)/ ) {
- my $head = $1;
- my $arg = $2;
-
- if ( $head =~ /\Q$header\E/i ) {
- if ( $arg =~ /\Q$text\E/i ) {
- my $new_color = $self->{classifier__}->get_bucket_color($self->{history__}{$mail_file}{bucket});
- $line =~ s/(\Q$text\E)/<b><font color=\"$new_color\">$1<\/font><\/b>/;
- }
- }
- }
-
- $body .= $line;
- }
- close MESSAGE;
- $body .= "</tt>\n";
- }
-
- $body .= "</td>\n</tr>\n";
-
- # Close button
- $body .= "<tr>\n<td class=\"openMessageCloser\">";
- $body .= "<a class=\"messageLink\" href=\"/history?start_message=$start_message&session=$self->{session_key__}&sort=$self->{form_}{sort}&search=$self->{form_}{search}&filter=$self->{form_}{filter}\">\n";
- $body .= "<span class=\"historyLabel\">$self->{language__}{Close}</span>\n</a>\n";
- $body .= "</td>\n</tr>\n</table>\n";
-
- $body .= "<table><tr><td class=\"top20\" valign=\"top\">\n";
-
- # Enable saving of word-scores
-
- $self->{classifier__}->wordscores( 1 );
-
- # Build the scores by classifying the message
-
- $self->{classifier__}->classify_file($self->global_config_( 'msgdir' ) . "$self->{form_}{view}", $self);
-
- # Disable, print, and clear saved word-scores
-
- $self->{classifier__}->wordscores( 0 );
- $body .= $self->{classifier__}->get_scores();
- $self->{classifier__}->clear_scores();
-
- $body .= "</tr></table></td>\n</tr>\n";
- }
-
if ( defined $self->{feedback}{$mail_file} ) {
$body .= "<tr class=\"rowHighlighted\"><td> </td><td>$self->{feedback}{$mail_file}</td>\n";
delete $self->{feedback}{$mail_file};
}
-
- # $body .= "<tr class=\"rowHighlighted\"><td><td>" . sprintf( $self->{language__}{History_ChangedTo}, " . $self->{classifier__}->get_bucket_color($self->{form_}{shouldbe}) . ", $self->{form_}{shouldbe} ) if ( ( defined($self->{form_}{file}) ) && ( $self->{form_}{file} eq $mail_file ) );
}
--- 2794,2801 ----
***************
*** 2926,2929 ****
--- 2829,2969 ----
http_ok($self, $client,$body,2);
+ }
+
+ # ---------------------------------------------------------------------------------------------
+ #
+ # view_page - Shows a single email
+ #
+ # $client The web browser to send the results to
+ #
+ # ---------------------------------------------------------------------------------------------
+ sub view_page
+ {
+ my ( $self, $client ) = @_;
+
+ my $mail_file = $self->{form_}{view};
+ my $start_message = $self->{form_}{start_message};
+ my $reclassified = $self->{history__}{$mail_file}{reclassified};
+ my $bucket = $self->{history__}{$mail_file}{bucket};
+ my $color = $self->{classifier__}->get_bucket_color($bucket);
+
+ $self->{form_}{sort} = '' if ( !defined( $self->{form_}{sort} ) );
+ $self->{form_}{search} = '' if ( !defined( $self->{form_}{search} ) );
+ $self->{form_}{filter} = '' if ( !defined( $self->{form_}{filter} ) );
+
+ my $body = "<h2 class=\"buckets\">$self->{language__}{View_Title}</h2>\n";
+
+ $body .= "<table class=\"openMessageTable\" cellpadding=\"10%\" cellspacing=\"0\" width=\"100%\" summary=\"$self->{language__}{History_OpenMessageSummary}\">\n";
+
+ $body .= "<tr><td>";
+ $body .= "<form id=\"HistoryMainForm\" action=\"/history\" method=\"POST\">\n";
+ $body .= "<input type=\"hidden\" name=\"search\" value=\"$self->{form_}{search}\" />\n";
+ $body .= "<input type=\"hidden\" name=\"sort\" value=\"$self->{form_}{sort}\" />\n";
+ $body .= "<input type=\"hidden\" name=\"session\" value=\"$self->{session_key__}\" />\n";
+ $body .= "<input type=\"hidden\" name=\"start_message\" value=\"$start_message\" />\n";
+ $body .= "<input type=\"hidden\" name=\"filter\" value=\"$self->{form_}{filter}\" />\n";
+ $body .= "<table><tr><td><font size=+1><p><b>$self->{language__}{From}</b>: </td><td>$self->{history__}{$mail_file}{from}</font></td></tr>";
+ $body .= "<tr><td><font size=+1><b>$self->{language__}{Subject}</b>: </td><td>$self->{history__}{$mail_file}{subject}</font></td></tr>";
+ $body .= "<tr><td><font size=+1><b>$self->{language__}{Classification}</b>: </td><td><font color=\"$color\">$self->{history__}{$mail_file}{bucket}</font></font></td></tr>";
+
+ $body .= "<tr><td><font size=+1>";
+
+ my $index;
+ foreach my $i ( $start_message .. $start_message + $self->config_( 'page_size' ) - 1) {
+ if ( $self->{history_keys__}[$i] eq $mail_file ) {
+ $index = $i;
+ last;
+ }
+ }
+
+ if ( $reclassified ) {
+ $body .= sprintf( $self->{language__}{History_Already}, ($color || ''), ($bucket || '') );
+ $body .= " <input type=\"submit\" class=\"undoButton\" name=\"undo_$index\" value=\"$self->{language__}{Undo}\">\n";
+ } else {
+ if ( $self->{history__}{$mail_file}{magnet} eq '' ) {
+ $body .= "\n$self->{language__}{History_ShouldBe}: <select name=\"$index\">\n";
+
+ # Show a blank bucket field
+ $body .= "<option selected=\"selected\"></option>\n";
+
+ foreach my $abucket ($self->{classifier__}->get_buckets()) {
+ $body .= "<option value=\"$abucket\">$abucket</option>\n";
+ }
+ $body .= "</select>\n<input type=\"submit\" class=\"reclassifyButton\" name=\"change\" value=\"$self->{language__}{Reclassify}\" />";
+ } else {
+ $body .= " ($self->{language__}{History_MagnetUsed}: $self->{history__}{$mail_file}{magnet})";
+ }
+ }
+
+ $body .= "</font></td></tr>";
+
+ # Message body
+ $body .= "</table></form></td></tr><tr>\n<td class=\"openMessageBody\"><hr><p>";
+
+ if ( $self->{history__}{$mail_file}{magnet} eq '' ) {
+ $body .= $self->{classifier__}->get_html_colored_message($self->global_config_( 'msgdir' ) . $mail_file);
+ } else {
+ $self->{history__}{$mail_file}{magnet} =~ /(.+): ([^\r\n]+)/;
+ my $header = $1;
+ my $text = $2;
+ $body .= "<tt>";
+
+ open MESSAGE, '<' . $self->global_config_( 'msgdir' ) . $mail_file;
+ my $line;
+ # process each line of the message
+ while ($line = <MESSAGE>) {
+ $line =~ s/</</g;
+ $line =~ s/>/>/g;
+
+ $line =~ s/([^\r\n]{100,150} )/$1<br \/>/g;
+ $line =~ s/([^ \r\n]{150})/$1<br \/>/g;
+ $line =~ s/[\r\n]+/<br \/>/g;
+
+ if ( $line =~ /^([A-Za-z-]+): ?([^\n\r]*)/ ) {
+ my $head = $1;
+ my $arg = $2;
+
+ if ( $head =~ /\Q$header\E/i ) {
+ if ( $arg =~ /\Q$text\E/i ) {
+ my $new_color = $self->{classifier__}->get_bucket_color($self->{history__}{$mail_file}{bucket});
+ $line =~ s/(\Q$text\E)/<b><font color=\"$new_color\">$1<\/font><\/b>/;
+ }
+ }
+ }
+
+ $body .= $line;
+ }
+ close MESSAGE;
+ $body .= "</tt>\n";
+ }
+
+ $body .= "</td>\n</tr>\n";
+
+ $body .= "<tr><td class=\"top20\" valign=\"top\">\n";
+
+ # Enable saving of word-scores
+
+ $self->{classifier__}->wordscores( 1 );
+
+ # Build the scores by classifying the message
+
+ $self->{classifier__}->classify_file($self->global_config_( 'msgdir' ) . $mail_file, $self);
+
+ # Disable, print, and clear saved word-scores
+
+ $self->{classifier__}->wordscores( 0 );
+ $body .= $self->{classifier__}->get_scores();
+ $self->{classifier__}->clear_scores();
+
+ # Close button
+
+ $body .= "<tr>\n<td class=\"openMessageCloser\">";
+ $body .= "<a class=\"messageLink\" href=\"/history?start_message=$start_message&session=$self->{session_key__}&sort=$self->{form_}{sort}&search=$self->{form_}{search}&filter=$self->{form_}{filter}\">\n";
+ $body .= "<span class=\"historyLabel\">$self->{language__}{Close}</span>\n</a>\n";
+ $body .= "</td>\n</tr>\n";
+
+ $body .= "</tr></table>";
+
+ $self->http_ok( $client, $body, 2 );
}
|