Diff for /loncom/interface/lonrelrequtils.pm between versions 1.4 and 1.7

version 1.4, 2015/09/13 21:48:05 version 1.7, 2018/01/03 04:20:54
Line 265  use LONCAPA qw(:DEFAULT :match); Line 265  use LONCAPA qw(:DEFAULT :match);
   
 sub init_global_hashes {  sub init_global_hashes {
     %Apache::lonrelrequtils::checkparms = ();      %Apache::lonrelrequtils::checkparms = ();
     %Apache::lonrelrequtils::checkparmsmatch = ();      %Apache::lonrelrequtils::checkparmvalsmatch = ();
       %Apache::lonrelrequtils::checkparmnamesmatch = ();
     %Apache::lonrelrequtils::checkresponsetypes = ();      %Apache::lonrelrequtils::checkresponsetypes = ();
     %Apache::lonrelrequtils::checkcrstypes = ();      %Apache::lonrelrequtils::checkcrstypes = ();
     %Apache::lonrelrequtils::anonsurvey = ();      %Apache::lonrelrequtils::anonsurvey = ();
     %Apache::lonrelrequtils::randomizetry = ();      %Apache::lonrelrequtils::randomizetry = ();
       %Apache::lonrelrequtils::exttool = ();
   
     foreach my $key (keys(%Apache::lonnet::needsrelease)) {      foreach my $key (keys(%Apache::lonnet::needsrelease)) {
         my ($item,$name,$value,$valuematch) = split(/:/,$key);          my ($item,$name,$value,$valuematch,$namematch) = split(/:/,$key);
         if ($item eq 'parameter') {          if ($item eq 'parameter') {
             if ($value ne '') {              if ($namematch ne '') {
                 if (ref($Apache::lonrelrequtils::checkparms{$name}) eq 'ARRAY') {                  $Apache::lonrelrequtils::checkparmnamesmatch{$namematch} = 1;
                     unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparms{$name}})) {              }
                         push(@{$Apache::lonrelrequtils::checkparms{$name}},$value);              if ($name ne '') {
                     }                  if ($value ne '') {
                 } else {                      if (ref($Apache::lonrelrequtils::checkparms{$name}) eq 'ARRAY') {
                     push(@{$Apache::lonrelrequtils::checkparms{$name}},$value);                          unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparms{$name}})) {
                 }                              push(@{$Apache::lonrelrequtils::checkparms{$name}},$value);
             } elsif ($valuematch ne '') {                         }
                 if (ref($Apache::lonrelrequtils::checkparmsmatch{$name}) eq 'ARRAY') {                      } else {
                     unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparmsmatch{$name}})) {                         push(@{$Apache::lonrelrequtils::checkparms{$name}},$value);
                         push(@{$Apache::lonrelrequtils::checkparmsmatch{$name}},$valuematch);                      }
                   } elsif ($valuematch ne '') {
                       if (ref($Apache::lonrelrequtils::checkparmvalsmatch{$name}) eq 'ARRAY') {
                           unless(grep(/^\Q$name\E$/,@{$Apache::lonrelrequtils::checkparmvalsmatch{$name}})) {
                               push(@{$Apache::lonrelrequtils::checkparmvalsmatch{$name}},$valuematch);
                          }
                       } else {
                           push(@{$Apache::lonrelrequtils::checkparmvalsmatch{$name}},$valuematch);
                     }                      }
                 } else {  
                     push(@{$Apache::lonrelrequtils::checkparmsmatch{$name}},$valuematch);  
                 }                  }
             }              }
         } elsif ($item eq 'resourcetag') {          } elsif ($item eq 'resourcetag') {
Line 298  sub init_global_hashes { Line 305  sub init_global_hashes {
         } elsif ($item eq 'course') {          } elsif ($item eq 'course') {
             if ($name eq 'crstype') {              if ($name eq 'crstype') {
                 $Apache::lonrelrequtils::checkcrstypes{$value} = $Apache::lonnet::needsrelease{$key};                  $Apache::lonrelrequtils::checkcrstypes{$value} = $Apache::lonnet::needsrelease{$key};
               } elsif ($name eq 'courserestype') {
                   if ($value eq 'exttool') {
                       ($Apache::lonrelrequtils::exttool{major},$Apache::lonrelrequtils::exttool{minor}) =
                       split(/\./,$Apache::lonnet::needsrelease{$key});
                   }
             }              }
         }          }
     }      }
     ($Apache::lonrelrequtils::anonsurvey{major},$Apache::lonrelrequtils::anonsurvey{minor}) =      ($Apache::lonrelrequtils::anonsurvey{major},$Apache::lonrelrequtils::anonsurvey{minor}) =
         split(/\./,$Apache::lonnet::needsrelease{'parameter:type:anonsurvey:'});          split(/\./,$Apache::lonnet::needsrelease{'parameter:type:anonsurvey::'});
     ($Apache::lonrelrequtils::randomizetry{major},$Apache::lonrelrequtils::randomizetry{minor}) =      ($Apache::lonrelrequtils::randomizetry{major},$Apache::lonrelrequtils::randomizetry{minor}) =
         split(/\./,$Apache::lonnet::needsrelease{'parameter:type:randomizetry:'});          split(/\./,$Apache::lonnet::needsrelease{'parameter:type:randomizetry::'});
     return;      return;
 }  }
   
