Diff for /loncom/interface/lonuserutils.pm between versions 1.217 and 1.218

version 1.217, 2023/10/02 21:01:21 version 1.218, 2023/11/03 01:12:15
Line 115  sub modifyuserrole { Line 115  sub modifyuserrole {
     } elsif ($context eq 'domain') {      } elsif ($context eq 'domain') {
         $scope = '/'.$env{'request.role.domain'}.'/';          $scope = '/'.$env{'request.role.domain'}.'/';
     } elsif ($context eq 'author') {      } elsif ($context eq 'author') {
         $scope =  '/'.$env{'user.domain'}.'/'.$env{'user.name'};          if ($env{'request.role'} =~ m{^ca\.(/$match_domain/$match_username)$}) {
               $scope = $1;
           } else {
               $scope =  '/'.$env{'user.domain'}.'/'.$env{'user.name'};
           }
     }      }
     if ($context eq 'domain') {      if ($context eq 'domain') {
         my $uhome = &Apache::lonnet::homeserver($uname,$udom);          my $uhome = &Apache::lonnet::homeserver($uname,$udom);
Line 2048  sub construction_space_roles { Line 2052  sub construction_space_roles {
         foreach my $role (@allroles) {          foreach my $role (@allroles) {
             if (&Apache::lonnet::allowed('c'.$role,$env{'user.domain'}.'/'.$env{'user.name'})) {               if (&Apache::lonnet::allowed('c'.$role,$env{'user.domain'}.'/'.$env{'user.name'})) { 
                 push(@roles,$role);                   push(@roles,$role); 
               } elsif ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$}) {
                   my ($audom,$auname) = ($1,$2);
                   if (($role eq 'ca') || ($role eq 'aa')) {
                       if ((&Apache::lonnet::allowed('v'.$role,,$audom.'/'.$auname)) &&
                           ($env{"environment.internal.manager./$audom/$auname"})) {
                           push(@roles,$role);
                       }
                   }
             }              }
         }          }
         return @roles;          return @roles;
Line 2305  sub print_userlist { Line 2317  sub print_userlist {
     } else {      } else {
         my (%cstr_roles,%dom_roles);          my (%cstr_roles,%dom_roles);
         if ($context eq 'author') {          if ($context eq 'author') {
             # List co-authors and assistant co-authors  
             my @possroles = &roles_by_context($context);              my @possroles = &roles_by_context($context);
             %cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef,              my @allowedroles;
                                               \@statuses,\@possroles);              # List co-authors and assistant co-authors
             &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo,              my ($auname,$audom);
                              \%cstr_roles,$permission);              if ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$}) {
                   ($audom,$auname) = ($1,$2);
                   foreach my $role (@possroles) {
                       if ((&Apache::lonnet::allowed('v'.$role,"$audom/$auname")) ||
                           (&Apache::lonnet::allowed('c'.$role,"$audom/$auname"))) {
                           push(@allowedroles,$role);
                       }
                   }
               } elsif ($env{'request.role'} =~ m{^au\./($match_domain)/}) {
                   if ($1 eq $env{'user.domain'}) {
                       $auname = $env{'user.name'};
                       $audom = $env{'user.domain'};
                   }
                   @allowedroles = @possroles;
               }
               if (($auname ne '') && ($audom ne '')) {
                   %cstr_roles = &Apache::lonnet::get_my_roles($auname,$audom,undef,
                                                               \@statuses,\@allowedroles);
                   &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo,
                                    \%cstr_roles,$permission);
               }
         } elsif ($context eq 'domain') {          } elsif ($context eq 'domain') {
             if ($env{'form.roletype'} eq 'domain') {              if ($env{'form.roletype'} eq 'domain') {
                 if (grep(/^authorusage$/,@cols)) {                  if (grep(/^authorusage$/,@cols)) {
Line 6814  sub get_permission { Line 6845  sub get_permission {
             }              }
         }          }
     } elsif ($context eq 'author') {      } elsif ($context eq 'author') {
         $permission{'cusr'} = &authorpriv($env{'user.name'},$env{'request.role.domain'});          my $audom = $env{'request.role.domain'};
         $permission{'view'} = $permission{'cusr'};          my $auname = $env{'user.name'};
           if ((&Apache::lonnet::allowed('cca',"$audom/$auname")) ||
               (&Apache::lonnet::allowed('caa',"$audom/$auname"))) {
               $permission{'author'} = 1;
               $permission{'cusr'} = 1;
               $permission{'view'} = 1;
           }
       } elsif ($context eq 'coauthor') {
           my ($audom,$auname) = ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$});
           if ((&Apache::lonnet::allowed('vca',"$audom/$auname")) ||
               (&Apache::lonnet::allowed('vaa',"$audom/$auname"))) {
               if ($env{"environment.internal.manager./$audom/$auname"}) {
                   $permission{'cusr'} = 1;
                   $permission{'view'} = 1;
               }
           }
     } else {      } else {
         my @allroles = &roles_by_context($context);          my @allroles = &roles_by_context($context);
         foreach my $role (@allroles) {          foreach my $role (@allroles) {
Line 6844  sub get_permission { Line 6890  sub get_permission {
     }      }
     my $allowed = 0;      my $allowed = 0;
     foreach my $key (keys(%permission)) {      foreach my $key (keys(%permission)) {
         next if (($key eq 'owner') || ($key eq 'co-owner'));          next if (($key eq 'owner') || ($key eq 'co-owner') || ($key eq 'author'));
         if ($permission{$key}) { $allowed=1; last; }          if ($permission{$key}) { $allowed=1; last; }
     }      }
     return (\%permission,$allowed);      return (\%permission,$allowed);
Line 6858  sub authorpriv { Line 6904  sub authorpriv {
          || (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; }    return 1;           || (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; }    return 1;
 }  }
   
   sub coauthorpriv {
       my ($auname,$audom)=@_;
       my $uname = $env{'user.name'};
       my $udom = $env{'user.domain'};
       if (((&Apache::lonnet::allowed('vca',"$udom/$uname")) ||
            (&Apache::lonnet::allowed('vaa',"$udom/$uname"))) &&
            ($env{"environment.internal.manager./$audom/$auname"})) {
           return 1;
       }
       return '';
   }
   
 sub roles_on_upload {  sub roles_on_upload {
     my ($context,$setting,$crstype,%customroles) = @_;      my ($context,$setting,$crstype,%customroles) = @_;
     my (@possible_roles,@permitted_roles);      my (@possible_roles,@permitted_roles);

Removed from v.1.217  
changed lines
  Added in v.1.218


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