Diff for /loncom/homework/structuretags.pm between versions 1.465.2.14 and 1.497

version 1.465.2.14, 2011/10/06 03:23:44 version 1.497, 2011/11/14 00:20:39
Line 172  function setmode(form,probmode) { Line 172  function setmode(form,probmode) {
 ENDSCRIPT  ENDSCRIPT
 }  }
   
 sub file_delchk_js {  
     my $delfilewarn = &mt('You have indicated you wish to remove some files previously included in your submission.').'\\n'.  
                       &mt('Continue submission with these files removed?');  
     return <<"ENDSCRIPT";  
 <script type="text/javascript">  
 // <![CDATA[  
 function file_deletion_check(formname) {  
     var elemnum = formname.elements.length;  
     if (elemnum == 0) {  
         return true;  
     }  
     var str = new RegExp("^HWFILE.+_delete\$");  
     var delboxes = new Array();  
     for (i=0; i<formname.elements.length; i++) {  
         var id = formname.elements[i].id;  
         if (id != '') {  
             if (str.test(id)) {  
                 if (formname.elements[i].type == 'checkbox') {  
                     if (formname.elements[i].checked) {  
                         delboxes.push(id);  
                     }  
                 }  
             }  
         }  
     }  
     if (delboxes.length > 0) {  
         if (confirm("$delfilewarn")) {  
             return true;  
         } else {  
             for (var j=0; j<delboxes.length; j++) {  
                 formname.elements[delboxes[j]].checked = false;  
             }  
             return false;  
         }  
     } else {  
         return true;  
     }  
 }  
 // ]]>  
 </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 240  sub page_start { Line 197  sub page_start {
         $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);          $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);
     }      }
     my $is_task = ($env{'request.uri'} =~ /\.task$/);      my $is_task = ($env{'request.uri'} =~ /\.task$/);
       my $needs_upload;
       my ($symb)= &Apache::lonnet::whichuser();
       my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb);
     if ($is_task) {      if ($is_task) {
         $extra_head .= &file_delchk_js();          $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js();
       } else {
           if (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.uploadedfiletypes") ne '') {
               unless ($env{'request.state'} eq 'construct') {
                   my $navmap = Apache::lonnavmaps::navmap->new();
                   if (ref($navmap)) {
                       my $mapres = $navmap->getResourceByUrl($map);
                       my $is_page;
                       if (ref($mapres)) {
                           $is_page = $mapres->is_page();
                       }
                       unless ($is_page) {
                           $needs_upload = 1;
                       }
                   }
               }
           } else {
               unless ($env{'request.state'} eq 'construct') {
                   my $navmap = Apache::lonnavmaps::navmap->new();
                   if (ref($navmap)) {
                       my $mapres = $navmap->getResourceByUrl($map);
                       my $is_page;
                       if (ref($mapres)) {
                           $is_page = $mapres->is_page();
                       }
                       unless ($is_page) {
                           my $res = $navmap->getBySymb($symb);
                           if (ref($res)) {
                               my $partlist = $res->parts();
                               if (ref($partlist) eq 'ARRAY') {
                                   foreach my $part (@{$partlist}) {
                                       my @types = $res->responseType($part);
                                       my @ids = $res->responseIds($part);
                                       for (my $i=0; $i < scalar(@ids); $i++) {
                                           if ($types[$i] eq 'essay') {
                                               my $partid = $part.'_'.$ids[$i];
                                               if (&Apache::lonnet::EXT("resource.$partid.uploadedfiletypes") ne '') {
                                                   $needs_upload = 1;
                                                   last;
                                               }
                                           }
                                       }
                                   }
                               } 
                           }
                       }
                   }
               }
           }
           if ($needs_upload) {
               $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js();
           }
     }      }
   
     my %body_args;      my %body_args;
Line 268  sub page_start { Line 279  sub page_start {
     } 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') {
     if ($env{'environment.remote'} ne 'off') {  
  $body_args{'only_body'}  = 1;  
     }  
         # Breadcrumbs for Construction Space          # Breadcrumbs for Construction Space
         &Apache::lonhtmlcommon::clear_breadcrumbs();          &Apache::lonhtmlcommon::clear_breadcrumbs();
         &Apache::lonhtmlcommon::add_breadcrumb({          &Apache::lonhtmlcommon::add_breadcrumb({
             'text'  => 'Construction Space',              'text'  => 'Construction Space',
             'href'  => &Apache::loncommon::authorspace(),              'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),
         });          });
         # breadcrumbs (and tools) will be created           # breadcrumbs (and tools) will be created 
         # in start_page->bodytag->innerregister          # in start_page->bodytag->innerregister
Line 304  sub page_start { Line 312  sub page_start {
         # $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'          if ( $env{'request.state'} eq   'construct') {
             && $env{'request.state'} eq   'construct') {  
             $body_args{'only_body'}  = 1;              $body_args{'only_body'}  = 1;
         }          }
     }      }
