--- loncom/interface/lonuserutils.pm 2023/12/07 04:47:00 1.220
+++ 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.220 2023/12/07 04:47:00 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.222 2024/08/31 20:02:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2183,6 +2183,24 @@ sub print_userlist {
if (! exists($env{'form.sortby'})) {
$env{'form.sortby'} = 'username';
}
+ my ($showstart,$showend);
+ if (($env{'form.Status'} eq '') && ($env{'form.phase'} eq '') &&
+ ($env{'form.showrole'} eq '') && ($context eq 'course') &&
+ ($env{'request.course.id'} ne '') &&
+ ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'} ne '')) {
+ my $now = time;
+ my $startaccess = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_start_date'};
+ my $endaccess = $env{'course.'.$env{'request.course.id'}.'.default_enrollment_end_date'};
+ if (($startaccess) && ($startaccess > $now)) {
+ $env{'form.Status'} = 'Future';
+ $showstart = 1;
+ }
+ if (($endaccess ne '') && ($endaccess != 0) && ($endaccess < $now)) {
+ $env{'form.Status'} = 'Expired';
+ undef($showstart);
+ $showend = 1;
+ }
+ }
if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {
$env{'form.Status'} = 'Active';
}
@@ -2250,7 +2268,7 @@ sub print_userlist {
$r->print(§ion_group_filter($cnum,$cdom));
}
$r->print('
'.
- &column_checkboxes($context,$mode,$formname,$showcredits).
+ &column_checkboxes($context,$mode,$formname,$showcredits,$showstart,$showend).
'
');
if ($env{'form.phase'} eq '') {
$r->print('
'.
@@ -2661,7 +2679,7 @@ sub get_cols_array {
}
sub column_checkboxes {
- my ($context,$mode,$formname,$showcredits) = @_;
+ my ($context,$mode,$formname,$showcredits,$showstart,$showend) = @_;
my @cols = &get_cols_array($context,$mode,$showcredits);
my @showncols = &Apache::loncommon::get_env_multiple('form.showcol');
my (%disabledchk,%unchecked);
@@ -2674,11 +2692,21 @@ sub column_checkboxes {
if ($showcredits) {
$unchecked{'credits'} = 1;
}
- } elsif ($context eq 'domain') {
+ my %curr_groups = &Apache::longroup::coursegroups();
+ unless (keys(%curr_groups)) {
+ $unchecked{'groups'} = 1;
+ }
+ } elsif ($context eq 'domain') {
$unchecked{'extent'} = 1;
}
- $unchecked{'start'} = 1;
- $unchecked{'end'} = 1;
+ if ($showstart) {
+ $unchecked{'lastlogin'} = 1;
+ } else {
+ $unchecked{'start'} = 1;
+ }
+ unless ($showend) {
+ $unchecked{'end'} = 1;
+ }
} else {
if ($env{'form.Status'} ne 'Any') {
$disabledchk{'status'} = 1;
@@ -2816,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') {
@@ -3494,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.
@@ -4422,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]'
,''
- .&Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})
+ .&Apache::loncommon::plainname($auname,$audom)
.'')
.': ';
if ($statusmode eq 'Expired') {
@@ -6646,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}) {