--- loncom/xml/lonxml.pm 2003/02/14 15:14:37 1.233 +++ loncom/xml/lonxml.pm 2003/04/03 22:34:26 1.246 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.233 2003/02/14 15:14:37 www Exp $ +# $Id: lonxml.pm,v 1.246 2003/04/03 22:34:26 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -145,7 +145,7 @@ $Apache::lonxml::registered=0; $Apache::lonxml::request=''; # a problem number counter, and check on ether it is used -$Apache::lonxml::counter=4; +$Apache::lonxml::counter=1; $Apache::lonxml::counter_changed=0; #internal check on whether to look at style defs @@ -196,6 +196,13 @@ sub xmlend { my $message=$contrib{$idx.':message'}; $message=~s/\n/\<br \/\>/g; $message=&Apache::lontexconvert::msgtexconverted($message); + if ($contrib{$idx.':attachmenturl'}) { + my ($fname,$ft) + =($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/); + $message.='<p>Attachment: <a href="'. + &Apache::lonnet::tokenwrapper($contrib{$idx.':attachmenturl'}). + '"><tt>'.$fname.'.'.$ft.'</tt></a>'; + } if ($message) { if ($hidden) { $message='<font color="#888888">'.$message.'</font>'; @@ -248,7 +255,7 @@ sub xmlend { } if ($discussiononly) { $discussion.=(<<ENDDISCUSS); -<form action="/adm/feedback" method="post" name="mailform"> +<form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> <input type="submit" name="discuss" value="Post Discussion" /> <input type="submit" name="anondiscuss" value="Post Anonymous Discussion" /> <input type="hidden" name="symb" value="$symb" /> @@ -257,6 +264,9 @@ sub xmlend { <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> +<p> +Attachment (128 KB max size): <input type="file" name="attachment" /> +</p> </form> ENDDISCUSS $discussion.=&Apache::lonfeedback::generate_preview_button(); @@ -376,210 +386,6 @@ sub fontsettings() { return $headerstring; } -sub registerurl { - my $forcereg=shift; - my $target = shift; - my $result = ''; - - if ($target eq 'edit') { - $result .="<script type=\"text/javascrtipt\">\n". - "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n". - &Apache::loncommon::browser_and_searcher_javascript(). - "\n</script>\n"; - } - if (($ENV{'browser.interface'} eq 'textual') || - ((($ENV{'request.publicaccess'}) || - (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) && - (!$forcereg))) { - return $result. - '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>'; - } - if ($Apache::lonxml::registered && !$forcereg) { return ''; } - $Apache::lonxml::registered=1; - my $reopen=&Apache::lonmenu::reopenmenu(); - my $newmail=''; - if (&Apache::lonmsg::newmail()) { - $newmail='swmenu.setstatus("you have","messages");'; - } - my $timesync='swmenu.syncclock(1000*'.time.');'; - if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { - my $hwkadd=''; - if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { - if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { - $hwkadd.=(<<ENDSUBM); - swmenu.switchbutton(7,1,'subm.gif','view sub','missions','gocmd("/adm/grades","submission")', - 'View user submissions for this assessment resource'); -ENDSUBM - } - if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { - $hwkadd.=(<<ENDGRDS); - swmenu.switchbutton(7,2,'pgrd.gif','problem','grades','gocmd("/adm/grades","gradingmenu")', - 'Modify user grades for this assessment resource'); -ENDGRDS - } - if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { - $hwkadd.=(<<ENDPARM); - swmenu.switchbutton(7,3,'pparm.gif','problem','parms','gocmd("/adm/parmset","set")', - 'Modify deadlines, etc, for this assessment resource'); -ENDPARM - } - } - ### - ### Determine whether or not to display the 'cstr' button for this - ### resource - ### - my $editbutton = ''; - if ($ENV{'user.author'}) { - if ($ENV{'request.role'}=~/^(ca|au)/) { - # Set defaults for authors - my ($top,$bottom) = ('con-','struct'); - my $action = "go('/priv/".$ENV{'user.name'}."');"; - my $cadom = $ENV{'request.role.domain'}; - my $caname = $ENV{'user.name'}; - my $desc = "Enter my resource construction space"; - # Set defaults for co-authors - if ($ENV{'request.role'} =~ /^ca/) { - ($cadom,$caname)=($ENV{'request.role'}=~/(\w+)\/(\w+)$/); - ($top,$bottom) = ('co con-','struct'); - $action = "go('/priv/".$caname."');"; - $desc = "Enter construction space as co-author"; - } - # Check that we are on the correct machine - my $home = &Apache::lonnet::homeserver($caname,$cadom); - if ($home eq $Apache::lonnet::perlvar{'lonHostID'}) { - $editbutton=&Apache::lonmenu::switch - ('','',6,1,$top,,$bottom,$action,$desc); - } - } - ## - ## Determine if user can edit url. - ## - my $cfile=''; - my $cfuname=''; - my $cfudom=''; - if ($ENV{'request.filename'}) { - my $file=&Apache::lonnet::declutter($ENV{'request.filename'}); - $file=~s/^(\w+)\/(\w+)/\/priv\/$2/; - # Chech that the user has permission to edit this resource - ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1); - if (defined($cfudom)) { - if (&Apache::lonnet::homeserver($cfuname,$cfudom) - eq $Apache::lonnet::perlvar{'lonHostID'}) { - $cfile=$file; - } - } - } - # Finally, turn the button on or off - if ($cfile) { - $editbutton=&Apache::lonmenu::switch - ('','',6,1,'cstr.gif','edit','resource', - "go('".$cfile."');","Edit this resource"); - } elsif ($editbutton eq '') { - $editbutton = ' swmenu.clearbut(6,1);'; - } - } - ### - ### - $result = (<<ENDREGTHIS); - -<script language="JavaScript"> -// BEGIN LON-CAPA Internal - - function LONCAPAreg() { - swmenu=$reopen; - swmenu.clearTimeout(swmenu.menucltim); - $timesync - $newmail - swmenu.currentURL=window.location.pathname; - swmenu.reloadURL=window.location.pathname; - swmenu.currentSymb="$ENV{'request.symb'}"; - swmenu.reloadSymb="$ENV{'request.symb'}"; - swmenu.currentStale=0; - swmenu.clearbut(3,1); - swmenu.switchbutton - (6,3,'catalog.gif','catalog','info','catalog_info()','Show catalog information'); - swmenu.switchbutton - (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource'); - swmenu.switchbutton - (8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)','Provide feedback messages or contribute to the course discussion about this resource'); - swmenu.switchbutton - (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)','Prepare a printable document'); - swmenu.switchbutton - (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)','Go to the previous resource in the course sequence'); - swmenu.switchbutton - (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)','Go to the next resource in the course sequence'); - swmenu.switchbutton - (9,1,'sbkm.gif','set','bookmark','set_bookmark()','Set a bookmark for this resource'); - swmenu.switchbutton - (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()','Use or edit my bookmark collection'); - swmenu.switchbutton - (9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource'); - $hwkadd - $editbutton - } - - function LONCAPAstale() { - swmenu=$reopen - swmenu.currentStale=1; - if (swmenu.reloadURL!='' && swmenu.reloadURL!= null) { - swmenu.switchbutton - (3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence'); - } - swmenu.clearbut(7,1); - swmenu.clearbut(7,2); - swmenu.clearbut(7,3); - swmenu.menucltim=swmenu.setTimeout( - 'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+ - 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3);clearbut(6,1)', - 2000); - - } - -// END LON-CAPA Internal -</script> -ENDREGTHIS - - } else { - $result = (<<ENDDONOTREGTHIS); - -<script language="JavaScript"> -// BEGIN LON-CAPA Internal - - function LONCAPAreg() { - swmenu=$reopen - $timesync - swmenu.currentStale=1; - swmenu.clearbut(2,1); - swmenu.clearbut(2,3); - swmenu.clearbut(8,1); - swmenu.clearbut(8,2); - swmenu.clearbut(8,3); - if (swmenu.currentURL) { - swmenu.switchbutton - (3,1,'reload.gif','return','location','go(currentURL)'); - } else { - swmenu.clearbut(3,1); - } - } - - function LONCAPAstale() { - } - -// END LON-CAPA Internal -</script> -ENDDONOTREGTHIS - } - return $result; -} - -sub loadevents() { - return 'LONCAPAreg();'; -} - -sub unloadevents() { - return 'LONCAPAstale();'; -} - sub printalltags { my $temp; foreach $temp (sort keys %Apache::lonxml::alltags) { @@ -595,6 +401,7 @@ sub xmlparse { &Apache::inputtags::initialize_inputtags(); &Apache::outputtags::initialize_outputtags(); &Apache::edit::initialize_edit(); + # # do we have a course style file? # @@ -661,22 +468,20 @@ sub htmlclean { sub latex_special_symbols { my ($current_token,$stack,$parstack,$where)=@_; - if ($where=='header') { - $current_token =~ s/_/ /g; - $current_token =~ s/\^/ /g; - $current_token =~ s/&/\\&/g; + if ($where eq 'header') { + $current_token =~ s/(\\|_|\^)/ /g; + $current_token =~ s/(\$|%|\#|&|\{|\})/\\$1/g; } else { - $current_token=~s/\\ /\\char92 /g; - $current_token=~s/\^/\\char94 /g; - $current_token=~s/\~/\\char126 /g; - $current_token=~s/(&[^a-z\#])/\\$1/g; - $current_token=~s/([^&])\#/$1\\#/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 + $current_token=~s/\\ /\\char92 /g; + $current_token=~s/\^/\\char94 /g; + $current_token=~s/\~/\\char126 /g; + $current_token=~s/(&[^A-Za-z\#])/\\$1/g; + $current_token=~s/([^&])\#/$1\\#/g; + $current_token=~s/(\$|_|{|})/\\$1/g; + $current_token=~s/\\char92 /\\texttt{\\char92}/g; + $current_token=~s/(>|<)/\$$1\$/g; #more or 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; } @@ -692,7 +497,8 @@ sub inner_xmlparse { if ($metamode<1) { my $text=$token->[1]; if ($token->[0] eq 'C' && $target eq 'tex') { - $text = '%'.$text."\n"; + $text = ''; +# $text = '%'.$text."\n"; } $result.=$text; } @@ -721,10 +527,10 @@ sub inner_xmlparse { while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) { my $lasttag=$$stack[-1]; if ($token->[1] =~ /^$lasttag$/i) { - &Apache::lonxml::warning('Using tag </'.$token->[1].'> as end tag to <'.$$stack[-1].'>'); + &Apache::lonxml::warning('Using tag </'.$token->[1].'> on line '.$token->[3].' as end tag to <'.$$stack[-1].'>'); last; } else { - &Apache::lonxml::warning('Found tag </'.$token->[1].'> when looking for </'.$$stack[-1].'> in file'); + &Apache::lonxml::warning('Found tag </'.$token->[1].'> on line '.$token->[3].' when looking for </'.$$stack[-1].'> in file'); &end_tag($stack,$parstack,$token); } } @@ -796,6 +602,8 @@ sub callsub { my $sub1; no strict 'refs'; my $tag=$token->[1]; +# get utterly rid of extended html tags + if ($tag=~/^x\-/i) { return ''; } my $space=$Apache::lonxml::alltags{$tag}[-1]; if (!$space) { $tag=~tr/A-Z/a-z/; @@ -998,7 +806,7 @@ sub default_homework_load { my ($safeeval)=@_; &Apache::lonxml::debug('Loading default_homework'); my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm'); - if ($default == -1) { + if ($default eq -1) { &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); } else { &Apache::run::run($default,$safeeval); @@ -1097,7 +905,7 @@ sub increment_counter { sub init_counter { if (defined($ENV{'form.counter'})) { $Apache::lonxml::counter=$ENV{'form.counter'}; - } elsif (not defined($Apache::lonxml::counter)) { + } else { $Apache::lonxml::counter=1; &store_counter(); } @@ -1303,6 +1111,13 @@ sub inserteditinfo { my ($result,$filecontents)=@_; $filecontents = &HTML::Entities::encode($filecontents); # my $editheader='<a href="#editsection">Edit below</a><hr />'; + my $xml_help = '<table><tr><td>'. + &Apache::loncommon::help_open_topic("Greek_Symbols",'Greek Symbols', + undef,undef,600) + .'</td><td>'. + &Apache::loncommon::help_open_topic("Other_Symbols",'Other Symbols', + undef,undef,600) + .'</td></tr></table>'; my $buttons=(<<BUTTONS); <input type="submit" name="attemptclean" value="Save and then attempt to clean HTML" /> @@ -1313,6 +1128,7 @@ BUTTONS <hr /> <a name="editsection" /> <form method="post"> +$xml_help <input type="hidden" name="editmode" value="Edit" /> $buttons<br /> <textarea cols="80" rows="40" name="filecont">$filecontents</textarea> @@ -1382,7 +1198,7 @@ sub handler { my %mystyle; my $result = ''; my $filecontents=&Apache::lonnet::getfile($file); - if ($filecontents == -1) { + if ($filecontents eq -1) { $result=(<<ENDNOTFOUND); <html> <head> @@ -1575,7 +1391,7 @@ sub description { # calls to lonnet functions for this setup. # - looks for form.grade_ parameters sub whichuser { - my ($symb,$courseid,$domain,$name); + my ($symb,$courseid,$domain,$name,$publicuser); if (defined($ENV{'form.grade_symb'})) { my $tmp_courseid=$ENV{'form.grade_courseid'}; my $allowed=&Apache::lonnet::allowed('mgr',$tmp_courseid); @@ -1586,12 +1402,18 @@ sub whichuser { $name=$ENV{'form.grade_username'}; } } else { - $symb=&Apache::lonnet::symbread(); - $courseid=$ENV{'request.course.id'}; - $domain=$ENV{'user.domain'}; - $name=$ENV{'user.name'}; + $symb=&Apache::lonnet::symbread(); + $courseid=$ENV{'request.course.id'}; + $domain=$ENV{'user.domain'}; + $name=$ENV{'user.name'}; + if ($name eq 'public' && $domain eq 'public') { + if (!defined($ENV{'form.username'})) { + $ENV{'form.username'}.=time.rand(10000000); + } + $name.=$ENV{'form.username'}; + } } - return ($symb,$courseid,$domain,$name); + return ($symb,$courseid,$domain,$name,$publicuser); } 1;