Diff for /loncom/auth/lonroles.pm between versions 1.318 and 1.319

version 1.318, 2016/10/20 19:53:58 version 1.319, 2016/10/27 21:06:00
Line 322  sub handler { Line 322  sub handler {
                     }                      }
                 }                  }
             }              }
         } elsif ($numdc > 0) {          } elsif (($numdc > 0) || ($numdh > 0)) {
 # Check if user is a DC trying to enter a course or author space and needs privs to be created  # Check if user is a DC trying to enter a course or author space and needs privs to be created
   # Check if user is a DH trying to enter a course and needs privs to be created
             foreach my $envkey (keys(%env)) {              foreach my $envkey (keys(%env)) {
 # Is this an ad-hoc Coordinator role?  # Is this an ad-hoc Coordinator role?
                 if (my ($ccrole,$domain,$coursenum) =                  if ($numdc) {
     ($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) {                      if (my ($ccrole,$domain,$coursenum) =
                     if ($dcroles{$domain}) {          ($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) {
                         if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,                          if ($dcroles{$domain}) {
                                                            $update,$refresh,$now,$ccrole)) {                              if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,
                             &Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.$ccrole.adhoc" => time});                                                                     $update,$refresh,$now,$ccrole)) {
                         }                                  &Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.$ccrole.adhoc" => time});
                     }                              }
                     last;  
                 }  
 # Is this an ad-hoc CA-role?  
                 if (my ($domain,$user) =  
     ($envkey =~ m-^form\.ca\./($match_domain)/($match_username)$-)) {  
                     if (($domain eq $env{'user.domain'}) && ($user eq $env{'user.name'})) {  
                         delete($env{$envkey});  
                         $env{'form.au./'.$domain.'/'} = 1;  
                         my ($server_status,$home) = &check_author_homeserver($user,$domain);  
                         if ($server_status eq 'switchserver') {  
                             my $trolecode = 'au./'.$domain.'/';  
                             my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode;  
                             $r->internal_redirect($switchserver);  
                             return OK;  
                         }                          }
                         last;                          last;
                     }                      }
                     if (my ($castart,$caend) = ($env{'user.role.ca./'.$domain.'/'.$user} =~ /^(\d*)\.(\d*)$/)) {  # Is this an ad-hoc CA-role?
                         if (((($castart) && ($castart < $now)) || !$castart) &&                       if (my ($domain,$user) =
                             ((!$caend) || (($caend) && ($caend > $now)))) {          ($envkey =~ m-^form\.ca\./($match_domain)/($match_username)$-)) {
                           if (($domain eq $env{'user.domain'}) && ($user eq $env{'user.name'})) {
                               delete($env{$envkey});
                               $env{'form.au./'.$domain.'/'} = 1;
                             my ($server_status,$home) = &check_author_homeserver($user,$domain);                              my ($server_status,$home) = &check_author_homeserver($user,$domain);
                             if ($server_status eq 'switchserver') {                              if ($server_status eq 'switchserver') {
                                 my $trolecode = 'ca./'.$domain.'/'.$user;                                  my $trolecode = 'au./'.$domain.'/';
                                 my $switchserver = '/adm/switchserver?otherserver='.$home.'&amp;role='.$trolecode;                                  my $switchserver = '/adm/switchserver?otherserver='.$home.'&amp;role='.$trolecode;
                                 $r->internal_redirect($switchserver);                                  $r->internal_redirect($switchserver);
                                 return OK;                                  return OK;
                             }                              }
                             last;                              last;
                         }                          }
                     }                          if (my ($castart,$caend) = ($env{'user.role.ca./'.$domain.'/'.$user} =~ /^(\d*)\.(\d*)$/)) {
                     # Check if author blocked ca-access                              if (((($castart) && ($castart < $now)) || !$castart) && 
                     my %blocked=&Apache::lonnet::get('environment',['domcoord.author'],$domain,$user);                                  ((!$caend) || (($caend) && ($caend > $now)))) {
                     if ($blocked{'domcoord.author'} eq 'blocked') {                                  my ($server_status,$home) = &check_author_homeserver($user,$domain);
                         delete($env{$envkey});                                  if ($server_status eq 'switchserver') {
                         $env{'user.error.msg'}=':::1:User '.$user.' in domain '.$domain.' blocked domain coordinator access';                                      my $trolecode = 'ca./'.$domain.'/'.$user;
                         last;                                      my $switchserver = '/adm/switchserver?otherserver='.$home.'&amp;role='.$trolecode;
                     }                                      $r->internal_redirect($switchserver);
                     if ($dcroles{$domain}) {                                      return OK;
                         my ($server_status,$home) = &check_author_homeserver($user,$domain);                                  }
                         if (($server_status eq 'ok') || ($server_status eq 'switchserver')) {                                  last;
                             &Apache::lonnet::check_adhoc_privs($domain,$user,$update,                              }
                                                                $refresh,$now,'ca');                          }
                             if ($server_status eq 'switchserver') {                          # Check if author blocked ca-access
                                 my $trolecode = 'ca./'.$domain.'/'.$user;                           my %blocked=&Apache::lonnet::get('environment',['domcoord.author'],$domain,$user);
                                 my $switchserver = '/adm/switchserver?'                          if ($blocked{'domcoord.author'} eq 'blocked') {
                                                   .'otherserver='.$home.'&amp;role='.$trolecode;                              delete($env{$envkey});
                                 $r->internal_redirect($switchserver);                              $env{'user.error.msg'}=':::1:User '.$user.' in domain '.$domain.' blocked domain coordinator access';
                                 return OK;                              last;
                           }
                           if ($dcroles{$domain}) {
                               my ($server_status,$home) = &check_author_homeserver($user,$domain);
                               if (($server_status eq 'ok') || ($server_status eq 'switchserver')) {
                                   &Apache::lonnet::check_adhoc_privs($domain,$user,$update,
                                                                      $refresh,$now,'ca');
                                   if ($server_status eq 'switchserver') {
                                       my $trolecode = 'ca./'.$domain.'/'.$user; 
                                       my $switchserver = '/adm/switchserver?'
                                                         .'otherserver='.$home.'&amp;role='.$trolecode;
                                       $r->internal_redirect($switchserver);
                                       return OK;
                                   }
                               } else {
                                   delete($env{$envkey});
                             }                              }
                         } else {                          } else {
                             delete($env{$envkey});                              delete($env{$envkey});
                         }                          }
                     } else {                          last;
                         delete($env{$envkey});  
                     }                      }
                     last;  
                 }                  }
             }                  if ($numdh) {
   # Is this an ad hoc custom role in a course/community?
                      if (my ($domain,$rolename,$coursenum) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)$})) {
                          if ($dhroles{$domain}) { 
                              my @adhoc; 
                              if ($env{'environment.adhocroles.'.$domain}) {
                                  @adhoc = split(',',$env{'environment.adhocroles.'.$domain});
                              } else {
                                  my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'},
                                                                                    'adhocroles.'.$domain);
                                  if (keys(%adhocroles)) {
                                      @adhoc = split(',',$adhocroles{'adhocroles.'.$domain});
                                  };
                              }
                              if ((@adhoc > 0) && ($rolename ne '')) {
                                  if (grep(/^\Q$rolename\E$/,@adhoc)) {
                                      if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,$update,$refresh,$now,
                                                                             "cr/$domain/$domain".'-domainconfig/'.$rolename)) {
                                          &Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.cr/$domain/$domain".
                                                                   '-domainconfig/'."$rolename.adhoc" => time});
                                      }
                                  } else {
                                      delete($env{$envkey});
                                  }
                              } else {
                                  delete($env{$envkey});
                              }
                          } else {
                              delete($env{$envkey});
                          }
                          last;
                      }
                  }
              }
         }          }
   
         foreach $envkey (keys(%env)) {          foreach $envkey (keys(%env)) {
             next if ($envkey!~/^user\.role\./);              next if ($envkey!~/^user\.role\./);
             my ($where,$trolecode,$role,$tstatus,$tend,$tstart);              my ($where,$trolecode,$role,$tstatus,$tend,$tstart);

Removed from v.1.318  
changed lines
  Added in v.1.319


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