--- loncom/interface/lonmodifycourse.pm 2007/12/30 23:22:41 1.37
+++ loncom/interface/lonmodifycourse.pm 2008/06/30 01:28:56 1.38
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# handler for DC-only modifiable course settings
#
-# $Id: lonmodifycourse.pm,v 1.37 2007/12/30 23:22:41 raeburn Exp $
+# $Id: lonmodifycourse.pm,v 1.38 2008/06/30 01:28:56 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);
@@ -145,7 +161,7 @@ sub print_course_selection_page {
}
sub print_modification_menu {
- my ($r,$cdesc,$domdesc) = @_;
+ my ($r,$cdesc,$domdesc,$dom) = @_;
&print_header($r,$cdesc);
my $type = 'Course';
my $action = '/adm/modifycourse';
@@ -165,14 +181,29 @@ 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".
&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{'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)','',' ').' '."\n";
+ } elsif ($item eq 'categorize') {
+ $menu_html .= ' '.&mt('Manual cataloging of a course (can be [_1]configured[_2] to be modifiable in course context)','',' ').' '."\n";
+
+ }
+ }
+ $menu_html .= '
'."\n".
&hidden_form_elements();
@@ -289,6 +320,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();
@@ -508,8 +592,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'};
@@ -532,7 +617,6 @@ sub modify_course {
}
my $description = $settings{'description'};
- my %cenv = ();
if ($env{'form.login'} eq 'krb') {
$newattr{'authtype'} = $env{'form.login'};
@@ -559,28 +643,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}) {
@@ -609,12 +690,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;
@@ -631,7 +712,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;
@@ -647,7 +728,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'});
@@ -750,6 +831,126 @@ sub modify_quota {
return;
}
+sub modify_catsettings {
+ my ($r,$cdom,$cnum,$cdesc,$domdesc) = @_;
+ &print_header($r,$cdesc);
+ my %lt = &Apache::lonlocal::texthash(
+ 'back' => 'Back to options page',
+ );
+ my %desc = &Apache::lonlocal::texthash(
+ 'hidefromcat' => 'Excluded from course catalog',
+ 'categories' => 'Assigned categories for this course',
+ );
+ $r->print('
+');
+ return;
+}
+
sub print_header {
my ($r,$cdesc,$javascript_validations) = @_;
my $phase = "start";
@@ -833,7 +1034,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);
@@ -878,7 +1079,7 @@ sub hidden_form_elements {
my $hidden_elements =
&Apache::lonhtmlcommon::echo_form_input(['gosearch','coursecode',
'prevphase','numlocalcc','courseowner','login','coursequota','intarg',
- 'locarg','krbarg','krbver','counter'])."\n".
+ 'locarg','krbarg','krbver','counter','hidefromcat','usecategory'])."\n".
' ';
return $hidden_elements;
}
@@ -927,7 +1128,7 @@ sub handler {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:changePage(document.$phase,'menu')",
text=>"Pick action"});
- &print_modification_menu($r,$cdesc,$domdesc);
+ &print_modification_menu($r,$cdesc,$domdesc,$dom);
} elsif ($phase eq 'ccrole') {
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:changePage(document.$phase,'ccrole')",
@@ -942,7 +1143,7 @@ sub handler {
&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')",
@@ -969,6 +1170,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 {