--- loncom/interface/lonuserutils.pm	2024/01/05 04:01:40	1.221
+++ loncom/interface/lonuserutils.pm	2024/08/31 20:02:12	1.222
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.221 2024/01/05 04:01:40 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.222 2024/08/31 20:02:12 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2844,6 +2844,7 @@ sub gather_userinfo {
             ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) =
                 split(/:/,$item);
             ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item});
+            next if (($userdata{'username'} eq '') && ($userdata{'domain'} eq ''));
             &build_user_record($context,\%userdata,$userinfo,$indexhash,
                                $item,$userlist);
         } elsif ($context eq 'course') {
@@ -3522,7 +3523,16 @@ END
         # If this is for a single course get last course "log-in".
         %crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum);
     } elsif ($context eq 'author') {
-        map { $camanagers{$_.':ca'} = 1; } split(/,/,$env{'environment.authormanagers'});
+        my $authormanagers;
+        if ($env{'request.role'} =~ m{^(?:ca|aa)\./($match_domain)/($match_username)$}) {
+            my %envhash = &Apache::lonnet::userenvironment($1,$2,'authormanagers');
+            $authormanagers = $envhash{'authormanagers'};
+        } else {
+            $authormanagers = $env{'environment.authormanagers'};
+        }
+        if ($authormanagers ne '') {
+            map { $camanagers{$_.':ca'} = 1; } split(/,/,$authormanagers);
+        }
     }
     # Get groups, role, permanent e-mail so we can sort on them if
     # necessary.
@@ -4450,10 +4460,16 @@ sub results_header_row {
             $description .= ' ('.$constraint.')';
         } 
     } elsif ($context eq 'author') {
+        my ($auname,$audom);
+        if ($env{'request.role'} =~ m{^(?:ca|aa)\./($match_domain)/($match_username)$}) {
+            ($audom,$auname) = ($1,$2);
+        } else {
+            ($audom,$auname) = ($env{'user.domain'},$env{'user.name'});
+        }
         $description = 
             &mt('Author space for [_1]'
                 ,'<span class="LC_cusr_emph">'
-                .&Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})
+                .&Apache::loncommon::plainname($auname,$audom)
                 .'</span>')
             .':&nbsp;&nbsp;';
         if ($statusmode eq 'Expired') {
@@ -6674,6 +6690,10 @@ sub can_modify_userinfo {
     my %domconfig =
        &Apache::lonnet::get_dom('configuration',['usermodification'],
                                 $dom);
+    if (($context eq 'author') &&
+        ($env{'request.role'} =~ m{^(ca|aa)\./$match_domain/$match_username$})) {
+        $context = 'coauthor';
+    }
     my %canmodify;
     if (ref($fields) eq 'ARRAY') {
         foreach my $field (@{$fields}) {