Diff for /loncom/homework/structuretags.pm between versions 1.260.2.1 and 1.281

version 1.260.2.1, 2004/08/13 18:51:33 version 1.281, 2005/03/01 03:21:58
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 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 58  sub start_tex { Line 58  sub start_tex {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result='';      my $result='';
     my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);      my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser);
     &Apache::lonnet::logthis("Hrrm? $bodytext --");  
     if ($target eq 'tex') {      if ($target eq 'tex') {
  return $bodytext.' ';   return $bodytext.' ';
     }      }
     return $result;      return $result;;
 }  }
   
 sub end_tex {  sub end_tex {
Line 84  sub page_start { Line 83  sub page_start {
  $result=&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).   $head_tag_start='<head>'.&Apache::lonmenu::registerurl(undef,$target).
     &Apache::lonhtmlcommon::htmlareaheaders();      &Apache::lonhtmlcommon::htmlareaheaders().
       &Apache::lonhtmlcommon::spellheader().
       &Apache::lonxml::fontsettings();     
     }      }
     my $body_tag_start;      my $body_tag_start;
     if (!defined($found{'body'})) {      if (!defined($found{'body'}) && $ENV{'request.state'} eq 'construct'
  $body_tag_start='<body onLoad="'.&Apache::lonmenu::loadevents().'" '.   && $ENV{'environment.remote'} eq 'off') {
     'onUnload="'.&Apache::lonmenu::unloadevents().'" ';   $body_tag_start=&Apache::loncommon::bodytag();
    $body_tag_start.=&Apache::lonxml::message_location();
       } elsif (!defined($found{'body'})) {
    $body_tag_start='<body onload="'.&Apache::lonmenu::loadevents().'" '.
       'onunload="'.&Apache::lonmenu::unloadevents().'" ';
  my $background=&Apache::lonxml::get_param('background',$parstack,   my $background=&Apache::lonxml::get_param('background',$parstack,
   $safeeval);    $safeeval);
  if ($ENV{'browser.imagesuppress'} eq 'on') { $background=''; }   if ($ENV{'browser.imagesuppress'} eq 'on') { $background=''; }
Line 110  sub page_start { Line 115  sub page_start {
     $body_tag_start.=' style="font-size: x-large;" ';      $body_tag_start.=' style="font-size: x-large;" ';
  }   }
  $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1);   $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1);
    if ($ENV{'environment.texengine'} eq 'jsMath') {
       $body_tag_start.='<script type="text/javascript">
                        function NoFontMessage () {}
                      </script>'."\n".
          '<script src="/adm/jsMath/jsMath.js"></script>'."\n";
    }
  if ($target eq 'web' && $ENV{'request.state'} ne 'construct') {   if ($target eq 'web' && $ENV{'request.state'} ne 'construct') {
     my ($symb,undef,undef,undef,$publicuser)=      my ($symb,undef,undef,undef,$publicuser)=
  &Apache::lonxml::whichuser();   &Apache::lonxml::whichuser();
Line 123  sub page_start { Line 134  sub page_start {
     }      }
     my $form_tag_start;      my $form_tag_start;
     if (!defined($found{'form'})) {      if (!defined($found{'form'})) {
  $form_tag_start='<form name="lonhomework" method="POST" action="'.   $form_tag_start='<form name="lonhomework" enctype="multipart/form-data" method="POST" action="';
     $ENV{'request.uri'}.'">';   my $uri=$ENV{'request.uri'};
    if ($ENV{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); }
    $form_tag_start.=$uri.'">';
     }      }
     return ($result,$head_tag_start,$body_tag_start,$form_tag_start);      return ($result,$head_tag_start,$body_tag_start,$form_tag_start);
 }  }
Line 135  sub get_resource_name { Line 148  sub get_resource_name {
     if (defined($Apache::lonhomework::name)) {      if (defined($Apache::lonhomework::name)) {
  return $Apache::lonhomework::name;   return $Apache::lonhomework::name;
     }      }
     my $name=&Apache::lonnet::gettitle();      my ($symb)=&Apache::lonxml::whichuser();
       my $name=&Apache::lonnet::gettitle($symb);
     if ($name eq '') {      if ($name eq '') {
  $name=&Apache::lonnet::EXT('resource.title');   $name=&Apache::lonnet::EXT('resource.title');
  if ($name eq 'con_lost') { $name = ''; }   if ($name eq 'con_lost') { $name = ''; }
Line 184  sub setup_rndseed { Line 198  sub setup_rndseed {
     return $rndseed;      return $rndseed;
 }  }
   
   sub remember_problem_state {
       return '
          <input type="hidden" name="problemstate" value="'.$ENV{'form.problemstate'}.'" />
          <input type="hidden" name="problemtype" value="'.$ENV{'form.problemtype'}.'" />
          <input type="hidden" name="problemstatus" value="'.$ENV{'form.problemstatus'}.'" />';
   }
   
 sub problem_edit_header {  sub problem_edit_header {
     return '<input type="hidden" name="submitted" value="edit" />      return '<input type="hidden" name="submitted" value="edit" />'.
    &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 type="submit" name="problemmode" accesskey="x" value="'.&mt('EditXML').'" />
Line 201  sub problem_edit_footer { Line 223  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::lonxml::htmlareafields).
     "\n</form>\n</body>\n</html>";      "\n</form>\n".&Apache::loncommon::endbodytag()."\n</html>";
 }  }
   
 sub option {  sub option {
Line 222  sub problem_web_to_edit_header { Line 244  sub problem_web_to_edit_header {
              <input type="submit" name="newrandomization" accesskey="a" value="'.&mt('New Randomization').'" />               <input type="submit" name="newrandomization" accesskey="a" value="'.&mt('New Randomization').'" />
              <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />               <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />
              <nobr><input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" />               <nobr><input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" />
               <input type="text" name="rndseed" width="10" value="'.                <input type="text" name="rndseed" size="10" value="'.
        $rndseed.'"         $rndseed.'"
            onChange="javascript:document.lonhomework.changerandseed.click()" /></nobr>             onchange="javascript:document.lonhomework.changerandseed.click()" /></nobr>
              <input type="checkbox" name="showallfoils" ';               <label><input type="checkbox" name="showallfoils" ';
     if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; }      if (defined($ENV{'form.showallfoils'})) { $result.='checked="on"'; }
     $result.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').      $result.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').
  &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems').   &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems').
  '<hr />';   '</label><hr />';
     $result.="      $result.="
 <nobr>  <nobr>
 Problem Status:  Problem Status:
 <select name='problemstate'>  <select name='problemstate'>
   <option name=''></option>    <option value=''></option>
   ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>    ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>
   ".&option('CAN_ANSWER'           ,'problemstate').&mt("Answerable")."</option>    ".&option('CAN_ANSWER'           ,'problemstate').&mt("Answerable")."</option>
   ".&option('CANNOT_ANSWER_tries'  ,'problemstate').&mt("Open with full tries")."</option>    ".&option('CANNOT_ANSWER_tries'  ,'problemstate').&mt("Open with full tries")."</option>
Line 245  Problem Status: Line 267  Problem Status:
 <nobr>  <nobr>
 Problem Type:  Problem Type:
 <select name='problemtype'>  <select name='problemtype'>
   <option name=''></option>    <option value=''></option>
   ".&option('exam'   ,'problemtype').&mt("Exam Problem")."</option>    ".&option('exam'   ,'problemtype').&mt("Exam Problem")."</option>
   ".&option('problem','problemtype').&mt("Homework problem")."</option>    ".&option('problem','problemtype').&mt("Homework problem")."</option>
   ".&option('survey' ,'problemtype').&mt("Survey Question")."</option>    ".&option('survey' ,'problemtype').&mt("Survey Question")."</option>
Line 354  sub init_problem_globals { Line 376  sub init_problem_globals {
     if ($type eq 'problem') {      if ($type eq 'problem') {
  $Apache::inputtags::part='0';   $Apache::inputtags::part='0';
  @Apache::inputtags::partlist=('0');   @Apache::inputtags::partlist=('0');
    $Apache::lonhomework::problemstatus=&get_problem_status('0');
  $Apache::lonhomework::problemstatus=&get_problem_status('0')   $Apache::lonhomework::ignore_response_errors=0;
     } else {      } elsif ($type eq 'library') {
  $Apache::inputtags::part='';   $Apache::inputtags::part='';
  @Apache::inputtags::partlist=();   @Apache::inputtags::partlist=();
  $Apache::lonhomework::problemstatus='';   $Apache::lonhomework::problemstatus='';
    $Apache::lonhomework::ignore_response_errors=1;
     }      }
     @Apache::inputtags::responselist = ();      @Apache::inputtags::responselist = ();
     @Apache::inputtags::importlist = ();      @Apache::inputtags::importlist = ();
Line 395  sub set_problem_state { Line 418  sub set_problem_state {
   
 sub get_problem_status {  sub get_problem_status {
     my ($part)=@_;      my ($part)=@_;
     my $problem_status=&Apache::lonnet::EXT("resource.$part.problemstatus");      my $problem_status;
     &Apache::lonxml::debug("problem status for $part is $problem_status");  
     &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'});  
     if ($ENV{'request.state'} eq 'construct' &&      if ($ENV{'request.state'} eq 'construct' &&
  defined($ENV{'form.problemstatus'})) {   defined($ENV{'form.problemstatus'})) {
  $problem_status=$ENV{'form.problemstatus'};   $problem_status=$ENV{'form.problemstatus'};
       } else {
    $problem_status=&Apache::lonnet::EXT("resource.$part.problemstatus");
    &Apache::lonxml::debug("problem status for $part is $problem_status");
    &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'});
     }      }
     return $problem_status;      return $problem_status;
 }  }
Line 484  sub start_problem { Line 509  sub start_problem {
     '<input type="submit" name="resetdata"      '<input type="submit" name="resetdata"
                              value="'.&mt('New Problem Variation').'" />'.                               value="'.&mt('New Problem Variation').'" />'.
     '<input type="hidden" name="username"      '<input type="hidden" name="username"
                              value="'.$ENV{'form.username'}.'" /> <br />';                               value="'.$ENV{'form.username'}.'" />';
       if ($ENV{'user.adv'}) {
    $form_tag_start.=
       ' <input type="checkbox" name="showallfoils" ';
    if (defined($ENV{'form.showallfoils'})) {
       $form_tag_start.='checked="on"';
    }
    $form_tag_start.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils');
       }
       $form_tag_start.='<hr />';
  }   }
  ($status,$accessmsg) = &Apache::lonhomework::check_access('0');   ($status,$accessmsg) = &Apache::lonhomework::check_access('0');
  push (@Apache::inputtags::status,$status);   push (@Apache::inputtags::status,$status);
Line 554  sub start_problem { Line 588  sub start_problem {
     $allow_print_points=1;      $allow_print_points=1;
  }   }
     }      }
       my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries");
       if (defined($maxtries) && $maxtries < 0) { $allow_print_points=0; }
     my $duedate = &Apache::lonnet::EXT("resource.$id.duedate");       my $duedate = &Apache::lonnet::EXT("resource.$id.duedate"); 
     $duedate = POSIX::strftime("%c",localtime($duedate));      $duedate = POSIX::strftime("%c",localtime($duedate));
     my $temp_file;      my $temp_file;
Line 636  sub end_problem { Line 672  sub end_problem {
  $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::lonxml::htmlareafields);
  $result.="</body>\n";  
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
  $result.=&Apache::lonxml::xmlend();   $result.=&Apache::lonxml::xmlend().'</html>';
     } 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/) {
     $endminipage = '\end{minipage}';      $endminipage = '\end{minipage}';
  }   }
                 if ($ENV{'form.print_discussions'} eq 'yes') {                  if ($ENV{'form.print_discussions'} eq 'yes') {
     $result.=&Apache::lonxml::xmlend();      $result.=&Apache::lonxml::xmlend($target,$parser);
     $result=~s/<\/html>//;      $result=~s/<\/html>//;
  }  
  $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';  
  if (not $ENV{'request.symb'} =~ m/\.page_/) {  
     $result .= $endminipage.'\end{document} ';  
  } else {   } else {
     $result .= '';      $result .= '\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}';
       if (not $ENV{'request.symb'} =~ m/\.page_/) {
    $result .= $endminipage.'\end{document} ';
       } else {
    $result .= '';
       }
  }   }
     }      }
  }   }
Line 726  sub end_library { Line 762  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></body>'.&Apache::lonxml::xmlend();   $result.='</form>'.&Apache::loncommon::endbodytag().
       &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 861  sub start_instructorcomment { Line 898  sub start_instructorcomment {
     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') {
         $result=($ENV{'request.role'}=~/^(in|cc|au|ca|li)/);          $result=($ENV{'request.role'}=~/^(in|cc|au|ca|li)/);
  if ( ! $result ) {   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",
    $parser,$style);     $parser,$style);
     &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");      &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
Line 931  sub end_while { Line 968  sub end_while {
  while ($return) {   while ($return) {
     if (time-$starttime >      if (time-$starttime >
  $Apache::lonnet::perlvar{'lonScriptTimeout'}) {   $Apache::lonnet::perlvar{'lonScriptTimeout'}) {
  $return = 0; $error=1; next;   #$return = 0; $error=1; next;
     }      }
     $result.=&Apache::scripttag::xmlparse($bodytext);      $result.=&Apache::scripttag::xmlparse($bodytext);
     $return = &Apache::run::run($code,$safeeval);      $return = &Apache::run::run($code,$safeeval);
  }   }
  if ($error) {   if ($error) {
     &Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occured while running &lt;while$gt; on line').' '.$line.'</pre>');      &Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occured while running &lt;while&gt; on line').' '.$line.'</pre>');
  }   }
     } elsif ($target eq "edit") {      } elsif ($target eq "edit") {
  $result.= &Apache::edit::tag_end($target,$token,'');   $result.= &Apache::edit::tag_end($target,$token,'');
Line 1099  sub start_part { Line 1136  sub start_part {
     if ($1 ne '0') {$allow_print_points=1;}      if ($1 ne '0') {$allow_print_points=1;}
  }   }
     }      }
       my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries");
       if (defined($maxtries) && $maxtries < 0) {
    $allow_print_points=0;
       }
     if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';}      if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';}
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
     $result.='<a name="'.&Apache::lonnet::escape($Apache::inputtags::part).'" />';      $result.='<a name="'.&Apache::lonnet::escape($Apache::inputtags::part).'" />';
Line 1148  sub end_part { Line 1189  sub end_part {
     $gradestatus='';      $gradestatus='';
  }   }
  $result=$gradestatus;   $result=$gradestatus;
  if ($$tagstack[-2] eq 'td') {$result.='\end{minipage}';}    if ($$tagstack[-2] eq 'td' and $target eq 'tex') {$result.='\end{minipage}';} 
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result=&Apache::edit::end_table();   $result=&Apache::edit::end_table();
     }      }
Line 1336  sub delete_startouttext { Line 1377  sub delete_startouttext {
 sub start_simpleeditbutton {  sub start_simpleeditbutton {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result='';      my $result='';
     if (($target eq 'web') &&      if (($ENV{'form.simple_edit_button'} ne 'off') &&
    ($target eq 'web') &&
         (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {          (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
         my $url=$ENV{'request.noversionuri'};          my $url=$ENV{'request.noversionuri'};
         $url=~s/\?.*$//;          $url=~s/\?.*$//;
    my ($symb) = &Apache::lonxml::whichuser();
  $result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'.   $result='<table width="100%" bgcolor="#FFFFAA" border="2"><tr><td>'.
                 '<a href="'.$url.'/smpedit">'.&mt('Simple Problem Editor').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.').                  '<a href="'.$url.'/smpedit?symb='.&Apache::lonnet::escape($symb).'">'.&mt('Edit').'</a> - '.&mt('Note: it can take up to 10 minutes for changes to take effect for all users.').
 &Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />';  &Apache::loncommon::help_open_topic('Caching').'</td></tr></table><br />';
     }      }
     return $result;      return $result;

Removed from v.1.260.2.1  
changed lines
  Added in v.1.281


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