'.&mt('The following enrollment requests were deleted because the user is already enrolled in the course:').'
');
+ foreach my $user (@existing) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ if (@missingreq) {
+ $r->print('
'.&mt('The following enrollment requests were ignored because the request is no longer in the enrollment queue:').'
');
+ foreach my $user (@missingreq) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ if (@invalidusers) {
+ $r->print('
'.&mt('The following enrollment requests were deleted because the requestor does not have a LON-CAPA account:').'
');
+ foreach my $user (@invalidusers) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ if (@limitexceeded) {
+ $r->print('
'.&mt('The following enrollment requests were skipped because the enrollment limit has been reached for the course:').'
');
+ foreach my $user (@limitexceeded) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ if (@enrollerrors) {
+ $r->print('
'.&mt('The following enrollment requests could not be processed because an error occurred:').'
');
+ foreach my $user (@enrollerrors) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ if (@warn_approves) {
+ $r->print('
'.&mt("For the following users, an error occurred when updating the user's own self-enroll requests record:").'
');
+ foreach my $user (@warn_approves) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ if (@warn_rejects) {
+ $r->print('
'.&mt("For the following users, an error occurred when updating the user's own self-enroll requests record:").'
');
+ foreach my $user (@warn_rejects) {
+ $r->print('
'.$user.'
');
+ }
+ $r->print('
');
+ }
+ return;
+}
+
+sub get_student_counts {
+ my ($cdom,$cnum) = @_;
+ my (%idx,%stucounts);
+ my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cnum);
+ $idx{'type'} = &Apache::loncoursedata::CL_TYPE();
+ $idx{'status'} = &Apache::loncoursedata::CL_STATUS();
+ while (my ($student,$data) = each(%$classlist)) {
+ if (($data->[$idx{'status'}] eq 'Active') ||
+ ($data->[$idx{'status'}] eq 'Future')) {
+ if ($data->[$idx{'type'}] eq 'selfenroll') {
+ $stucounts{'selfenroll'} ++;
+ }
+ $stucounts{'allstudents'} ++;
+ }
+ }
+ return (\%stucounts,\%idx,$classlist);
+}
+
sub visible_in_cat {
my ($cdom,$cnum) = @_;
my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
@@ -3974,7 +4378,7 @@ sub visible_in_cat {
miss => 'Your course does not currently appear in the Course Catalog for this domain.',
yous => 'You should remedy this if you plan to allow self-enrollment, otherwise students will have difficulty finding your 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 changes", then take action to include the course in the Catalog:',
+ 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:',
dc_unhide => 'Ask a domain coordinator to change the "Exclude from course catalog" setting.',
dc_addinst => 'Ask a domain coordinator to enable display the catalog of "Official courses (with institutional codes)".',
@@ -5159,6 +5563,74 @@ sub update_selfenroll_config {
$changes{'internal.selfenroll_types'} = $selfenroll_types;
}
}
+ } elsif ($item eq 'limit') {
+ 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'};
+ $currlimit = 'none' if ($currlimit eq '');
+ my $currcap = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_cap'};
+ if ($newlimit ne $currlimit) {
+ if ($newlimit ne 'none') {
+ if ($newcap =~ /^\d+$/) {
+ if ($newcap ne $currcap) {
+ $changes{'internal.selfenroll_cap'} = $newcap;
+ }
+ $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.');
+ }
+ } elsif ($currcap ne '') {
+ $changes{'internal.selfenroll_cap'} = '';
+ $changes{'internal.selfenroll_limit'} = $newlimit;
+ }
+ } elsif ($currlimit ne 'none') {
+ if ($newcap =~ /^\d+$/) {
+ if ($newcap ne $currcap) {
+ $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.');
+ }
+ }
+ } 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'};
+ if ($currnotifylist ne '') {
+ @currnotified = split(/,/,$currnotifylist);
+ @currnotified = sort(@currnotified);
+ }
+ my $newapproval = $env{'form.selfenroll_approval'};
+ @newnotified = &Apache::loncommon::get_env_multiple('form.selfenroll_notify');
+ @newnotified = sort(@newnotified);
+ if ($newapproval ne $currapproval) {
+ $changes{'internal.selfenroll_approval'} = $newapproval;
+ if (!$newapproval) {
+ if ($currnotifylist ne '') {
+ $changes{'internal.selfenroll_notifylist'} = '';
+ }
+ } else {
+ my @differences =
+ &compare_arrays(\@currnotified,\@newnotified);
+ if (@differences > 0) {
+ if (@newnotified > 0) {
+ $changes{'internal.selfenroll_notifylist'} = join(',',@newnotified);
+ } else {
+ $changes{'internal.selfenroll_notifylist'} = join(',',@newnotified);
+ }
+ }
+ }
+ } else {
+ my @differences = &compare_arrays(\@currnotified,\@newnotified);
+ if (@differences > 0) {
+ if (@newnotified > 0) {
+ $changes{'internal.selfenroll_notifylist'} = join(',',@newnotified);
+ } else {
+ $changes{'internal.selfenroll_notifylist'} = '';
+ }
+ }
+ }
} else {
my $curr_val =
$env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_'.$item};
@@ -5231,6 +5703,62 @@ sub update_selfenroll_config {
$title,$type,$newdate).'');
}
}
+ } elsif ($item eq 'limit') {
+ if ((exists($changes{'internal.selfenroll_limit'})) ||
+ (exists($changes{'internal.selfenroll_cap'}))) {
+ my ($newval,$newcap);
+ if ($changes{'internal.selfenroll_cap'} ne '') {
+ $newcap = $changes{'internal.selfenroll_cap'}
+ } else {
+ $newcap = $env{'course.'.$env{'request.course.id'}.'.internal.selfenroll_cap'};
+ }
+ if ($changes{'internal.selfenroll_limit'} eq 'none') {
+ $newval = &mt('No limit');
+ } elsif ($changes{'internal.selfenroll_limit'} eq
+ 'allstudents') {
+ $newval = &mt('New self-enrollment no longer allowed when total (all students) reaches [_1].',$newcap);
+ } 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'};
+ 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') {
+ $newval = &mt('New self-enrollment no longer allowed when total umber of self-enrolled students reaches [_1].',$newcap);
+ }
+ }
+ $r->print('
'.&mt('"[_1]" set to "[_2]".',$title,$newval));
+ if ($newnotify) {
+ $r->print(' '.&mt('The following will be notified when an enrollment request needs approval, or has been approved: [_1].',$newnotify));
+ } else {
+ $r->print(' '.&mt('No notifications sent when an enrollment request needs approval, or has been approved.'));
+ }
+ $r->print('
'."\n");
+ }
} else {
if (exists($changes{'internal.selfenroll_'.$item})) {
my $newval = $changes{'internal.selfenroll_'.$item};
@@ -5284,14 +5812,33 @@ sub update_selfenroll_config {
return;
}
+sub compare_arrays {
+ my ($arrayref1,$arrayref2) = @_;
+ my (@difference,%count);
+ @difference = ();
+ %count = ();
+ if ((ref($arrayref1) eq 'ARRAY') && (ref($arrayref2) eq 'ARRAY')) {
+ foreach my $element (@{$arrayref1}, @{$arrayref2}) { $count{$element}++; }
+ foreach my $element (keys(%count)) {
+ if ($count{$element} == 1) {
+ push(@difference,$element);
+ }
+ }
+ }
+ return @difference;
+}
+
sub get_selfenroll_titles {
- my @row = ('types','registered','enroll_dates','access_dates','section');
+ 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);
}