Diff for /loncom/homework/structuretags.pm between versions 1.332.2.1 and 1.352

version 1.332.2.1, 2006/03/28 18:31:37 version 1.352, 2006/04/20 19:07:09
Line 36  use Apache::File(); Line 36  use Apache::File();
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonxml;  use Apache::lonxml;
   use Apache::lonenc();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag'));      &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag'));
Line 44  BEGIN { Line 45  BEGIN {
 sub start_web {  sub start_web {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $bodytext=&Apache::lonxml::get_all_text("/web",$parser,$style);      my $bodytext=&Apache::lonxml::get_all_text("/web",$parser,$style);
     if ($target eq 'web') {      if ($target eq 'web' || $target eq 'webgrade') {
  return $bodytext;   return $bodytext;
     }      }
     return '';      return '';
Line 68  sub end_tex { Line 69  sub end_tex {
     return '';      return '';
 }  }
   
 sub body_tag_start {  
     my ($target,$background,$bgcolor)=@_;  
     my $body_tag_start='<body onload="'.&Apache::lonmenu::loadevents().'" '.  
  'onunload="'.&Apache::lonmenu::unloadevents().'" ';  
     if ($env{'browser.imagesuppress'} eq 'on') { $background=''; }  
     if ($background) {  
  &Apache::lonxml::extlink($background);  
  $body_tag_start.='background="'.$background.'" ';  
     } else {  
  if (($bgcolor) && ($env{'browser.blackwhite'} ne 'on')) {  
     $body_tag_start.='bgcolor="'.$bgcolor.'" ';  
  } else {  
     $body_tag_start.='bgcolor="#ffffff"';  
  }  
     }  
     if ($env{'browser.fontenhance'} eq 'on') {  
  $body_tag_start.=' style="font-size: x-large;" ';  
     }  
     $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1);  
       
     &Apache::lontexconvert::jsMath_reset();  
     if ($env{'environment.texengine'} eq 'jsMath') {  
  $body_tag_start.=&Apache::lontexconvert::jsMath_header();  
     }  
     return $body_tag_start;  
 }  
   
 sub page_start {  sub page_start {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name,
    $extra_head)=@_;
     my %found;      my %found;
     foreach my $taginside (@$tagstack) {      foreach my $taginside (@$tagstack) {
  foreach my $taglookedfor ('html','body','form') {   foreach my $taglookedfor ('html','body','form') {
Line 104  sub page_start { Line 79  sub page_start {
  }   }
     }      }
   
     my $result;      if ($target eq 'tex') {
     my $head_tag_start;   return
     if (!defined($found{'html'})) {      &Apache::londefdef::start_html($target,$token,$tagstack,
  $result=&Apache::londefdef::start_html($target,$token,$tagstack,     $parstack,$parser,$safeeval);
        $parstack,$parser,$safeeval);      }
  $head_tag_start='<head>'.&Apache::lonmenu::registerurl(undef,$target).  
     &Apache::lonhtmlcommon::htmlareaheaders().      my %body_args;
     &Apache::lonhtmlcommon::spellheader().      if (defined($found{'html'})) {
     &Apache::lonxml::fontsettings();        $body_args{'skip_phases'}{'head'}=1;
       } else {
   
    $extra_head .= &Apache::lonhtmlcommon::spellheader();
   
  my $css_href = &Apache::lonnet::EXT('resource.0.cssfile');   my $css_href = &Apache::lonnet::EXT('resource.0.cssfile');
  if ($css_href =~ /\S/) {   if ($css_href =~ /\S/) {
     &Apache::lonxml::extlink($css_href);      &Apache::lonxml::extlink($css_href);
     $head_tag_start =       $extra_head .= 
  '<link rel="stylesheet" type="text/css" href="'.$css_href.'" />';   '<link rel="stylesheet" type="text/css" href="'.$css_href.'" />';
  }   }
  if ($target eq 'edit') {   if ($target eq 'edit') {
     $head_tag_start.=&Apache::edit::js_change_detection();      $extra_head.=&Apache::edit::js_change_detection().
    "<script type=\"text/javascript\">\n".
    "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".
    &Apache::loncommon::browser_and_searcher_javascript().
                   "\n</script>\n";
  }   }
     }      }
     my $body_tag_start;  
     if (!defined($found{'body'}) && $env{'request.state'} eq 'construct') {      if (defined($found{'body'})) {
  if ($env{'environment.remote'} eq 'off') {   $body_args{'skip_phases'}{'body'}=1;
     if ($target eq 'web' || $target eq 'edit') {      } elsif (!defined($found{'body'}) 
  $body_tag_start=&Apache::loncommon::bodytag();       && $env{'request.state'} eq 'construct') {
  $body_tag_start.=&Apache::lonxml::message_location();   if ($target eq 'web' || $target eq 'edit') {
     }      # no extra args to bodytag
  } else {  
     if ($target eq 'web' || $target eq 'edit') {  
  $body_tag_start=&Apache::loncommon::bodytag(undef,undef,undef,1);  
  $body_tag_start.=&Apache::lonxml::message_location();  
     }  
  }   }
     } elsif (!defined($found{'body'})) {      } elsif (!defined($found{'body'})) {
    my %add_entries;
  my $background=&Apache::lonxml::get_param('background',$parstack,   my $background=&Apache::lonxml::get_param('background',$parstack,
   $safeeval);    $safeeval);
    if ($background ne '' ) {
       $add_entries{'background'} = $background;
    }
   
  my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,   my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack,
        $safeeval);         $safeeval);
  $body_tag_start=&body_tag_start($target,$background,$bgcolor);          if ($bgcolor eq '' ) { $bgcolor = '#FFFFFF'; }
  if ( ($target eq 'web' || $target eq 'webgrade')  
      && $env{'request.state'} ne 'construct') {   $body_args{'bgcolor'}        = $bgcolor;
     my ($symb,undef,undef,undef,$publicuser)=   $body_args{'no_title'}       = 1;
  &Apache::lonxml::whichuser();   $body_args{'force_register'} = 1;
     if ($symb eq '' && !$publicuser) {   $body_args{'add_entries'}    = \%add_entries;
  my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference");      }
  $help=&mt("Browsing resource, all submissions are temporary.")."<br />";  
  $body_tag_start.=$help;      my $page_start = &Apache::loncommon::start_page($name,$extra_head,
     }      \%body_args);
   
       if (!defined($found{'body'}) 
    && $env{'request.state'} ne 'construct'
    && ($target eq 'web' || $target eq 'webgrade')) {
   
    my ($symb,undef,undef,undef,$publicuser)= &Apache::lonxml::whichuser();
    if ($symb eq '' && !$publicuser) {
       my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference");
       $help=&mt("Browsing resource, all submissions are temporary.")."<br />";
       $page_start .= $help;
  }   }
  $body_tag_start.=&Apache::lonxml::message_location();  
     }      }
   
       if (!defined($found{'body'})) {
    $page_start .= &Apache::lonxml::message_location();
       }
       
     my $form_tag_start;      my $form_tag_start;
     if (!defined($found{'form'})) {      if (!defined($found{'form'})) {
  $form_tag_start='<form name="lonhomework" enctype="multipart/form-data" method="POST" action="';   $form_tag_start='<form name="lonhomework" enctype="multipart/form-data" method="post" action="';
  my $uri=$env{'request.uri'};   my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
  if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); }  
  $form_tag_start.=$uri.'" ';   $form_tag_start.=$uri.'" ';
  if ($target eq 'edit') {   if ($target eq 'edit') {
     $form_tag_start.=&Apache::edit::form_change_detection();      $form_tag_start.=&Apache::edit::form_change_detection();
  }   }
  $form_tag_start.='>';   $form_tag_start.='>';
     }      }
     return ($result,$head_tag_start,$body_tag_start,$form_tag_start);      return ($page_start,$form_tag_start);
 }  }
   
 #use Time::HiRes();  #use Time::HiRes();
Line 192  sub setup_rndseed { Line 188  sub setup_rndseed {
     my ($safeeval)=@_;      my ($safeeval)=@_;
     my $rndseed;      my $rndseed;
     my ($symb)=&Apache::lonxml::whichuser();      my ($symb)=&Apache::lonxml::whichuser();
     if ($env{'request.state'} eq "construct" || $symb eq '' ||      if ($env{'request.state'} eq "construct" 
           $Apache::lonhomework::history{'resource.CODE'}) {   || $symb eq '' 
    || $Apache::lonhomework::type eq 'practice'
    || $Apache::lonhomework::history{'resource.CODE'}) {
  &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},   &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
  ['rndseed']);   ['rndseed']);
  $rndseed=$env{'form.rndseed'};   $rndseed=$env{'form.rndseed'};
Line 250  sub problem_edit_header { Line 248  sub problem_edit_header {
 sub problem_edit_footer {  sub problem_edit_footer {
     return '</td></tr></table><br /><input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" />      return '</td></tr></table><br /><input type="submit" name="submit" value="'.&mt('Submit Changes and Edit').'" />
     <input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />'.      <input type="submit" name="submit" value="'.&mt('Submit Changes and View').'" />'.
     &Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields).      &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()).
     "\n</form>\n".&Apache::loncommon::endbodytag()."\n</html>";      "\n</form>\n".&Apache::loncommon::end_page();
 }  }
   
 sub option {  sub option {
Line 336  sub initialize_storage { Line 334  sub initialize_storage {
     %Apache::lonhomework::results=();      %Apache::lonhomework::results=();
     %Apache::lonhomework::history=();      %Apache::lonhomework::history=();
     my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();      my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
     if ($env{'request.state'} eq 'construct' || $symb eq '') {      if ($env{'request.state'} eq 'construct' 
    || $symb eq ''
    || $Apache::lonhomework::type eq 'practice') {
   
    my $namespace = $symb || $env{'request.uri'};
    if ($env{'form.resetdata'} eq &mt('Reset Submissions') ||
       $env{'form.resetdata'} eq &mt('New Problem Variation') ||
       $env{'form.newrandomization'} eq &mt('New Randomization')) {
       &Apache::lonnet::tmpreset($namespace,'',$domain,$name);
       &Apache::lonxml::debug("Attempt reset");
    }
  %Apache::lonhomework::history=   %Apache::lonhomework::history=
     &Apache::lonnet::tmprestore($env{'request.uri'},'',$domain,$name);      &Apache::lonnet::tmprestore($namespace,'',$domain,$name);
  my ($temp)=keys %Apache::lonhomework::history ;   my ($temp)=keys %Apache::lonhomework::history ;
  &Apache::lonxml::debug("Return message of $temp");   &Apache::lonxml::debug("Return message of $temp");
     } else {      } else {
Line 362  sub finalize_storage { Line 370  sub finalize_storage {
  my @remove = grep(/^INTERNAL_/,keys(%Apache::lonhomework::results));   my @remove = grep(/^INTERNAL_/,keys(%Apache::lonhomework::results));
  delete(@Apache::lonhomework::results{@remove});   delete(@Apache::lonhomework::results{@remove});
  my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();   my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
  if ($env{'request.state'} eq 'construct' || $symb eq '') {   if ($env{'request.state'} eq 'construct' 
       || $symb eq ''
       || $Apache::lonhomework::type eq 'practice') {
       my $namespace = $symb || $env{'request.uri'};
     $Apache::lonhomework::results{'rndseed'}=$env{'form.rndseed'};      $Apache::lonhomework::results{'rndseed'}=$env{'form.rndseed'};
     $result=&Apache::lonnet::tmpstore(\%Apache::lonhomework::results,      $result=&Apache::lonnet::tmpstore(\%Apache::lonhomework::results,
  $env{'request.uri'},'',$domain,$name);        $namespace,'',$domain,$name);
     &Apache::lonxml::debug('Construct Store return message:'.$result);      &Apache::lonxml::debug('Construct Store return message:'.$result);
  } else {   } else {
     $result=&Apache::lonnet::cstore(\%Apache::lonhomework::results,      $result=&Apache::lonnet::cstore(\%Apache::lonhomework::results,
Line 429  sub checkout_msg { Line 440  sub checkout_msg {
                 'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.',                  '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 for Viewing',
  'checkout?'=>'Check out Exam?');   'checkout?'=>'Check out Exam?');
       my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     return (<<ENDCHECKOUT);      return (<<ENDCHECKOUT);
 <h2>$lt{'resource'}</h2>  <h2>$lt{'resource'}</h2>
     <p>$lt{'id_expln'}</p>      <p>$lt{'id_expln'}</p>
 <font color="red">  <font color="red">
 <p>$lt{'warning'}</p>  <p>$lt{'warning'}</p>
 </font>  </font>
 <form name="checkout" method="POST" action="$env{'request.uri'}">  <form name="checkout" method="POST" action="$uri">
 <input type="hidden" name="doescheckout" value="yes" />  <input type="hidden" name="doescheckout" value="yes" />
 <input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" />  <input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" />
 </form>  </form>
Line 447  sub firstaccess_msg { Line 459  sub firstaccess_msg {
     my ($map)=&Apache::lonnet::decode_symb($symb);      my ($map)=&Apache::lonnet::decode_symb($symb);
     my $foldertitle=&Apache::lonnet::gettitle($map);      my $foldertitle=&Apache::lonnet::gettitle($map);
     &Apache::lonxml::debug("map is $map title is $foldertitle");      &Apache::lonxml::debug("map is $map title is $foldertitle");
       my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     return (<<ENDCHECKOUT);      return (<<ENDCHECKOUT);
 <h2>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".</h2>  <h2>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".</h2>
 <form name="markaccess" method="POST" action="$env{'request.uri'}">  <form name="markaccess" method="POST" action="$uri">
 <input type="hidden" name="markaccess" value="yes" />  <input type="hidden" name="markaccess" value="yes" />
 <input type="button" name="accessbutton" value="Show Resource" onClick="javascript:if (confirm('Start Timer?')) { document.markaccess.submit(); }" />  <input type="button" name="accessbutton" value="Show Resource" onClick="javascript:if (confirm('Start Timer?')) { document.markaccess.submit(); }" />
 </form>  </form>
Line 583  sub start_problem { Line 596  sub start_problem {
     my $status;      my $status;
     my $accessmsg;      my $accessmsg;
   
     #should get back a <html> or the neccesary stuff to start XML/MathML      my $name= &get_resource_name($parstack,$safeeval);
     my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=      my ($result,$form_tag_start);
  &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);      if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex') {
    ($result,$form_tag_start) =
       &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,
    $name);
       }
   
     if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';}      if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';}
   
     if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval); }      if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval); }
Line 600  sub start_problem { Line 618  sub start_problem {
  $Apache::lonhomework::history{"resource.0.outtoken"}=   $Apache::lonhomework::history{"resource.0.outtoken"}=
     $token;      $token;
     }      }
     $body_tag_start.=&Apache::lonxml::printtokenheader($target,$token);      $result.=&Apache::lonxml::printtokenheader($target,$token);
  }   }
  if ($env{'form.markaccess'}) {   if ($env{'form.markaccess'}) {
     &Apache::lonnet::set_first_access('map');      &Apache::lonnet::set_first_access('map');
Line 608  sub start_problem { Line 626  sub start_problem {
  #handle rand seed in construction space   #handle rand seed in construction space
  my $rndseed=&setup_rndseed($safeeval);   my $rndseed=&setup_rndseed($safeeval);
  my ($symb)=&Apache::lonxml::whichuser();   my ($symb)=&Apache::lonxml::whichuser();
  if ($env{'request.state'} ne "construct" && $symb eq '') {   if ($env{'request.state'} ne "construct" && 
       ($symb eq '' || $Apache::lonhomework::type eq 'practice')) {
     $form_tag_start.='<input type="hidden" name="rndseed" value="'.      $form_tag_start.='<input type="hidden" name="rndseed" value="'.
  $rndseed.'" />'.   $rndseed.'" />'.
     '<input type="submit" name="resetdata"      '<input type="submit" name="resetdata"
                              value="'.&mt('New Problem Variation').'" />'.                               value="'.&mt('New Problem Variation').'" />';
       if (exists($env{'form.username'})) {
    $form_tag_start.=
     '<input type="hidden" name="username"      '<input type="hidden" name="username"
                              value="'.$env{'form.username'}.'" />';                               value="'.$env{'form.username'}.'" />';
     if ($env{'user.adv'}) {      }
       if ($env{'request.role.adv'}) {
  $form_tag_start.=   $form_tag_start.=
     ' <label><input type="checkbox" name="showallfoils" ';      ' <label><input type="checkbox" name="showallfoils" ';
  if (defined($env{'form.showallfoils'})) {   if (defined($env{'form.showallfoils'})) {
Line 646  sub start_problem { Line 668  sub start_problem {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
        $style);         $style);
     if ( $target eq "web" ) {      if ( $target eq "web" ) {
  $result.= $head_tag_start.'</head>';   my $msg;
  my $msg=$body_tag_start;  
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';      $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';
  } elsif ($status ne 'NOT_YET_VIEWED') {   } elsif ($status ne 'NOT_YET_VIEWED') {
Line 656  sub start_problem { Line 677  sub start_problem {
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {   if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
     $msg.='The problem '.$accessmsg;      $msg.='The problem '.$accessmsg;
  } elsif ($status eq 'UNCHECKEDOUT') {   } elsif ($status eq 'UNCHECKEDOUT') {
     $msg.=&checkout_msg;      $msg.=&checkout_msg();
  } elsif ($status eq 'NOT_YET_VIEWED') {   } elsif ($status eq 'NOT_YET_VIEWED') {
     $msg.=&firstaccess_msg($accessmsg,$symb);      $msg.=&firstaccess_msg($accessmsg,$symb);
  } elsif ($status eq 'NOT_IN_A_SLOT') {   } elsif ($status eq 'NOT_IN_A_SLOT') {
Line 678  sub start_problem { Line 699  sub start_problem {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
        $style);         $style);
     if ($target eq 'web') {      if ($target eq 'web') {
  $result .= $head_tag_start.'</head>';  
  $result .= $body_tag_start;  
  $result .= &Apache::bridgetask::proctor_validation_screen();   $result .= &Apache::bridgetask::proctor_validation_screen();
     } elsif ($target eq 'grade') {      } elsif ($target eq 'grade') {
  &Apache::bridgetask::proctor_check_auth($slot_name,$slot,   &Apache::bridgetask::proctor_check_auth($slot_name,$slot,
  'problem');   'problem');
     }      }
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
     my $name= &get_resource_name($parstack,$safeeval);      $result.="\n $form_tag_start".
     $result.="$head_tag_start<title>$name</title></head>  
               $body_tag_start \n $form_tag_start".  
       '<input type="hidden" name="submitted" value="yes" />';        '<input type="hidden" name="submitted" value="yes" />';
     # create a page header and exit      # create a page header and exit
     if ($env{'request.state'} eq "construct") {      if ($env{'request.state'} eq "construct") {
Line 706  sub start_problem { Line 723  sub start_problem {
   
  }   }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.   $result .= $form_tag_start.&problem_edit_header();
     &problem_edit_header();  
  $Apache::lonxml::warnings_error_header=   $Apache::lonxml::warnings_error_header=
     &mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />";      &mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")."<br />";
  my $temp=&Apache::edit::insertlist($target,$token);   my $temp=&Apache::edit::insertlist($target,$token);
Line 849  sub end_problem { Line 865  sub end_problem {
     if ($target ne 'tex' &&      if ($target ne 'tex' &&
  $env{'form.answer_output_mode'} ne 'tex') {   $env{'form.answer_output_mode'} ne 'tex') {
  $result.="</form>";   $result.="</form>";
  $result.=&Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields);   $result.= &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields());
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
  $result.=&Apache::lonxml::xmlend().'</html>';   $result.= &Apache::loncommon::end_page({'discussion' => 1});
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $endminipage = '';   my $endminipage = '';
  if (not $env{'form.problem_split'}=~/yes/) {   if (not $env{'form.problem_split'}=~/yes/) {
Line 860  sub end_problem { Line 876  sub end_problem {
  }   }
                 if ($env{'form.print_discussions'} eq 'yes') {                  if ($env{'form.print_discussions'} eq 'yes') {
     $result.=&Apache::lonxml::xmlend($target,$parser);      $result.=&Apache::lonxml::xmlend($target,$parser);
     $result=~s/<\/html>//;  
  } else {   } else {
     $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';      $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';
     if (not $env{'request.symb'} =~ m/\.page_/) {      if (not $env{'request.symb'} =~ m/\.page_/) {
Line 877  sub end_problem { Line 892  sub end_problem {
  }   }
  if ($target eq 'answer' && ($env{'request.state'} eq 'construct')   if ($target eq 'answer' && ($env{'request.state'} eq 'construct')
     && $env{'form.answer_output_mode'} ne 'tex') {      && $env{'form.answer_output_mode'} ne 'tex') {
     $result.=&Apache::lonxml::xmlend().'</html>';      $result.=&Apache::loncommon::end_page({'discussion' => 1});
                         # normally we get it from above, but in CSTR                          # normally we get it from above, but in CSTR
                         # we always show answer mode too.                          # we always show answer mode too.
  }   }
Line 908  sub end_problem { Line 923  sub end_problem {
   
 sub start_library {  sub start_library {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my ($result,$head_tag_start,$body_tag_start,$form_tag_start);      my ($result,$form_tag_start);
     if ($$tagstack[0] eq 'library') {      if ($$tagstack[0] eq 'library') {
  &init_problem_globals('library');   &init_problem_globals('library');
  $Apache::lonhomework::type='problem';   $Apache::lonhomework::type='problem';
     }      }
     if ($target eq 'edit') {      if ($target eq 'edit') {
  ($result,$head_tag_start,$body_tag_start,$form_tag_start)=   ($result,$form_tag_start)=
     &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);      &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,
  $result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.   'Edit');
     &problem_edit_header();   $result.=$form_tag_start.&problem_edit_header();
  my $temp=&Apache::edit::insertlist($target,$token);   my $temp=&Apache::edit::insertlist($target,$token);
  $result.=$temp;   $result.=$temp;
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
  $result=$token->[4];   $result=$token->[4];
  $result.=&Apache::edit::handle_insert();   $result.=&Apache::edit::handle_insert();
     } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&      } elsif (($target eq 'web' || $target eq 'webgrade')
      $env{'request.state'} eq "construct" ) {       && $$tagstack[0] eq 'library' 
  ($result,$head_tag_start,$body_tag_start,$form_tag_start)=       && $env{'request.state'} eq "construct" ) {
     &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);  
  my $name=&get_resource_name($parstack,$safeeval);   my $name=&get_resource_name($parstack,$safeeval);
    ($result,$form_tag_start)=
       &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,
    $name);
  my $rndseed=&setup_rndseed($safeeval);   my $rndseed=&setup_rndseed($safeeval);
  $result.="$head_tag_start<title>$name</title></head>   $result.=" \n $form_tag_start".
               $body_tag_start \n $form_tag_start".  
   '<input type="hidden" name="submitted" value="yes" />';    '<input type="hidden" name="submitted" value="yes" />';
  $result.=&problem_web_to_edit_header($rndseed);   $result.=&problem_web_to_edit_header($rndseed);
     }      }
Line 944  sub end_library { Line 960  sub end_library {
  $result=&problem_edit_footer();   $result=&problem_edit_footer();
     } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&      } elsif ($target eq 'web' && $$tagstack[0] ne 'problem' &&
      $env{'request.state'} eq "construct") {       $env{'request.state'} eq "construct") {
  $result.='</form>'.&Apache::loncommon::endbodytag().   $result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1});
     &Apache::lonxml::xmlend();  
     }      }
     if ($$tagstack[0] eq 'library') { &reset_problem_globals('library') };      if ($$tagstack[0] eq 'library') { &reset_problem_globals('library') };
     return $result;      return $result;
Line 980  sub start_block { Line 995  sub start_block {
   
     my $result;      my $result;
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer'  ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $code = $token->[2]->{'condition'};   my $code = $token->[2]->{'condition'};
  if (defined($code)) {   if (defined($code)) {
     if (!$Apache::lonxml::default_homework_loaded) {      if (!$Apache::lonxml::default_homework_loaded) {
Line 1024  sub start_languageblock { Line 1039  sub start_languageblock {
   
     my $result;      my $result;
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $include = $token->[2]->{'include'};   my $include = $token->[2]->{'include'};
  my $exclude = $token->[2]->{'exclude'};   my $exclude = $token->[2]->{'exclude'};
         my %languages=&Apache::loncommon::display_languages();          my %languages=&Apache::loncommon::display_languages();
Line 1077  sub start_instructorcomment { Line 1092  sub start_instructorcomment {
   
     my $result;      my $result;
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
         $result=($env{'request.role'}=~/^(in|cc|au|ca|li)/);          $result=($env{'request.role'}=~/^(in|cc|au|ca|li)/);
  if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) {   if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) {
     my $skip=&Apache::lonxml::get_all_text("/instructorcomment",      my $skip=&Apache::lonxml::get_all_text("/instructorcomment",
Line 1106  sub start_while { Line 1121  sub start_while {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
     my $result;      my $result;
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $code = $token->[2]->{'condition'};   my $code = $token->[2]->{'condition'};
   
  push( @Apache::structuretags::whileconds, $code);   push( @Apache::structuretags::whileconds, $code);
Line 1139  sub end_while { Line 1154  sub end_while {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;      my $result;
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $code = pop(@Apache::structuretags::whileconds);   my $code = pop(@Apache::structuretags::whileconds);
  my $bodytext = pop(@Apache::structuretags::whilebody);   my $bodytext = pop(@Apache::structuretags::whilebody);
  my $line = pop(@Apache::structuretags::whileline);   my $line = pop(@Apache::structuretags::whileline);
Line 1173  sub end_while { Line 1188  sub end_while {
 sub start_randomlist {  sub start_randomlist {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;      my $result;
     if ($target eq 'answer' || $target eq 'grade' || $target eq 'web' ||      if ($target eq 'answer' || $target eq 'grade'   || $target eq 'web' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex'    || $target eq 'analyze' || $target eq 'webgrade') {
  my $body= &Apache::lonxml::get_all_text("/randomlist",$parser);   my $body= &Apache::lonxml::get_all_text("/randomlist",$parser);
  my $b_parser= HTML::LCParser->new(\$body);   my $b_parser= HTML::LCParser->new(\$body);
  $b_parser->xml_mode(1);   $b_parser->xml_mode(1);
Line 1414  sub end_part { Line 1429  sub end_part {
   
 sub start_preduedate {  sub start_preduedate {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') {      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']);   &Apache::lonxml::debug("State in preduedate is ". $Apache::inputtags::status['-1']);
  if (!$Apache::lonhomework::scantronmode &&   if (!$Apache::lonhomework::scantronmode &&
     $Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&      $Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&
Line 1432  sub end_preduedate { Line 1448  sub end_preduedate {
   
 sub start_postanswerdate {  sub start_postanswerdate {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target eq 'web' || $target eq 'grade') {      if ($target eq 'web' || $target eq 'grade' || $target eq 'webgrade') {
  if ($Apache::lonhomework::scantronmode ||   if ($Apache::lonhomework::scantronmode ||
     $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {      $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') {
     &Apache::lonxml::get_all_text("/postanswerdate",$parser,$style);      &Apache::lonxml::get_all_text("/postanswerdate",$parser,$style);
Line 1450  sub end_postanswerdate { Line 1466  sub end_postanswerdate {
 sub start_notsolved {  sub start_notsolved {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      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"};   my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};
  &Apache::lonxml::debug("not solved has :$gradestatus:");   &Apache::lonxml::debug("not solved has :$gradestatus:");
  if ($gradestatus =~ /^correct/ &&   if ($gradestatus =~ /^correct/ &&
Line 1486  sub end_solved { Line 1502  sub end_solved {
 sub start_problemtype {  sub start_problemtype {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;      my $result;
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
  my $mode=lc(&Apache::lonxml::get_param('mode',$parstack,$safeeval));   my $mode=lc(&Apache::lonxml::get_param('mode',$parstack,$safeeval));
  if (!defined($mode)) { $mode='show'; }   if (!defined($mode)) { $mode='show'; }
  my $for=&Apache::lonxml::get_param('for',$parstack,$safeeval);   my $for=&Apache::lonxml::get_param('for',$parstack,$safeeval);

Removed from v.1.332.2.1  
changed lines
  Added in v.1.352


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>