Diff for /loncom/homework/structuretags.pm between versions 1.326 and 1.347

version 1.326, 2005/12/01 18:46:31 version 1.347, 2006/04/18 22:36:23
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;  
     my $head_tag_start;      if ($target eq 'tex') {
     if (!defined($found{'html'})) {   return
  $result=&Apache::londefdef::start_html($target,$token,$tagstack,      &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().  
     &Apache::lonhtmlcommon::spellheader().      my %body_args;
     &Apache::lonxml::fontsettings();           if (defined($found{'html'})) {
     }   $body_args{'skip_phases'}{'head'}=1;
     my $body_tag_start;      } else {
     if (!defined($found{'body'}) && $env{'request.state'} eq 'construct') {  
  if ($env{'environment.remote'} eq 'off') {   $extra_head .= &Apache::lonhtmlcommon::spellheader();
     if ($target eq 'web' || $target eq 'edit') {  
  $body_tag_start=&Apache::loncommon::bodytag();   my $css_href = &Apache::lonnet::EXT('resource.0.cssfile');
  $body_tag_start.=&Apache::lonxml::message_location();   if ($css_href =~ /\S/) {
     }      &Apache::lonxml::extlink($css_href);
  } else {      $extra_head .= 
     if ($target eq 'web' || $target eq 'edit') {   '<link rel="stylesheet" type="text/css" href="'.$css_href.'" />';
  $body_tag_start=&Apache::loncommon::bodytag(undef,undef,undef,1);   }
  $body_tag_start.=&Apache::lonxml::message_location();   if ($target eq 'edit') {
     }      $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";
    }
       }
   
       if (defined($found{'body'})) {
    $body_args{'skip_phases'}{'body'}=1;
       } elsif (!defined($found{'body'}) 
        && $env{'request.state'} eq 'construct') {
    if ($target eq 'web' || $target eq 'edit') {
       # no extra args to bodytag
  }   }
     } 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') {
       $form_tag_start.=&Apache::edit::form_change_detection();
    }
    $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 179  sub setup_rndseed { Line 190  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 225  sub problem_edit_header { Line 238  sub problem_edit_header {
  &Apache::structuretags::remember_problem_state().'   &Apache::structuretags::remember_problem_state().'
        <input type="hidden" name="problemmode" value="'.&mt('Edit').'" />         <input type="hidden" name="problemmode" value="'.&mt('Edit').'" />
        <input type="submit" name="problemmode" accesskey="d" value="'.&mt('Discard Edits and View').'" />         <input type="submit" name="problemmode" accesskey="d" value="'.&mt('Discard Edits and View').'" />
        <input type="submit" name="problemmode" accesskey="x" value="'.&mt('EditXML').'" />         <input '.&Apache::edit::submit_ask_anyway().' type="submit" name="problemmode" accesskey="x" value="'.&mt('EditXML').'" />
        <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> <hr />         <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> <hr />
        <input type="submit" name="submit" accesskey="s" value="'.&mt('Submit Changes and Edit').'" />         <input type="submit" name="submit" accesskey="s" value="'.&mt('Submit Changes and Edit').'" />
        <input type="submit" name="submit" accesskey="v" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'.         <input type="submit" name="submit" accesskey="v" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'.
Line 237  sub problem_edit_header { Line 250  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::lonhtmcommon::get_htmlareafields()).
     "\n</form>\n".&Apache::loncommon::endbodytag()."\n</html>";      "\n</form>\n".&Apache::loncommon::end_page();
 }  }
   
 sub option {  sub option {
Line 323  sub initialize_storage { Line 336  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 349  sub finalize_storage { Line 372  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 549  sub start_problem { Line 575  sub start_problem {
     defined($env{'form.problemtype'})) {      defined($env{'form.problemtype'})) {
     $Apache::lonhomework::type=$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 '' ) {      if ($Apache::lonhomework::type eq '' ) {
  my $uri=$env{'request.uri'};   my $uri=$env{'request.uri'};
Line 570  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);   &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 587  sub start_problem { Line 614  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 595  sub start_problem { Line 622  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 633  sub start_problem { Line 664  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 643  sub start_problem { Line 673  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 651  sub start_problem { Line 681  sub start_problem {
  }   }
  $result.=$msg.'<br />';   $result.=$msg.'<br />';
     } elsif ($target eq 'tex') {      } 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') {   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 ';      $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
  } else {   } else {
Line 662  sub start_problem { Line 695  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 690  sub start_problem { Line 719  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 712  sub end_problem { Line 740  sub end_problem {
   
     if (!$Apache::lonxml::metamode) {      if (!$Apache::lonxml::metamode) {
  $result = &Apache::lonxml::endredirection(); #started in &start_problem   $result = &Apache::lonxml::endredirection(); #started in &start_problem
    $Apache::lonxml::post_evaluate=0;
     }      }
   
     if ($target eq 'tex') {      if ($target eq 'tex') {
Line 832  sub end_problem { Line 861  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::lonhtmcommon::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 889  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 891  sub end_problem { Line 920  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 927  sub end_library { Line 957  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::lonxml::xmlend();
     &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 963  sub start_block { Line 992  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 1007  sub start_languageblock { Line 1036  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 1060  sub start_instructorcomment { Line 1089  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 1089  sub start_while { Line 1118  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 1122  sub end_while { Line 1151  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 1156  sub end_while { Line 1185  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,$style);   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);
  $b_parser->marked_sections(1);   $b_parser->marked_sections(1);
Line 1364  sub end_part { Line 1393  sub end_part {
     my $result;      my $result;
     if (!$Apache::lonxml::metamode) {      if (!$Apache::lonxml::metamode) {
  $result = &Apache::lonxml::endredirection(); # started in &start_part   $result = &Apache::lonxml::endredirection(); # started in &start_part
    $Apache::lonxml::post_evaluate=0;
     }      }
     if ($target eq 'grade') {      if ($target eq 'grade') {
  if (($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode) &&   if (($status eq 'CAN_ANSWER' || $Apache::lonhomework::scantronmode) &&
Line 1396  sub end_part { Line 1426  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 1414  sub end_preduedate { Line 1445  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 1432  sub end_postanswerdate { Line 1463  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 1468  sub end_solved { Line 1499  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);
Line 1577  sub start_simpleeditbutton { Line 1608  sub start_simpleeditbutton {
     my $result='';      my $result='';
     if (($env{'form.simple_edit_button'} ne 'off') &&      if (($env{'form.simple_edit_button'} ne 'off') &&
  ($target eq 'web') &&   ($target eq 'web') &&
         (&Apache::lonnet::allowed('srm',$env{'request.course.id'}))) {          (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
         my $url=$env{'request.noversionuri'};          my $url=$env{'request.noversionuri'};
         $url=~s/\?.*$//;          $url=~s/\?.*$//;
  my ($symb) = &Apache::lonxml::whichuser();   my ($symb) = &Apache::lonxml::whichuser();

Removed from v.1.326  
changed lines
  Added in v.1.347


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