Diff for /loncom/homework/structuretags.pm between versions 1.384 and 1.419

version 1.384, 2007/07/23 23:30:47 version 1.419, 2008/02/13 16:21:44
Line 42  use lib '/home/httpd/lib/perl/'; Line 42  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
     
 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','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag'));
 }  }
   
 sub start_web {  sub start_web {
Line 92  sub end_tex { Line 92  sub end_tex {
     return '';      return '';
 }  }
   
   sub homework_js {
       return &Apache::loncommon::resize_textarea_js().
              &setmode_javascript().
    <<'JS';
   <script type="text/javascript">
   function setSubmittedPart (part) {
      this.document.lonhomework.submitted.value="part_"+part;
   }
   
   function image_response_click (which, e) {
       init_geometry();
       if (!e) { e = window.event; } //IE
       var input_element = document.lonhomework.elements[which];
       var token_element = document.lonhomework.elements[which+'_token'];
       var token = token_element.value;
       var img_element   = document.getElementById(which+'_imageresponse');
       var x= e.clientX-getX(img_element)+Geometry.getHorizontalScroll();
       var y= e.clientY-getY(img_element)+Geometry.getVerticalScroll();
       var click = x+':'+y;
       input_element.value = click;
       img_element.src = '/adm/randomlabel.png?token='+token+'&clickdata='+click;
   }
   
   </script>
   JS
   }
   
   sub setmode_javascript {
       return <<"ENDSCRIPT";
   <script type="text/javascript">
   function setmode(form,probmode) {
       form.problemmode.value = probmode;
       form.submit();
   }
   </script>
   ENDSCRIPT
   }
   
 sub page_start {  sub page_start {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name,      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name,
  $extra_head)=@_;   $extra_head)=@_;
Line 108  sub page_start { Line 146  sub page_start {
    $parstack,$parser,$safeeval);     $parstack,$parser,$safeeval);
     }      }
   
     $extra_head.= '      $extra_head .= &homework_js();
 <script type="text/javascript">  
 function setSubmittedPart (part) {  
    this.document.lonhomework.submitted.value="part_"+part;  
 }  
 </script>  
 ';  
   
     my %body_args;      my %body_args;
     if (defined($found{'html'})) {      if (defined($found{'html'})) {
Line 139  function setSubmittedPart (part) { Line 171  function setSubmittedPart (part) {
     } elsif (!defined($found{'body'})       } elsif (!defined($found{'body'}) 
      && $env{'request.state'} eq 'construct') {       && $env{'request.state'} eq 'construct') {
  if ($target eq 'web' || $target eq 'edit') {   if ($target eq 'web' || $target eq 'edit') {
     # no extra args to bodytag      if ($env{'environment.remote'} ne 'off') {
    $body_args{'only_body'}  = 1;
       }
  }   }
     } elsif (!defined($found{'body'})) {      } elsif (!defined($found{'body'})) {
  my %add_entries;   my %add_entries;
Line 157  function setSubmittedPart (part) { Line 191  function setSubmittedPart (part) {
  $body_args{'no_title'}       = 1;   $body_args{'no_title'}       = 1;
  $body_args{'force_register'} = 1;   $body_args{'force_register'} = 1;
  $body_args{'add_entries'}    = \%add_entries;   $body_args{'add_entries'}    = \%add_entries;
    if ($env{'environment.remote'} eq 'off'
       && $env{'request.state'} eq   'construct') {
       $body_args{'only_body'}  = 1;
    }
     }      }
     $body_args{'no_auto_mt_title'} = 1;      $body_args{'no_auto_mt_title'} = 1;
     my $page_start = &Apache::loncommon::start_page($name,$extra_head,      my $page_start = &Apache::loncommon::start_page($name,$extra_head,
Line 174  function setSubmittedPart (part) { Line 212  function setSubmittedPart (part) {
  }   }
     }      }
   
     if (!defined($found{'body'})) {      if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') {
  $page_start .= &Apache::lonxml::message_location();   $page_start .= &Apache::lonxml::message_location();
     }      }
           
Line 202  function setSubmittedPart (part) { Line 240  function setSubmittedPart (part) {
 #use Time::HiRes();  #use Time::HiRes();
 sub get_resource_name {  sub get_resource_name {
     my ($parstack,$safeeval)=@_;      my ($parstack,$safeeval)=@_;
       my $name;
     if (defined($Apache::lonhomework::name)) {      if (defined($Apache::lonhomework::name)) {
  return $Apache::lonhomework::name;   $name = $Apache::lonhomework::name;
     }      } else {
     my ($symb)=&Apache::lonnet::whichuser();   my ($symb)=&Apache::lonnet::whichuser();
     my $name=&Apache::lonnet::gettitle($symb);   $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 = ''; }
     }   }
     if ($name!~/\S+/) {   if ($name!~/\S+/) {
  $name=$env{'request.uri'};      $name=$env{'request.uri'};
  $name=~s-.*/([^/]+)$-$1-;      $name=~s-.*/([^/]+)$-$1-;
    }
    # The name has had html tags escaped:
          
    $name=~s/&lt;/</gs;
    $name=~s/&gt;/>/gs;
   
    $Apache::lonhomework::name=$name;
     }      }
     $Apache::lonhomework::name=$name;  
     return $name;      return $name;
 }  }
   
Line 270  sub remember_problem_state { Line 315  sub remember_problem_state {
 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().'   &Apache::structuretags::remember_problem_state().'
        <input type="hidden" name="problemmode" value="'.&mt('Edit').'" />  <div class="LC_edit_problem_header">
        <input type="submit" name="problemmode" accesskey="d" value="'.&mt('Discard Edits and View').'" />  <div class="LC_edit_problem_header_title">
        <input '.&Apache::edit::submit_ask_anyway().' type="submit" name="problemmode" accesskey="x" value="'.&mt('EditXML').'" />  '.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').'
        <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" /> <hr />  </div>
        <input type="submit" name="submit" accesskey="s" value="'.&mt('Submit Changes and Edit').'" />  <div class="LC_edit_problem_discards">
        <input type="submit" name="submit" accesskey="v" value="'.&mt('Submit Changes and View').'" /><table><tr><td>'.         <input type="hidden" name="problemmode" value="edit" />
        &Apache::loncommon::help_open_menu('Problem Editing Help','Problem_Editor_XML_Index',5,'Authoring',undef,undef,undef,'Problem Editing Help')         <input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '.
        .'</td></tr></table>'.         ' onclick="javscript:setmode(this.form,'."'discard.'".')"  />
          <input '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'editxml'".')').' type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" />
          <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" />
   </div>
   <div class="LC_edit_problem_saves">
          <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save and Edit').'" />
          <input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" />
     </div>
   <hr class="LC_edit_problem_divide" />
   '.&Apache::lonxml::message_location().'
   </div>
   '.
        '<table border="0" width="100%"><tr><td bgcolor="#DDDDDD">';         '<table border="0" width="100%"><tr><td bgcolor="#DDDDDD">';
 }  }
   
 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 View').'" />'.  <div class="LC_edit_problem_footer">
     <hr class="LC_edit_problem_divide" />
     <div class="LC_edit_problem_discards">
        <input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '.
        'onclick=javascript:setmode(this.form,'."'discard'".')" />
        <input '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'editxml'".')').' type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" />
        <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" />
     </div>
     <div class="LC_edit_problem_saves">
       <input type="submit" name="submitbutton" value="'.&mt('Save and Edit').'" />
       <input type="submit" name="submitbutton" value="'.&mt('Save and View').'" />
     </div>
     <hr class="LC_edit_problem_divide" />
   </div>
   '.
   
     &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()).      &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()).
     "\n</form>\n".&Apache::loncommon::end_page();      "\n</form>\n".&Apache::loncommon::end_page();
 }  }
