Diff for /loncom/homework/bridgetask.pm between versions 1.255 and 1.271

version 1.255, 2010/10/12 16:07:43 version 1.271, 2020/09/01 16:36:38
Line 37  use Apache::lonmenu; Line 37  use Apache::lonmenu;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::slotrequest();  use Apache::slotrequest();
   use Apache::structuretags();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 use LONCAPA;  use LONCAPA;
     
Line 64  sub initialize_bridgetask { Line 65  sub initialize_bridgetask {
 sub proctor_check_auth {  sub proctor_check_auth {
     my ($slot_name,$slot,$type)=@_;      my ($slot_name,$slot,$type)=@_;
     my $user=$env{'form.proctorname'};      my $user=$env{'form.proctorname'};
       $user =~ s/^\s+|\s+$//g;
     my $domain=$env{'form.proctordomain'};      my $domain=$env{'form.proctordomain'};
           
     my @allowed=split(",",$slot->{'proctor'});      my @allowed=split(",",$slot->{'proctor'});
Line 82  sub proctor_check_auth { Line 84  sub proctor_check_auth {
  }   }
     }      }
     if ($authenticated) {      if ($authenticated) {
  my $check = &check_in($type,$user,$domain,$slot_name);   my $check = &check_in($type,$user,$domain,$slot_name,$slot->{'iptied'});
                 if ($check =~ /^error:/) {                  if ($check =~ /^error:/) {
                     return 0;                      return 0;
                 }                  }
Line 94  sub proctor_check_auth { Line 96  sub proctor_check_auth {
 }  }
   
 sub check_in {  sub check_in {
     my ($type,$user,$domain,$slot_name) = @_;      my ($type,$user,$domain,$slot_name,$needsiptied) = @_;
     my $useslots = &Apache::lonnet::EXT("resource.0.useslots");      my $useslots = &Apache::lonnet::EXT("resource.0.useslots");
       my $ip=$ENV{'REMOTE_ADDR'} || $env{'request.host'};
     if ( $useslots eq 'map_map') {      if ( $useslots eq 'map_map') {
  my $result = &check_in_sequence($user,$domain,$slot_name);   my $result = &check_in_sequence($user,$domain,$slot_name,$ip,$needsiptied);
         if ($result =~ /^error: /) {          if ($result =~ /^error: /) {
             return $result;              return $result;
         }          }
     } else {      } else {
  &create_new_version($type,$user,$domain,$slot_name);          my ($symb) = &Apache::lonnet::whichuser();
  &Apache::structuretags::finalize_storage();   my $result = &create_new_version($type,$user,$domain,$slot_name,$symb,$ip,$needsiptied);
           if ($result eq 'ok') {
       &Apache::structuretags::finalize_storage();
           }
           return $result; 
     }      }
     return 1;      return 1;
 }  }
   
 sub check_in_sequence {  sub check_in_sequence {
     my ($user,$domain,$slot_name) = @_;      my ($user,$domain,$slot_name,$ip,$needsiptied) = @_;
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {      if (!defined($navmap)) {
         return 'error: ';          return 'error: No navmap';
     }      }
     my ($symb) = &Apache::lonnet::whichuser();      my ($symb) = &Apache::lonnet::whichuser();
     my ($map)  = &Apache::lonnet::decode_symb($symb);      my ($map)  = &Apache::lonnet::decode_symb($symb);
     my @resources =       my @resources = 
  $navmap->retrieveResources($map, sub { $_[0]->is_problem() },0,0);   $navmap->retrieveResources($map, sub { $_[0]->is_problem() || $_[0]->is_tool() },0,0);
     my %old_history = %Apache::lonhomework::history;      my %old_history = %Apache::lonhomework::history;
     my %old_results = %Apache::lonhomework::results;      my %old_results = %Apache::lonhomework::results;
   
       my $errorcount;
     foreach my $res (@resources) {      foreach my $res (@resources) {
  &Apache::lonxml::debug("doing ".$res->src);   &Apache::lonxml::debug("doing ".$res->src);
  &Apache::structuretags::initialize_storage($res->symb);   &Apache::structuretags::initialize_storage($res->symb);
  my $type = ($res->is_task()) ? 'Task' : 'problem';   my $type;
  &create_new_version($type,$user,$domain,$slot_name);          if ($res->is_task()) {
  &Apache::structuretags::finalize_storage($res->symb);              $type = 'Task';
           } elsif ($res->is_tool) {
               $type = 'tool';
           } else {
               $type = 'problem';
           }
    my $result = &create_new_version($type,$user,$domain,$slot_name,$res->symb,$ip,$needsiptied);
           if ($result eq 'ok') {
       &Apache::structuretags::finalize_storage($res->symb);
           } else {
               $errorcount ++;
           }
     }      }
           
     %Apache::lonhomework::history = %old_history;      %Apache::lonhomework::history = %old_history;
     %Apache::lonhomework::results = %old_results;      %Apache::lonhomework::results = %old_results;
       if ($errorcount) {
           return 'error: IP taken';
       }
 }  }
   
 sub create_new_version {  sub create_new_version {
     my ($type,$user,$domain,$slot_name) = @_;      my ($type,$user,$domain,$slot_name,$symb,$ip,$needsiptied) = @_;
   
       if ($needsiptied) {
           my $uniqkey = "$slot_name\0$symb\0$ip";
           my ($cdom,$cnum);
           if ($env{'request.course.id'}) {
               my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
               my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
               my %hash = (
                             "$slot_name\0$symb\0$ip" => $env{'user.name'}.':'.$env{'user.domain'}, 
                          );
               unless (&Apache::lonnet::newput('slot_uniqueips',\%hash,$cdom,$cnum) eq 'ok') {
                   return 'error: IP taken';
               }
           }
       }
           
     my $id = '0';      my $id = '0';
     if ($type eq 'Task') {      if ($type eq 'Task') {
Line 158  sub create_new_version { Line 195  sub create_new_version {
     $domain = $env{'user.domain'};      $domain = $env{'user.domain'};
  }   }
   
     } elsif ($type eq 'problem') {      } elsif (($type eq 'problem') || ($type eq 'tool')) {
  &Apache::lonxml::debug("authed $slot_name");   &Apache::lonxml::debug("authed $slot_name");
     }      }
     if (!defined($user) || !defined($domain)) {      if (!defined($user) || !defined($domain)) {
Line 168  sub create_new_version { Line 205  sub create_new_version {
   
     $Apache::lonhomework::results{"resource.$id.checkedin"}=      $Apache::lonhomework::results{"resource.$id.checkedin"}=
  $user.':'.$domain;   $user.':'.$domain;
       $Apache::lonhomework::results{"resource.$id.checkedin.ip"}=$ip;
   
     if (defined($slot_name)) {      if (defined($slot_name)) {
  $Apache::lonhomework::results{"resource.$id.checkedin.slot"}=   $Apache::lonhomework::results{"resource.$id.checkedin.slot"}=
     $slot_name;      $slot_name;
     }      }
       return 'ok'; 
 }  }
   
 sub get_version {  sub get_version {
Line 198  sub get_version { Line 237  sub get_version {
   
 sub add_previous_version_button {  sub add_previous_version_button {
     my ($status)=@_;      my ($status)=@_;
       my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser();
       if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
           return;
       }
     my $result;      my $result;
     if ($Apache::lonhomework::history{'resource.0.version'} eq '') {      if ($Apache::lonhomework::history{'resource.0.version'} eq '') {
  return '';   return '';
Line 234  sub add_previous_version_button { Line 277  sub add_previous_version_button {
 }  }
   
 sub add_grading_button {  sub add_grading_button {
     my (undef,$cid)=&Apache::lonnet::whichuser();      my (undef,$cid,$udom,$uname)=&Apache::lonnet::whichuser();
       if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
           return;
       }
     my $cnum=$env{'course.'.$cid.'.num'};      my $cnum=$env{'course.'.$cid.'.num'};
     my $cdom=$env{'course.'.$cid.'.domain'};      my $cdom=$env{'course.'.$cid.'.domain'};
     my %sections = &Apache::loncommon::get_sections($cdom,$cnum);      my %sections = &Apache::loncommon::get_sections($cdom,$cnum);
Line 244  sub add_grading_button { Line 290  sub add_grading_button {
  $size=scalar(keys(%sections))+2;   $size=scalar(keys(%sections))+2;
     }      }
     my $sec_select = "\n".'<select multiple="multiple" name="chosensections" size="'.$size.'">'."\n";      my $sec_select = "\n".'<select multiple="multiple" name="chosensections" size="'.$size.'">'."\n";
     $sec_select .= "\t<option value='all' selected='selected'>all</option>\n";      $sec_select .= "\t".'<option value="all" selected="selected">'.&mt('all')."</option>\n";
     foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {      foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {
  $sec_select .= "\t<option value=\"$sec\">$sec</option>\n";   $sec_select .= "\t<option value=\"$sec\">$sec</option>\n";
     }      }
     $sec_select .= "\t<option value='none'>none</option>\n</select>\n";      $sec_select .= "\t".'<option value="none">'.&mt('none')."</option>\n</select>\n";
       
     my $result="\n\t".'<input type="submit" name="gradeasubmission" value="'.      my $uri=$env{'request.uri'};
  &mt("Get a submission to grade").'" />';      if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); }
     $result.="\n\t".'<input type="hidden" name="grade_target" value="webgrade" />';      my $result = 
           '<form name="gradesubmission" method="post" action="'.$uri.'">'.
           "\n\t".'<input type="submit" name="gradeasubmission" value="'.
    &mt("Get a submission to grade").'" />'.
           "\n\t".'<input type="hidden" name="grade_target" value="webgrade" />';
     my $see_all = &Apache::lonnet::allowed('mgq',$env{'request.course.id'});      my $see_all = &Apache::lonnet::allowed('mgq',$env{'request.course.id'});
     my $see_sec = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.      my $see_sec = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.
    '/'.$env{'request.course.sec'});     '/'.$env{'request.course.sec'});
Line 298  sub add_grading_button { Line 348  sub add_grading_button {
  $result.=&Apache::loncommon::studentbrowser_javascript();   $result.=&Apache::loncommon::studentbrowser_javascript();
  $result.= '</p>'."\n";   $result.= '</p>'."\n";
     }      }
       $result .= '</form>'."\n";
       return $result;
   }
   
   sub add_slotlist_button {
       my (undef,$cid,$udom,$uname)=&Apache::lonnet::whichuser();
       if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
           return;
       }
       my $symb=&Apache::lonnet::symbread();
       my $result;
       if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'}) ||
           &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
           $result = '<form method="post" name="slotrequest" action="/adm/slotrequest">'.
                     '<input type="hidden" name="symb" value="'.$symb.'" />'.
                     '<input type="hidden" name="command" value="showslots" />'.
                     '<input type="submit" name="requestattempt" value="'.
                     &mt('Show Slot list').'" />'.
                     '</form>';
           my $target_id =
                  &Apache::lonstathelpers::make_target_id({symb => $symb,
                                                                part => '0'});
           if (!&section_restricted()) {
               $result.='<form method="post" name="gradingstatus" action="/adm/statistics">'.
                        '<input type="hidden" name="problemchoice" value="'.$target_id.'" />'.
                        '<input type="hidden" name="reportSelected" value="grading_analysis" />'.
                        '<input type="submit" name="grading" value="'.
                        &mt('Show Grading Status').'" />'.
                        '</form>';
           }
       }
     return $result;      return $result;
 }  }
   
 sub add_request_another_attempt_button {  sub add_request_another_attempt_button {
     my ($text)=@_;      my ($text)=@_;
       my (undef,$cid,$udom,$uname)=&Apache::lonnet::whichuser();
       if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
           return;
       }
     if (!$text) { $text=&mt('Request another attempt'); }      if (!$text) { $text=&mt('Request another attempt'); }
     my $result;      my $result;
     my $symb=&Apache::lonnet::symbread();      my $symb=&Apache::lonnet::symbread();
Line 380  sub show_task { Line 465  sub show_task {
        ( $status eq 'BANNED') ||         ( $status eq 'BANNED') ||
        ( $status eq 'UNAVAILABLE') ||         ( $status eq 'UNAVAILABLE') ||
        ( $status eq 'NOT_IN_A_SLOT') ||         ( $status eq 'NOT_IN_A_SLOT') ||
                          ( $status eq 'NOT_YET_VIEWED') ||
        ( $status eq 'NEEDS_CHECKIN') ||         ( $status eq 'NEEDS_CHECKIN') ||
        ( $status eq 'WAITING_FOR_GRADE') ||         ( $status eq 'WAITING_FOR_GRADE') ||
        ( $status eq 'INVALID_ACCESS') ||         ( $status eq 'INVALID_ACCESS') ||
Line 627  sub start_Task { Line 713  sub start_Task {
     &Apache::structuretags::page_start($target,$token,$tagstack,      &Apache::structuretags::page_start($target,$token,$tagstack,
        $parstack,$parser,$safeeval,         $parstack,$parser,$safeeval,
        $name,&style($target));         $name,&style($target));
   
       }
       if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
           $target eq 'tex') {
           if ($env{'form.markaccess'}) {
               my @interval=&Apache::lonnet::EXT("resource.0.interval");
               my ($timelimit) = ($interval[0] =~ /^(\d+)/);
               &Apache::lonnet::set_first_access($interval[1],$timelimit);
           }
     }      }
   
     if ($target eq 'web' && $env{'request.state'} ne 'construct') {      if ($target eq 'web' && $env{'request.state'} ne 'construct') {
  if ($Apache::lonhomework::queuegrade   if ($Apache::lonhomework::queuegrade
     || $Apache::lonhomework::modifygrades) {      || $Apache::lonhomework::modifygrades) {
     $result.='<form name="gradesubmission" method="post" action="';      $result .= &add_grading_button();
     my $uri=$env{'request.uri'};  
     if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); }  
     $result.=$uri.'">'.&add_grading_button()."</form>\n";  
     my $symb=&Apache::lonnet::symbread();      my $symb=&Apache::lonnet::symbread();
     if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'})      if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'})
  || &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {   || &Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
  $result.='<form method="post" name="slotrequest" action="/adm/slotrequest">'.                  $result .= &add_slotlist_button(); 
     '<input type="hidden" name="symb" value="'.$symb.'" />'.  
     '<input type="hidden" name="command" value="showslots" />'.  
     '<input type="submit" name="requestattempt" value="'.  
     &mt('Show Slot list').'" />'.  
     '</form>';  
  my $target_id =   
     &Apache::lonstathelpers::make_target_id({symb => $symb,  
      part => '0'});  
  if (!&section_restricted()) {  
     $result.='<form method="post" name="gradingstatus" action="/adm/statistics">'.  
  '<input type="hidden" name="problemchoice" value="'.$target_id.'" />'.  
  '<input type="hidden" name="reportSelected" value="grading_analysis" />'.  
  '<input type="submit" name="grading" value="'.  
  &mt('Show Grading Status').'" />'.  
  '</form>';  
  }  
     }      }
  }   }
     }      }
Line 669  sub start_Task { Line 745  sub start_Task {
  my ($version,$previous)=&get_version();   my ($version,$previous)=&get_version();
  ($status,$accessmsg,my $slot_name,$slot) =    ($status,$accessmsg,my $slot_name,$slot) = 
     &Apache::lonhomework::check_slot_access('0','Task');      &Apache::lonhomework::check_slot_access('0','Task');
  if ($status eq 'CAN_ANSWER' && $version eq '') {   if ((($status eq 'CAN_ANSWER') || ($status eq 'NOT_YET_VIEWED')) && ($version eq '')) {
     # CAN_ANSWER mode, and no current version, unproctored access      # CAN_ANSWER or NOT_YET_VIEWED mode, and no current version, unproctored access
     # thus self-checkedin      # thus self-checkedin
     my $check = &check_in('Task',undef,undef,$slot_name);              my $needsiptied;
             if ($check =~ /^error: /) {              if (ref($slot)) {
                   $needsiptied = $slot->{'iptied'};
               }
       my $check = &check_in('Task',undef,undef,$slot_name,$needsiptied);
               if ($check =~ /^error:\s+(.*)$/) {
                 my $symb=&Apache::lonnet::symbread();                  my $symb=&Apache::lonnet::symbread();
                 &Apache::lonnet::logthis("Error during self-checkin of version $version of Task (symb: $symb) using slot: $slot_name");                     &Apache::lonnet::logthis("Error: $1 during self-checkin of version $version of Task (symb: $symb) using slot: $slot_name");   
             }              }
     &add_to_queue('gradingqueue',{'type' => 'Task',      &add_to_queue('gradingqueue',{'type' => 'Task',
   'time' => time,    'time' => time,
   'slot' => $slot_name});    'slot' => $slot_name});
     ($version,$previous)=&get_version();      ($version,$previous)=&get_version();
  }   }
           if (($target eq 'web') && ($version ne '') && ($slot_name ne '')) {
  my $status_id =               if (ref($slot) eq 'HASH') {
     ($previous || $status eq 'SHOW_ANSWER') ? 'LC_task_feedback'                  if ($slot->{'endtime'} > time()) {
                                             : 'LC_task_take';                      $result .=
                           &Apache::lonhtmlcommon::set_due_date($slot->{'endtime'});
                   }
               }
    }
   
    my $status_id = 'LC_task_take';
           if ($previous && $target eq 'answer') {
               $status_id = 'LC_task_answer';
           } elsif ($previous || $status eq 'SHOW_ANSWER') {
       $status_id = 'LC_task_feedback';
           }
  $result .= '<div class="LC_task" id="'.$status_id.'">'."\n";   $result .= '<div class="LC_task" id="'.$status_id.'">'."\n";
   
  push(@Apache::inputtags::status,$status);   push(@Apache::inputtags::status,$status);
Line 703  sub start_Task { Line 794  sub start_Task {
  }   }
  my $msg;   my $msg;
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';      $msg.='<p class="LC_error">'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</p>';
  } elsif ($status eq 'NOT_IN_A_SLOT') {   } elsif ($status eq 'NOT_IN_A_SLOT') {
     $msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>';      $msg.='<p class="LC_warning">'.&mt('You are not currently signed up to work at this time and/or place.').'</p>';
     $msg.=&add_request_another_attempt_button("Sign up for time to work");      $msg.=&add_request_another_attempt_button("Sign up for time to work");
  } elsif ($status eq 'NEEDS_CHECKIN') {   } elsif ($status eq 'NEEDS_CHECKIN') {
     $msg.='<h1>'.&mt('You need the Proctor to validate you.').      $msg.='<p class="LC_warning">'.&mt('You need the Proctor to validate you.').
  '</h1>'.&proctor_validation_screen($slot);   '</p>'.&proctor_validation_screen($slot);
  } elsif ($status eq 'WAITING_FOR_GRADE') {   } elsif ($status eq 'WAITING_FOR_GRADE') {
     $msg.='<h1>'.&mt('Your submission is in the grading queue.').'</h1>';      $msg.='<p class="LC_info">'.&mt('Your submission is in the grading queue.').'</p>';
  } elsif ($env{'form.donescreen'}) {   } elsif ($env{'form.donescreen'}) {
     $result .= &done_screen($version);      $result .= &done_screen($version);
  } elsif ($status ne 'NOT_YET_VIEWED') {   } elsif ($status eq 'NOT_YET_VIEWED') {
     $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';                      my $symb=&Apache::lonnet::symbread();
                       $msg.=&Apache::structuretags::firstaccess_msg($accessmsg,$symb);
                   } elsif ($status eq 'NEED_DIFFERENT_IP') {
   #FIXME
    } else {
       $msg.='<p class="LC_warning">'.&mt('Not open to be viewed').'</p>';
  }   }
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {   if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
     $msg.='The problem '.$accessmsg;      $msg.='The problem '.$accessmsg;
Line 945  sub get_key_todo { Line 1041  sub get_key_todo {
     my $classlist=&get_limited_classlist();      my $classlist=&get_limited_classlist();
     if (!&allow_grade_user($classlist->{$uname.':'.$udom})) {      if (!&allow_grade_user($classlist->{$uname.':'.$udom})) {
  return (undef,'not_allowed',   return (undef,'not_allowed',
  &mt('Requested student ([_1]) is in a section you aren\'t allowed to grade.',$uname.':'.$udom));   &mt("Requested student ([_1]) is in a section you aren't allowed to grade.",$uname.':'.$udom));
     }      }
  }   }
  my $gradingkey=&encode_queue_key($symb,$udom,$uname);   my $gradingkey=&encode_queue_key($symb,$udom,$uname);
Line 1112  sub end_Task { Line 1208  sub end_Task {
                         $portheader = &mt('Submit Portfolio Files for Grading');                          $portheader = &mt('Submit Portfolio Files for Grading');
                         $porttext = &mt('Indicate the files from your portfolio to be evaluated in grading this task.');                          $porttext = &mt('Indicate the files from your portfolio to be evaluated in grading this task.');
                     }                      }
     $result.="\n".'<p>'.&Apache::lonhtmlcommon::start_pick_box().      $result.="\n".'<div>'.&Apache::lonhtmlcommon::start_pick_box().
  &Apache::inputtags::file_selector("$version.0",   &Apache::inputtags::file_selector("$version.0",
   "bridgetask","*",    "bridgetask","*",
   'portfolioonly',    'portfolioonly',
                                                           '<h3>'.$portheader.'</h3><br />'.                                                            '<h3>'.$portheader.'</h3><br />'.
                                                           $porttext.'<br />').                                                            $porttext.'<br />').
  &Apache::lonhtmlcommon::end_pick_box().'</p>';   &Apache::lonhtmlcommon::end_pick_box().'</div>';
  }   }
  if (!$previous && $status ne 'SHOW_ANSWER' &&   if (!$previous && $status ne 'SHOW_ANSWER' &&
     &show_task($status,$previous)) {      &show_task($status,$previous)) {
Line 1201  DONEBUTTON Line 1297  DONEBUTTON
  }   }
  $result.="\n</div>\n".   $result.="\n</div>\n".
     &Apache::loncommon::end_page({'discussion' => 1});      &Apache::loncommon::end_page({'discussion' => 1});
     }      } elsif ($target eq 'answer') {
                   $result.="\n</div>\n";
               }
  }   }
   
  my $useslots = &Apache::lonnet::EXT("resource.0.useslots");   my $useslots = &Apache::lonnet::EXT("resource.0.useslots");
