--- loncom/xml/lonxml.pm 2002/09/04 04:55:13 1.191 +++ loncom/xml/lonxml.pm 2002/10/08 17:09:09 1.199 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.191 2002/09/04 04:55:13 albertel Exp $ +# $Id: lonxml.pm,v 1.199 2002/10/08 17:09:09 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -99,6 +99,7 @@ use Apache::edit(); use Apache::lonnet(); use Apache::File(); use Apache::loncommon(); +use Apache::lonfeedback(); #================================================== Main subroutine: xmlparse #debugging control, to turn on debugging modify the correct handler @@ -154,6 +155,7 @@ sub xmlbegin { } sub xmlend { + my ($discussiononly,$symb)=@_; my $discussion=''; if ($ENV{'request.course.id'}) { my $crs='/'.$ENV{'request.course.id'}; @@ -162,14 +164,18 @@ sub xmlend { } $crs=~s/\_/\//g; my $seeid=&Apache::lonnet::allowed('rin',$crs); - my $symb=&Apache::lonnet::symbread(); + unless ($symb) { + $symb=&Apache::lonnet::symbread(); + } if ($symb) { my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, $ENV{'course.'.$ENV{'request.course.id'}.'.num'}); if ($contrib{'version'}) { - $discussion.= - '<address><hr /><h2>Course Discussion of Resource</h2>'; + unless ($discussiononly) { + $discussion.= + '<address><hr />'; + } my $idx; for ($idx=1;$idx<=$contrib{'version'};$idx++) { my $hidden=($contrib{'hidden'}=~/\.$idx\./); @@ -181,14 +187,24 @@ sub xmlend { if ($hidden) { $message='<font color="#888888">'.$message.'</font>'; } + my $screenname=&Apache::loncommon::screenname( + $contrib{$idx.':sendername'}, + $contrib{$idx.':senderdomain'}); + my $plainname=&Apache::loncommon::nickname( + $contrib{$idx.':sendername'}, + $contrib{$idx.':senderdomain'}); + my $sender='Anonymous'; if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { - $sender=$contrib{$idx.':plainname'}.' ('. + $sender=&Apache::loncommon::aboutmewrapper( + $plainname, + $contrib{$idx.':sendername'}, + $contrib{$idx.':senderdomain'}).' ('. $contrib{$idx.':sendername'}.' at '. $contrib{$idx.':senderdomain'}.')'; if ($contrib{$idx.':anonymous'}) { $sender.=' [anonymous] '. - $contrib{$idx.':screenname'}; + $screenname; } if ($seeid) { if ($hidden) { @@ -200,8 +216,8 @@ sub xmlend { } } } else { - if ($contrib{$idx.':screenname'}) { - $sender='<i>'.$contrib{$idx.':screenname'}.'</i>'; + if ($screenname) { + $sender='<i>'.$screenname.'</i>'; } } $discussion.='<p><b>'.$sender.'</b> ('. @@ -211,11 +227,28 @@ sub xmlend { } } } - $discussion.='</address>'; + unless ($discussiononly) { + $discussion.='</address>'; + } + } + if ($discussiononly) { + $discussion.=(<<ENDDISCUSS); +<form action="/adm/feedback" method="post" name="mailform"> +<input type="submit" name="discuss" value="Post Discussion" /> +<input type="submit" name="anondiscuss" value="Post Anonymous Discussion" /> +<input type="hidden" name="symb" value="$symb" /> +<input type="hidden" name="sendit" value="true" /> +<br /> +<font size="1">Note: in anonymous discussion, your name is visible only to +course faculty</font><br /> +<textarea name=comment cols=60 rows=10 wrap=hard></textarea> +</form> +ENDDISCUSS + $discussion.=&Apache::lonfeedback::generate_preview_button(); } } } - return $discussion.'</html>'; + return $discussion.($discussiononly?'':'</html>'); } sub tokeninputfield { @@ -332,6 +365,7 @@ sub registerurl { my $forcereg=shift; my $target = shift; my $result = ''; + if ($target eq 'edit') { $result .="<script>\n". "if (typeof menu != 'undefined') {menu.currentURL=null;}\n". @@ -541,19 +575,21 @@ sub htmlclean { sub latex_special_symbols { my ($current_token,$stack,$parstack)=@_; - my @temp_array = @$stack; - if ($temp_array[-1] ne 'tt') { - if ($current_token=~m/\^/) {$current_token=~s/\^/\\verb|\^|/g;} + $current_token=~s/\\/\\char92 /g; + $current_token=~s/\^/\\char94 /g; + $current_token=~s/\~/\\char126 /g; + $current_token=~s/(&[^a-z\#])/\\$1/g; + if ($current_token=~/ \#\w/) { + $current_token=~s/ \#(\w)/ \\#$1/; } else { - if ($current_token=~m/\^/) {$current_token=~s/\^/}\\verb|\^|{/g;} + $current_token=~s/([^&])(\#)/$1\\$2/g; } - if ($current_token=~m/>/) {$current_token=~s/>/\$>\$/g;} #more - if ($current_token=~m/</) {$current_token=~s/</\$<\$/g;} #less - if ($current_token=~m/\d%/) {$current_token =~ s/%/\\%/g;} #percent after digit - if ($current_token=~m/\s%/) {$current_token =~ s/%/\\%/g;} #persent after space - - -# $current_token = ' start='.$current_token.'=finish '; + $current_token=~s/(\$|_|{|})/\\$1/g; + $current_token=~s/\\char92 /\\texttt{\\char92}/g; + $current_token=~s/>/\$>\$/g; #more + $current_token=~s/</\$<\$/g; #less + if ($current_token=~m/\d%/) {$current_token =~ s/(\d)%/$1\\%/g;} #percent after digit + if ($current_token=~m/\s%/) {$current_token =~ s/(\s)%/$1\\%/g;} #persent after space return $current_token; } @@ -567,7 +603,7 @@ sub inner_xmlparse { if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) { if ($metamode<1) { my $text=$token->[1]; - if ($token->[0] eq 'C') { + if ($token->[0] eq 'C' && $target eq 'tex') { $text = '%'.$text; $text =~ s/[\n\r]//g; }