--- loncom/interface/lonmodifycourse.pm 2016/11/09 14:04:41 1.88
+++ loncom/interface/lonmodifycourse.pm 2021/06/15 20:52:26 1.96
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# handler for DC-only modifiable course settings
#
-# $Id: lonmodifycourse.pm,v 1.88 2016/11/09 14:04:41 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.96 2021/06/15 20:52:26 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -39,6 +39,9 @@ use Apache::lonpickcourse;
use lib '/home/httpd/lib/perl';
use LONCAPA qw(:DEFAULT :match);
+my $registered_cleanup;
+my $modified_dom;
+
sub get_dc_settable {
my ($type,$cdom) = @_;
if ($type eq 'Community') {
@@ -49,6 +52,10 @@ sub get_dc_settable {
if (&showcredits($cdom)) {
push(@items,'defaultcredits');
}
+ my %passwdconf = &Apache::lonnet::get_passwdconf($cdom);
+ if (($passwdconf{'crsownerchg'}) && ($type ne 'Placement')) {
+ push(@items,'nopasswdchg');
+ }
return @items;
}
}
@@ -101,6 +108,7 @@ sub get_enrollment_settings {
@items = map { 'internal.'.$_; } (@{$internals});
push(@items,@{$accessdates});
}
+ push(@items,'internal.nopasswdchg');
my %settings = &Apache::lonnet::get('environment',\@items,$cdom,$cnum);
my %enrollvar;
$enrollvar{'autharg'} = '';
@@ -126,7 +134,7 @@ sub get_enrollment_settings {
} elsif ($type eq "authtype"
|| $type eq "autharg" || $type eq "coursecode"
|| $type eq "crosslistings" || $type eq "selfenrollmgr"
- || $type eq "autodropfailsafe") {
+ || $type eq "autodropfailsafe" || $type eq 'nopasswdchg') {
$enrollvar{$type} = $settings{$item};
} elsif ($type eq 'defaultcredits') {
if (&showcredits($cdom)) {
@@ -203,28 +211,24 @@ sub print_course_search_page {
$settingsoption = &mt('View or modify course settings which only a [_1] may modify.',$dctitle);
}
} elsif (&Apache::lonnet::allowed('rar',$dom)) {
- my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'},
- 'adhocroles.'.$dom);
- if (keys(%adhocroles)) {
- my @adhoc = split(',',$adhocroles{'adhocroles.'.$dom});
- if (@adhoc > 1) {
+ my ($roles_by_num,$description,$accessref,$accessinfo) = &Apache::lonnet::get_all_adhocroles($dom);
+ if ((ref($roles_by_num) eq 'ARRAY') && (ref($description) eq 'HASH')) {
+ if (@{$roles_by_num} > 1) {
if ($type eq 'Community') {
- $roleoption = &mt('Enter the community with one of the available ad hoc roles: [_1].',
- join(', ',@adhoc));
+ $roleoption = &mt('Enter the community with one of the available ad hoc roles');
} elsif ($type eq 'Placement') {
- $roleoption = &mt('Enter the placement test with one of the available ad hoc roles: [_1].',
- join(', ',@adhoc));
+ $roleoption = &mt('Enter the placement test with one of the available ad hoc roles.');
} else {
- $roleoption = &mt('Enter the course with one of the available ad hoc roles: [_1].',
- join(', ',@adhoc));
+ $roleoption = &mt('Enter the course with one of the available ad hoc roles.');
}
} else {
+ my $rolename = $description->{$roles_by_num->[0]};
if ($type eq 'Community') {
- $roleoption = &mt('Enter the community with the ad hoc role of: [_1]',$adhoc[0]);
+ $roleoption = &mt('Enter the community with the ad hoc role of: [_1]',$rolename);
} elsif ($type eq 'Placement') {
- $roleoption = &mt('Enter the placement test with the ad hoc role of: [_1]',$adhoc[0]);
+ $roleoption = &mt('Enter the placement test with the ad hoc role of: [_1]',$rolename);
} else {
- $roleoption = &mt('Enter the course with the ad hoc role of: [_1]',$adhoc[0]);
+ $roleoption = &mt('Enter the course with the ad hoc role of: [_1]',$rolename);
}
}
}
@@ -245,14 +249,133 @@ sub print_course_search_page {
}
sub print_course_selection_page {
- my ($r,$dom,$domdesc) = @_;
+ my ($r,$dom,$domdesc,$permission) = @_;
my $type = $env{'form.type'};
if (!defined($type)) {
$type = 'Course';
}
&print_header($r,$type);
-# Criteria for course search
+ if ($permission->{'adhocrole'} eq 'custom') {
+ my %lt = &Apache::lonlocal::texthash(
+ title => 'Ad hoc role selection',
+ preamble => 'Please choose an ad hoc role in the course.',
+ cancel => 'Click "OK" to enter the course, or "Cancel" to choose a different course.',
+ );
+ my %jslt = &Apache::lonlocal::texthash (
+ none => 'You are not eligible to use an ad hoc role for the selected course',
+ ok => 'OK',
+ exit => 'Cancel',
+ );
+ &js_escape(\%jslt);
+ $r->print(<<"END");
+
+
+
+
$lt{'preamble'}
+
+
$lt{'cancel'}
+
+END
+ } elsif ($permission->{'adhocrole'} eq 'coord') {
+ $r->print(<<"END");
+
+END
+ }
+
+# Criteria for course search
my ($filterlist,$filter) = &get_filters();
my $action = '/adm/modifycourse';
my $dctitle = &Apache::lonnet::plaintext('dc');
@@ -418,7 +541,7 @@ sub print_modification_menu {
linktitle => ''
},
{
- linktext => $linktext{'selfenroll'},,
+ linktext => $linktext{'selfenroll'},
icon => 'self_enroll.png',
#help => 'Course_Self_Enrollment',
url => &phaseurl('selfenroll'),
@@ -497,29 +620,25 @@ sub print_modification_menu {
}
sub print_adhocrole_selected {
- my ($r,$type) = @_;
+ my ($r,$type,$permission) = @_;
&print_header($r,$type);
my ($cdom,$cnum) = split(/_/,$env{'form.pickedcourse'});
my ($newrole,$selectrole);
- if (&Apache::lonnet::allowed('ccc',$cdom)) {
+ if ($permission->{'adhocrole'} eq 'coord') {
if ($type eq 'Community') {
$newrole = "co./$cdom/$cnum";
} else {
$newrole = "cc./$cdom/$cnum";
}
$selectrole = 1;
- } elsif (&Apache::lonnet::allowed('rar',$cdom)) {
- my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'},
- 'adhocroles.'.$cdom);
- if (keys(%adhocroles)) {
- my $possrole = $env{'form.adhocrole'};
- if ($possrole ne '') {
- my @adhoc = split(',',$adhocroles{'adhocroles.'.$cdom});
- if (grep(/^\Q$possrole\E$/,@adhoc)) {
- my $confname = &Apache::lonnet::get_domainconfiguser($cdom);
- $newrole = "cr/$cdom/$confname/$possrole./$cdom/$cnum";
- $selectrole = 1;
- }
+ } elsif ($permission->{'adhocrole'} eq 'custom') {
+ my ($okroles,$description) = &Apache::lonnet::get_my_adhocroles($env{'form.pickedcourse'},1);
+ if (ref($okroles) eq 'ARRAY') {
+ my $possrole = $env{'form.adhocrole'};
+ if (($possrole ne '') && (grep(/^\Q$possrole\E$/,@{$okroles}))) {
+ my $confname = &Apache::lonnet::get_domainconfiguser($cdom);
+ $newrole = "cr/$cdom/$confname/$possrole./$cdom/$cnum";
+ $selectrole = 1;
}
}
}
@@ -565,9 +684,34 @@ sub print_settings_display {
"
$lt{'dcon'}
\n".
&Apache::loncommon::end_data_table_header_row()."\n";
foreach my $item (@items) {
+ my $shown = $enrollvar{$item};
+ if ($item eq 'crosslistings') {
+ my (@xlists,@lcsecs);
+ foreach my $entry (split(/,/,$enrollvar{$item})) {
+ my ($xlist,$lc_sec) = split(/:/,$entry);
+ push(@xlists,$xlist);
+ push(@lcsecs,$lc_sec);
+ }
+ if (@xlists) {
+ my $crskey = $cnum.':'.$enrollvar{'coursecode'};
+ my %reformatted =
+ &Apache::lonnet::auto_instsec_reformat($cdom,'declutter',
+ {$crskey => \@xlists});
+ if (ref($reformatted{$crskey}) eq 'ARRAY') {
+ my @show;
+ my @xlcodes = @{$reformatted{$crskey}};
+ for (my $i=0; $i<@xlcodes; $i++) {
+ push(@show,$xlcodes[$i].':'.$lcsecs[$i]);
+ }
+ if (@show) {
+ $shown = join(',',@show);
+ }
+ }
+ }
+ }
$disp_table .= &Apache::loncommon::start_data_table_row()."\n".
"
$longtype{$item}
\n".
- "
$enrollvar{$item}
\n";
+ "
$shown
\n";
if (grep(/^\Q$item\E$/,@modifiable_params)) {
$disp_table .= '