--- loncom/interface/loncreateuser.pm 2011/12/08 22:10:18 1.359
+++ loncom/interface/loncreateuser.pm 2014/03/31 02:31:05 1.398
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.359 2011/12/08 22:10:18 www Exp $
+# $Id: loncreateuser.pm,v 1.398 2014/03/31 02:31:05 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -111,77 +111,51 @@ sub initialize_authen_forms {
sub auth_abbrev {
my %abv_auth = (
- krb5 => 'krb',
- krb4 => 'krb',
- internal => 'int',
- localuth => 'loc',
- unix => 'fsys',
+ krb5 => 'krb',
+ krb4 => 'krb',
+ internal => 'int',
+ localauth => 'loc',
+ unix => 'fsys',
);
return %abv_auth;
}
# ====================================================
-sub portfolio_quota {
+sub user_quotas {
my ($ccuname,$ccdomain) = @_;
my %lt = &Apache::lonlocal::texthash(
'usrt' => "User Tools",
- 'disk' => "Disk space allocated to user's portfolio files",
- 'cuqu' => "Current quota",
'cust' => "Custom quota",
- 'defa' => "Default",
'chqu' => "Change quota",
);
- my ($currquota,$quotatype,$inststatus,$defquota) =
- &Apache::loncommon::get_user_quota($ccuname,$ccdomain);
- my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($ccdomain);
- my ($longinsttype,$showquota,$custom_on,$custom_off,$defaultinfo);
- if ($inststatus ne '') {
- if ($usertypes->{$inststatus} ne '') {
- $longinsttype = $usertypes->{$inststatus};
- }
- }
- $custom_on = ' ';
- $custom_off = ' checked="checked" ';
+
my $quota_javascript = <<"END_SCRIPT";
END_SCRIPT
- if ($quotatype eq 'custom') {
- $custom_on = $custom_off;
- $custom_off = ' ';
- $showquota = $currquota;
- if ($longinsttype eq '') {
- $defaultinfo = &mt('For this user, the default quota would be [_1]'
- .' Mb.',$defquota);
- } else {
- $defaultinfo = &mt("For this user, the default quota would be [_1]".
- " Mb, as determined by the user's institutional".
- " affiliation ([_2]).",$defquota,$longinsttype);
- }
- } else {
- if ($longinsttype eq '') {
- $defaultinfo = &mt('For this user, the default quota is [_1]'
- .' Mb.',$defquota);
- } else {
- $defaultinfo = &mt("For this user, the default quota of [_1]".
- " Mb, is determined by the user's institutional".
- " affiliation ([_2]).",$defquota,$longinsttype);
- }
- }
-
+ my $longinsttype;
+ my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($ccdomain);
my $output = $quota_javascript."\n".
'
'.$lt{'usrt'}.' '."\n".
&Apache::loncommon::start_data_table();
@@ -189,29 +163,72 @@ END_SCRIPT
if (&Apache::lonnet::allowed('mut',$ccdomain)) {
$output .= &build_tools_display($ccuname,$ccdomain,'tools');
}
- if (&Apache::lonnet::allowed('mpq',$ccdomain)) {
- $output .= ''."\n".
- ' '.$lt{'disk'}.' '."\n".
- ' '."\n".
- &Apache::loncommon::start_data_table_row()."\n".
- ' '.$lt{'cuqu'}.': '.
- $currquota.' Mb. '.
- $defaultinfo.' '."\n".
- &Apache::loncommon::end_data_table_row()."\n".
- &Apache::loncommon::start_data_table_row()."\n".
- ' '.$lt{'chqu'}.
- ': '.
- ' '.$lt{'defa'}.' ('.$defquota.' Mb). '.
- ' '.
- $lt{'cust'}.': '.
- ' Mb '."\n".
- &Apache::loncommon::end_data_table_row()."\n";
- }
+
+ my %titles = &Apache::lonlocal::texthash (
+ portfolio => "Disk space allocated to user's portfolio files",
+ author => "Disk space allocated to user's Authoring Space (if role assigned)",
+ );
+ foreach my $name ('portfolio','author') {
+ my ($currquota,$quotatype,$inststatus,$defquota) =
+ &Apache::loncommon::get_user_quota($ccuname,$ccdomain,$name);
+ if ($longinsttype eq '') {
+ if ($inststatus ne '') {
+ if ($usertypes->{$inststatus} ne '') {
+ $longinsttype = $usertypes->{$inststatus};
+ }
+ }
+ }
+ my ($showquota,$custom_on,$custom_off,$defaultinfo);
+ $custom_on = ' ';
+ $custom_off = ' checked="checked" ';
+ if ($quotatype eq 'custom') {
+ $custom_on = $custom_off;
+ $custom_off = ' ';
+ $showquota = $currquota;
+ if ($longinsttype eq '') {
+ $defaultinfo = &mt('For this user, the default quota would be [_1]'
+ .' MB.',$defquota);
+ } else {
+ $defaultinfo = &mt("For this user, the default quota would be [_1]".
+ " MB, as determined by the user's institutional".
+ " affiliation ([_2]).",$defquota,$longinsttype);
+ }
+ } else {
+ if ($longinsttype eq '') {
+ $defaultinfo = &mt('For this user, the default quota is [_1]'
+ .' MB.',$defquota);
+ } else {
+ $defaultinfo = &mt("For this user, the default quota of [_1]".
+ " MB, is determined by the user's institutional".
+ " affiliation ([_2]).",$defquota,$longinsttype);
+ }
+ }
+
+ if (&Apache::lonnet::allowed('mpq',$ccdomain)) {
+ $output .= ''."\n".
+ ' '.$titles{$name}.' '."\n".
+ ' '."\n".
+ &Apache::loncommon::start_data_table_row()."\n".
+ ' '.
+ &mt('Current quota: [_1] MB',$currquota).' '.
+ $defaultinfo.' '."\n".
+ &Apache::loncommon::end_data_table_row()."\n".
+ &Apache::loncommon::start_data_table_row()."\n".
+ ' '.$lt{'chqu'}.
+ ': '.
+ ''.
+ &mt('Default ([_1] MB)',$defquota).' '.
+ ' '.$lt{'cust'}.': '.
+ ' '.&mt('MB').' '."\n".
+ &Apache::loncommon::end_data_table_row()."\n";
+ }
+ }
$output .= &Apache::loncommon::end_data_table();
return $output;
}
@@ -223,6 +240,7 @@ sub build_tools_display {
my %lt = &Apache::lonlocal::texthash (
'blog' => "Personal User Blog",
'aboutme' => "Personal Information Page",
+ 'webdav' => "WebDAV access to Authoring Spaces (if SSL and author/co-author)",
'portfolio' => "Personal User Portfolio",
'avai' => "Available",
'cusa' => "availability",
@@ -232,12 +250,14 @@ sub build_tools_display {
'official' => 'Can request creation of official courses',
'unofficial' => 'Can request creation of unofficial courses',
'community' => 'Can request creation of communities',
+ 'textbook' => 'Can request creation of textbook courses',
+ 'requestauthor' => 'Can request author space',
);
if ($context eq 'requestcourses') {
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
'requestcourses.official','requestcourses.unofficial',
- 'requestcourses.community');
- @usertools = ('official','unofficial','community');
+ 'requestcourses.community','requestcourses.textbook');
+ @usertools = ('official','unofficial','community','textbook');
@options =('norequest','approval','autolimit','validate');
%validations = &Apache::lonnet::auto_courserequest_checks($ccdomain);
%reqtitles = &courserequest_titles();
@@ -246,10 +266,21 @@ sub build_tools_display {
%domconfig =
&Apache::lonnet::get_dom('configuration',['requestcourses'],$ccdomain);
$isadv = &Apache::lonnet::is_advanced_user($ccuname,$ccdomain);
+ } elsif ($context eq 'requestauthor') {
+ %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
+ 'requestauthor');
+ @usertools = ('requestauthor');
+ @options =('norequest','approval','automatic');
+ %reqtitles = &requestauthor_titles();
+ %reqdisplay = &requestauthor_display();
+ $colspan = ' colspan="2"';
+ %domconfig =
+ &Apache::lonnet::get_dom('configuration',['requestauthor'],$ccdomain);
} else {
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
- 'tools.aboutme','tools.portfolio','tools.blog');
- @usertools = ('aboutme','blog','portfolio');
+ 'tools.aboutme','tools.portfolio','tools.blog',
+ 'tools.webdav');
+ @usertools = ('aboutme','blog','webdav','portfolio');
}
foreach my $item (@usertools) {
my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off,
@@ -259,7 +290,12 @@ sub build_tools_display {
$curr_access =
&Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,
$context);
- if ($userenv{$context.'.'.$item} ne '') {
+ if ($context eq 'requestauthor') {
+ if ($userenv{$context} ne '') {
+ $cust_on = ' checked="checked" ';
+ $cust_off = '';
+ }
+ } elsif ($userenv{$context.'.'.$item} ne '') {
$cust_on = ' checked="checked" ';
$cust_off = '';
}
@@ -269,6 +305,12 @@ sub build_tools_display {
} else {
$custom_access = &mt('Currently from custom setting.');
}
+ } elsif ($context eq 'requestauthor') {
+ if ($userenv{$context} eq '') {
+ $custom_access = &mt('Currently from default setting.');
+ } else {
+ $custom_access = &mt('Currently from custom setting.');
+ }
} else {
if ($userenv{$context.'.'.$item} eq '') {
$custom_access =
@@ -290,15 +332,27 @@ sub build_tools_display {
' '.$lt{$item}.' '."\n".
' '."\n".
&Apache::loncommon::start_data_table_row()."\n";
- if ($context eq 'requestcourses') {
+ if (($context eq 'requestcourses') || ($context eq 'requestauthor')) {
my ($curroption,$currlimit);
- if ($userenv{$context.'.'.$item} ne '') {
- $curroption = $userenv{$context.'.'.$item};
+ my $envkey = $context.'.'.$item;
+ if ($context eq 'requestauthor') {
+ $envkey = $context;
+ }
+ if ($userenv{$envkey} ne '') {
+ $curroption = $userenv{$envkey};
} else {
my (@inststatuses);
- $curroption =
- &Apache::loncoursequeueadmin::get_processtype($ccuname,$ccdomain,$isadv,$ccdomain,
- $item,\@inststatuses,\%domconfig);
+ if ($context eq 'requestcourses') {
+ $curroption =
+ &Apache::loncoursequeueadmin::get_processtype('course',$ccuname,$ccdomain,
+ $isadv,$ccdomain,$item,
+ \@inststatuses,\%domconfig);
+ } else {
+ $curroption =
+ &Apache::loncoursequeueadmin::get_processtype('requestauthor',$ccuname,$ccdomain,
+ $isadv,$ccdomain,undef,
+ \@inststatuses,\%domconfig);
+ }
}
if (!$curroption) {
$curroption = 'norequest';
@@ -336,28 +390,36 @@ sub build_tools_display {
$checked = ' checked="checked"';
}
}
+ my $name = 'crsreq_'.$item;
+ if ($context eq 'requestauthor') {
+ $name = $item;
+ }
$custdisp .= ''.
- ' '.
+ ' '.
$reqtitles{$option}.' ';
if ($option eq 'autolimit') {
- $custdisp .= ' '.
$reqtitles{'unlimited'};
- } else {
- $custdisp .= '';
- }
- $custdisp .= ' ';
+ } else {
+ $custdisp .= '';
+ }
+ $custdisp .= '';
}
$custdisp .= '';
$custradio = ''.&mt('Custom setting').' '.$custdisp;
} else {
$currdisp = ($curr_access?&mt('Yes'):&mt('No'));
+ my $name = $context.'_'.$item;
+ if ($context eq 'requestauthor') {
+ $name = $context;
+ }
$custdisp = ''.
- ' '.&mt('On').' '.
- ' '.&mt('On').' '.
+ ' '.&mt('Off').' ';
$custradio = (' 'x2).'--'.$lt{'cusa'}.': '.$custdisp.
'';
@@ -384,12 +446,13 @@ sub coursereq_externaluser {
'official' => 'Can request creation of official courses',
'unofficial' => 'Can request creation of unofficial courses',
'community' => 'Can request creation of communities',
+ 'textbook' => 'Can request creation of textbook courses',
);
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
'reqcrsotherdom.official','reqcrsotherdom.unofficial',
- 'reqcrsotherdom.community');
- @usertools = ('official','unofficial','community');
+ 'reqcrsotherdom.community','reqcrsotherdom.textbook');
+ @usertools = ('official','unofficial','community','textbook');
@options = ('approval','validate','autolimit');
%validations = &Apache::lonnet::auto_courserequest_checks($cdom);
my $optregex = join('|',@options);
@@ -453,11 +516,23 @@ sub coursereq_externaluser {
return $output;
}
+sub domainrole_req {
+ my ($ccuname,$ccdomain) = @_;
+ return ''.
+ &mt('User Can Request Assignment of Domain Roles?').
+ ' '."\n".
+ &Apache::loncommon::start_data_table().
+ &build_tools_display($ccuname,$ccdomain,
+ 'requestauthor').
+ &Apache::loncommon::end_data_table();
+}
+
sub courserequest_titles {
my %titles = &Apache::lonlocal::texthash (
official => 'Official',
unofficial => 'Unofficial',
community => 'Communities',
+ textbook => 'Textbook',
norequest => 'Not allowed',
approval => 'Approval by Dom. Coord.',
validate => 'With validation',
@@ -476,6 +551,89 @@ sub courserequest_display {
return %titles;
}
+sub requestauthor_titles {
+ my %titles = &Apache::lonlocal::texthash (
+ norequest => 'Not allowed',
+ approval => 'Approval by Dom. Coord.',
+ automatic => 'Automatic approval',
+ );
+ return %titles;
+
+}
+
+sub requestauthor_display {
+ my %titles = &Apache::lonlocal::texthash (
+ approval => 'Yes, need approval',
+ automatic => 'Yes, automatic approval',
+ norequest => 'No',
+ );
+ return %titles;
+}
+
+sub requestchange_display {
+ my %titles = &Apache::lonlocal::texthash (
+ approval => "availability set to 'on' (approval required)",
+ automatic => "availability set to 'on' (automatic approval)",
+ norequest => "availability set to 'off'",
+ );
+ return %titles;
+}
+
+sub curr_requestauthor {
+ my ($uname,$udom,$isadv,$inststatuses,$domconfig) = @_;
+ return unless ((ref($inststatuses) eq 'ARRAY') && (ref($domconfig) eq 'HASH'));
+ if ($uname eq '' || $udom eq '') {
+ $uname = $env{'user.name'};
+ $udom = $env{'user.domain'};
+ $isadv = $env{'user.adv'};
+ }
+ my (%userenv,%settings,$val);
+ my @options = ('automatic','approval');
+ %userenv =
+ &Apache::lonnet::userenvironment($udom,$uname,'requestauthor','inststatus');
+ if ($userenv{'requestauthor'}) {
+ $val = $userenv{'requestauthor'};
+ @{$inststatuses} = ('_custom_');
+ } else {
+ my %alltasks;
+ if (ref($domconfig->{'requestauthor'}) eq 'HASH') {
+ %settings = %{$domconfig->{'requestauthor'}};
+ if (($isadv) && ($settings{'_LC_adv'} ne '')) {
+ $val = $settings{'_LC_adv'};
+ @{$inststatuses} = ('_LC_adv_');
+ } else {
+ if ($userenv{'inststatus'} ne '') {
+ @{$inststatuses} = split(',',$userenv{'inststatus'});
+ } else {
+ @{$inststatuses} = ('default');
+ }
+ foreach my $status (@{$inststatuses}) {
+ if (exists($settings{$status})) {
+ my $value = $settings{$status};
+ next unless ($value);
+ unless (exists($alltasks{$value})) {
+ if (ref($alltasks{$value}) eq 'ARRAY') {
+ unless(grep(/^\Q$status\E$/,@{$alltasks{$value}})) {
+ push(@{$alltasks{$value}},$status);
+ }
+ } else {
+ @{$alltasks{$value}} = ($status);
+ }
+ }
+ }
+ }
+ foreach my $option (@options) {
+ if ($alltasks{$option}) {
+ $val = $option;
+ last;
+ }
+ }
+ }
+ }
+ }
+ return $val;
+}
+
# =================================================================== Phase one
sub print_username_entry_form {
@@ -841,7 +999,7 @@ ENDSCRIPT
$r->print('');
}
}
- $r->print(' '."\n";
} elsif ($item eq 'approval') {
- my ($appon,$appoff);
- my $cid = $env{'request.course.id'};
- my $currnotified = $env{'course.'.$cid.'.internal.selfenroll_notifylist'};
- if ($env{'course.'.$cid.'.internal.selfenroll_approval'}) {
- $appon = ' checked="checked" ';
- $appoff = ' ';
- } else {
- $appon = ' ';
- $appoff = ' checked="checked" ';
+ my ($currnotified,$currapproval,%appchecked);
+ my %selfdescs = &Apache::lonuserutils::selfenroll_default_descs();
+ if (ref($currsettings) eq 'HASH') {
+ $currnotified = $currsettings->{'selfenroll_notifylist'};
+ $currapproval = $currsettings->{'selfenroll_approval'};
+ }
+ if ($currapproval !~ /^[012]$/) {
+ $currapproval = 0;
+ }
+ $appchecked{$currapproval} = ' checked="checked"';
+ for my $i (0..2) {
+ $output .= ''.
+ ' '.$selfdescs{'approval'}{$i}.
+ ' '.(' 'x2);
}
- $output .= ''.
- ' '.
- &mt('Yes').' '.
- ' '.
- &mt('No').' ';
my %advhash = &Apache::lonnet::get_course_adv_roles($cid,1);
my (@ccs,%notified);
my $ccrole = 'cc';
@@ -4976,7 +5952,13 @@ ENDSCRIPT
}
}
if (@ccs) {
- $output .= ' '.&mt('Personnel to be notified when an enrollment request needs approval, or has been approved:').' '.&Apache::loncommon::start_data_table().
+ my $style;
+ unless ($currapproval) {
+ $style = ' style="display: none;"';
+ }
+ $output .= ''.
+ &mt('Personnel to be notified when an enrollment request needs approval, or has been approved:').' '.
+ &Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_row();
my $count = 0;
my $numcols = 4;
@@ -5004,14 +5986,15 @@ ENDSCRIPT
}
}
$output .= &Apache::loncommon::end_data_table_row().
- &Apache::loncommon::end_data_table();
+ &Apache::loncommon::end_data_table().
+ '
';
}
} elsif ($item eq 'limit') {
- my ($crslimit,$selflimit,$nolimit);
- my $cid = $env{'request.course.id'};
- my $currlim = $env{'course.'.$cid.'.internal.selfenroll_limit'};
- my $currcap = $env{'course.'.$cid.'.internal.selfenroll_cap'};
- $nolimit = ' checked="checked" ';
+ my ($crslimit,$selflimit,$nolimit,$currlim,$currcap);
+ if (ref($currsettings) eq 'HASH') {
+ $currlim = $currsettings->{'selfenroll_limit'};
+ $currcap = $currsettings->{'selfenroll_cap'};
+ }
if ($currlim eq 'allstudents') {
$crslimit = ' checked="checked" ';
$selflimit = ' ';
@@ -5023,6 +6006,7 @@ ENDSCRIPT
} else {
$crslimit = ' ';
$selflimit = ' ';
+ $nolimit = ' checked="checked" ';
}
$output .= ''.
' '.
@@ -5042,7 +6026,8 @@ ENDSCRIPT
$output .= &Apache::lonhtmlcommon::end_pick_box().
' '
- .' ';
+ .' '.
+ $additional.'';
$r->print($output);
return;
}
@@ -5052,10 +6037,10 @@ sub visible_in_cat {
my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
my ($cathash,%settable,@vismsgs,$cansetvis);
my %visactions = &Apache::lonlocal::texthash(
- vis => 'Your course/community currently appears in the Course/Community Catalog for this domain.',
+ vis => 'This course/community currently appears in the Course/Community Catalog for this domain.',
gen => 'Courses can be both self-cataloging, based on an institutional code (e.g., fs08phy231), or can be assigned categories from a hierarchy defined for the domain.',
- miss => 'Your course/community does not currently appear in the Course/Community Catalog for this domain.',
- yous => 'You should remedy this if you plan to allow self-enrollment, otherwise students will have difficulty finding your course.',
+ miss => 'This course/community does not currently appear in the Course/Community Catalog for this domain.',
+ yous => 'You should remedy this if you plan to allow self-enrollment, otherwise students will have difficulty finding this course.',
coca => 'Courses can be absent from the Catalog, because they do not have an institutional code, have no assigned category, or have been specifically excluded.',
make => 'Make any changes to self-enrollment settings below, click "Save", then take action to include the course in the Catalog:',
take => 'Take the following action to ensure the course appears in the Catalog:',
@@ -5267,18 +6252,35 @@ sub selfenroll_date_forms {
sub print_userchangelogs_display {
my ($r,$context,$permission) = @_;
- my $formname = 'roleslog';
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $crstype = &Apache::loncommon::course_type();
- my %roleslog=&Apache::lonnet::dump('nohist_rolelog',$cdom,$cnum);
+ my $formname = 'rolelog';
+ my ($username,$domain,$crstype,%roleslog);
+ if ($context eq 'domain') {
+ $domain = $env{'request.role.domain'};
+ %roleslog=&Apache::lonnet::dump_dom('nohist_rolelog',$domain);
+ } else {
+ if ($context eq 'course') {
+ $domain = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $username = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $crstype = &Apache::loncommon::course_type();
+ my %saveable_parameters = ('show' => 'scalar',);
+ &Apache::loncommon::store_course_settings('roles_log',
+ \%saveable_parameters);
+ &Apache::loncommon::restore_course_settings('roles_log',
+ \%saveable_parameters);
+ } elsif ($context eq 'author') {
+ $domain = $env{'user.domain'};
+ if ($env{'request.role'} =~ m{^au\./\Q$domain\E/$}) {
+ $username = $env{'user.name'};
+ } else {
+ undef($domain);
+ }
+ }
+ if ($domain ne '' && $username ne '') {
+ %roleslog=&Apache::lonnet::dump('nohist_rolelog',$domain,$username);
+ }
+ }
if ((keys(%roleslog))[0]=~/^error\:/) { undef(%roleslog); }
- my %saveable_parameters = ('show' => 'scalar',);
- &Apache::loncommon::store_course_settings('roles_log',
- \%saveable_parameters);
- &Apache::loncommon::restore_course_settings('roles_log',
- \%saveable_parameters);
# set defaults
my $now = time();
my $defstart = $now - (7*24*3600); #7 days ago
@@ -5320,7 +6322,8 @@ sub print_userchangelogs_display {
# Form Header
$r->print(''.
- &role_display_filter($formname,$cdom,$cnum,\%curr,$version,$crstype));
+ &role_display_filter($context,$formname,$domain,$username,\%curr,
+ $version,$crstype));
# Create navigation
my ($nav_script,$nav_links) = &userlogdisplay_nav($formname,\%curr,$more_records);
@@ -5333,9 +6336,13 @@ sub print_userchangelogs_display {
.''.&mt('When').' '
.''.&mt('Who made the change').' '
.''.&mt('Changed User').' '
- .''.&mt('Role').' '
- .''.&mt('Section').' '
- .''.&mt('Context').' '
+ .''.&mt('Role').' ';
+
+ if ($context eq 'course') {
+ $tableheader .= ''.&mt('Section').' ';
+ }
+ $tableheader .=
+ ''.&mt('Context').' '
.''.&mt('Start').' '
.''.&mt('End').' '
.&Apache::loncommon::end_data_table_header_row();
@@ -5404,7 +6411,7 @@ sub print_userchangelogs_display {
if ($roleslog{$id}{'logentry'}{'selfenroll'}) {
$chgcontext = 'selfenroll';
}
- my %lt = &rolechg_contexts($crstype);
+ my %lt = &rolechg_contexts($context,$crstype);
if ($chgcontext ne '' && $lt{$chgcontext} ne '') {
$chgcontext = $lt{$chgcontext};
}
@@ -5414,9 +6421,12 @@ sub print_userchangelogs_display {
.''.&Apache::lonlocal::locallocaltime($roleslog{$id}{'exe_time'}).' '
.''.$whodunit{$roleslog{$id}{'exe_uname'}.':'.$roleslog{$id}{'exe_udom'}}.' '
.''.$changed{$roleslog{$id}{'uname'}.':'.$roleslog{$id}{'udom'}}.' '
- .''.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'},$crstype).' '
- .''.$sec.' '
- .''.$chgcontext.' '
+ .''.&Apache::lonnet::plaintext($roleslog{$id}{'logentry'}{'role'},$crstype).' ');
+ if ($context eq 'course') {
+ $r->print(''.$sec.' ');
+ }
+ $r->print(
+ ''.$chgcontext.' '
.''.$rolestart.' '
.''.$roleend.' '
.&Apache::loncommon::end_data_table_row()."\n");
@@ -5484,9 +6494,11 @@ ENDSCRIPT
}
sub role_display_filter {
- my ($formname,$cdom,$cnum,$curr,$version,$crstype) = @_;
- my $context = 'course';
- my $lctype = lc($crstype);
+ my ($context,$formname,$cdom,$cnum,$curr,$version,$crstype) = @_;
+ my $lctype;
+ if ($context eq 'course') {
+ $lctype = lc($crstype);
+ }
my $nolink = 1;
my $output = ''.
''.&mt('Changes/page:').' '.
@@ -5501,7 +6513,7 @@ sub role_display_filter {
&Apache::lonhtmlcommon::date_setter($formname,'rolelog_end_date',
$curr->{'rolelog_end_date'},undef,
undef,undef,undef,undef,undef,undef,$nolink);
- my %lt = &rolechg_contexts($crstype);
+ my %lt = &rolechg_contexts($context,$crstype);
$output .= ' '.&mt('Window during which changes occurred:').' '.
''.&mt('After:').
' '.$startform.' '.
@@ -5515,7 +6527,7 @@ sub role_display_filter {
$output .= ' selected="selected"';
}
$output .= '>'.&mt('Any').''."\n";
- my @roles = &Apache::lonuserutils::course_roles($context,undef,1,$lctype);
+ my @roles = &Apache::lonuserutils::roles_by_context($context,1,$crstype);
foreach my $role (@roles) {
my $plrole;
if ($role eq 'cr') {
@@ -5533,13 +6545,23 @@ sub role_display_filter {
' '.
''.
&mt('Context:').' ';
- foreach my $chgtype ('any','auto','updatenow','createcourse','course','domain','selfenroll','requestcourses') {
+ my @posscontexts;
+ if ($context eq 'course') {
+ @posscontexts = ('any','automated','updatenow','createcourse','course','domain','selfenroll','requestcourses');
+ } elsif ($context eq 'domain') {
+ @posscontexts = ('any','domain','requestauthor','domconfig','server');
+ } else {
+ @posscontexts = ('any','author','domain');
+ }
+ foreach my $chgtype (@posscontexts) {
my $selstr = '';
if ($curr->{'chgcontext'} eq $chgtype) {
$selstr = ' selected="selected"';
}
- if (($chgtype eq 'auto') || ($chgtype eq 'updatenow')) {
- next if (!&Apache::lonnet::auto_run($cnum,$cdom));
+ if ($context eq 'course') {
+ if (($chgtype eq 'automated') || ($chgtype eq 'updatenow')) {
+ next if (!&Apache::lonnet::auto_run($cnum,$cdom));
+ }
}
$output .= ''.$lt{$chgtype}.' '."\n";
}
@@ -5552,9 +6574,14 @@ sub role_display_filter {
.'';
# Server version info
+ my $needsrev = '2.11.0';
+ if ($context eq 'course') {
+ $needsrev = '2.7.0';
+ }
+
$output .= ''
.&mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.'
- ,'2.6.99.0');
+ ,$needsrev);
if ($version) {
$output .= ' '.&mt('This LON-CAPA server is version [_1]',$version);
}
@@ -5563,10 +6590,12 @@ sub role_display_filter {
}
sub rolechg_contexts {
- my ($crstype) = @_;
- my %lt = &Apache::lonlocal::texthash (
+ my ($context,$crstype) = @_;
+ my %lt;
+ if ($context eq 'course') {
+ %lt = &Apache::lonlocal::texthash (
any => 'Any',
- auto => 'Automated enrollment',
+ automated => 'Automated Enrollment',
updatenow => 'Roster Update',
createcourse => 'Course Creation',
course => 'User Management in course',
@@ -5574,11 +6603,26 @@ sub rolechg_contexts {
selfenroll => 'Self-enrolled',
requestcourses => 'Course Request',
);
- if ($crstype eq 'Community') {
- $lt{'createcourse'} = &mt('Community Creation');
- $lt{'course'} = &mt('User Management in community');
- $lt{'requestcourses'} = &mt('Community Request');
- }
+ if ($crstype eq 'Community') {
+ $lt{'createcourse'} = &mt('Community Creation');
+ $lt{'course'} = &mt('User Management in community');
+ $lt{'requestcourses'} = &mt('Community Request');
+ }
+ } elsif ($context eq 'domain') {
+ %lt = &Apache::lonlocal::texthash (
+ any => 'Any',
+ domain => 'User Management in domain',
+ requestauthor => 'Authoring Request',
+ server => 'Command line script (DC role)',
+ domconfig => 'Self-enrolled',
+ );
+ } else {
+ %lt = &Apache::lonlocal::texthash (
+ any => 'Any',
+ domain => 'User Management in domain',
+ author => 'User Management by author',
+ );
+ }
return %lt;
}
@@ -6076,7 +7120,8 @@ function backPage(formname,prevphase,pre
}
sub course_level_table {
- my (%inccourses) = @_;
+ my ($inccourses,$showcredits,$defaultcredits) = @_;
+ return unless (ref($inccourses) eq 'HASH');
my $table = '';
# Custom Roles?
@@ -6091,15 +7136,16 @@ sub course_level_table {
'rol' => "Role",
'ext' => "Extent",
'grs' => "Section",
+ 'crd' => "Credits",
'sta' => "Start",
'end' => "End"
);
- foreach my $protectedcourse (sort(keys(%inccourses))) {
+ foreach my $protectedcourse (sort(keys(%{$inccourses}))) {
my $thiscourse=$protectedcourse;
$thiscourse=~s:_:/:g;
my %coursedata=&Apache::lonnet::coursedescription($thiscourse);
- my $isowner = &is_courseowner($protectedcourse,$coursedata{'internal.courseowner'});
+ my $isowner = &Apache::lonuserutils::is_courseowner($protectedcourse,$coursedata{'internal.courseowner'});
my $area=$coursedata{'description'};
my $crstype=$coursedata{'type'};
if (!defined($area)) { $area=&mt('Unavailable course').': '.$protectedcourse; }
@@ -6117,12 +7163,14 @@ sub course_level_table {
if ((&Apache::lonnet::allowed('c'.$role,$thiscourse)) ||
((($role eq 'cc') || ($role eq 'co')) && ($isowner))) {
$table .= &course_level_row($protectedcourse,$role,$area,$domain,
- $plrole,\%sections_count,\%lt);
+ $plrole,\%sections_count,\%lt,
+ $defaultcredits,$crstype);
} elsif ($env{'request.course.sec'} ne '') {
if (&Apache::lonnet::allowed('c'.$role,$thiscourse.'/'.
$env{'request.course.sec'})) {
$table .= &course_level_row($protectedcourse,$role,$area,$domain,
- $plrole,\%sections_count,\%lt);
+ $plrole,\%sections_count,\%lt,
+ $defaultcredits,$crstype);
}
}
}
@@ -6144,8 +7192,10 @@ sub course_level_table {
$result .=
&Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row().
-'
'.$lt{'act'}.' '.$lt{'rol'}.' '.$lt{'ext'}.'
-'.$lt{'grs'}.' '.$lt{'sta'}.' '.$lt{'end'}.' '.
+''.$lt{'act'}.' '.$lt{'rol'}.' '."\n".
+''.$lt{'ext'}.' '.$lt{'crd'}.' '."\n".
+''.$lt{'grs'}.' '.$lt{'sta'}.' '."\n".
+''.$lt{'end'}.' '.
&Apache::loncommon::end_data_table_header_row().
$table.
&Apache::loncommon::end_data_table();
@@ -6153,12 +7203,21 @@ $table.
}
sub course_level_row {
- my ($protectedcourse,$role,$area,$domain,$plrole,$sections_count,$lt) = @_;
+ my ($protectedcourse,$role,$area,$domain,$plrole,$sections_count,
+ $lt,$defaultcredits,$crstype) = @_;
+ my $creditem;
my $row = &Apache::loncommon::start_data_table_row().
' '."\n".
' '.$plrole.' '."\n".
' '.$area.' Domain: '.$domain.' '."\n";
+ if (($role eq 'st') && ($crstype eq 'Course')) {
+ $row .=
+ ' ';
+ } else {
+ $row .= ' ';
+ }
if (($role eq 'cc') || ($role eq 'co')) {
$row .= ' ';
} elsif ($env{'request.course.sec'} ne '') {
@@ -6184,7 +7243,7 @@ sub course_level_row {
'
'."\n";
} else {
$row .= ' '."\n";
+ 'name="sec_'.$protectedcourse.'_'.$role.'" />'."\n";
}
}
$row .= < '.
@@ -6208,7 +7267,11 @@ sub course_level_dc {
' ';
my $courseform=&Apache::loncommon::selectcourse_link
('cu','dccourse','dcdomain','coursedesc',undef,undef,'Select','crstype');
- my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role','Course/Community Browser');
+ my $credit_elem;
+ if ($showcredits) {
+ $credit_elem = 'credits';
+ }
+ my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'currsec','cu','role','Course/Community Browser',$credit_elem);
my %lt=&Apache::lonlocal::texthash(
'rol' => "Role",
'grs' => "Section",
@@ -6218,39 +7281,47 @@ sub course_level_dc {
'end' => "End",
'ssd' => "Set Start Date",
'sed' => "Set End Date",
- 'scc' => "Course/Community"
+ 'scc' => "Course/Community",
+ 'crd' => "Credits",
);
my $header = ''.&mt('Course/Community Level').' '.
&Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row().
- ''.$lt{'scc'}.' '.$lt{'rol'}.' '.$lt{'grs'}.' '.$lt{'sta'}.' '.$lt{'end'}.' '.
+ ''.$lt{'scc'}.' '.$lt{'rol'}.' '."\n".
+ ''.$lt{'grs'}.' '."\n";
+ $header .= ''.$lt{'crd'}.' '."\n" if ($showcredits);
+ $header .= ''.$lt{'sta'}.' '.$lt{'end'}.' '."\n".
&Apache::loncommon::end_data_table_header_row();
my $otheritems = &Apache::loncommon::start_data_table_row()."\n".
' '.
$courseform.(' ' x4).' '."\n".
- ''."\n";
+ ''."\n";
foreach my $role (@roles) {
my $plrole=&Apache::lonnet::plaintext($role);
- $otheritems .= ' '.$plrole;
+ $otheritems .= ' '.$plrole.' ';
}
if ( keys %customroles > 0) {
foreach my $cust (sort keys %customroles) {
my $custrole='cr_cr_'.$env{'user.domain'}.
'_'.$env{'user.name'}.'_'.$cust;
- $otheritems .= ' '.$cust;
+ $otheritems .= ' '.$cust.' ';
}
}
$otheritems .= ' '.
' ';
+ '
'."\n";
+ if ($showcredits) {
+ $otheritems .= ' '."\n".
+ ' '."\n";
+ }
$otheritems .= <
{'selfenroll_'.$type.'_date'};
$newenrolldate{$type} = &Apache::lonhtmlcommon::get_date_from_form('selfenroll_'.$type.'_date');
if ($newenrolldate{$type} ne $currenrolldate{$type}) {
$changes{'internal.selfenroll_'.$type.'_date'} = $newenrolldate{$type};
@@ -6286,15 +7356,14 @@ sub update_selfenroll_config {
} elsif ($item eq 'access_dates') {
my (%currdate,%newdate);
foreach my $type ('start','end') {
- $currdate{$type} = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_'.$type.'_access'};
+ $currdate{$type} = $currsettings->{'selfenroll_'.$type.'_access'};
$newdate{$type} = &Apache::lonhtmlcommon::get_date_from_form('selfenroll_'.$type.'_access');
if ($newdate{$type} ne $currdate{$type}) {
$changes{'internal.selfenroll_'.$type.'_access'} = $newdate{$type};
}
}
} elsif ($item eq 'types') {
- $curr_types =
- $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_'.$item};
+ $curr_types = $currsettings->{'selfenroll_'.$item};
if ($env{'form.selfenroll_all'}) {
if ($curr_types ne '*') {
$changes{'internal.selfenroll_types'} = '*';
@@ -6363,9 +7432,9 @@ sub update_selfenroll_config {
my $newlimit = $env{'form.selfenroll_limit'};
my $newcap = $env{'form.selfenroll_cap'};
$newcap =~s/\s+//g;
- my $currlimit = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_limit'};
+ my $currlimit = $currsettings->{'selfenroll_limit'};
$currlimit = 'none' if ($currlimit eq '');
- my $currcap = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_cap'};
+ my $currcap = $currsettings->{'selfenroll_cap'};
if ($newlimit ne $currlimit) {
if ($newlimit ne 'none') {
if ($newcap =~ /^\d+$/) {
@@ -6374,7 +7443,8 @@ sub update_selfenroll_config {
}
$changes{'internal.selfenroll_limit'} = $newlimit;
} else {
- $warning{$item} = &mt('Maximum enrollment setting unchanged.').' '.&mt('The value provided was invalid - it must be a positive integer if enrollment is being limited.');
+ $warning{$item} = &mt('Maximum enrollment setting unchanged.').' '.
+ &mt('The value provided was invalid - it must be a positive integer if enrollment is being limited.');
}
} elsif ($currcap ne '') {
$changes{'internal.selfenroll_cap'} = '';
@@ -6386,13 +7456,14 @@ sub update_selfenroll_config {
$changes{'internal.selfenroll_cap'} = $newcap;
}
} else {
- $warning{$item} = &mt('Maximum enrollment setting unchanged.').' '.&mt('The value provided was invalid - it must be a positive integer if enrollment is being limited.');
+ $warning{$item} = &mt('Maximum enrollment setting unchanged.').' '.
+ &mt('The value provided was invalid - it must be a positive integer if enrollment is being limited.');
}
}
} elsif ($item eq 'approval') {
my (@currnotified,@newnotified);
- my $currapproval = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'};
- my $currnotifylist = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_notifylist'};
+ my $currapproval = $currsettings->{'selfenroll_approval'};
+ my $currnotifylist = $currsettings->{'selfenroll_notifylist'};
if ($currnotifylist ne '') {
@currnotified = split(/,/,$currnotifylist);
@currnotified = sort(@currnotified);
@@ -6428,14 +7499,14 @@ sub update_selfenroll_config {
}
}
} else {
- my $curr_val =
- $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_'.$item};
+ my $curr_val = $currsettings->{'selfenroll_'.$item};
my $newval = $env{'form.selfenroll_'.$item};
if ($item eq 'section') {
$newval = $env{'form.sections'};
if (defined($curr_groups{$newval})) {
$newval = $curr_val;
- $warning{$item} = &mt('Section for self-enrolled users unchanged as the proposed section is a group').' '.&mt('Group names and section names must be distinct');
+ $warning{$item} = &mt('Section for self-enrolled users unchanged as the proposed section is a group').' '.
+ &mt('Group names and section names must be distinct');
} elsif ($newval eq 'all') {
$newval = $curr_val;
$warning{$item} = &mt('Section for self-enrolled users unchanged, as "all" is a reserved section name.');
@@ -6465,11 +7536,10 @@ sub update_selfenroll_config {
my %crsinfo = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',
$cnum,undef,undef,'Course');
my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
- if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') {
+ if (ref($crsinfo{$cid}) eq 'HASH') {
foreach my $item ('selfenroll_types','selfenroll_start_date','selfenroll_end_date') {
if (exists($changes{'internal.'.$item})) {
- $crsinfo{$env{'request.course.id'}}{$item} =
- $changes{'internal.'.$item};
+ $crsinfo{$cid}{$item} = $changes{'internal.'.$item};
}
}
my $crsputresult =
@@ -6506,7 +7576,7 @@ sub update_selfenroll_config {
if ($changes{'internal.selfenroll_cap'} ne '') {
$newcap = $changes{'internal.selfenroll_cap'}
} else {
- $newcap = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_cap'};
+ $newcap = $currsettings->{'selfenroll_cap'};
}
if ($changes{'internal.selfenroll_limit'} eq 'none') {
$newval = &mt('No limit');
@@ -6516,7 +7586,7 @@ sub update_selfenroll_config {
} elsif ($changes{'internal.selfenroll_limit'} eq 'selfenrolled') {
$newval = &mt('New self-enrollment no longer allowed when total number of self-enrolled students reaches [_1].',$newcap);
} else {
- my $currlimit = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_limit'};
+ my $currlimit = $currsettings->{'selfenroll_limit'};
if ($currlimit eq 'allstudents') {
$newval = &mt('New self-enrollment no longer allowed when total (all students) reaches [_1].',$newcap);
} elsif ($changes{'internal.selfenroll_limit'} eq 'selfenrolled') {
@@ -6528,24 +7598,24 @@ sub update_selfenroll_config {
} elsif ($item eq 'approval') {
if ((exists($changes{'internal.selfenroll_approval'})) ||
(exists($changes{'internal.selfenroll_notifylist'}))) {
+ my %selfdescs = &Apache::lonuserutils::selfenroll_default_descs();
my ($newval,$newnotify);
if (exists($changes{'internal.selfenroll_notifylist'})) {
$newnotify = $changes{'internal.selfenroll_notifylist'};
} else {
- $newnotify = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_notifylist'};
+ $newnotify = $currsettings->{'selfenroll_notifylist'};
}
- if ($changes{'internal.selfenroll_approval'}) {
- $newval = &mt('Yes');
- } elsif ($changes{'internal.selfenroll_approval'} eq '0') {
- $newval = &mt('No');
+ if (exists($changes{'internal.selfenroll_approval'})) {
+ if ($changes{'internal.selfenroll_approval'} !~ /^[012]$/) {
+ $changes{'internal.selfenroll_approval'} = '0';
+ }
+ $newval = $selfdescs{'approval'}{$changes{'internal.selfenroll_approval'}};
} else {
- my $currapproval =
- $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_approval'};
- if ($currapproval) {
- $newval = &mt('Yes');
- } else {
- $newval = &mt('No');
+ my $currapproval = $currsettings->{'selfenroll_approval'};
+ if ($currapproval !~ /^[012]$/) {
+ $currapproval = 0;
}
+ $newval = $selfdescs{'approval'}{$currapproval};
}
$r->print(''.&mt('"[_1]" set to "[_2]".',$title,$newval));
if ($newnotify) {
@@ -6576,13 +7646,16 @@ sub update_selfenroll_config {
}
}
$r->print('');
- my %newenvhash;
- foreach my $key (keys(%changes)) {
- $newenvhash{'course.'.$env{'request.course.id'}.'.'.$key} = $changes{$key};
+ if ($env{'course.'.$cid.'.description'} ne '') {
+ my %newenvhash;
+ foreach my $key (keys(%changes)) {
+ $newenvhash{'course.'.$cid.'.'.$key} = $changes{$key};
+ }
+ &Apache::lonnet::appenv(\%newenvhash);
}
- &Apache::lonnet::appenv(\%newenvhash);
} else {
- $r->print(&mt('An error occurred when saving changes to self-enrollment settings in this course.').' '.&mt('The error was: [_1].',$putresult));
+ $r->print(&mt('An error occurred when saving changes to self-enrollment settings in this course.').' '.
+ &mt('The error was: [_1].',$putresult));
}
} else {
$r->print(&mt('No changes were made to the existing self-enrollment settings in this course.'));
@@ -6593,7 +7666,7 @@ sub update_selfenroll_config {
my ($visible,$cansetvis,$vismsgs,$visactions) = &visible_in_cat($cdom,$cnum);
if (ref($visactions) eq 'HASH') {
if (!$visible) {
- $r->print(' '.$visactions->{'miss'}.' '.$visactions->{'yous'}.
+ $r->print(''.$visactions->{'miss'}.' '.$visactions->{'yous'}.
' ');
if (ref($vismsgs) eq 'ARRAY') {
$r->print(' '.$visactions->{'take'}.'');
@@ -6608,36 +7681,6 @@ sub update_selfenroll_config {
return;
}
-sub get_selfenroll_titles {
- my @row = ('types','registered','enroll_dates','access_dates','section',
- 'approval','limit');
- my %lt = &Apache::lonlocal::texthash (
- types => 'Users allowed to self-enroll in this course',
- registered => 'Restrict self-enrollment to students officially registered for the course',
- enroll_dates => 'Dates self-enrollment available',
- access_dates => 'Course access dates assigned to self-enrolling users',
- section => 'Section assigned to self-enrolling users',
- approval => 'Self-enrollment requests need approval?',
- limit => 'Enrollment limit',
- );
- return (\@row,\%lt);
-}
-
-sub is_courseowner {
- my ($thiscourse,$courseowner) = @_;
- if ($courseowner eq '') {
- if ($env{'request.course.id'} eq $thiscourse) {
- $courseowner = $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'};
- }
- }
- if ($courseowner ne '') {
- if ($courseowner eq $env{'user.name'}.':'.$env{'user.domain'}) {
- return 1;
- }
- }
- return;
-}
-
#---------------------------------------------- end functions for &phase_two
#--------------------------------- functions for &phase_two and &phase_three