Line 362  sub parameter_constraints { Line 374  sub parameter_constraints {
                         }                          }
                         if (grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) {                          if (grep(/^\Q$value\E$/,@{$Apache::lonrelrequtils::checkparms{$item}})) {
                             my ($major,$minor) =                               my ($major,$minor) = 
                                 split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value.':'});                                  split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.':'.$value.'::'});
                             ($reqdmajor,$reqdminor) =                              ($reqdmajor,$reqdminor) =
                                 &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);                                  &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
                         }                          }
                     }                      }
                 }                  }
             }              }
             foreach my $item (keys(%Apache::lonrelrequtils::checkparmsmatch)) {               foreach my $item (keys(%Apache::lonrelrequtils::checkparmvalsmatch)) { 
                 if ($key =~ /(\Q$item\E)$/) {                  if ($key =~ /(\Q$item\E)$/) {
                     if (ref($Apache::lonrelrequtils::checkparmsmatch{$item}) eq 'ARRAY') {                      if (ref($Apache::lonrelrequtils::checkparmvalsmatch{$item}) eq 'ARRAY') {
                         my $value = $resourcedata->{$key};                          my $value = $resourcedata->{$key};
                         foreach my $entry (@{$Apache::lonrelrequtils::checkparmsmatch{$item}}) {                          foreach my $entry (@{$Apache::lonrelrequtils::checkparmvalsmatch{$item}}) {
                             my $regexp;                              my $regexp;
                             if (($item eq 'lenient') && ($entry eq 'weighted')) {                              if (($item eq 'lenient') && ($entry eq 'weighted')) {
                                 $regexp = '^[\-\.\d]+,[\-\.\d]+,[\-\.\d]+,[\-\.\d]+$';                                        $regexp = '^[\-\.\d]+,[\-\.\d]+,[\-\.\d]+,[\-\.\d]+$';      
Line 385  sub parameter_constraints { Line 397  sub parameter_constraints {
                             if ($regexp ne '') {                              if ($regexp ne '') {
                                 if ($value =~ /$regexp/) {                                  if ($value =~ /$regexp/) {
                                     my ($major,$minor) =                                      my ($major,$minor) =
                                         split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.'::'.$entry});                                          split(/\./,$Apache::lonnet::needsrelease{'parameter:'.$item.'::'.$entry.':'});
                                     ($reqdmajor,$reqdminor) =                                      ($reqdmajor,$reqdminor) =
                                         &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);                                          &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
                                     last;                                      last;
Line 395  sub parameter_constraints { Line 407  sub parameter_constraints {
                     }                      }
                 }                  }
             }              }
               foreach my $item (keys(%Apache::lonrelrequtils::checkparmnamesmatch)) {
                   my $regexp;
                   if ($item eq 'maplevelrecurse') {
                       $regexp = '\.(?:sequence|page)___\(rec\)\.';
                   }
                   if ($regexp ne '') {
                       if ($key =~ /$regexp/) {
                           my ($major,$minor) =
                             split(/\./,$Apache::lonnet::needsrelease{'parameter::::'.$item});
                             ($reqdmajor,$reqdminor) =
                                 &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
   
                       }
                   }
               }
         }          }
     }      }
     return ($reqdmajor,$reqdminor);      return ($reqdmajor,$reqdminor);
Line 417  sub commblock_constraints { Line 444  sub commblock_constraints {
     if (keys(%comm_blocks) > 0) {      if (keys(%comm_blocks) > 0) {
         foreach my $block (keys(%comm_blocks)) {          foreach my $block (keys(%comm_blocks)) {
             if ($block =~ /^firstaccess____(.+)$/) {              if ($block =~ /^firstaccess____(.+)$/) {
                 my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:timer:'});                  my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:timer'});
                 ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);                  ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
                 last;                  last;
             } elsif ($block =~ /^(\d+)____(\d+)$/) {              } elsif ($block =~ /^(\d+)____(\d+)$/) {
Line 428  sub commblock_constraints { Line 455  sub commblock_constraints {
                 if (ref($comm_blocks{$block}{'blocks'}) eq 'HASH') {                  if (ref($comm_blocks{$block}{'blocks'}) eq 'HASH') {
                     if (ref($comm_blocks{$block}{'blocks'}{'docs'}) eq 'HASH') {                      if (ref($comm_blocks{$block}{'blocks'}{'docs'}) eq 'HASH') {
                         if (keys(%{$comm_blocks{$block}{'blocks'}{'docs'}}) > 0) {                          if (keys(%{$comm_blocks{$block}{'blocks'}{'docs'}}) > 0) {
                             my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:docs:'});                              my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:docs'});
                             ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);                              ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
                             last;                              last;
                         }                          }
                     }                      }
                     if ($comm_blocks{$block}{'blocks'}{'printout'} eq 'on') {                      if ($comm_blocks{$block}{'blocks'}{'printout'} eq 'on') {
                         my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:printout:'});                          my ($major,$minor) = split(/\./,$Apache::lonnet::needsrelease{'course:commblock:printout'});
                         ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);                          ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
                         last;                          last;
                     }                      }
Line 454  sub coursecontent_constraints { Line 481  sub coursecontent_constraints {
         my %randomizetrysubm = &Apache::lonnet::dump('nohist_randomizetry',          my %randomizetrysubm = &Apache::lonnet::dump('nohist_randomizetry',
                                                      $cdom,$cnum);                                                       $cdom,$cnum);
         my %allresponses;          my %allresponses;
         my ($anonsurv_subm,$randbytry_subm);          my ($anonsurv_subm,$randbytry_subm,$exttool);
         foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) {          foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() || $_[0]->is_tool() },1,0)) {
               if ($res->is_tool()) {
                   $exttool ++;
                   next;
               }
             my %responses = $res->responseTypes();              my %responses = $res->responseTypes();
             foreach my $key (keys(%responses)) {              foreach my $key (keys(%responses)) {
                 next unless(exists($Apache::lonrelrequtils::checkresponsetypes{$key}));                  next unless(exists($Apache::lonrelrequtils::checkresponsetypes{$key}));
Line 476  sub coursecontent_constraints { Line 507  sub coursecontent_constraints {
             my ($major,$minor) = split(/\./,$Apache::lonrelrequtils::checkresponsetypes{$key});              my ($major,$minor) = split(/\./,$Apache::lonrelrequtils::checkresponsetypes{$key});
             ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);              ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($major,$minor,$reqdmajor,$reqdminor);
         }          }
           if ($exttool) {
               ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($Apache::lonrelrequtils::exttool{major},
                                                                 $Apache::lonrelrequtils::exttool{minor}); 
           }
         if ($anonsurv_subm) {          if ($anonsurv_subm) {
             ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($Apache::lonrelrequtils::anonsurvey{major},              ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($Apache::lonrelrequtils::anonsurvey{major},
                                           $Apache::lonrelrequtils::anonsurvey{minor},$reqdmajor,$reqdminor);                                            $Apache::lonrelrequtils::anonsurvey{minor},$reqdmajor,$reqdminor);
Line 485  sub coursecontent_constraints { Line 520  sub coursecontent_constraints {
                                           $Apache::lonrelrequtils::randomizetry{minor},$reqdmajor,$reqdminor);                                            $Apache::lonrelrequtils::randomizetry{minor},$reqdmajor,$reqdminor);
         }          }
     }      }
       my $suppmap = 'supplemental.sequence';
       my ($suppcount,$suppexttools,$errors) = (0,0,0);
       ($suppcount,$suppexttools,$errors) =
          &Apache::loncommon::recurse_supplemental($cnum,$cdom,$suppmap,$suppcount,$suppexttools,$errors);
       if ($suppexttools) {
           ($reqdmajor,$reqdminor) = &update_reqd_loncaparev($Apache::lonrelrequtils::exttool{major},
                                                             $Apache::lonrelrequtils::exttool{minor});
       }
     return ($reqdmajor,$reqdminor);      return ($reqdmajor,$reqdminor);
 }  }
   

Removed from v.1.4  
changed lines
  Added in v.1.7


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