Diff for /loncom/auth/lonroles.pm between versions 1.269.2.27 and 1.269.2.28

version 1.269.2.27, 2016/10/23 18:30:32 version 1.269.2.28, 2016/10/27 22:53:48
Line 327  sub handler { Line 327  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)) {
                   if ($numdc) {
 # Is this an ad-hoc Coordinator role?  # Is this an ad-hoc Coordinator role?
                 if (my ($ccrole,$domain,$coursenum) =                      if (my ($ccrole,$domain,$coursenum) =
     ($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) {          ($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) {
                     if ($dcroles{$domain}) {                          if ($dcroles{$domain}) {
                         if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,                              if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,
                                                            $update,$refresh,$now,$ccrole)) {                                                                     $update,$refresh,$now,$ccrole)) {
                             &Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.$ccrole.adhoc" => time});                                  &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;
                                       my $switchserver = '/adm/switchserver?otherserver='.$home.'&amp;role='.$trolecode;
                                       $r->internal_redirect($switchserver);
                                       return OK;
                                   }
                                   last;
                               }
                           }
                           # Check if author blocked ca-access
                           my %blocked=&Apache::lonnet::get('environment',['domcoord.author'],$domain,$user);
                           if ($blocked{'domcoord.author'} eq 'blocked') {
                               delete($env{$envkey});
                               $env{'user.error.msg'}=':::1:User '.$user.' in domain '.$domain.' blocked domain coordinator access';
                               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 {
                               delete($env{$envkey});
                           }
                         last;                          last;
                     }                      }
                     if ($dcroles{$domain}) {                  }
                         my ($server_status,$home) = &check_author_homeserver($user,$domain);                  if ($numdh) {
                         if (($server_status eq 'ok') || ($server_status eq 'switchserver')) {  # Is this an ad hoc custom role in a course/community?
                             &Apache::lonnet::check_adhoc_privs($domain,$user,$update,                      if (my ($domain,$rolename,$coursenum) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)$})) {
                                                                $refresh,$now,'ca');                          if ($dhroles{$domain}) {
                             if ($server_status eq 'switchserver') {                              my @adhoc;
                                 my $trolecode = 'ca./'.$domain.'/'.$user;                               if ($env{'environment.adhocroles.'.$domain}) {
                                 my $switchserver = '/adm/switchserver?'                                  @adhoc = split(',',$env{'environment.adhocroles.'.$domain});
                                                   .'otherserver='.$home.'&amp;role='.$trolecode;                              } else {
                                 $r->internal_redirect($switchserver);                                  my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'},
                                 return OK;                                                                                    '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 {                          } else {
                             delete($env{$envkey});                              delete($env{$envkey});
                         }                          }
                     } else {                          last;
                         delete($env{$envkey});  
                     }                      }
                     last;                  } 
                 }  
             }              }
         }          }
   

Removed from v.1.269.2.27  
changed lines
  Added in v.1.269.2.28


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