version 1.178, 2002/06/15 18:59:26
|
version 1.201, 2002/10/11 20:52:13
|
Line 99 use Apache::edit();
|
Line 99 use Apache::edit();
|
use Apache::lonnet(); |
use Apache::lonnet(); |
use Apache::File(); |
use Apache::File(); |
use Apache::loncommon(); |
use Apache::loncommon(); |
|
use Apache::lonfeedback(); |
|
use Apache::lonmsg(); |
|
|
#================================================== Main subroutine: xmlparse |
#================================================== Main subroutine: xmlparse |
#debugging control, to turn on debugging modify the correct handler |
#debugging control, to turn on debugging modify the correct handler |
Line 154 sub xmlbegin {
|
Line 156 sub xmlbegin {
|
} |
} |
|
|
sub xmlend { |
sub xmlend { |
|
my ($discussiononly,$symb)=@_; |
my $discussion=''; |
my $discussion=''; |
if ($ENV{'request.course.id'}) { |
if ($ENV{'request.course.id'}) { |
my $crs='/'.$ENV{'request.course.id'}; |
my $crs='/'.$ENV{'request.course.id'}; |
Line 162 sub xmlend {
|
Line 165 sub xmlend {
|
} |
} |
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my $symb=&Apache::lonnet::symbread(); |
unless ($symb) { |
|
$symb=&Apache::lonnet::symbread(); |
|
} |
if ($symb) { |
if ($symb) { |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
if ($contrib{'version'}) { |
if ($contrib{'version'}) { |
$discussion.= |
unless ($discussiononly) { |
'<address><hr /><h2>Course Discussion of Resource</h2>'; |
$discussion.= |
|
'<address><hr />'; |
|
} |
my $idx; |
my $idx; |
for ($idx=1;$idx<=$contrib{'version'};$idx++) { |
for ($idx=1;$idx<=$contrib{'version'};$idx++) { |
my $hidden=($contrib{'hidden'}=~/\.$idx\./); |
my $hidden=($contrib{'hidden'}=~/\.$idx\./); |
unless (($hidden) && (!$seeid)) { |
unless (($hidden) && (!$seeid)) { |
my $message=$contrib{$idx.':message'}; |
my $message=$contrib{$idx.':message'}; |
$message=~s/\n/\<br \/\>/g; |
$message=~s/\n/\<br \/\>/g; |
|
$message=&Apache::lontexconvert::msgtexconverted($message); |
if ($message) { |
if ($message) { |
if ($hidden) { |
if ($hidden) { |
$message='<font color="#888888">'.$message.'</font>'; |
$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'; |
my $sender='Anonymous'; |
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { |
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.':sendername'}.' at '. |
$contrib{$idx.':senderdomain'}.')'; |
$contrib{$idx.':senderdomain'}.')'; |
if ($contrib{$idx.':anonymous'}) { |
if ($contrib{$idx.':anonymous'}) { |
$sender.=' [anonymous] '. |
$sender.=' [anonymous] '. |
$contrib{$idx.':screenname'}; |
$screenname; |
} |
} |
if ($seeid) { |
if ($seeid) { |
if ($hidden) { |
if ($hidden) { |
Line 199 sub xmlend {
|
Line 217 sub xmlend {
|
} |
} |
} |
} |
} else { |
} else { |
if ($contrib{$idx.':screenname'}) { |
if ($screenname) { |
$sender='<i>'.$contrib{$idx.':screenname'}.'</i>'; |
$sender='<i>'.$screenname.'</i>'; |
} |
} |
} |
} |
$discussion.='<p><b>'.$sender.'</b> ('. |
$discussion.='<p><b>'.$sender.'</b> ('. |
Line 210 sub xmlend {
|
Line 228 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 { |
sub tokeninputfield { |
Line 331 sub registerurl {
|
Line 366 sub registerurl {
|
my $forcereg=shift; |
my $forcereg=shift; |
my $target = shift; |
my $target = shift; |
my $result = ''; |
my $result = ''; |
|
|
|
if ($target eq 'edit') { |
|
$result .="<script>\n". |
|
"if (typeof menu != 'undefined') {menu.currentURL=null;}\n". |
|
&Apache::loncommon::browser_and_searcher_javascript(). |
|
"\n</script>\n"; |
|
} |
if ((($ENV{'request.publicaccess'}) || |
if ((($ENV{'request.publicaccess'}) || |
(!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) && |
(!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) && |
(!$forcereg)) { |
(!$forcereg)) { |
return |
return $result. |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
} |
} |
if ($Apache::lonxml::registered && !$forcereg) { return ''; } |
if ($Apache::lonxml::registered && !$forcereg) { return ''; } |
$Apache::lonxml::registered=1; |
$Apache::lonxml::registered=1; |
my $nothing=''; |
my $nothing=''; |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
my $timesync='menu.clock.setTime(1000*'.time.');'; |
my $newmail=''; |
|
if (&Apache::lonmsg::newmail()) { |
|
$newmail='menu.setstatus("you have","messages");'; |
|
} |
|
my $timesync='menu.syncclock(1000*'.time.');'; |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
my $hwkadd=''; |
my $hwkadd=''; |
if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
Line 370 ENDPARM
|
Line 416 ENDPARM
|
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu.clearTimeout(menu.menucltim); |
menu.clearTimeout(menu.menucltim); |
$timesync |
$timesync |
|
$newmail |
menu.currentURL=window.location.pathname; |
menu.currentURL=window.location.pathname; |
menu.reloadURL=window.location.pathname; |
menu.reloadURL=window.location.pathname; |
menu.currentStale=0; |
menu.currentStale=0; |
Line 379 ENDPARM
|
Line 426 ENDPARM
|
menu.switchbutton |
menu.switchbutton |
(8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)'); |
(8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)'); |
menu.switchbutton |
menu.switchbutton |
(8,2,'fdbk.gif','feedback','on this','gopost("/adm/feedback",currentURL)'); |
(8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)'); |
menu.switchbutton |
menu.switchbutton |
(8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)'); |
(8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)'); |
menu.switchbutton |
menu.switchbutton |
Line 446 ENDREGTHIS
|
Line 493 ENDREGTHIS
|
</script> |
</script> |
ENDDONOTREGTHIS |
ENDDONOTREGTHIS |
} |
} |
if ($target eq 'edit') { |
|
# Javascript routines for construction space: |
|
# openbrowser and opensearcher will start the file browser |
|
# (lonindexer) and searcher (lonsearchcat) respectively. |
|
# Inputs are the name of the html form being used |
|
# and the name of the element the selected URL should |
|
# be placed in. |
|
# openbrowser also takes arguments only and omit, which are |
|
# comma deliminated lists of file extensions to (only) show |
|
# or omit. |
|
# Here we also set currentURL=null. |
|
$result .=<<"ENDBROWSERSCRIPT"; |
|
<script> |
|
menu.currentURL=null; |
|
var editbrowser; |
|
function openbrowser(formname,elementname,only,omit) { |
|
var url = '/res/?'; |
|
if (editbrowser == null) { |
|
url += 'launch=1&'; |
|
} |
|
url += 'catalogmode=interactive&'; |
|
url += 'mode=edit&'; |
|
url += 'form=' + formname + '&'; |
|
if (only != null) { |
|
url += 'only=' + only + '&'; |
|
} |
|
if (omit != null) { |
|
url += 'omit=' + omit + '&'; |
|
} |
|
url += 'element=' + elementname + ''; |
|
var title = 'Browser'; |
|
var options = 'scrollbars=1,resizable=1,menubar=0'; |
|
options += ',width=700,height=600'; |
|
editbrowser = open(url,title,options,'1'); |
|
editbrowser.focus(); |
|
} |
|
var editsearcher; |
|
function opensearcher(formname,elementname) { |
|
var url = '/adm/searchcat?'; |
|
if (editsearcher == null) { |
|
url += 'launch=1&'; |
|
} |
|
url += 'catalogmode=interactive&'; |
|
url += 'mode=edit&'; |
|
url += 'form=' + formname + '&'; |
|
url += 'element=' + elementname + ''; |
|
var title = 'Search'; |
|
var options = 'scrollbars=1,resizable=1,menubar=0'; |
|
options += ',width=700,height=600'; |
|
editsearcher = open(url,title,options,'1'); |
|
editsearcher.focus(); |
|
} |
|
</script> |
|
ENDBROWSERSCRIPT |
|
} |
|
return $result; |
return $result; |
} |
} |
|
|
Line 587 sub htmlclean {
|
Line 579 sub htmlclean {
|
return $output; |
return $output; |
} |
} |
|
|
|
sub latex_special_symbols { |
|
my ($current_token,$stack,$parstack)=@_; |
|
$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 { |
|
$current_token=~s/([^&])(\#)/$1\\$2/g; |
|
} |
|
$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; |
|
} |
|
|
sub inner_xmlparse { |
sub inner_xmlparse { |
my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_; |
my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_; |
my $finaloutput = ''; |
my $finaloutput = ''; |
Line 596 sub inner_xmlparse {
|
Line 608 sub inner_xmlparse {
|
while ($token = $$pars['-1']->get_token) { |
while ($token = $$pars['-1']->get_token) { |
if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) { |
if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) { |
if ($metamode<1) { |
if ($metamode<1) { |
$result=$token->[1]; |
my $text=$token->[1]; |
|
if ($token->[0] eq 'C' && $target eq 'tex') { |
|
$text = '%'.$text; |
|
$text =~ s/[\n\r]//g; |
|
} |
|
$result.=$text; |
} |
} |
} elsif ($token->[0] eq 'PI') { |
} elsif ($token->[0] eq 'PI') { |
if ($metamode<1) { |
if ($metamode<1) { |
Line 659 sub inner_xmlparse {
|
Line 676 sub inner_xmlparse {
|
$result= &Apache::run::evaluate($result,$safeeval,''); |
$result= &Apache::run::evaluate($result,$safeeval,''); |
} |
} |
} |
} |
|
if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) { |
|
if ($target eq 'tex') { |
|
$result=&latex_special_symbols($result,$stack,$parstack); |
|
} |
|
} |
|
|
# Encode any high ASCII characters |
# Encode any high ASCII characters |
if (!$Apache::lonxml::prevent_entity_encode) { |
if (!$Apache::lonxml::prevent_entity_encode) { |
$result=&HTML::Entities::encode($result,"\200-\377"); |
$result=&HTML::Entities::encode($result,"\200-\377"); |
Line 785 sub callsub {
|
Line 808 sub callsub {
|
} |
} |
if (!$deleted) { |
if (!$deleted) { |
if ($space) { |
if ($space) { |
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode"); |
&Apache::lonxml::debug("Calling sub $sub in $space $metamode"); |
$sub1="$space\:\:$sub"; |
$sub1="$space\:\:$sub"; |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
$parstack,$parser,$safeeval, |
$parstack,$parser,$safeeval, |
$style); |
$style); |
} else { |
} else { |
#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode"); |
&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode"); |
if ($metamode <1) { |
if ($metamode <1) { |
if (defined($token->[4]) && ($metamode < 1)) { |
if (defined($token->[4]) && ($metamode < 1)) { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
Line 983 sub decreasedepth {
|
Line 1006 sub decreasedepth {
|
#print "<br />e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; |
#print "<br />e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; |
} |
} |
|
|
sub get_all_text { |
sub get_all_text_unbalanced { |
|
#there is a copy of this in lonpublisher.pm |
|
my($tag,$pars)= @_; |
|
my $token; |
|
my $result=''; |
|
$tag='<'.$tag.'>'; |
|
while ($token = $$pars[-1]->get_token) { |
|
if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) { |
|
$result.=$token->[1]; |
|
} elsif ($token->[0] eq 'PI') { |
|
$result.=$token->[2]; |
|
} elsif ($token->[0] eq 'S') { |
|
$result.=$token->[4]; |
|
} elsif ($token->[0] eq 'E') { |
|
$result.=$token->[2]; |
|
} |
|
if ($result =~ /(.*)$tag(.*)/) { |
|
&Apache::lonxml::debug('Got a winner with leftovers ::'.$2); |
|
&Apache::lonxml::debug('Result is :'.$1); |
|
$result=$1; |
|
my $redo=$tag.$2; |
|
&Apache::lonxml::newparser($pars,\$redo); |
|
last; |
|
} |
|
} |
|
return $result |
|
} |
|
|
|
sub get_all_text { |
my($tag,$pars)= @_; |
my($tag,$pars)= @_; |
my $depth=0; |
my $depth=0; |
my $token; |
my $token; |
Line 1275 ENDNOTFOUND
|
Line 1325 ENDNOTFOUND
|
sub debug { |
sub debug { |
if ($Apache::lonxml::debug eq 1) { |
if ($Apache::lonxml::debug eq 1) { |
$|=1; |
$|=1; |
print("DEBUG:".join('<br />',@_)."<br />\n"); |
print("DEBUG:".&HTML::Entities::encode($_[0])."<br />\n"); |
} |
} |
} |
} |
|
|