--- loncom/interface/lonmodifycourse.pm 2007/12/14 00:24:11 1.36
+++ loncom/interface/lonmodifycourse.pm 2009/05/08 17:22:17 1.44
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# handler for DC-only modifiable course settings
#
-# $Id: lonmodifycourse.pm,v 1.36 2007/12/14 00:24:11 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.44 2009/05/08 17:22:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,6 +43,22 @@ sub get_dc_settable {
return ('courseowner','coursecode','authtype','autharg');
}
+sub catalog_settable {
+ my ($confhash) = @_;
+ my @settable;
+ if (ref($confhash) eq 'HASH') {
+ if ($confhash->{'togglecats'} ne 'crs') {
+ push(@settable,'togglecats');
+ }
+ if ($confhash->{'categorize'} ne 'crs') {
+ push(@settable,'categorize');
+ }
+ } else {
+ push(@settable,('togglecats','categorize'));
+ }
+ return @settable;
+}
+
sub get_enrollment_settings {
my ($cdom,$cnum) = @_;
my %settings = &Apache::lonnet::dump('environment',$cdom,$cnum);
@@ -102,30 +118,21 @@ sub print_course_search_page {
&print_header($r);
my $filterlist = ['descriptfilter',
'instcodefilter','ownerfilter',
- 'ownerdomfilter','coursefilter'];
+ 'coursefilter'];
my $filter = {};
+ my $numtitles;
my $type = 'Course';
my $action = '/adm/modifycourse';
my $cctitle = &Apache::lonnet::plaintext('cc',$type);
my $dctitle = &Apache::lonnet::plaintext('dc');
- my %lt=&Apache::lonlocal::texthash(
- 'some' => "Certain settings which control auto-enrollment of students from your institution's student information system.",
- 'crqo' => 'The total disk space allocated for storage of portfolio files in all groups in a course.',
- 'tmod' => 'To view or modify these settings use the criteria below to select a course from this domain.',
- );
- $r->print('
'.
- &mt('Course settings which only a [_1] may modify.'
- ,$dctitle).'
'.
- &mt('Although almost all course settings can be modified by a [_1], a number of settings exist which only a [_2] may change:',$cctitle,$dctitle).'
-
-
'.$lt{'some'}.'
-
'.$lt{'crqo'}.'
-
'.
-$lt{'tmod'}.' ('.$domdesc.')
-
- ');
+ $r->print(
+ '
'.&mt('Search for a course in the [_1] domain',$domdesc).'
'.
+ &mt('Actions available after searching for a course:').'
'.
+ '
'.&mt('Enter the course with the role of [_1]',$cctitle).'
'."\n".
+ '
'.&mt('View or modify course settings which only a [_1] may modify.'
+ ,$dctitle).'
'."\n".'
');
$r->print(&Apache::lonpickcourse::build_filters($filterlist,$type,
- undef,undef,$filter,$action,'modifycourse'));
+ undef,undef,$filter,$action,\$numtitles,'modifycourse'));
}
sub print_course_selection_page {
@@ -149,21 +156,25 @@ sub print_course_selection_page {
$filter{'domainfilter'} = $dom;
my %courses = &Apache::lonpickcourse::search_courses($r,$type,0,
\%filter);
- if (keys(%courses) > 0) {
- $r->print(&mt("Click a 'Select' button to view or modify settings for a [_1] which may only be modified by a [_2] in this domain.",lc($type),$dctitle).'
');
- }
-
- &Apache::lonpickcourse::display_matched_courses($r,$type,0,$action,
+ &Apache::lonpickcourse::display_matched_courses($r,$type,0,$action,undef,
%courses);
return;
}
sub print_modification_menu {
- my ($r,$cdesc) = @_;
+ my ($r,$cdesc,$domdesc,$dom) = @_;
&print_header($r,$cdesc);
+ my $type = 'Course';
+ my $action = '/adm/modifycourse';
+ my $cctitle = &Apache::lonnet::plaintext('cc',$type);
+ my $dctitle = &Apache::lonnet::plaintext('dc');
+ my %lt=&Apache::lonlocal::texthash(
+ 'some' => "Certain settings which control auto-enrollment of students from your institution's student information system.",
+ 'crqo' => 'The total disk space allocated for storage of portfolio files in all groups in a course.',
+ );
my @menu =
(
- { text => 'Modify quota for group portfolio files',
+ { text => 'Modify quota for group portfolio',
phase => 'setquota',
},
{ text => 'Display current settings for automated enrollment',
@@ -171,11 +182,32 @@ sub print_modification_menu {
},
{ text => 'Modify institutional code, course owner and/or default authentication',
phase => 'setparms',
- }
+ },
);
+ my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom);
+ my @additional_params = &catalog_settable($domconf{'coursecategories'});
+ if (@additional_params > 0) {
+ push (@menu, { text => 'Modify course catalog settings for course',
+ phase => 'catsettings',
+ });
+ }
my $menu_html = '
'.&mt('View/Modify settings for: ').$cdesc.'
'."\n".
- ''."\n".
- &hidden_form_elements();
+ &mt('Although almost all course settings can be modified by a [_1], a number of settings exist which only a [_2] may change:',$cctitle,$dctitle).'
+
+
'.$lt{'some'}.'
+
'.$lt{'crqo'}.'
'."\n";
+ foreach my $item (@additional_params) {
+ if ($item eq 'togglecats') {
+ $menu_html .= '
'.&mt('Hiding a course from the course catalog (can be [_1]configured[_2] to be modifiable in course context)','','').'
'.&mt('Manual cataloging of a course (can be [_1]configured[_2] to be modifiable in course context)','','').'
'."\n";
+
+ }
+ }
+ $menu_html .= '
+'."\n".
+ &hidden_form_elements();
+
foreach my $menu_item (@menu) {
$menu_html.='
';
$menu_html.='';
@@ -189,6 +221,16 @@ sub print_modification_menu {
return;
}
+sub print_ccrole_selected {
+ my ($r,$cdesc,$domdesc) = @_;
+ &print_header($r);
+ my ($cdom,$cnum) = split(/_/,$env{'form.pickedcourse'});
+ $r->print('');
+}
+
sub print_settings_display {
my ($r,$cdom,$cnum,$cdesc,$type) = @_;
my %enrollvar = &get_enrollment_settings($cdom,$cnum);
@@ -228,7 +270,7 @@ sub print_settings_display {
$disp_table .= &Apache::loncommon::end_data_table()."\n";
&print_header($r,$cdesc);
$r->print('
-
'.$lt{'caes'}.'
+
'.$lt{'caes'}.$cdesc.'
'.$lt{'back'}.''.&mt('Modify [_1]-only settings',$dctitle).''."\n".
-&hidden_form_elements().
+&hidden_form_elements().
'');
}
@@ -249,10 +291,10 @@ sub print_setquota {
my $cctitle = &Apache::lonnet::plaintext('cc',$type);
my $subdiv = &mt('Although a [_1] will assign the disk quota for each individual group, the size of the quota is constrained by the total disk space allocated by the [_2] for portfolio files in a course.',$cctitle,$dctitle);
my %lt = &Apache::lonlocal::texthash(
- 'cquo' => 'Disk space for storage of group portfolio files',
+ 'cquo' => 'Disk space for storage of group portfolio',
'gpqu' => 'Course portfolio files disk space',
'each' => 'Each course group can be assigned a quota for portfolio files uploaded to the group.',
- 'modi' => 'Modify quota',
+ 'modi' => 'Save',
'back' => "Back to options page",
);
my %settings = &Apache::lonnet::get('environment',['internal.coursequota'],$cdom,$cnum);
@@ -279,6 +321,59 @@ ENDDOCUMENT
return;
}
+sub print_catsettings {
+ my ($r,$cdom,$cnum,$cdesc) = @_;
+ &print_header($r,$cdesc);
+ my %lt = &Apache::lonlocal::texthash(
+ 'back' => 'Back to options page',
+ );
+ $r->print('
'."\n");
+ return;
+}
+
sub print_course_modification_page {
my ($r,$cdom,$cnum,$cdesc,$domdesc) = @_;
my %longtype = &course_settings_descrip();
@@ -293,7 +388,7 @@ sub print_course_modification_page {
'name' => "Name",
'unme' => "Username:Domain",
'stus' => "Status",
- 'cquo' => "Disk space for storage of group portfolio files",
+ 'cquo' => "Disk space for storage of group portfolio",
'gpqu' => "Course portfolio files disk space",
'each' => "Each course group can be assigned a quota for portfolio files uploaded to the group.",
'cose' => "Course settings for LON-CAPA courses that control automated student enrollment based on classlist data available from your institution's student information system fall into two groups: (a) settings that can be modified by a Course Coordinator using the ",
@@ -498,8 +593,9 @@ sub modify_course {
my @nochanges = ();
my @sections = ();
my @xlists = ();
- my $changecode = 0;
- my $changeowner = 0;
+ my %changed = ( code => 0,
+ owner => 0,
+ );
unless ($settings{'internal.sectionnums'} eq '') {
if ($settings{'internal.sectionnums'} =~ m/,/) {
@sections = split/,/,$settings{'internal.sectionnums'};
@@ -522,7 +618,6 @@ sub modify_course {
}
my $description = $settings{'description'};
- my %cenv = ();
if ($env{'form.login'} eq 'krb') {
$newattr{'authtype'} = $env{'form.login'};
@@ -549,28 +644,25 @@ sub modify_course {
if ( exists($env{'form.courseowner'}) ) {
$newattr{'courseowner'}=$env{'form.courseowner'};
unless ( $newattr{'courseowner'} eq $currattr{'courseowner'} ) {
- $changeowner = 1;
+ $changed{'owner'} = 1;
}
}
if ( exists($env{'form.coursecode'}) ) {
$newattr{'coursecode'}=$env{'form.coursecode'};
unless ( $newattr{'coursecode'} eq $currattr{'coursecode'} ) {
- $changecode = 1;
+ $changed{'code'} = 1;
}
}
- if ($changeowner == 1 || $changecode == 1) {
- my $courseid_entry = &escape($cdom.'_'.$cnum).'='.&escape($description).':'.&escape($env{'form.coursecode'}).':'.&escape($env{'form.courseowner'}).':'.&escape($type);
- my %courseid_entry = (
- $cdom.'_'.$cnum => {
- description => $description,
- inst_code => $env{'form.coursecode'},
- owner => $env{'form.courseowner'},
- type => $type,
- },
- );
- &Apache::lonnet::courseidput($cdom,\%courseid_entry,
- &Apache::lonnet::homeserver($cnum,$cdom),'notime');
+ if ($changed{'owner'} || $changed{'code'}) {
+ my %crsinfo = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,
+ undef,undef,'.');
+ if (ref($crsinfo{$env{'form.pickedcourse'}}) eq 'HASH') {
+ $crsinfo{$env{'form.pickedcourse'}}{'inst_code'} = $env{'form.coursecode'};
+ $crsinfo{$env{'form.pickedcourse'}}{'owner'} = $env{'form.courseowner'};
+ my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
+ my $putres = &Apache::lonnet::courseidput($cdom,\%crsinfo,$chome,'notime');
+ }
}
foreach my $param (@modifiable_params) {
if ($currattr{$param} eq $newattr{$param}) {
@@ -599,12 +691,12 @@ sub modify_course {
$nochgresponse .= "
$longtype{$attr} ".&mt("still set to \"").$currattr{$attr}."\".
";
}
}
- if ($changecode || $changeowner) {
+ if ($changed{'code'} || $changed{'owner'}) {
if ( $newattr{'courseowner'} eq '') {
$warning .= &mt("There is no owner associated with this LON-CAPA course. If automated enrollment in LON-CAPA courses at your institution requires validation of course owners, automated enrollment will fail for this course. ");
} else {
if (@sections > 0) {
- if ($changecode) {
+ if ($changed{'code'}) {
foreach my $sec (@sections) {
if ($sec =~ m/^(.+):/) {
my $inst_course_id = $newattr{'coursecode'}.$1;
@@ -621,7 +713,7 @@ sub modify_course {
$warning .= &mt("If automatic enrollment is enabled for LON-CAPA course: ").$description.&mt(", automated enrollment may fail for ").$newattr{'coursecode'}.&mt(" - section $sec because this is not a valid section entry. ");
}
}
- } elsif ($changeowner) {
+ } elsif ($changed{'owner'}) {
foreach my $sec (@sections) {
if ($sec =~ m/^(.+):/) {
my $inst_course_id = $newattr{'coursecode'}.$1;
@@ -637,7 +729,7 @@ sub modify_course {
} else {
$warning .= &mt("As no section numbers are currently listed for LON-CAPA course: ").$description.&mt(", automated enrollment will not occur for any sections of coursecode: ").$newattr{'coursecode'}." ";
}
- if ( (@xlists > 0) && ($changeowner) ) {
+ if ( (@xlists > 0) && ($changed{'owner'}) ) {
foreach my $xlist (@xlists) {
if ($xlist =~ m/^(.+):/) {
my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$1,$newattr{'courseowner'});
@@ -692,7 +784,7 @@ sub modify_quota {
);
$r->print('
');
+ return;
+}
+
sub print_header {
my ($r,$cdesc,$javascript_validations) = @_;
my $phase = "start";
@@ -788,13 +1000,23 @@ function verify_quota(formname) {
ENDSCRIPT
}
+ my $starthash;
+ if ($env{'form.phase'} eq 'ccrole') {
+ $starthash = {
+ add_entries => {'onload' => "javascript:document.ccrole.submit();"},
+ };
+ }
$r->print(&Apache::loncommon::start_page('View/Modify Course Settings',
- $js));
+ $js,$starthash));
my $bread_text = "View/Modify Courses";
if ($cdesc ne '') {
- $bread_text = "Course Settings: $cdesc";
- }
- $r->print(&Apache::lonhtmlcommon::breadcrumbs($bread_text));
+ $bread_text = &mt('Course Settings: [_1]',$cdesc);
+ my $no_mt = 1;
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs($bread_text,undef,undef,
+ undef,undef,$no_mt));
+ } else {
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs($bread_text));
+ }
return;
}
@@ -817,7 +1039,7 @@ sub check_course {
if ($cdom eq $dom) {
my $description;
my %courseIDs = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',
- $cnum,undef,undef,'.');
+ $cnum,undef,undef,'.');
if (keys(%courseIDs) > 0) {
$ok_course = 'ok';
my ($instcode,$owner);
@@ -861,8 +1083,9 @@ sub course_settings_descrip {
sub hidden_form_elements {
my $hidden_elements =
&Apache::lonhtmlcommon::echo_form_input(['gosearch','coursecode',
- 'numlocalcc','courseowner',
- 'login','coursequota','intarg', 'locarg','krbarg','krbver']);
+ 'prevphase','numlocalcc','courseowner','login','coursequota','intarg',
+ 'locarg','krbarg','krbver','counter','hidefromcat','usecategory'])."\n".
+ '';
return $hidden_elements;
}
@@ -882,21 +1105,24 @@ sub handler {
&Apache::lonhtmlcommon::clear_breadcrumbs();
my $phase = $env{'form.phase'};
- &Apache::lonhtmlcommon::add_breadcrumb
+ if ($phase eq '') {
+ &Apache::lonhtmlcommon::add_breadcrumb
({href=>"/adm/modifycourse",
text=>"Course search"});
- if ($phase eq '') {
&print_course_search_page($r,$dom,$domdesc);
} else {
+ my $firstform = $phase;
+ if ($phase eq 'courselist') {
+ $firstform = 'filterpicker';
+ }
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'courselist')",
+ ({href=>"javascript:changePage(document.$firstform,'')",
+ text=>"Course search"},
+ {href=>"javascript:changePage(document.$phase,'courselist')",
text=>"Choose a course"});
if ($phase eq 'courselist') {
&print_course_selection_page($r,$dom,$domdesc);
} else {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'menu')",
- text=>"Pick action"});
my ($checked,$cdesc) = &check_course($r,$dom,$domdesc);
my $type = $env{'form.type'};
if ($type eq '') {
@@ -904,14 +1130,25 @@ sub handler {
}
if ($checked eq 'ok') {
if ($phase eq 'menu') {
- &print_modification_menu($r,$cdesc);
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'menu')",
+ text=>"Pick action"});
+ &print_modification_menu($r,$cdesc,$domdesc,$dom);
+ } elsif ($phase eq 'ccrole') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'ccrole')",
+ text=>"Enter course"});
+ &print_ccrole_selected($r,$cdesc,$domdesc);
} else {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'menu')",
+ text=>"Pick action"});
my ($cdom,$cnum) = split(/_/,$env{'form.pickedcourse'});
if ($phase eq 'setquota') {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:changePage(document.$phase,'$phase')",
text=>"Set quota"});
- &print_setquota($r,$cdom,$cnum,$cdesc,$type)
+ &print_setquota($r,$cdom,$cnum,$cdesc,$type);
} elsif ($phase eq 'processquota') {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:changePage(document.$phase,'setquota')",
@@ -938,6 +1175,19 @@ sub handler {
({href=>"javascript:changePage(document.$phase,'$phase')",
text=>"Result"});
&modify_course($r,$cdom,$cnum,$cdesc,$domdesc,$type);
+ } elsif ($phase eq 'catsettings') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'$phase')",
+ text=>"Catalog settings"});
+ &print_catsettings($r,$cdom,$cnum,$cdesc,$type);
+ } elsif ($phase eq 'processcat') {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'catsettings')",
+ text=>"Catalog settings"});
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>"javascript:changePage(document.$phase,'$phase')",
+ text=>"Result"});
+ &modify_catsettings($r,$cdom,$cnum,$cdesc,$domdesc);
}
}
} else {