Diff for /loncom/homework/structuretags.pm between versions 1.417 and 1.435

version 1.417, 2008/01/28 21:42:28 version 1.435, 2008/11/25 13:16:17
Line 27 Line 27
 #  #
 ###  ###
   
   =pod
   
   =head1 NAME
   
   Apache::structuretags
   
   =head1 SYNOPSIS
   
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   
   =head1 NOTABLE SUBROUTINES
   
   =over
   
   =item 
   
   =back
   
   =cut
   
   
 package Apache::structuretags;   package Apache::structuretags; 
   
Line 36  use Apache::File(); Line 59  use Apache::File();
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonxml;  use Apache::lonxml;
   use Apache::londefdef;
 use Apache::lonenc();  use Apache::lonenc();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
Line 74  sub start_tex { Line 98  sub start_tex {
     if ($target ne 'edit' && $target ne 'modified') {      if ($target ne 'edit' && $target ne 'modified') {
  my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style);   my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser,$style);
  if ($target eq 'tex') {   if ($target eq 'tex') {
     return $bodytext.' ';      
       # If inside a table, occurrences of \\ must be removed;
       # else the table blows up.
   
       if (&Apache::londefdef::is_inside_of($tagstack, "table")) {
    $bodytext =~ s/\\\\//g;
       }
       return $bodytext.'{}';
  }   }
     } elsif ($target eq "edit" ) {      } elsif ($target eq "edit" ) {
  my $bodytext =    my $bodytext = 
Line 148  sub page_start { Line 179  sub page_start {
   
     $extra_head .= &homework_js();      $extra_head .= &homework_js();
   
       if ($env{'environment.wysiwygeditor'} eq 'on') {
    $extra_head .= &Apache::lonhtmlcommon::dragmath_js("FCKEditMathPopup");
       } else {
           $extra_head .= &Apache::lonhtmlcommon::dragmath_js("EditMathPopup");
       }
   
     my %body_args;      my %body_args;
     if (defined($found{'html'})) {      if (defined($found{'html'})) {
  $body_args{'skip_phases'}{'head'}=1;   $body_args{'skip_phases'}{'head'}=1;
Line 312  sub remember_problem_state { Line 349  sub remember_problem_state {
        <input type="hidden" name="problemstatus" value="'.$env{'form.problemstatus'}.'" />';         <input type="hidden" name="problemstatus" value="'.$env{'form.problemstatus'}.'" />';
 }  }
   
 sub problem_edit_header {  sub problem_edit_buttons {
     return '<input type="hidden" name="submitted" value="edit" />'.     return  '
  &Apache::structuretags::remember_problem_state().'  
 <div class="LC_edit_problem_header">  
 <div class="LC_edit_problem_header_title">  
 '.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').'  
 </div>  
 <div class="LC_edit_problem_discards">  <div class="LC_edit_problem_discards">
        <input type="hidden" name="problemmode" value="edit" />  
        <input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '.         <input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '.
        ' onclick="javscript:setmode(this.form,'."'discard.'".')"  />         ' 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 '.&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').'" />         <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" />
 </div>  </div>
 <div class="LC_edit_problem_saves">  <div class="LC_edit_problem_saves">
        <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save and Edit').'" />         <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save and Edit').'" />
        <input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" />         <input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" />
   </div>  </div>';
   }
   
   sub problem_edit_header {
       return '<input type="hidden" name="submitted" value="edit" /><input type="hidden" name="problemmode" value="edit" />'.
    &Apache::structuretags::remember_problem_state().'
   <div class="LC_edit_problem_header">
   <div class="LC_edit_problem_header_title">
   '.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').'
   </div>'.
   &problem_edit_buttons().'
 <hr class="LC_edit_problem_divide" />  <hr class="LC_edit_problem_divide" />
 '.&Apache::lonxml::message_location().'  '.&Apache::lonxml::message_location().'
 </div>  </div>
Line 340  sub problem_edit_header { Line 381  sub problem_edit_header {
 sub problem_edit_footer {  sub problem_edit_footer {
     return '</td></tr></table><br />      return '</td></tr></table><br />
 <div class="LC_edit_problem_footer">  <div class="LC_edit_problem_footer">
   <hr class="LC_edit_problem_divide" />    <hr class="LC_edit_problem_divide" />'.
   <div class="LC_edit_problem_discards">  &problem_edit_buttons().'
      <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" />    <hr class="LC_edit_problem_divide" />
 </div>  </div>
 '.  '.
Line 417  sub problem_web_to_edit_header { Line 449  sub problem_web_to_edit_header {
 <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>
     ".&option('practice' ,'problemtype').&mt("Practice Problem")."</option>
 </select>  </select>
 </span>  </span>
 $show_all  $show_all
Line 451  $show_all Line 484  $show_all
 $show_all  $show_all
 ";  ";
     }      }
   
     $result.='      $result.='
        <span class="LC_nobreak">         <span class="LC_nobreak">
        '.&mt('Apply style file: ').'         '.&mt('Apply style file: ').'
Line 459  $show_all Line 491  $show_all
          <a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a>           <a href="javascript:openbrowser(\'lonhomework\',\'style_file\',\'sty\')">'.&mt('Select').'</a>
        </span>         </span>
      </div>       </div>
        <div class="LC_edit_problem_header_row1">'.
          &Apache::lonxml::renderingoptions().'
        </div>
      <input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" />       <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="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" />
      <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />       <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />
Line 477  $show_all Line 512  $show_all
  $result .= '<span class="LC_nobreak">'.   $result .= '<span class="LC_nobreak">'.
     &mt('[_1] for [_2] versions.',      &mt('[_1] for [_2] versions.',
  '<input type="button" name="submitmode" value="'.&mt('Calculate answers').'" '.   '<input type="button" name="submitmode" value="'.&mt('Calculate answers').'" '.
                 'onclick="javascript:setmode(this.form,'."'calcanswers'".')" />                  'onclick="javascript:setmode(this.form,'."'calcanswers'".')" />'
  <input type="text" name="numtoanalyze" value="'.                 ,'<input type="text" name="numtoanalyze" value="'.
  $numtoanalyze.'" size="5" />').   $numtoanalyze.'" size="5" />').
  &Apache::loncommon::help_open_topic("Analyze_Problem",'',undef,undef,300).   &Apache::loncommon::help_open_topic("Analyze_Problem",'',undef,undef,300).
  '</span>';   '</span>';
Line 539  sub initialize_storage { Line 574  sub initialize_storage {
     if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }      if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); }
 }  }
   
 # -------------------------------------------------------------finalize_storage  =pod
 # Stores away the result has to a student's environment  
 # checks form.grade_ for specific values, other wises stores  =item finalize_storage()
 # to the running users environment  
 # Will increment totals for attempts, students, and corrects   Stores away the result has to a student's environment
 # if running user has student role.     checks form.grade_ for specific values, other wises stores
    to the running users environment
    Will increment totals for attempts, students, and corrects
    if running user has student role.
   
   =cut
   
   
 sub finalize_storage {  sub finalize_storage {
     my ($given_symb) = @_;      my ($given_symb) = @_;
     my $result;      my $result;
Line 575  sub finalize_storage { Line 617  sub finalize_storage {
     return $result;      return $result;
 }  }
   
 # -------------------------------------------------------------store_aggregates  =pod
 # Sends hash of values to be incremented in nohist_resourcetracker.db  
 # for the course. Increments total number of attempts, unique students   item store_aggregates()
 # and corrects for each part for an instance of a problem, as appropriate.  
    Sends hash of values to be incremented in nohist_resourcetracker.db
    for the course. Increments total number of attempts, unique students 
    and corrects for each part for an instance of a problem, as appropriate.
   
   =cut
   
 sub store_aggregates {  sub store_aggregates {
     my ($symb,$courseid) = @_;      my ($symb,$courseid) = @_;
     my %aggregate;      my %aggregate;
Line 645  sub firstaccess_msg { Line 693  sub firstaccess_msg {
  my $foldertitle=&Apache::lonnet::gettitle($map);   my $foldertitle=&Apache::lonnet::gettitle($map);
           
  &Apache::lonxml::debug("map is $map title is $foldertitle");   &Apache::lonxml::debug("map is $map title is $foldertitle");
  $result .= (<<ENDCHECKOUT);   $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'
 <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>                               .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
 ENDCHECKOUT                               ,$foldertitle,$time)."</h2>";
     } elsif ($interval[1] eq 'course') {      } elsif ($interval[1] eq 'course') {
  my $course = $env{'course.'.$env{'request.course.id'}.'.description'};   my $course = $env{'course.'.$env{'request.course.id'}.'.description'};
  $result .= (<<ENDCHECKOUT);          $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'
 <h2>The resources in "$course" are open for a limited time. Once you click the 'Show Resource' button below you have $time to complete all resources in "$course".</h2>                               .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
 ENDCHECKOUT                               ,$course,$time)."</h2>";
     } else {      } else {
  my $title=&Apache::lonnet::gettitle($symb);   my $title=&Apache::lonnet::gettitle($symb);
  $result .= (<<ENDCHECKOUT);          $result .= "<h2>".&mt('This resource "[_1]" is open for a limited time.'
 <h2>This resource "$title" is open for a limited time. Once you click the 'Show Resource' button below you have $time to complete this resource "$title".</h2>                               .' Once you click the "Show Resource" button below you have [_2] to complete this resource "[_1]".'
 ENDCHECKOUT                               ,$title,$time)."</h2>";
   
     }      }
     my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
       my $buttontext = &mt('Show Resource');
       my $timertext = &mt('Start Timer?');
     $result .= (<<ENDCHECKOUT);      $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;      return $result;
Line 863  sub start_problem { Line 912  sub start_problem {
     '</label>';      '</label>';
     }      }
             if ($Apache::lonhomework::type eq 'practice') {              if ($Apache::lonhomework::type eq 'practice') {
                $form_tag_start.='<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'.                  $form_tag_start.=&practice_problem_header();
                                 '<span class="LC_info">'.&mt('Submissions are not permanently recorded').'</span>';  
             }              }
     $form_tag_start.='<hr />';      $form_tag_start.='<hr />';
  }   }
Line 938  sub start_problem { Line 986  sub start_problem {
     # create a page header and exit      # create a page header and exit
     if ($env{'request.state'} eq "construct") {      if ($env{'request.state'} eq "construct") {
  $result.= &problem_web_to_edit_header($env{'form.rndseed'});   $result.= &problem_web_to_edit_header($env{'form.rndseed'});
                   if ($Apache::lonhomework::type eq 'practice') {
                       $result.= '<input type="submit" name="resetdata" '.
                                 'value="'.&mt('New Problem Variation').'" />'.
                                 &practice_problem_header().'<hr />';
                   }
     }      }
     # if we are viewing someone else preserve that info      # if we are viewing someone else preserve that info
     if (defined $env{'form.grade_symb'}) {      if (defined $env{'form.grade_symb'}) {
Line 1173  sub start_library { Line 1226  sub start_library {
  $result.=" \n $form_tag_start".   $result.=" \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);
           if ($Apache::lonhomework::type eq 'practice') {
               $result.= '<input type="submit" name="resetdata" '.
                         'value="'.&mt('New Problem Variation').'" />'.
                         &practice_problem_header().'<hr />';
           }
     }      }
     return $result;      return $result;
 }  }
Line 1380  sub end_languageblock { Line 1438  sub end_languageblock {
     my $result = &Apache::lonxml::endredirection();      my $result = &Apache::lonxml::endredirection();
     my $which = &Apache::lonxml::get_param('which',$parstack,      my $which = &Apache::lonxml::get_param('which',$parstack,
    $safeeval);     $safeeval);
     $available_texts{$which} = $result;              if ($which=~/\w/) {
                   $available_texts{$which} = $result;
               }
               my $otherlangs = &Apache::lonxml::get_param('other',$parstack,
                                                           $safeeval);
               foreach my $language (split(/\s*\,\s*/,$otherlangs)) {
                   if ($language=~/\w/) {
                       $available_texts{$language} = $result;
                   }
               }
   
  }   }
  return '';   return '';
     }      }
Line 1477  sub end_while { Line 1545  sub end_while {
     $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 occurred 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 1837  sub start_problemtype { Line 1905  sub start_problemtype {
  $result .=&Apache::edit::checked_arg('When used as type(s):','for',   $result .=&Apache::edit::checked_arg('When used as type(s):','for',
      [ ['exam','Exam/Quiz Problem'],       [ ['exam','Exam/Quiz Problem'],
        ['survey','Survey'],         ['survey','Survey'],
        ['problem','Homework Problem'] ]         ['problem','Homework Problem'],
                                                  ['practice','Practice Problem'] ]
      ,$token);       ,$token);
  $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
Line 1870  sub end_startouttext { Line 1939  sub end_startouttext {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';      my $result='';
     my $text='';      my $text='';
   
     if ($target eq 'edit') {      if ($target eq 'edit') {
    my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth;
  $text=&Apache::lonxml::get_all_text("endouttext",$parser,$style);   $text=&Apache::lonxml::get_all_text("endouttext",$parser,$style);
   
  $result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td>   $result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td>
 <td>".&mt('Delete:').  <td>".&mt('Delete:').
                  &Apache::edit::deletelist($target,$token)                   &Apache::edit::deletelist($target,$token)
  ."</td>   ."</td>";
 <td>".          unless ($env{'environment.wysiwygeditor'} eq 'on') {
                  &Apache::edit::insertlist($target,$token).      $result .= '<td align="left">'
  '</td><td align="right" valign="top">' .   .&Apache::lonhtmlcommon::dragmath_button($areaid,1)
  &Apache::loncommon::helpLatexCheatsheet().   .'</td>'
    .'<td>'
    .&Apache::edit::insertlist($target,$token)
    .'</td>';
    }
    $result.='<td align="right" valign="top">' .
       &Apache::loncommon::helpLatexCheatsheet().
  &Apache::edit::end_row().   &Apache::edit::end_row().
                  &Apache::edit::start_spanning_row()."\n".                   &Apache::edit::start_spanning_row()."\n".
  &Apache::edit::editfield($token->[1],$text,"",80,8,1);   &Apache::edit::editfield($token->[1],$text,"",80,8,1);
Line 1954  sub end_simpleeditbutton { Line 2030  sub end_simpleeditbutton {
     return '';      return '';
 }  }
   
   sub practice_problem_header {
       return '<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'.
              '<span class="LC_info">'.&mt('Submissions are not permanently recorded').
              '</span>';
   }
   
 1;  1;
 __END__  __END__
   
   =pod
   
   =back
   
   =cut

Removed from v.1.417  
changed lines
  Added in v.1.435


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