--- loncom/interface/lonfeedback.pm 2004/08/01 16:05:14 1.111 +++ loncom/interface/lonfeedback.pm 2004/08/03 21:29:32 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network # Feedback # -# $Id: lonfeedback.pm,v 1.111 2004/08/01 16:05:14 raeburn Exp $ +# $Id: lonfeedback.pm,v 1.112 2004/08/03 21:29:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use Apache::loncommon(); use Apache::lontexconvert(); use Apache::lonlocal; # must not have () use Apache::lonhtmlcommon(); +use HTML::LCParser(); use Apache::lonspeller(); sub discussion_open { @@ -268,8 +269,10 @@ sub list_discussion { } my ($message,$subject); if ($idx > 0) { - if ($contrib{$idx.':message'} =~ /.*::::\Q$numoldver\E::::(.+?)$/si) { - $message = $1; + if ($contrib{$idx.':message'} =~ /^/) { + my %versions = (); + &get_post_versions(\%versions,$contrib{$idx.':message'},$numoldver); + $message = &HTML::Entities::decode($versions{$numoldver}); } else { $message = $contrib{$idx.':message'}; } @@ -280,8 +283,10 @@ sub list_discussion { $message=~s/\n/\
/g; $message=&Apache::lontexconvert::msgtexconverted($message); if ($idx > 0) { - if ($contrib{$idx.':subject'} =~ /.*::::\Q$numoldver\E::::(.+?)$/si) { - $subject = $1; + if ($contrib{$idx.':subject'} =~ /^ 0) { - if ($contrib{$idx.':message'} =~ /::::\Q$numoldver\E::::(.+?)$/si) { - $message = $1; + if ($contrib{$idx.':message'} =~ /^/g; $quote='
'.&Apache::lontexconvert::msgtexconverted($message).'
'; if ($idx > 0) { - if ($contrib{$idx.':subject'} =~ /::::\Q$numoldver\E::::(.+?)$/si) { - $subject = $1; + if ($contrib{$idx.':subject'} =~ /^&"'); } else { $attachmenturls = $contrib{$idx.':attachmenturl'}; - if ($contrib{$idx.':message'} =~ /.*::::(\d+)::::(.*?)$/si) { - $numoldver = $1; - $comment = $2; + if ($contrib{$idx.':message'} =~ /^/) { + my %versions = (); + &get_post_versions(\%versions,$contrib{$idx.':message'},$numoldver); + $comment = $versions{$numoldver}; } else { - $comment = $contrib{$idx.':message'}; + $comment = &HTML::Entities::encode($contrib{$idx.':message'},'<>&"'); } - $comment = &HTML::Entities::encode($comment,'<>&"'); - if ($contrib{$idx.':subject'} =~ /.*::::\d+::::(.+?)$/si) { - $subject = $1; + if ($contrib{$idx.':subject'} =~ //) { + my %versions = (); + &get_post_versions(\%versions,$contrib{$idx.':subject'},$numoldver); + $subject = $versions{$numoldver}; } else { - $subject = $contrib{$idx.':subject'}; + $subject = &HTML::Entities::encode($contrib{$idx.':subject'},'<>&"'); } - $subject = &HTML::Entities::encode($subject,'<>&"'); if (defined($contrib{$idx.':replyto'})) { $parentmsg = $contrib{$idx.':replyto'}; } @@ -1652,6 +1670,25 @@ END END } +sub get_post_versions { + my ($versions,$incoming,$numver) = @_; + my $p = HTML::LCParser->new(\$incoming); + my $done = 0; + while ( (my $token = $p->get_tag("version")) && (!$done)) { + my $num = $token->[1]{num}; + my $text = $p->get_text("/version"); + if (defined($numver)) { + if ($num == $numver) { + $$versions{$numver}=$text; + $done = 1; + } + } else { + $$versions{$num}=$text; + } + } + return; +} + sub fail_redirect { my ($r,$feedurl) = @_; if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; @@ -2014,17 +2051,19 @@ sub adddiscuss { } my $numnewver = $numoldver + 1; if (defined($oldcontrib{$oldidx.':subject'})) { - if ($oldcontrib{$oldidx.':subject'} =~ /::::\d+::::/) { - $contrib{'subject'} = $oldcontrib{$oldidx.':subject'}.'::::'.$numnewver.'::::'.$contrib{'subject'}; + if ($oldcontrib{$oldidx.':subject'} =~ /^/) { + $contrib{'subject'} = ''.&HTML::Entities::encode($contrib{'subject'},'<>&"').''; + $contrib{'subject'} = $oldcontrib{$oldidx.':subject'}.$contrib{'subject'}; } else { - $contrib{'subject'} = '::::0::::'.$oldcontrib{$oldidx.':subject'}.'::::1::::'.$contrib{'subject'}; + $contrib{'subject'} = ''.&HTML::Entities::encode($oldcontrib{$oldidx.':subject'},'<>&"').''.&HTML::Entities::encode($contrib{'subject'},'<>&"').''; } } if (defined($oldcontrib{$oldidx.':message'})) { - if ($oldcontrib{$oldidx.':message'} =~ /::::\d+::::/) { - $contrib{'message'} = $oldcontrib{$oldidx.':message'}.'::::'.$numnewver.'::::'.$contrib{'message'}; + if ($oldcontrib{$oldidx.':message'} =~ /^/) { + $contrib{'message'} = ''.&HTML::Entities::encode($contrib{'message'},'<>&"').''; + $contrib{'message'} = $oldcontrib{$oldidx.':message'}.$contrib{'message'}; } else { - $contrib{'message'} = '::::0::::'.$oldcontrib{$oldidx.':message'}.'::::1::::'.$contrib{'message'}; + $contrib{'message'} = ''.&HTML::Entities::encode($oldcontrib{$oldidx.':message'},'<>&"').''.&HTML::Entities::encode($contrib{'message'},'<>&"').''; } } $contrib{'history'} .= $oldcontrib{$oldidx.':timestamp'}; @@ -2459,12 +2498,16 @@ END if ($contrib{$idx.':history'}) { my $attachmenturls = $contrib{$idx.':attachmenturl'}; my @postversions = (); + my %messages = (); + my %subjects = (); if ($contrib{$idx.':history'} =~ m/:/) { @postversions = split/:/,$contrib{$idx.':history'}; } else { @postversions = ("$contrib{$idx.':history'}"); } if (@postversions > 0) { + &get_post_versions(\%messages,$contrib{$idx.':message'}); + &get_post_versions(\%subjects,$contrib{$idx.':subject'}); push @postversions,$contrib{$idx.':timestamp'}; my $screenname=&Apache::loncommon::screenname( $contrib{$idx.':sendername'}, @@ -2485,13 +2528,8 @@ END for (my $i=0; $i<@postversions; $i++) { my ($timesent,$message,$subject,$attachmsg); $timesent = &Apache::lonlocal::locallocaltime($postversions[$i]); - if ($i == @postversions-1) { - ($message)=($contrib{$idx.':message'} =~ /.*::::\Q$i\E::::(.+?)$/si); - ($subject)=($contrib{$idx.':subject'} =~ /.*::::\Q$i\E::::(.+?)$/si); - } else { - ($message)=($contrib{$idx.':message'} =~ /::::\Q$i\E::::(.+?)::::/si); - ($subject)=($contrib{$idx.':subject'} =~ /::::\Q$i\E::::(.+?)::::/si); - } + $message=&HTML::Entities::decode($messages{$i}); + $subject=&HTML::Entities::decode($subjects{$i}); $message=~s/\n/\
/g; $message=&Apache::lontexconvert::msgtexconverted($message); $subject=~s/\n/\
/g;