Line 300  sub option { Line 371  sub option {
   
 sub problem_web_to_edit_header {  sub problem_web_to_edit_header {
     my ($rndseed)=@_;      my ($rndseed)=@_;
     my $result.='<input type="hidden" name="problemmode" value="'.&mt('View').'" />';      my $result .= '<div class="LC_edit_problem_header">';
     $result .= '<input type="submit" name="problemmode" accesskey="e" value="'.&mt('Edit').'" />';  
     $result .= '<input type="submit" name="problemmode" accesskey="x" value="'.&mt('EditXML').'" />      if (!$Apache::lonhomework::parsing_a_task) {
              <input type="submit" name="newrandomization" accesskey="a" value="'.&mt('New Randomization').'" />   $result .= 
              <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />      '<div class="LC_edit_problem_header_title">'.
              <nobr><input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" />      &mt('Problem Testing').
               <input type="text" name="rndseed" size="10" value="'.      &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area').
        $rndseed.'"      '</div>';
            onchange="javascript:document.lonhomework.changerandseed.click()" /></nobr>      } else {
              <span class="LC_nobreak"><label><input type="checkbox" name="showallfoils" ';   $result .= 
       '<div class="LC_edit_problem_header_title">'.
       &mt('Task Testing').
       '</div>';
       }
       
     my $show_all_foils_text =       my $show_all_foils_text = 
  ($Apache::lonhomework::parsing_a_task) ?   ($Apache::lonhomework::parsing_a_task) ?
  &mt('&nbsp;Show&nbsp;All&nbsp;Instances')   &mt('&nbsp;Show&nbsp;All&nbsp;Instances')
  : &mt('&nbsp;Show&nbsp;All&nbsp;Foils');   : &mt('&nbsp;Show&nbsp;All&nbsp;Foils');
   
     if (defined($env{'form.showallfoils'})) { $result.='checked="on"'; }      my $show_all= '<span class="LC_nobreak"><label><input type="checkbox" name="showallfoils" ';
     $result.= ' />'.$show_all_foils_text.'</label></span>'.      if (defined($env{'form.showallfoils'})) { $show_all.='checked="checked"'; }
  &Apache::loncommon::help_open_topic('Problem_Editor_Testing_Area','Testing Problems').      $show_all.= ' />'.$show_all_foils_text.'</label></span>';
  '<hr />';  
     $result.=&mt('Apply style file').'  
 <input type="text" name="style_file" value="'.&HTML::Entities::encode($env{'construct.style'},'"<>&').'" />  
  <a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a>  
 <input type="submit" name="clear_style_file" value="'.&mt('Clear').'" />  
 <br />';  
   
   
       $result .= '<div class="LC_edit_problem_header_status_row">';
     if (!$Apache::lonhomework::parsing_a_task) {      if (!$Apache::lonhomework::parsing_a_task) {
  $result.="   $result.="
 <nobr>  <div class='LC_edit_problem_header_row1'>
 Problem Status:  <span class=\"LC_nobreak\">
   ".&mt("Problem Status:")."
 <select name='problemstate'>  <select name='problemstate'>
   <option value=''></option>    <option value=''></option>
   ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>    ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>
Line 337  Problem Status: Line 411  Problem Status:
   ".&option('CANNOT_ANSWER_correct','problemstate').&mt("Open and correct")."</option>    ".&option('CANNOT_ANSWER_correct','problemstate').&mt("Open and correct")."</option>
   ".&option('SHOW_ANSWER'          ,'problemstate').&mt("Show Answer")."</option>    ".&option('SHOW_ANSWER'          ,'problemstate').&mt("Show Answer")."</option>
 </select>  </select>
 </nobr>  </span>
 <nobr>  <span class=\"LC_nobreak\">
 Problem Type:  ".&mt("Problem Type:")."
 <select name='problemtype'>  <select name='problemtype'>
   <option value=''></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>
 </select>  </select>
 </nobr>  </span>
 <nobr>  $show_all
 Feedback Mode:  </div>
   <div class='LC_edit_problem_header_row2'>
   <span class=\"LC_nobreak\">
   ".&mt("Feedback Mode:")."
 <select name='problemstatus'>  <select name='problemstatus'>
   <option value=''></option>    <option value=''></option>
   ".&option('yes','problemstatus').&mt("Show Feedback")."</option>    ".&option('yes','problemstatus').&mt("Show Feedback")."</option>
   ".&option('no', 'problemstatus').&mt("Don't Show Feedback")."</option>    ".&option('no', 'problemstatus').&mt("Don't Show Incorect/Correct Feedback")."</option>
     ".&option('no_feedback_ever', 'problemstatus').&mt("Don't Show Any Feedback")."</option>
 </select>  </select>
 </nobr>  </span>
 <input type='submit' name='changeproblemmode' value='".&mt("Change")."' />  ";
 <hr />";  
  my $numtoanalyze=$env{'form.numtoanalyze'};  
  if (!$numtoanalyze) { $numtoanalyze=20; }  
  $result.= '<input type="submit" name="problemmode" value='.  
     &mt('"Calculate answers').'" /> for  
              <input type="text" name="numtoanalyze" value="'.  
      $numtoanalyze.'" size="5" /> '.&mt('versions of this problem').  
      '.'.&Apache::loncommon::help_open_topic("Analyze_Problem",  
      '',undef,undef,300).  
      '<hr />';  
     } elsif ($Apache::lonhomework::parsing_a_task) {      } elsif ($Apache::lonhomework::parsing_a_task) {
  $result.="   $result.="
 <nobr>  <div class='LC_edit_problem_header_row1'>
 Problem Status:  <span class=\"LC_nobreak\">
   ".&mt("Problem Status:")."
 <select name='problemstate'>  <select name='problemstate'>
   <option value=''></option>    <option value=''></option>
   ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>    ".&option('CLOSED'               ,'problemstate').&mt("Closed")."</option>
Line 377  Problem Status: Line 447  Problem Status:
   ".&option('WEB_GRADE'            ,'problemstate').&mt("Criteria Grading")."</option>    ".&option('WEB_GRADE'            ,'problemstate').&mt("Criteria Grading")."</option>
   ".&option('SHOW_ANSWER'          ,'problemstate').&mt("Show Feedback")."</option>    ".&option('SHOW_ANSWER'          ,'problemstate').&mt("Show Feedback")."</option>
 </select>  </select>
 </nobr>  </span>
 <input type='submit' name='changeproblemmode' value='".&mt("Change")."' />  $show_all
 <hr />";  ";
     }      }
   
       $result.='
          <span class="LC_nobreak">
          '.&mt('Apply style file: ').'
            <input type="text" name="style_file" value="'.&HTML::Entities::encode($env{'construct.style'},'"<>&').'" />
            <a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a>
          </span>
        </div>
        <input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" />
        <input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" />
        <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />
      </div>
      <hr class="LC_edit_problem_divide" />
      <div class="LC_edit_problem_header_randomize_row">
        <input type="submit" name="newrandomization" accesskey="a" value="'.&mt('New Randomization').'" />
        <input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" />
        <input type="text" name="rndseed" size="10" value="'.
          $rndseed.'"
                onchange="javascript:document.lonhomework.changerandseed.click()" />';
   
       if (!$Apache::lonhomework::parsing_a_task) {
    my $numtoanalyze=$env{'form.numtoanalyze'};
    if (!$numtoanalyze) { $numtoanalyze=20; }
    $result .= '<span class="LC_nobreak">'.
       &mt('[_1] for [_2] versions.',
    '<input type="button" name="submitmode" value="'.&mt('Calculate answers').'" '.
                   'onclick="javascript:setmode(this.form,'."'calcanswers'".')" />'
                  ,'<input type="text" name="numtoanalyze" value="'.
    $numtoanalyze.'" size="5" />').
    &Apache::loncommon::help_open_topic("Analyze_Problem",'',undef,undef,300).
    '</span>';
       
       }
   
       $result.='
      </div>
      <div class="LC_edit_problem_header_edit_row">';
       $result.='<input type="hidden" name="problemmode" value="view" />';
       $result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.
                  'onclick="javascript:setmode(this.form,'."'edit'".')" />';
       $result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '.
                  'onclick="javascript:setmode(this.form,'."'editxml'".')" />';
       $result.='
      </div>
      '.&Apache::lonxml::message_location().'
   </div>';
     return $result;      return $result;
 }  }
   
Line 458  sub finalize_storage { Line 574  sub finalize_storage {
     }      }
     return $result;      return $result;
 }  }
 use Data::Dumper;  
   
 # -------------------------------------------------------------store_aggregates  # -------------------------------------------------------------store_aggregates
 # Sends hash of values to be incremented in nohist_resourcetracker.db  # Sends hash of values to be incremented in nohist_resourcetracker.db