Line 328  sub page_start { Line 335  sub page_start {
     if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') {      if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') {
  $page_start .= &Apache::lonxml::message_location();   $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="';
Line 339  sub page_start { Line 345  sub page_start {
  if ($target eq 'edit') {   if ($target eq 'edit') {
     $form_tag_start.=&Apache::edit::form_change_detection();      $form_tag_start.=&Apache::edit::form_change_detection();
  }   }
         if ($is_task) {          my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser();
             $form_tag_start .= ' onsubmit="return file_deletion_check(this);"';          my ($path,$multiresp) = 
               &Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom);
           if (($is_task) || ($needs_upload)) {
               $form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"';
         }          }
  $form_tag_start.='>'."\n";   $form_tag_start.='>'."\n";
   
Line 406  sub setup_rndseed { Line 415  sub setup_rndseed {
     }      }
     $env{'form.rndseed'}=$rndseed;      $env{'form.rndseed'}=$rndseed;
  }   }
         if (($env{'request.state'} eq "construct") &&          if (($env{'request.state'} eq "construct") && 
             ($Apache::lonhomework::type eq 'randomizetry')) {              ($Apache::lonhomework::type eq 'randomizetry')) {
             my $tries = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"};              my $tries = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"};
             if ($tries) {              if ($tries) {
Line 423  sub setup_rndseed { Line 432  sub setup_rndseed {
     delete($env{'form.resetdata'});      delete($env{'form.resetdata'});
     delete($env{'form.newrandomization'});      delete($env{'form.newrandomization'});
  }   }
  if (defined($rndseed) && $rndseed ne int($rndseed)) {          $rndseed=~s/\,/\:/g;
     $rndseed=join(':',&Apache::lonnet::digest($rndseed));          $rndseed=~s/[^\w\d\:\-]//g;
    if (defined($rndseed)) {
               my ($c1,$c2)=split(/\:/,$rndseed);
               unless ($c2) { $c2=0; }
               unless (($c1==int($c1)) && ($c2==int($c2))) {
          $rndseed=join(':',&Apache::lonnet::digest($rndseed));
               }
         }          }
         if ($Apache::lonhomework::history{'resource.CODE'}) {          if ($Apache::lonhomework::history{'resource.CODE'}) {
    $rndseed=&Apache::lonnet::rndseed();     $rndseed=&Apache::lonnet::rndseed();
Line 484  sub problem_edit_action_button { Line 499  sub problem_edit_action_button {
 }  }
   
 sub problem_edit_buttons {  sub problem_edit_buttons {
     my ($mode)=@_;     my ($mode)=@_;
 # Buttons that do not save  # Buttons that do not save
     my $result='<div class="LC_edit_problem_discards">'.     my $result='<div class="LC_edit_problem_discards">'.
               &problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1);                &problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1);
     if ($mode eq 'editxml') {     if ($mode eq 'editxml') {
         $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);         $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);
         $result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1);         $result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1);
         $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);         $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);
     } else {     } else {
         $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);         $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);
         $result.=&problem_edit_action_button('subundo','undo','u','Undo',1);         $result.=&problem_edit_action_button('subundo','undo','u','Undo',1);
     }     }
     $result.="\n</div>";     $result.="\n</div>";
 # Buttons that save  # Buttons that save
     $result.='<div class="LC_edit_problem_saves">';     $result.='<div class="LC_edit_problem_saves">';
     if ($mode eq 'editxml') {     if ($mode eq 'editxml') {
         $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');         $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
         $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');         $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');
     } else {     } else {
         $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');         $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
         $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');         $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');
     }     }
     $result.="\n</div>\n";     $result.="\n</div>\n";
     return $result;     return $result;
 }  }
   
 sub problem_edit_header {  sub problem_edit_header {
Line 654  $show_all Line 669  $show_all
    <div class="LC_edit_problem_header_randomize_row">     <div class="LC_edit_problem_header_randomize_row">
      <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="changerandseed" value="'.&mt('Change Random Seed To:').'" />       <input type="submit" name="changerandseed" value="'.&mt('Change Random Seed To:').'" />
      <input type="text" name="rndseed" size="10" value="'.       <input type="text" name="rndseed" size="24" value="'.
        $rndseed.'"         $rndseed.'"
              onchange="javascript:document.lonhomework.changerandseed.click()" />';               onchange="javascript:document.lonhomework.changerandseed.click()" />';
   
Line 793  sub store_aggregates { Line 808  sub store_aggregates {
     foreach my $part (@parts) {      foreach my $part (@parts) {
         if ($env{'request.role'} =~/^st/) {          if ($env{'request.role'} =~/^st/) {
             if ($Apache::lonhomework::results{'resource.'.$part.'.award'}              if ($Apache::lonhomework::results{'resource.'.$part.'.award'}
                 eq 'APPROX_ANS' ||          eq 'APPROX_ANS' ||
                 $Apache::lonhomework::results{'resource.'.$part.'.award'}          $Apache::lonhomework::results{'resource.'.$part.'.award'}
                 eq 'EXACT_ANS') {          eq 'EXACT_ANS') {
                 $aggregate{$symb."\0".$part."\0correct"} = 1;                  $aggregate{$symb."\0".$part."\0correct"} = 1;
             }              }
             if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) {              if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) {
                 $aggregate{$symb."\0".$part."\0users"} = 1;                  $aggregate{$symb."\0".$part."\0users"} = 1;
             } else {              } else {
                 my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]);                  my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]); 
                 if ($last_reset) {                  if ($last_reset) {
                     if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) {                      if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) {
                         $aggregate{$symb."\0".$part."\0users"} = 1;                          $aggregate{$symb."\0".$part."\0users"} = 1;
Line 810  sub store_aggregates { Line 825  sub store_aggregates {
             }              }
             $aggregate{$symb."\0".$part."\0attempts"} = 1;              $aggregate{$symb."\0".$part."\0attempts"} = 1;
         }          }
         if (($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurvey') ||          if (($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurvey') || 
             ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurveycred') ||              ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurveycred') ||
             ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'randomizetry')) {              ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'randomizetry')) {
             if ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'randomizetry') {              if ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'randomizetry') {
Line 819  sub store_aggregates { Line 834  sub store_aggregates {
                 $anoncounter{$symb."\0".$part} = 1;                  $anoncounter{$symb."\0".$part} = 1;
             }              }
             my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}};              my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}};
             if ($needsrelease) {              if ($needsrelease) {   
                 my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'};                  my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'};
                 if ($curr_required eq '') {                  if ($curr_required eq '') {
                     &Apache::lonnet::update_released_required($needsrelease);                      &Apache::lonnet::update_released_required($needsrelease);
Line 1057  sub start_problem { Line 1072  sub start_problem {
     if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }      if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }
     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') {
  #handle exam checkout  
  if ($Apache::lonhomework::type eq 'exam') {  
     my $token=  
  $Apache::lonhomework::history{"resource.0.outtoken"};  
     if (($env{'form.doescheckout'}) && (!$token)) {  
  $token=&Apache::lonxml::maketoken();  
  $Apache::lonhomework::history{"resource.0.outtoken"}=  
     $token;  
     }  
     $result.=&Apache::lonxml::printtokenheader($target,$token);  
  }  
  if ($env{'form.markaccess'}) {   if ($env{'form.markaccess'}) {
     my @interval=&Apache::lonnet::EXT("resource.0.interval");      my @interval=&Apache::lonnet::EXT("resource.0.interval");
     &Apache::lonnet::set_first_access($interval[1]);      &Apache::lonnet::set_first_access($interval[1]);
Line 1193  sub start_problem { Line 1197  sub start_problem {
     $result .= '<input type="hidden" name="grade_'.$field.      $result .= '<input type="hidden" name="grade_'.$field.
  '" value="'.$env{"form.grade_$field"}.'" />'."\n";   '" value="'.$env{"form.grade_$field"}.'" />'."\n";
  }   }
                 foreach my $field ('questiontype','rndseed') {                  foreach my $field ('trial','questiontype') {
                     if ($env{"form.grade_$field"} ne '') {                      if ($env{"form.grade_$field"} ne '') {
                         $result .= '<input type="hidden" name="grade_'.$field.                          $result .= '<input type="hidden" name="grade_'.$field.
                             '" value="'.$env{"form.grade_$field"}.'" />'."\n";                              '" value="'.$env{"form.grade_$field"}.'" />'."\n";
                     }                      }
                 }                  }
   
     }      }
               if ($env{'form.grade_imsexport'}) {
                   $result = '';
               }
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     $result .= 'INSERTTEXFRONTMATTERHERE';      $result .= 'INSERTTEXFRONTMATTERHERE';
   
Line 1339  sub end_problem { Line 1345  sub end_problem {
     }      }
  } elsif ( ($target eq 'web' || $target eq 'tex') &&   } elsif ( ($target eq 'web' || $target eq 'tex') &&
   $Apache::inputtags::part eq '0' &&    $Apache::inputtags::part eq '0' &&
   $status ne 'UNCHECKEDOUT' && $status ne 'NOT_YET_VIEWED') {     $status ne 'UNCHECKEDOUT' && $status ne 'NOT_YET_VIEWED'
                     && !$env{'form.grade_imsexport'}) {
     # if part is zero, no <part>s existed, so we need show the current      # if part is zero, no <part>s existed, so we need show the current
     # grading status      # grading status
     my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);      my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);
Line 1350  sub end_problem { Line 1357  sub end_problem {
     ($target eq 'answer') || ($target eq 'tex')      ($target eq 'answer') || ($target eq 'tex')
    ) {     ) {
     if (($target ne 'tex') &&      if (($target ne 'tex') &&
  ($env{'form.answer_output_mode'} ne 'tex')) {   ($env{'form.answer_output_mode'} ne 'tex') && 
                   (!$env{'form.grade_imsexport'})) {
  $result.="</form>";   $result.="</form>";
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
Line 1876  sub ordered_show_check { Line 1884  sub ordered_show_check {
     return $in_order_show;      return $in_order_show;
 }  }
   
   
 sub start_startpartmarker {  sub start_startpartmarker {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result='';      my $result='';
Line 1884  sub start_startpartmarker { Line 1893  sub start_startpartmarker {
         $result.=&mt('Marker for the start of a part. Place end marker below to wrap in-between tags into a new part.').'</td></tr>';          $result.=&mt('Marker for the start of a part. Place end marker below to wrap in-between tags into a new part.').'</td></tr>';
         $result.=&Apache::edit::end_table();          $result.=&Apache::edit::end_table();
   
     }      } 
     return $result;      return $result;
 }  }
   
Line 1914  sub end_endpartmarker { Line 1923  sub end_endpartmarker {
     return @result;      return @result;
 }  }
   
   
   
   
   
 sub start_part {  sub start_part {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if (!$Apache::lonxml::metamode) {      if (!$Apache::lonxml::metamode) {
Line 2004  sub start_part { Line 2017  sub start_part {
     }      }
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
                     if ($status eq 'CAN_ANSWER') {                      if ($status eq 'CAN_ANSWER') {
                         my $problemstatus = &get_problem_status($Apache::inputtags::part);                          my $problemstatus = &get_problem_status($Apache::inputtags::part); 
                         my $probrandomize = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].type");                          my $probrandomize = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].type");
                         my $probrandtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].randomizeontries");                          my $probrandtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].randomizeontries");
                         my $num = scalar(@Apache::inputtags::partlist)-1;                          my $num = scalar(@Apache::inputtags::partlist)-1;
Line 2022  sub start_part { Line 2035  sub start_part {
                             $result .= &randomizetry_part_header($problemstatus,$reqtries,$num);                              $result .= &randomizetry_part_header($problemstatus,$reqtries,$num);
                         }                          }
                     }                      }
     $result.='<a name="'.&escape($Apache::inputtags::part).'"></a>';      $result.='<a name="'.&escape($Apache::inputtags::part).'" ></a>';
  }   }
     }      }
  }   }
