--- loncom/interface/loncreateuser.pm 2023/11/03 21:40:22 1.471
+++ loncom/interface/loncreateuser.pm 2024/09/03 03:45:35 1.482
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.471 2023/11/03 21:40:22 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.482 2024/09/03 03:45:35 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -245,10 +245,15 @@ function toggleCustom(form,item,name) {
if (radioname) {
if (radioname.length > 0) {
var setvis;
+ var RegExp = /^customtext_(aboutme|blog|portfolio|portaccess|timezone|webdav|archive)\$/;
for (var i=0; i "Personal User Blog",
'aboutme' => "Personal Information Page",
'webdav' => "WebDAV access to Authoring Spaces (https)",
'editors' => "Available Editors",
- 'managers' => "Co-authors who can add/revoke co-authors",
+ 'managers' => "Co-authors who can add/revoke roles",
+ 'archive' => "Managers can download tar.gz file of Authoring Space",
'portfolio' => "Personal User Portfolio",
'portaccess' => "Portfolio Shareable",
'timezone' => "Can set Time Zone",
@@ -325,8 +331,8 @@ sub build_tools_display {
&Apache::lonnet::get_dom('configuration',['quotas','authordefaults'],$ccdomain);
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,'tools.webdav',
'authoreditors','authormanagers',
- 'domcoord.author');
- @usertools = ('webdav','editors','managers');
+ 'authorarchive','domcoord.author');
+ @usertools = ('webdav','editors','managers','archive');
$colspan = ' colspan="2"';
} else {
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
@@ -337,28 +343,44 @@ sub build_tools_display {
}
foreach my $item (@usertools) {
my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off,
- $currdisp,$custdisp,$custradio,$onclick);
+ $currdisp,$custdisp,$custradio,$onclick,$customsty,$editorsty);
$cust_off = 'checked="checked" ';
$tool_on = 'checked="checked" ';
- $curr_access =
- &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,
- $context,\%userenv,'',
- {'is_adv' => $isadv});
+ unless (($context eq 'authordefaults') || ($item eq 'webdav')) {
+ $curr_access =
+ &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,
+ $context,\%userenv,'',
+ {'is_adv' => $isadv});
+ }
if ($context eq 'requestauthor') {
if ($userenv{$context} ne '') {
$cust_on = ' checked="checked" ';
$cust_off = '';
}
} elsif ($context eq 'authordefaults') {
- if ($item eq 'editors') {
+ if (($item eq 'editors') || ($item eq 'archive')) {
if ($userenv{'author'.$item} ne '') {
$cust_on = ' checked="checked" ';
$cust_off = '';
+ if ($item eq 'archive') {
+ $curr_access = $userenv{'author'.$item};
+ }
+ } elsif ($item eq 'archive') {
+ $curr_access = 0;
+ if (ref($domconfig{'authordefaults'}) eq 'HASH') {
+ $curr_access = $domconfig{'authordefaults'}{'archive'};
+ }
}
} elsif ($item eq 'webdav') {
if ($userenv{'tools.'.$item} ne '') {
$cust_on = ' checked="checked" ';
$cust_off = '';
+ $curr_access = $userenv{'tools.'.$item};
+ } else {
+ $curr_access =
+ &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,'reload',
+ undef,\%userenv,'',
+ {'is_adv' => $isadv});
}
}
} elsif ($userenv{$context.'.'.$item} ne '') {
@@ -450,6 +472,8 @@ sub build_tools_display {
my $current = $userenv{$context.'.'.$item};
if ($item eq 'webdav') {
$current = $userenv{'tools.webdav'};
+ } elsif ($item eq 'archive') {
+ $current = $userenv{'author'.$item};
}
if ($current eq '') {
$custom_access =
@@ -474,16 +498,14 @@ sub build_tools_display {
' '."\n".
&Apache::loncommon::start_data_table_row()."\n";
if (($context eq 'requestcourses') || ($context eq 'requestauthor')) {
- my ($curroption,$currlimit,$customsty);
+ my ($curroption,$currlimit);
my $envkey = $context.'.'.$item;
if ($context eq 'requestauthor') {
$envkey = $context;
}
if ($userenv{$envkey} ne '') {
$curroption = $userenv{$envkey};
- $customsty = ' style="display:block"';
} else {
- $customsty = ' style="display:none"';
my (@inststatuses);
if ($context eq 'requestcourses') {
$curroption =
@@ -1509,6 +1531,7 @@ sub print_user_modification_page {
'bread_crumbs_component' => 'User Management'};
if ($env{'form.popup'}) {
$args->{'no_nav_bar'} = 1;
+ $args->{'add_modal'} = 1;
}
if (($context eq 'domain') && ($env{'request.role.domain'} eq $ccdomain)) {
my @toggles;
@@ -1518,7 +1541,7 @@ sub print_user_modification_page {
unless ($isauthor) {
push(@toggles,'requestauthor');
}
- push(@toggles,('webdav','editors'));
+ push(@toggles,('webdav','editors','archive'));
}
if (&Apache::lonnet::allowed('mut',$ccdomain)) {
push(@toggles,('aboutme','blog','portfolio','portaccess','timezone'));
@@ -3230,7 +3253,7 @@ sub update_user_data {
my @usertools = ('aboutme','blog','portfolio','portaccess','timezone');
my @requestcourses = ('official','unofficial','community','textbook','placement','lti');
my @requestauthor = ('requestauthor');
- my @authordefaults = ('webdav','editors');
+ my @authordefaults = ('webdav','editors','archive');
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($env{'form.ccdomain'});
my %canmodify_status =
@@ -3360,7 +3383,13 @@ sub update_user_data {
if ($env{'form.customwebdav'} == 1) {
$newcustom{'webdav'} = $env{'form.authordefaults_webdav'};
$changed{'webdav'} = &tool_admin('webdav',$newcustom{'webdav'},
- \%changeHash,'authordefaults');
+ \%changeHash,'authordefaults');
+ }
+ if ($env{'form.customarchive'} == 1) {
+ $newcustom{'archive'} = $env{'form.authordefaults_archive'};
+ $changed{'archive'} = &tool_admin('archive',$newcustom{'archive'},
+ \%changeHash,'authordefaults');
+
}
}
if ($canmodify_status{'inststatus'}) {
@@ -3429,7 +3458,7 @@ sub update_user_data {
'id','permanentemail','portfolioquota','authorquota','inststatus',
'tools.aboutme','tools.blog','tools.webdav',
'tools.portfolio','tools.timezone','tools.portaccess',
- 'authormanagers','authoreditors','requestauthor',
+ 'authormanagers','authoreditors','authorarchive','requestauthor',
'requestcourses.official','requestcourses.unofficial',
'requestcourses.community','requestcourses.textbook',
'requestcourses.placement','requestcourses.lti',
@@ -3781,7 +3810,10 @@ sub update_user_data {
}
if (($env{'user.name'} eq $env{'form.ccuname'}) &&
($env{'user.domain'} eq $env{'form.ccdomain'})) {
- my %newenvhash;
+ my (%newenvhash,$got_domdefs,%domdefaults,$got_userenv,
+ %userenv);
+ my @fromenv = keys(%changed);
+ push(@fromenv,'inststatus');
foreach my $key (keys(%changed)) {
if (($key eq 'official') || ($key eq 'unofficial') ||
($key eq 'community') || ($key eq 'textbook') ||
@@ -3791,29 +3823,71 @@ sub update_user_data {
if ($changeHash{'requestcourses.'.$key}) {
$newenvhash{'environment.canrequest.'.$key} = 1;
} else {
+ unless ($got_domdefs) {
+ %domdefaults =
+ &Apache::lonnet::get_domain_defaults($env{'user.domain'});
+ $got_domdefs = 1;
+ }
+ unless ($got_userenv) {
+ %userenv =
+ &Apache::lonnet::userenvironment($env{'user.domain'},
+ $env{'user.name'},@fromenv);
+ $got_userenv = 1;
+ }
$newenvhash{'environment.canrequest.'.$key} =
&Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
- $key,'reload','requestcourses');
+ $key,'reload','requestcourses',\%userenv,\%domdefaults);
}
} elsif ($key eq 'requestauthor') {
$newenvhash{'environment.'.$key} = $changeHash{$key};
if ($changeHash{$key}) {
$newenvhash{'environment.canrequest.author'} = 1;
} else {
+ unless ($got_domdefs) {
+ %domdefaults =
+ &Apache::lonnet::get_domain_defaults($env{'user.domain'});
+ $got_domdefs = 1;
+ }
+ unless ($got_userenv) {
+ %userenv =
+ &Apache::lonnet::userenvironment($env{'user.domain'},
+ $env{'user.name'},@fromenv);
+ $got_userenv = 1;
+ }
$newenvhash{'environment.canrequest.author'} =
&Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
- $key,'reload','requestauthor');
+ $key,'reload','requestauthor',\%userenv,\%domdefaults);
}
} elsif ($key eq 'editors') {
$newenvhash{'environment.author'.$key} = $changeHash{'author'.$key};
- if ($key eq 'editors') {
- if ($env{'form.customeditors'}) {
- $newenvhash{'environment.editors'} = $changeHash{'author'.$key};
+ if ($env{'form.customeditors'}) {
+ $newenvhash{'environment.editors'} = $changeHash{'author'.$key};
+ } else {
+ unless ($got_domdefs) {
+ %domdefaults =
+ &Apache::lonnet::get_domain_defaults($env{'user.domain'});
+ $got_domdefs = 1;
+ }
+ if ($domdefaults{'editors'} ne '') {
+ $newenvhash{'environment.editors'} = $domdefaults{'editors'};
} else {
- $newenvhash{'environment.editors'} =
- &Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
- $key,'reload','authordefaults');
+ $newenvhash{'environment.editors'} = 'edit,xml';
+ }
+ }
+ } elsif ($key eq 'archive') {
+ $newenvhash{'environment.author.'.$key} =
+ $changeHash{'author.'.$key};
+ if ($changeHash{'author.'.$key} ne '') {
+ $newenvhash{'environment.canarchive'} =
+ $changeHash{'author.'.$key};
+ } else {
+ unless ($got_domdefs) {
+ %domdefaults =
+ &Apache::lonnet::get_domain_defaults($env{'user.domain'});
+ $got_domdefs = 1;
}
+ $newenvhash{'environment.canarchive'} =
+ $domdefaults{'archive'};
}
} elsif ($key ne 'quota') {
$newenvhash{'environment.tools.'.$key} =
@@ -3822,9 +3896,20 @@ sub update_user_data {
$newenvhash{'environment.availabletools.'.$key} =
$changeHash{'tools.'.$key};
} else {
+ unless ($got_domdefs) {
+ %domdefaults =
+ &Apache::lonnet::get_domain_defaults($env{'user.domain'});
+ $got_domdefs = 1;
+ }
+ unless ($got_userenv) {
+ %userenv =
+ &Apache::lonnet::userenvironment($env{'user.domain'},
+ $env{'user.name'},@fromenv);
+ $got_userenv = 1;
+ }
$newenvhash{'environment.availabletools.'.$key} =
&Apache::lonnet::usertools_access($env{'user.name'},$env{'user.domain'},
- $key,'reload','tools');
+ $key,'reload','tools',\%userenv,\%domdefaults);
}
}
}
@@ -4025,7 +4110,8 @@ sub display_userinfo {
'prvs' => 'Previous Value:',
'chto' => 'Changed To:',
'editors' => "Available Editors in Authoring Space",
- 'managers' => "Co-authors who can add/revoke co-authors",
+ 'managers' => "Co-authors who can add/revoke roles",
+ 'archive' => "Managers can download tar.gz file of Authoring Space",
'edit' => 'Standard editor (Edit)',
'xml' => 'Text editor (EditXML)',
'daxe' => 'Daxe editor (Daxe)',
@@ -4059,7 +4145,7 @@ sub display_userinfo {
if ($entry eq 'requestauthor') {
@items = ($entry);
} elsif ($entry eq 'authordefaults') {
- @items = ('webdav','managers','editors');
+ @items = ('webdav','managers','editors','archive');
} else {
@items = @{$requestcourses};
}
@@ -4310,6 +4396,9 @@ sub tool_changes {
} elsif ($tool eq 'webdav') {
$envkey = 'tools.webdav';
$newval = $env{'form.'.$context.'_'.$tool};
+ } elsif ($tool eq 'archive') {
+ $envkey = 'authorarchive';
+ $newval = $env{'form.'.$context.'_'.$tool};
}
} else {
$newval = $env{'form.'.$context.'_'.$tool};
@@ -4341,7 +4430,7 @@ sub tool_changes {
} elsif ($tool eq 'editors') {
$oldaccesstext->{$tool} = &mt('can use: [_1]',
join(', ', map { $tooldesc{$_} } split(/,/,$userenv->{$envkey})));
- } elsif ($tool eq 'webdav') {
+ } elsif (($tool eq 'webdav') || ($tool eq 'archive')) {
if ($userenv->{$envkey}) {
$oldaccesstext->{$tool} = &mt("availability set to 'on'");
} else {
@@ -4387,7 +4476,7 @@ sub tool_changes {
$managers =~ s/,/, /g;
$newaccesstext->{$tool} = $managers;
}
- } elsif ($tool eq 'webdav') {
+ } elsif (($tool eq 'webdav') || ($tool eq 'archive')) {
if ($newval) {
$newaccesstext->{$tool} = &mt("availability set to 'on'");
} else {
@@ -4427,7 +4516,7 @@ sub tool_changes {
$managers =~ s/,/, /g;
$newaccesstext->{$tool} = $managers;
}
- } elsif ($tool eq 'webdav') {
+ } elsif (($tool eq 'webdav') || ($tool eq 'archive')) {
if ($userenv->{$envkey}) {
$newaccesstext->{$tool} = &mt("availability set to 'on'");
} else {
@@ -4476,7 +4565,7 @@ sub tool_changes {
$managers =~ s/,/, /g;
$newaccesstext->{$tool} = $managers;
}
- } elsif ($tool eq 'webdav') {
+ } elsif (($tool eq 'webdav') || ($tool eq 'archive')) {
if ($userenv->{$envkey}) {
$newaccesstext->{$tool} = &mt("availability set to 'on'");
} else {
@@ -4524,7 +4613,7 @@ sub tool_changes {
} elsif ($tool eq 'editors') {
$newaccesstext->{$tool} = &mt('can use: [_1]',
join(', ', map { $tooldesc{$_} } split(/,/,$newval)));
- } elsif ($tool eq 'webdav') {
+ } elsif (($tool eq 'webdav') || ($tool eq 'archive')) {
if ($newval) {
$newaccesstext->{$tool} = &mt("availability set to 'on'");
} else {
@@ -5188,7 +5277,7 @@ sub tool_admin {
$toolchanged = 1;
if ($tool eq 'requestauthor') {
$changeHash->{$context} = $settool;
- } elsif (($tool eq 'managers') || ($tool eq 'editors')) {
+ } elsif (($tool eq 'managers') || ($tool eq 'editors') || ($tool eq 'archive')) {
$changeHash->{'author'.$tool} = $settool;
} elsif ($tool eq 'webdav') {
$changeHash->{'tools.'.$tool} = $settool;
@@ -5506,7 +5595,7 @@ sub display_coauthor_managers {
}
$output .= "
\n";
if (@possmanagers) {
- $output .= ''.&mt('Select manager(s)').': ';
+ $output .= '
'.&mt('If checked, can manage').': ';
foreach my $user (@possmanagers) {
my $checked;
if (grep(/^\Q$user\E$/,@custommanagers)) {
@@ -6350,7 +6439,7 @@ sub handler {
if (($permission->{cusr}) && ($context eq 'author')) {
push(@{$brcrum},
{href => '/adm/createuser?action=camanagers',
- text => 'Co-authors who manage',
+ text => 'Co-author Managers',
help => 'Author_Manage_Coauthors'});
if ($env{'form.state'} eq 'process') {
push(@{$brcrum},
@@ -6404,6 +6493,27 @@ sub handler {
$r->internal_redirect('/adm/viewcoauthors');
return OK;
}
+ } elsif (($env{'form.action'} eq 'setenv') && ($context eq 'author')) {
+ my ($role,$audom,$auname,$canview,$canedit) =
+ &Apache::lonviewcoauthors::get_allowable();
+ push(@{$brcrum},
+ {href => '/adm/createuser?action=calist',
+ text => 'Coauthor-viewable list',
+ help => 'Author_List_Coauthors'});
+ my $args = { 'bread_crumbs' => $brcrum };
+ $r->print(&Apache::loncommon::start_page('Coauthor-viewable list',undef,
+ $args));
+ my %viewsettings =
+ &Apache::lonviewcoauthors::retrieve_view_settings($auname,$audom,$role);
+ if ($viewsettings{'show'} eq 'none') {
+ $r->print('
'.&mt('Coauthor-viewable listing').'
'.
+ ''.
+ &mt('Listing of co-authors not enabled for this Authoring Space').
+ '
');
+ } else {
+ &Apache::lonviewcoauthors::print_coauthors($r,$auname,$audom,$role,
+ '/adm/createuser',\%viewsettings);
+ }
} else {
$bread_crumbs_component = 'User Management';
$args = { bread_crumbs => $brcrum,
@@ -6510,6 +6620,15 @@ function updateCols(caller) {
document.getElementById('showcolstart').checked = false;
document.getElementById('showcolend').checked = false;
}
+ if (context == 'author') {
+ if (document.studentform.Status.options[document.studentform.Status.selectedIndex].value == 'Expired') {
+ document.getElementById('showcolmanager').checked = false;
+ document.getElementById('showcolmanager').disabled = 'disabled';
+ } else if (document.studentform.showrole.options[document.studentform.showrole.selectedIndex].value != 'aa') {
+ document.getElementById('showcolmanager').checked = true;
+ document.getElementById('showcolmanager').disabled = '';
+ }
+ }
}
}
if (caller == 'output') {
@@ -6595,6 +6714,15 @@ function updateCols(caller) {
}
}
}
+ if (context == 'author') {
+ if (document.studentform.showrole.options[document.studentform.showrole.selectedIndex].value == 'aa') {
+ document.getElementById('showcolmanager').checked = false;
+ document.getElementById('showcolmanager').disabled = 'disabled';
+ } else if (document.studentform.Status.options[document.studentform.Status.selectedIndex].value != 'Expired') {
+ document.getElementById('showcolmanager').checked = true;
+ document.getElementById('showcolmanager').disabled = '';
+ }
+ }
}
return;
}
@@ -6890,6 +7018,27 @@ sub print_main_menu {
);
}
} elsif ($context eq 'author') {
+ my $coauthorlist;
+ if ($env{'request.role'} =~ m{^(?:ca|aa)\./($match_domain)/($match_username)$}) {
+ if ($env{'environment.internal.coauthorlist./'.$1.'/'.$2}) {
+ $coauthorlist = 1;
+ }
+ } elsif ($env{'request.role'} eq "au./$env{'user.domain'}/") {
+ if ($env{'environment.coauthorlist'}) {
+ $coauthorlist = 1;
+ }
+ }
+ if ($coauthorlist) {
+ push(@{ $menu[1]->{items} },
+ {
+ linktext => 'Co-author-viewable list',
+ icon => 'clst.png',
+ #help => 'Coauthor_Listing',
+ url => '/adm/createuser?action=calist&forceedit=0',
+ permission => $permission->{'cusr'},
+ linktitle => 'Co-author-viewable listing',
+ });
+ }
push(@{ $menu[2]->{items} }, #Category: Administration
{
linktext => 'Change Log',
@@ -6900,16 +7049,16 @@ sub print_main_menu {
linktitle => 'View change log.',
},
{
- linktext => 'Co-authors who can add/revoke co-author roles',
- icon => 'helpdesk-access.png',
+ linktext => 'Co-author Managers',
+ icon => 'camanager.png',
#help => 'Coauthor_Management',
url => '/adm/createuser?action=camanagers',
permission => $permission->{'author'},
linktitle => 'Assign/Revoke right to manage co-author roles',
},
{
- linktext => 'Configure coauthor-viewable listing',
- icon => 'helpdesk-access.png',
+ linktext => 'Configure Co-author Listing',
+ icon => 'coauthors.png',
#help => 'Coauthor_Settings',
url => '/adm/createuser?action=calist&forceedit=1',
permission => ($permission->{'cusr'}),