Line 523  ENDCHECKOUT Line 638  ENDCHECKOUT
   
 sub firstaccess_msg {  sub firstaccess_msg {
     my ($time,$symb)=@_;      my ($time,$symb)=@_;
     my ($map)=&Apache::lonnet::decode_symb($symb);      my $result;
     my $foldertitle=&Apache::lonnet::gettitle($map);      my @interval=&Apache::lonnet::EXT("resource.0.interval");
     &Apache::lonxml::debug("map is $map title is $foldertitle");      if ($interval[1] eq 'map') {
    my ($map)=&Apache::lonnet::decode_symb($symb);
    my $foldertitle=&Apache::lonnet::gettitle($map);
       
    &Apache::lonxml::debug("map is $map title is $foldertitle");
    $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'
                                .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
                                ,$foldertitle,$time)."</h2>";
       } elsif ($interval[1] eq 'course') {
    my $course = $env{'course.'.$env{'request.course.id'}.'.description'};
           $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'
                                .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
                                ,$course,$time)."</h2>";
       } else {
    my $title=&Apache::lonnet::gettitle($symb);
           $result .= "<h2>".&mt('This resource "[_1]" is open for a limited time.'
                                .' Once you click the "Show Resource" button below you have [_2] to complete this resource "[_1]".'
                                ,$title,$time)."</h2>";
       }
     my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     return (<<ENDCHECKOUT);      my $buttontext = &mt('Show Resource');
 <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>      my $timertext = &mt('Start Timer?');
       $result .= (<<ENDCHECKOUT);
 <form name="markaccess" method="POST" action="$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="$buttontext" onClick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />
 </form>  </form>
 ENDCHECKOUT  ENDCHECKOUT
       return $result;
 }  }
   
 sub init_problem_globals {  sub init_problem_globals {
Line 545  sub init_problem_globals { Line 680  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::set_show_problem_status(&get_problem_status('0'));
  $Apache::lonhomework::ignore_response_errors=0;   $Apache::lonhomework::ignore_response_errors=0;
   
     } elsif ($type eq 'library') {      } elsif ($type eq 'library') {
  $Apache::inputtags::part='';   $Apache::inputtags::part='';
  @Apache::inputtags::partlist=();   @Apache::inputtags::partlist=();
  $Apache::lonhomework::problemstatus='';   &Apache::lonhomework::reset_show_problem_status();
  $Apache::lonhomework::ignore_response_errors=1;   $Apache::lonhomework::ignore_response_errors=1;
   
     } elsif ($type eq 'Task') {      } elsif ($type eq 'Task') {
  $Apache::inputtags::part='0';   $Apache::inputtags::part='0';
  @Apache::inputtags::partlist=('0');   @Apache::inputtags::partlist=('0');
  $Apache::lonhomework::problemstatus='';   &Apache::lonhomework::reset_show_problem_status();
  $Apache::lonhomework::ignore_response_errors=1;   $Apache::lonhomework::ignore_response_errors=1;
     }      }
     @Apache::inputtags::responselist = ();      @Apache::inputtags::responselist = ();
Line 586  sub reset_problem_globals { Line 721  sub reset_problem_globals {
     undef($Apache::lonhomework::default_type);      undef($Apache::lonhomework::default_type);
     undef($Apache::lonhomework::type);      undef($Apache::lonhomework::type);
     undef($Apache::lonhomework::scantronmode);      undef($Apache::lonhomework::scantronmode);
     undef($Apache::lonhomework::problemstatus);  
     undef($Apache::lonhomework::ignore_response_errors);      undef($Apache::lonhomework::ignore_response_errors);
       &Apache::lonhomework::reset_show_problem_status();
 }  }
   
 sub set_problem_state {  sub set_problem_state {
Line 638  sub start_problem { Line 773  sub start_problem {
     }      }
   
     if ($target ne 'analyze') {      if ($target ne 'analyze') {
         if ($env{'request.state'} eq 'construct') { &set_problem_state('0'); }          my $type = &Apache::lonnet::EXT('resource.0.type');
  $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');   $Apache::lonhomework::type=$type;
  if (($env{'request.state'} eq 'construct') &&   if (($env{'request.state'} eq 'construct') &&
     defined($env{'form.problemtype'})) {      $env{'form.problemtype'} =~ /\S/) {
     $Apache::lonhomework::type=$env{'form.problemtype'};      $Apache::lonhomework::type=$env{'form.problemtype'};
  }   }
  &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");   &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");
Line 659  sub start_problem { Line 794  sub start_problem {
     $Apache::lonhomework::default_type = $Apache::lonhomework::type;      $Apache::lonhomework::default_type = $Apache::lonhomework::type;
   
     &initialize_storage();      &initialize_storage();
       if ($target ne 'analyze'
           && $env{'request.state'} eq 'construct') {
    &set_problem_state('0');
       }
   
     if ($target eq 'web') {      if ($target eq 'web') {
  &Apache::lonxml::debug(" grading history ");   &Apache::lonxml::debug(" grading history ");
  &Apache::lonhomework::showhash(%Apache::lonhomework::history);   &Apache::lonhomework::showhash(%Apache::lonhomework::history);
Line 697  sub start_problem { Line 837  sub start_problem {
     $result.=&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');      my @interval=&Apache::lonnet::EXT("resource.0.interval");
       &Apache::lonnet::set_first_access($interval[1]);
  }   }
  #handle rand seed in construction space   #handle rand seed in construction space
  my $rndseed=&setup_rndseed($safeeval);   my $rndseed=&setup_rndseed($safeeval);
Line 722  sub start_problem { Line 863  sub start_problem {
  $form_tag_start.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').   $form_tag_start.= ' />'.&mt('&nbsp;Show&nbsp;All&nbsp;Foils').
     '</label>';      '</label>';
     }      }
               if ($Apache::lonhomework::type eq 'practice') {
                  $form_tag_start.='<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'.
                                   '<span class="LC_info">'.&mt('Submissions are not permanently recorded').'</span>';
               }
     $form_tag_start.='<hr />';      $form_tag_start.='<hr />';
  }   }
   
Line 751  sub start_problem { Line 896  sub start_problem {
     $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';      $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';
  }   }
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {   if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
     $msg.='The problem '.$accessmsg;      $msg.=&mt('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') {
Line 1056  sub start_definetag { Line 1201  sub start_definetag {
   
     my $name = $token->[2]->{'name'};      my $name = $token->[2]->{'name'};
     my $skip=&Apache::lonxml::get_all_text("/definetag",$parser,$style);      my $skip=&Apache::lonxml::get_all_text("/definetag",$parser,$style);
     if ($name=~/^\//) {      if ($target eq 'web') {
  $result=   if ($name=~/^\//) {
  '<br /><table bgcolor="#FFBBBB"><tr><th>END <tt>'.$name.'</tt></th></tr>';      $result=
     } else {   '<br /><table class="LC_sty_end"><tr><th>'.
  $result=   &mt('END [_1]'.'<tt>'.$name.'</tt>').'</th></tr>';
  '<br /><table bgcolor="#BBFFBB"><tr><th>BEGIN <tt>'.$name.'</tt></th></tr>';   } else {
       $result=
    '<br /><table class="LC_sty_begin"><tr><th>'.
    &mt('BEGIN [_1]'.'<tt>'.$name.'</tt>').'</th></tr>';
    }
    $skip = &HTML::Entities::encode($skip, '<>&"');
    $result.='<tr><td><pre>'.$skip.'</pre></td></tr></table>';
     }      }
     $skip=~s/\</\&lt\;/gs;  
     $skip=~s/\>/\&gt\;/gs;  
     $result.='<tr><td><pre>'.$skip.'</pre></td></tr></table>';  
     return $result;      return $result;
 }  }
   
Line 1081  sub start_block { Line 1229  sub start_block {
     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 'webgrade') {   $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) && $code ne '') {
     if (!$Apache::lonxml::default_homework_loaded) {      if (!$Apache::lonxml::default_homework_loaded) {
  &Apache::lonxml::default_homework_load($safeeval);   &Apache::lonxml::default_homework_load($safeeval);
     }      }
Line 1126  sub start_languageblock { Line 1274  sub start_languageblock {
  $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {   $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 @preferred_languages=&Apache::loncommon::preferred_languages();
         $result='1';  # This should not even happen, since we should at least have the server language
  if ($include) {          if (!$preferred_languages[0]) { $preferred_languages[0]='en'; }
             $result='';  # Now loop over all languages in order of preference
             foreach (split(/\,/,$include)) {          foreach my $preferred_language (@preferred_languages) {
                 if ($languages{$_}) { $result='1'; }  # If the languageblock has no arguments, show the contents
             }             $result=1;
  }             my $found=0;
         if ($exclude) {  # Do we have an include argument?
             foreach (split(/\,/,$exclude)) {     if ($include) {
                 if ($languages{$_}) { $result='0'; }  # If include is specified, by default, don't render the block
             }                $result=0;
  }                foreach my $included_language (split(/\,/,$include)) {
   # ... but if my preferred language is included, render it
                    if ($included_language eq $preferred_language) {
                       $result=1; 
                       $found=1; 
                    }
                 }
      }
   # Do we have an exclude argument?
              if ($exclude) {
                 $result=1;
                 foreach my $excluded_language (split(/\,/,$exclude)) {
                    if ($excluded_language eq $preferred_language) {
                       $result=0;
                       $found=1;
                    }
                 }
      }
              if ($found) { last; }
           }
  if ( ! $result ) {   if ( ! $result ) {
     my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser,      my $skip=&Apache::lonxml::get_all_text("/languageblock",$parser,
    $style);     $style);
Line 1170  sub end_languageblock { Line 1337  sub end_languageblock {
     return $result;      return $result;
 }  }
   
   {
       my %available_texts;
       sub start_translated {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    &Apache::lonxml::register('Apache::structuretags',('lang'));
    undef(%available_texts);
       }
       
       sub end_translated {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    my $result;
    #show the translation on viewable targets
    if ($target eq 'web'     || $target eq 'tex' || $target eq 'webgrade'||
       # or non-viewable targets, if it's embedded in something that
       # wants the output
       (($target eq 'answer' || $target eq 'analyze'|| $target eq 'grade')
        && &Apache::lonxml::in_redirection() ) ) {
       my @possibilities = keys(%available_texts);
       my $which = 
    &Apache::loncommon::languages(\@possibilities) || 'default';
       $result = $available_texts{$which};
    }
    undef(%available_texts);
    &Apache::lonxml::deregister('Apache::structuretags',('lang'));
    return $result;
       }
   
   
       sub start_lang {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
       $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
       &Apache::lonxml::startredirection();
    }
    return '';
       }
   
       sub end_lang {
    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    if ($target eq 'web' || $target eq 'grade'   || $target eq 'answer' ||
       $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') {
       my $result = &Apache::lonxml::endredirection();
       my $which = &Apache::lonxml::get_param('which',$parstack,
      $safeeval);
       $available_texts{$which} = $result;
    }
    return '';
       }
   }
   
 sub start_instructorcomment {  sub start_instructorcomment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
Line 1375  sub start_part { Line 1592  sub start_part {
                                      # duedates.                                       # duedates.
     }      }
     my $result='';      my $result='';
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id= &Apache::lonxml::get_id($parstack,$safeeval);
     if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; }  
     $Apache::inputtags::part=$id;      $Apache::inputtags::part=$id;
     push(@Apache::inputtags::partlist,$id);      push(@Apache::inputtags::partlist,$id);
     @Apache::inputtags::response=();      @Apache::inputtags::response=();
     @Apache::inputtags::previous=();      @Apache::inputtags::previous=();
     @Apache::inputtags::previous_version=();      @Apache::inputtags::previous_version=();
     $Apache::lonhomework::problemstatus=&get_problem_status($id);      &Apache::lonhomework::set_show_problem_status(&get_problem_status($id));
       &Apache::response::reset_params();
   
     my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);      my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
     my $newtype=&Apache::lonnet::EXT("resource.$id.type");      my $newtype=&Apache::lonnet::EXT("resource.$id.type");
     if ($newtype) { $Apache::lonhomework::type=$newtype; }      if ($newtype) { $Apache::lonhomework::type=$newtype; }
Line 1429  sub start_part { Line 1647  sub start_part {
  if ($target eq 'tex') {   if ($target eq 'tex') {
     if (not $env{'form.problem_split'}=~/yes/) {      if (not $env{'form.problem_split'}=~/yes/) {
  if ($$tagstack[-2] eq 'td') {   if ($$tagstack[-2] eq 'td') {
     $result.='\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';      $result.='\noindent \begin{minipage}{\textwidth}\noindent';
  } else {   } else {
     $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';      $result.='\noindent \end{minipage}\vskip 0 mm \noindent \begin{minipage}{\textwidth}\noindent';
  }   }
Line 1639  sub start_startouttext { Line 1857  sub start_startouttext {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my @result=(''.'');      my @result=(''.'');
     if ($target eq 'edit' || $target eq 'modified' ) { @result=('','no'); }      if ($target eq 'edit' || $target eq 'modified' ) { @result=('','no'); }
       
       my $nesting = 
    &Apache::lonxml::set_state('outtext',
      &Apache::lonxml::get_state('outtext')+1);
       if ($nesting > 1 && $env{'request.state'} eq 'construct') {
    &Apache::lonxml::error("Nesting of &lt;startouttext /&gt; not allowed, on line ".$token->[5]);
       }
     return (@result);      return (@result);
 }  }
   
Line 1678  sub start_endouttext { Line 1903  sub start_endouttext {
  $result='<endouttext />'.   $result='<endouttext />'.
     &Apache::edit::handle_insertafter('startouttext');      &Apache::edit::handle_insertafter('startouttext');
     }      }
   
       my $nesting = 
    &Apache::lonxml::set_state('outtext',
      &Apache::lonxml::get_state('outtext')-1);
       if ($nesting < 0 && $env{'request.state'} eq 'construct') {
    &Apache::lonxml::error(" Extraneous &lt;endouttext /&gt; not allowed on line ".$token->[5]);
    &Apache::lonxml::set_state('outtext', 0);
       }
     return $result;      return $result;
 }  }
   

Removed from v.1.384  
changed lines
  Added in v.1.419


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