--- loncom/homework/structuretags.pm 2005/11/21 22:16:38 1.325 +++ loncom/homework/structuretags.pm 2006/06/24 01:33:40 1.332.2.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.325 2005/11/21 22:16:38 albertel Exp $ +# $Id: structuretags.pm,v 1.332.2.4 2006/06/24 01:33:40 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,9 +42,9 @@ BEGIN { } sub start_web { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; - my $bodytext=&Apache::lonxml::get_all_text("/web",$parser); - if ($target eq 'web') { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $bodytext=&Apache::lonxml::get_all_text("/web",$parser,$style); + if ($target eq 'web' || $target eq 'webgrade') { return $bodytext; } return ''; @@ -55,9 +55,9 @@ sub end_web { } sub start_tex { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser); + my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style); if ($target eq 'tex') { return $bodytext.' '; } @@ -113,6 +113,15 @@ sub page_start { &Apache::lonhtmlcommon::htmlareaheaders(). &Apache::lonhtmlcommon::spellheader(). &Apache::lonxml::fontsettings(); + my $css_href = &Apache::lonnet::EXT('resource.0.cssfile'); + if ($css_href =~ /\S/) { + &Apache::lonxml::extlink($css_href); + $head_tag_start = + ''; + } + if ($target eq 'edit') { + $head_tag_start.=&Apache::edit::js_change_detection(); + } } my $body_tag_start; if (!defined($found{'body'}) && $env{'request.state'} eq 'construct') { @@ -150,7 +159,11 @@ sub page_start { $form_tag_start='
'; + $form_tag_start.=$uri.'" '; + if ($target eq 'edit') { + $form_tag_start.=&Apache::edit::form_change_detection(); + } + $form_tag_start.='>'; } return ($result,$head_tag_start,$body_tag_start,$form_tag_start); } @@ -225,7 +238,7 @@ sub problem_edit_header { &Apache::structuretags::remember_problem_state().' - +
'. @@ -416,13 +429,14 @@ sub checkout_msg { 'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.', 'checkout'=>'Check out Exam for Viewing', 'checkout?'=>'Check out Exam?'); + my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); return (<$lt{'resource'}

$lt{'id_expln'}

$lt{'warning'}