Line 1212  DONEBUTTON Line 1310  DONEBUTTON
  } elsif (defined($Apache::lonhomework::history{"resource.$version.0.checkedin.slot"})) {   } elsif (defined($Apache::lonhomework::history{"resource.$version.0.checkedin.slot"})) {
     $queue_data{'slot'} = $Apache::lonhomework::history{"resource.$version.0.checkedin.slot"};      $queue_data{'slot'} = $Apache::lonhomework::history{"resource.$version.0.checkedin.slot"};
  }   }
   
   
  if ($target eq 'grade' && !$env{'form.webgrade'} && !$previous   if ($target eq 'grade' && !$env{'form.webgrade'} && !$previous
     && $status eq 'CAN_ANSWER') {      && $status eq 'CAN_ANSWER') {
Line 1339  DONEBUTTON Line 1437  DONEBUTTON
     $Apache::lonhomework::results{"resource.$version.0.solved"};      $Apache::lonhomework::results{"resource.$version.0.solved"};
     }      }
     &minimize_storage();      &minimize_storage();
             my ($canstore,$domain,$name);              my ($canstore,$domain,$name,$symb,$courseid);
               ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser();
   
             if ($env{'form.gradingkey'}) {              if ($env{'form.gradingkey'}) {
                 (my $symb,my $courseid,$domain,$name) =  
                     &Apache::lonnet::whichuser();  
                 my $todo=&unescape($env{'form.gradingkey'});                  my $todo=&unescape($env{'form.gradingkey'});
                 my ($keysymb,$uname,$udom)=&decode_queue_key($todo);                  my ($keysymb,$uname,$udom)=&decode_queue_key($todo);
                 if ($symb eq $keysymb) {                  if ($symb eq $keysymb) {
Line 1353  DONEBUTTON Line 1451  DONEBUTTON
             }              }
             if ($canstore) {              if ($canstore) {
         &Apache::structuretags::finalize_storage();          &Apache::structuretags::finalize_storage();
                   my @interval = &Apache::lonnet::EXT("resource.0.interval");
                   if ($interval[0] =~ /^\d+/ && $interval[1] eq 'resource') {
                       my $key=$courseid."\0".$symb;
                       my %times=&Apache::lonnet::get('firstaccesstimes',
                                                      [$key],$domain,$name);
                       if ($times{$key}) {
                           my $delresult.=&Apache::lonnet::del('firstaccesstimes',
                                                               [$key],$domain,$name);
                       }
                   }
         # data stored, now handle queue          # data stored, now handle queue
         if ($review) {          if ($review) {
     if ($env{'form.queue'} eq 'reviewqueue') {      if ($env{'form.queue'} eq 'reviewqueue') {
Line 1733  sub show_queue { Line 1841  sub show_queue {
     $result.=(<<FORM);      $result.=(<<FORM);
 <td>$status</td>  <td>$status</td>
 <td>  <td>
 <form style="display: inline" method="post">  <form style="display: inline" method="post" action="">
  <input type="hidden" name="gradingkey" value="$ekey" />   <input type="hidden" name="gradingkey" value="$ekey" />
  <input type="hidden" name="queue" value="$queue" />   <input type="hidden" name="queue" value="$queue" />
  <input type="hidden" name="gradingaction" value="$action" />   <input type="hidden" name="gradingaction" value="$action" />
Line 2152  sub select_user { Line 2260  sub select_user {
     $result.=&Apache::loncommon::start_data_table_row();      $result.=&Apache::loncommon::start_data_table_row();
     $result.=<<RESULT;      $result.=<<RESULT;
   <td>    <td>
     <form style="display: inline" method="post">      <form style="display: inline" method="post" action="">
       <input type="hidden" name="gradingkey" value="$todo" />        <input type="hidden" name="gradingkey" value="$todo" />
       <input type="hidden" name="queue" value="$queue" />        <input type="hidden" name="queue" value="$queue" />
       <input type="hidden" name="webgrade" value="no" />        <input type="hidden" name="webgrade" value="no" />
Line 3222  sub proctor_validation_screen { Line 3330  sub proctor_validation_screen {
 <input type="hidden" name="validate" value="yes" />  <input type="hidden" name="validate" value="yes" />
 <input type="hidden" name="submitted" value="yes" />  <input type="hidden" name="submitted" value="yes" />
 <table>  <table>
   <tr><td>$lt{'prus'}</td><td><input type="string" name="proctorname" value="$env{'form.proctorname'}" /></td></tr>    <tr><td>$lt{'prus'}</td><td><input type="string" name="proctorname" value="$env{'form.proctorname'}" autocomplete="off" /></td></tr>
   <tr><td>$lt{'pasw'}</td><td><input type="password" name="proctorpassword" value="" /></td></tr>    <tr><td>$lt{'pasw'}</td><td><input type="password" name="proctorpassword" value="" autocomplete="off" /></td></tr>
   <tr><td>$lt{'prdo'}</td><td><input type="string" name="proctordomain" value="$env{'form.proctordomain'}" /></td></tr>    <tr><td>$lt{'prdo'}</td><td><input type="string" name="proctordomain" value="$env{'form.proctordomain'}" autocomplete="off" /></td></tr>
 </table>  </table>
 <input type="submit" name="checkoutbutton" value="$lt{'vali'}"  /><br />  <input type="submit" name="checkoutbutton" value="$lt{'vali'}"  /><br />
 <table border="1">  <table border="1">

Removed from v.1.255  
changed lines
  Added in v.1.271


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