Diff for /loncom/homework/lonhomework.pm between versions 1.362 and 1.368

version 1.362, 2016/05/30 02:45:32 version 1.368, 2017/04/03 13:01:43
Line 210  sub proctor_checked_in { Line 210  sub proctor_checked_in {
 }  }
   
 sub check_slot_access {  sub check_slot_access {
     my ($id,$type,$symb)=@_;      my ($id,$type,$symb,$partlist)=@_;
   
     # does it pass normal muster      # does it pass normal muster
     my ($status,$datemsg)=&check_access($id,$symb);      my ($status,$datemsg)=&check_access($id,$symb);
Line 228  sub check_slot_access { Line 228  sub check_slot_access {
         $checkin = "resource.$version.0.checkedin";          $checkin = "resource.$version.0.checkedin";
     }      }
     my $checkedin = $Apache::lonhomework::history{$checkin};      my $checkedin = $Apache::lonhomework::history{$checkin};
     my ($returned_slot,$slot_name,$checkinslot,$ipused,$blockip,$now,$ip);      my ($returned_slot,$slot_name,$checkinslot,$ipused,$blockip,$now,$ip,
           $consumed_uniq);
     $now = time;      $now = time;
     $ip=$env{'request.host'} || $ENV{'REMOTE_ADDR'};      $ip=$ENV{'REMOTE_ADDR'} || $env{'request.host'};
   
     if ($checkedin) {      if ($checkedin) {
         $checkinslot = $Apache::lonhomework::history{"$checkin.slot"};          $checkinslot = $Apache::lonhomework::history{"$checkin.slot"};
         my %slot=&Apache::lonnet::get_slot($checkinslot);          my %slot=&Apache::lonnet::get_slot($checkinslot);
           $consumed_uniq = $slot{'uniqueperiod'};
         if ($slot{'iptied'}) {          if ($slot{'iptied'}) {
             $ipused = $Apache::lonhomework::history{"$checkin.ip"};              $ipused = $Apache::lonhomework::history{"$checkin.ip"};
             unless (($ip ne '') && ($ipused eq $ip)) {              unless (($ip ne '') && ($ipused eq $ip)) {
Line 349  sub check_slot_access { Line 351  sub check_slot_access {
     ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass'      ($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass'
      || $Apache::lonhomework::history{"resource.0.solved"} =~ /^correct_/ );       || $Apache::lonhomework::history{"resource.0.solved"} =~ /^correct_/ );
     } elsif ($type eq 'problem') {      } elsif ($type eq 'problem') {
  $got_grade  = 1;          if ((ref($partlist) eq 'ARRAY') && (@{$partlist} > 0)) {
  $is_correct =              my ($numcorrect,$numgraded) = (0,0);
     ($Apache::lonhomework::history{"resource.0.solved"} =~/^correct_/);              foreach my $part (@{$partlist}) {
                   my $currtries = $Apache::lonhomework::history{"resource.$part.tries"};
                   my $maxtries = &Apache::lonnet::EXT("resource.$part.maxtries",$symb);
                   my $probstatus = &Apache::structuretags::get_problem_status($part);
                   my $earlyout;
                   unless (($probstatus eq 'no') ||
                           ($probstatus eq 'no_feedback_ever')) { 
                       if ($Apache::lonhomework::history{"resource.$part.solved"} =~/^correct_/) {
                           $numcorrect ++;
                       } else {
                           $earlyout = 1;
                       }
                   }
                   if (($currtries == $maxtries) || ($is_correct)) {
                       $earlyout = 1;
                   } else { 
                       $numgraded ++;
                   }
                   last if ($earlyout);
               }
               my $numparts = scalar(@{$partlist});
               if ($numparts == $numcorrect) {
                   $is_correct = 1;
               }
               if ($numparts == $numgraded) {
                   $got_grade = 1;
               }
           } else {
               my $currtries = $Apache::lonhomework::history{"resource.0.tries"};
               my $maxtries = &Apache::lonnet::EXT("resource.0.maxtries",$symb);
               my $probstatus = &Apache::structuretags::get_problem_status('0');
               unless (($probstatus eq 'no') ||
                       ($probstatus eq 'no_feedback_ever')) {
                   $is_correct =
                       ($Apache::lonhomework::history{"resource.0.solved"} =~/^correct_/);
               }
               unless (($currtries == $maxtries) || ($is_correct)) {
                   $got_grade = 1;
               }
           }
     }      }
           
     &Apache::lonxml::debug(" slot is $slotstatus checkedin ($checkedin) got_grade ($got_grade) is_correct ($is_correct)");      &Apache::lonxml::debug(" slot is $slotstatus checkedin ($checkedin) got_grade ($got_grade) is_correct ($is_correct)");
Line 384  sub check_slot_access { Line 425  sub check_slot_access {
                         &Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb);                          &Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb);
                     if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) {                      if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) {
                         if (@{$reservable_now_order} > 0) {                          if (@{$reservable_now_order} > 0) {
                             $slotstatus = 'RESERVABLE';                              if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) {
                             $datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'};                                  $slotstatus = 'RESERVABLE';
                                   $datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'};
                               } else {
                                   my ($uniqstart,$uniqend,$useslot);
                                   if (ref($consumed_uniq) eq 'ARRAY') {
                                       ($uniqstart,$uniqend)=@{$consumed_uniq};
                                   }
                                   foreach my $slot (reverse(@{$reservable_now_order})) {
                                       if ($reservable_now->{$slot}{'uniqueperiod'} =~ /^(\d+)\,(\d+)$/) {
                                           my ($new_uniq_start,$new_uniq_end) = ($1,$2);
                                           next if (!
                                               ($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) ||
                                               ($uniqstart > $new_uniq_end   &&  $uniqend > $new_uniq_end  ));
                                       }
                                       $useslot = $slot;
                                       last;
                                   }
                                   if ($useslot) {
                                       $slotstatus = 'RESERVABLE';
                                       $datemsg = $reservable_now->{$useslot}{'endreserve'};
                                   }
                               }
                         }                          }
                     }                      }
                     unless ($slotstatus eq 'RESERVABLE') {                      unless ($slotstatus eq 'RESERVABLE') {
                         if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) {                          if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) {
                             if (@{$reservable_future_order} > 0) {                              if (@{$reservable_future_order} > 0) {
                                 $slotstatus = 'RESERVABLE_LATER';                                  if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) {
                                 $datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'};                                      $slotstatus = 'RESERVABLE_LATER';
                                       $datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'};
                                   } else {
                                       my ($uniqstart,$uniqend,$useslot);
                                       if (ref($consumed_uniq) eq 'ARRAY') {
                                           ($uniqstart,$uniqend)=@{$consumed_uniq};
                                       }
                                       foreach my $slot (@{$reservable_future_order}) {
                                           if ($reservable_future->{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) {
                                               my ($new_uniq_start,$new_uniq_end) = ($1,$2);
                                               next if (!
                                                  ($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) ||
                                                  ($uniqstart > $new_uniq_end   &&  $uniqend > $new_uniq_end  ));
                                           }
                                           $useslot = $slot;
                                           last;
                                       }
                                       if ($useslot) {
                                           $slotstatus = 'RESERVABLE_LATER';
                                           $datemsg = $reservable_future->{$useslot}{'startreserve'};
                                       }
                                   }
                             }                              }
                         }                          }
                     }                      }
Line 1348  sub get_template_html { Line 1431  sub get_template_html {
 sub newproblem {  sub newproblem {
     my ($request) = @_;      my ($request) = @_;
   
  if ($env{'form.mode'} eq 'blank'){      if ($env{'form.mode'} eq 'blank'){
         my $dest = &Apache::lonnet::filelocation("",$request->uri);          my $dest = &Apache::lonnet::filelocation("",$request->uri);
         &File::Copy::copy('/home/httpd/html/res/adm/includes/templates/blank.problem',$dest);          my $templatefilename =
               $request->dir_config('lonIncludes').'/templates/blank.problem';
           &File::Copy::copy($templatefilename,$dest);
         &renderpage($request,$dest);          &renderpage($request,$dest);
         return;          return;
     }      }
       my $errormsg;
     if ($env{'form.template'}) {      if ($env{'form.template'}) {
  my $file = $env{'form.template'};          my $file;
  my $dest = &Apache::lonnet::filelocation("",$request->uri);          my ($extension) = ($env{'form.template'} =~ /\.(\w+)$/);
  &File::Copy::copy($file,$dest);          if ($extension) {
  &renderpage($request,$dest);              my @files = &get_template_list($extension);
  return;              foreach my $poss (@files) {
                   if (ref($poss) eq 'ARRAY') {
                       if ($env{'form.template'} eq $poss->[0]) {
                           $file = $env{'form.template'};
                           last;
                       }
                   }
               }
               if ($file) {
           my $dest = &Apache::lonnet::filelocation("",$request->uri);
           &File::Copy::copy($file,$dest);
           &renderpage($request,$dest);
           return;
               } else {
                   $errormsg = '<p class="LC_error">'.&mt('Invalid template file.').'</p>';
               }
           } else {
               $errormsg = '<p class="LC_error">'.&mt('Invalid template file; template needs to be a .problem, .library, or .task file.').'</p>';
           }
     }      }
   
     my ($extension) = ($request->uri =~ m/\.(\w+)$/);      my ($extension) = ($request->uri =~ m/\.(\w+)$/);
Line 1376  sub newproblem { Line 1480  sub newproblem {
     } else {      } else {
  my $url=&HTML::Entities::encode($request->uri,'<>&"');   my $url=&HTML::Entities::encode($request->uri,'<>&"');
  my $dest = &Apache::lonnet::filelocation("",$request->uri);   my $dest = &Apache::lonnet::filelocation("",$request->uri);
  my $errormsg;  
  my $instructions;   my $instructions;
         my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),          my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
                        'text' => 'Authoring Space'},                         'text' => 'Authoring Space'},
Line 1704  sub default_xml_tag { Line 1807  sub default_xml_tag {
   
 sub helpmenu_datastructure {  sub helpmenu_datastructure {
   
  my $width = 500;   # filename, title, width, height
  my $height = 600;  
   
  my $helpers = [   my $helpers = [
  ['Problem_LON-CAPA_Functions', &mt('Script Functions')],   ['Problem_LON-CAPA_Functions.hlp', &mt('Script Functions'), 800, 600],
  ['Greek_Symbols', &mt('Greek Symbols')],   ['Greek_Symbols.hlp', &mt('Greek Symbols'), 500, 600],
   ['Other_Symbols', &mt('Other Symbols')],    ['Other_Symbols.hlp', &mt('Other Symbols'), 500, 600],
  ['Authoring_Output_Tags', &mt('Output Tags')],   ['Authoring_Output_Tags.hlp', &mt('Output Tags'), 800, 600],
  ['Authoring_Multilingual_Problems',    ['Authoring_Multilingual_Problems.hlp', 
  &mt('How to create problems in different languages')]   &mt('How to create problems in different languages'), 800, 600],
    ['loncapa.html', &mt('Language reference'), 800, 600],
  ];   ];
   
  my $help_structure = [];   my $help_structure = [];
Line 1721  sub helpmenu_datastructure { Line 1823  sub helpmenu_datastructure {
  foreach my $count (0..(scalar(@{$helpers})-1)) {   foreach my $count (0..(scalar(@{$helpers})-1)) {
  my $filename = $helpers->[$count]->[0];   my $filename = $helpers->[$count]->[0];
  my $title = $helpers->[$count]->[1];   my $title = $helpers->[$count]->[1];
  my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename.hlp',$width,$height,'yes');");   my $width = $helpers->[$count]->[2];
                   my $height = $helpers->[$count]->[3];
                   if ($width eq '') {
                       $width = 500;
                   }
                   if ($height eq '') {
                       $height = 600;
                   }
    my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename',$width,$height,'yes');");
  push @{$help_structure}, [$href, $title, undef];   push @{$help_structure}, [$href, $title, undef];
  }   }
   

Removed from v.1.362  
changed lines
  Added in v.1.368


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