- + @@ -434,9 +448,10 @@ sub firstaccess_msg { my ($map)=&Apache::lonnet::decode_symb($symb); my $foldertitle=&Apache::lonnet::gettitle($map); &Apache::lonxml::debug("map is $map title is $foldertitle"); + my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); return (<The resources in "$foldertitle" are open for a limited time. Once you click the 'Show Resource' button below you have $time to complete all resources "$foldertitle". -
+
@@ -477,7 +492,9 @@ sub init_problem_globals { @Apache::structuretags::whileline=(); $Apache::lonhomework::scantronmode=0; undef($Apache::lonhomework::name); - + undef($Apache::lonhomework::default_type); + undef($Apache::lonhomework::type); + undef($Apache::lonhomework::problemstatus); } sub reset_problem_globals { @@ -489,6 +506,11 @@ sub reset_problem_globals { #detect if we try to do 2 problems in one file # undef($Apache::lonhomework::parsing_a_problem); undef($Apache::lonhomework::name); + undef($Apache::lonhomework::default_type); + undef($Apache::lonhomework::type); + undef($Apache::lonhomework::scantronmode); + undef($Apache::lonhomework::problemstatus); + undef($Apache::lonhomework::ignore_response_errors); } sub set_problem_state { @@ -514,7 +536,7 @@ sub get_problem_status { } sub start_problem { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; # We'll use the redirection to fix up printing of duedates. if (!$Apache::lonxml::metamode) { @@ -527,7 +549,7 @@ sub start_problem { if ( $Apache::inputtags::part ne '' || $Apache::lonhomework::parsing_a_problem) { &Apache::lonxml::error('Only one <problem> allowed in a .problem file'); - #my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser); + #my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,$style); return ''; } @@ -549,7 +571,7 @@ sub start_problem { defined($env{'form.problemtype'})) { $Apache::lonhomework::type=$env{'form.problemtype'}; } - &Apache::lonxml::debug("Found this to be of type :$Apache::ltonhomework::type:"); + &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:"); } if ($Apache::lonhomework::type eq '' ) { my $uri=$env{'request.uri'}; @@ -630,7 +652,8 @@ sub start_problem { ( $status eq 'UNAVAILABLE') || ( $status eq 'NOT_IN_A_SLOT') || ( $status eq 'INVALID_ACCESS')) { - my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser); + my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, + $style); if ( $target eq "web" ) { $result.= $head_tag_start.''; my $msg=$body_tag_start; @@ -650,7 +673,10 @@ sub start_problem { } $result.=$msg.'
'; } elsif ($target eq 'tex') { - $result.='\begin{document}\noindent \vskip 1 mm \begin{minipage}{\textwidth}\vskip 0 mm'; + my $startminipage = ($env{'form.problem_split'}=~/yes/i)? '' + : '\begin{minipage}{\textwidth}'; + $result.='\begin{document}\noindent \vskip 1 mm '. + $startminipage.'\vskip 0 mm'; if ($status eq 'UNAVAILABLE') { $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm '; } else { @@ -658,7 +684,8 @@ sub start_problem { } } } elsif ($status eq 'NEEDS_CHECKIN') { - my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser); + my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, + $style); if ($target eq 'web') { $result .= $head_tag_start.''; $result .= $body_tag_start; @@ -710,6 +737,7 @@ sub end_problem { if (!$Apache::lonxml::metamode) { $result = &Apache::lonxml::endredirection(); #started in &start_problem + $Apache::lonxml::post_evaluate=0; } if ($target eq 'tex') { @@ -933,12 +961,12 @@ sub end_library { } sub start_definetag { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; my $name = $token->[2]->{'name'}; - my $skip=&Apache::lonxml::get_all_text("/definetag",$parser); + my $skip=&Apache::lonxml::get_all_text("/definetag",$parser,$style); if ($name=~/^\//) { $result= '
'; @@ -961,8 +989,8 @@ sub start_block { my $result; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $code = $token->[2]->{'condition'}; if (defined($code)) { if (!$Apache::lonxml::default_homework_loaded) { @@ -1005,8 +1033,8 @@ sub start_languageblock { my $result; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $include = $token->[2]->{'include'}; my $exclude = $token->[2]->{'exclude'}; my %languages=&Apache::loncommon::display_languages(); @@ -1058,8 +1086,8 @@ sub start_instructorcomment { my $result; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { $result=($env{'request.role'}=~/^(in|cc|au|ca|li)/); if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) { my $skip=&Apache::lonxml::get_all_text("/instructorcomment", @@ -1084,11 +1112,11 @@ sub end_instructorcomment { } sub start_while { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $code = $token->[2]->{'condition'}; push( @Apache::structuretags::whileconds, $code); @@ -1096,7 +1124,7 @@ sub start_while { &Apache::lonxml::default_homework_load($safeeval); } my $result = &Apache::run::run($code,$safeeval); - my $bodytext=&Apache::lonxml::get_all_text("/while",$parser); + my $bodytext=&Apache::lonxml::get_all_text("/while",$parser,$style); push( @Apache::structuretags::whilebody, $bodytext); push( @Apache::structuretags::whileline, $token->[5]); &Apache::lonxml::debug("s code $code got -$result-"); @@ -1120,8 +1148,8 @@ sub end_while { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $code = pop(@Apache::structuretags::whileconds); my $bodytext = pop(@Apache::structuretags::whilebody); my $line = pop(@Apache::structuretags::whileline); @@ -1152,10 +1180,10 @@ sub end_while { # ... # sub start_randomlist { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; - if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $body= &Apache::lonxml::get_all_text("/randomlist",$parser); my $b_parser= HTML::LCParser->new(\$body); $b_parser->xml_mode(1); @@ -1245,7 +1273,7 @@ sub ordered_show_check { } sub start_part { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; if (!$Apache::lonxml::metamode) { &Apache::lonxml::startredirection(); # we'll use redirection to fix up # duedates. @@ -1274,7 +1302,7 @@ sub start_part { } elsif ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { if ($hidden || !$in_order_show) { - my $bodytext=&Apache::lonxml::get_all_text("/part",$parser); + my $bodytext=&Apache::lonxml::get_all_text("/part",$parser,$style); } else { my ($status,$accessmsg) = &Apache::lonhomework::check_access($id); push (@Apache::inputtags::status,$status); @@ -1290,7 +1318,8 @@ sub start_part { ( $status eq 'BANNED') || ( $status eq 'UNAVAILABLE') || ( $status eq 'INVALID_ACCESS')) { - my $bodytext=&Apache::lonxml::get_all_text("/part",$parser); + my $bodytext=&Apache::lonxml::get_all_text("/part",$parser, + $style); if ( $target eq "web" ) { $result="
".&mt('Part is not open to be viewed. It')." $accessmsg
"; } elsif ( $target eq 'tex' ) { @@ -1361,6 +1390,7 @@ sub end_part { my $result; if (!$Apache::lonxml::metamode) { $result = &Apache::lonxml::endredirection(); # started in &start_part + $Apache::lonxml::post_evaluate=0; } if ($target eq 'grade') { if (($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode) && @@ -1392,14 +1422,15 @@ sub end_part { } sub start_preduedate { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'webgrade') { &Apache::lonxml::debug("State in preduedate is ". $Apache::inputtags::status['-1']); if (!$Apache::lonhomework::scantronmode && $Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') { &Apache::lonxml::debug("Wha? ". ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER')); - &Apache::lonxml::get_all_text("/preduedate",$parser); + &Apache::lonxml::get_all_text("/preduedate",$parser,$style); } } return ''; @@ -1410,14 +1441,14 @@ sub end_preduedate { } sub start_postanswerdate { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; - if ($target eq 'web' || $target eq 'grade') { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target eq 'web' || $target eq 'grade' || $target eq 'webgrade') { if ($Apache::lonhomework::scantronmode || $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') { - &Apache::lonxml::get_all_text("/postanswerdate",$parser); + &Apache::lonxml::get_all_text("/postanswerdate",$parser,$style); } } elsif ($target eq 'tex') { - &Apache::lonxml::get_all_text("/postanswerdate",$parser); + &Apache::lonxml::get_all_text("/postanswerdate",$parser,$style); } return ''; } @@ -1427,15 +1458,15 @@ sub end_postanswerdate { } sub start_notsolved { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex') { + $target eq 'tex' || $target eq 'webgrade') { my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; &Apache::lonxml::debug("not solved has :$gradestatus:"); if ($gradestatus =~ /^correct/ && &Apache::response::show_answer()) { &Apache::lonxml::debug("skipping"); - &Apache::lonxml::get_all_text("/notsolved",$parser); + &Apache::lonxml::get_all_text("/notsolved",$parser,$style); } } return ''; @@ -1446,13 +1477,13 @@ sub end_notsolved { } sub start_solved { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; if ($gradestatus !~ /^correct/ || !&Apache::response::show_answer()) { - &Apache::lonxml::get_all_text("/solved",$parser); + &Apache::lonxml::get_all_text("/solved",$parser,$style); } } return ''; @@ -1463,10 +1494,10 @@ sub end_solved { } sub start_problemtype { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || - $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { my $mode=lc(&Apache::lonxml::get_param('mode',$parstack,$safeeval)); if (!defined($mode)) { $mode='show'; } my $for=&Apache::lonxml::get_param('for',$parstack,$safeeval); @@ -1475,10 +1506,10 @@ sub start_problemtype { if ($Apache::lonhomework::type eq lc($type)) { $found=1; } } if ($mode eq 'show' && !$found) { - &Apache::lonxml::get_all_text("/problemtype",$parser); + &Apache::lonxml::get_all_text("/problemtype",$parser,$style); } if ($mode eq 'hide' && $found) { - &Apache::lonxml::get_all_text("/problemtype",$parser); + &Apache::lonxml::get_all_text("/problemtype",$parser,$style); } } elsif ($target eq 'edit') { $result .=&Apache::edit::tag_start($target,$token); @@ -1512,12 +1543,12 @@ sub start_startouttext { } sub end_startouttext { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; my $text=''; if ($target eq 'edit') { - $text=&Apache::lonxml::get_all_text("endouttext",$parser); + $text=&Apache::lonxml::get_all_text("endouttext",$parser,$style); $result.=&Apache::edit::start_table($token)."
END '.$name.'
".&mt('Text Block')." ".&mt('Delete:'). &Apache::edit::deletelist($target,$token) @@ -1556,8 +1587,8 @@ sub end_endouttext { } sub delete_startouttext { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; - # my $text=&Apache::lonxml::get_all_text("endouttext",$parser); + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + # my $text=&Apache::lonxml::get_all_text("endouttext",$parser,$style); my $text=$$parser['-1']->get_text("/endouttext"); my $ntoken=$$parser['-1']->get_token(); &Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext"); @@ -1574,7 +1605,7 @@ sub start_simpleeditbutton { my $result=''; if (($env{'form.simple_edit_button'} ne 'off') && ($target eq 'web') && - (&Apache::lonnet::allowed('srm',$env{'request.course.id'}))) { + (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { my $url=$env{'request.noversionuri'}; $url=~s/\?.*$//; my ($symb) = &Apache::lonxml::whichuser();