Line 2068  sub end_part { Line 2081  sub end_part {
      !$hidden && $in_order_show) {       !$hidden && $in_order_show) {
  my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,   my $gradestatus=&Apache::inputtags::gradestatus($Apache::inputtags::part,
  $target);   $target);
  if ($Apache::lonhomework::type eq 'exam' && $target eq 'tex') {   if (($Apache::lonhomework::type eq 'exam' && $target eq 'tex') ||
                ($env{'form.grade_imsexport'})) {
     $gradestatus='';      $gradestatus='';
  }   }
  $result.=$gradestatus;   $result.=$gradestatus;
Line 2236  sub end_startouttext { Line 2250  sub end_startouttext {
                  .'</span></td>'                   .'</span></td>'
          .'<td align="left"><span id="math_'.$areaid.'" />'           .'<td align="left"><span id="math_'.$areaid.'" />'
  .&Apache::lonhtmlcommon::dragmath_button($areaid,1)   .&Apache::lonhtmlcommon::dragmath_button($areaid,1)
  .'</td>'   .'<span></td>'
  .'<td>'   .'<td>'
  .&Apache::edit::insertlist($target,$token)   .&Apache::edit::insertlist($target,$token)
  .'</td>'   .'</td>'

Removed from v.1.465.2.14  
changed lines
  Added in v.1.497


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