--- loncom/interface/domainprefs.pm 2008/06/24 15:01:23 1.56
+++ loncom/interface/domainprefs.pm 2008/06/27 00:42:48 1.57
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.56 2008/06/24 15:01:23 bisitz Exp $
+# $Id: domainprefs.pm,v 1.57 2008/06/27 00:42:48 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -162,9 +162,11 @@ sub handler {
'coursecategories' =>
{ text => 'Cataloging of courses',
help => 'Domain_Course_Catalog',
- header => [ {col1 => 'Categories',
- col2 => '',
- }],
+ header => [{col1 => 'Category settings',
+ col2 => '',},
+ {col1 => 'Categories',
+ col2 => '',
+ }],
}
);
my @roles = ('student','coordinator','author','admin');
@@ -386,7 +388,8 @@ sub print_config_box {
# ');
$rowtotal ++;
if (($action eq 'autoupdate') || ($action eq 'rolecolors') ||
- ($action eq 'usercreation') || ($action eq 'usermodification')) {
+ ($action eq 'usercreation') || ($action eq 'usermodification') ||
+ ($action eq 'coursecategories')) {
my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
$output .= '
@@ -403,6 +406,8 @@ sub print_config_box {
$output .= &print_usercreation('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'usermodification') {
$output .= &print_usermodification('top',$dom,$settings,\$rowtotal);
+ } elsif ($action eq 'coursecategories') {
+ $output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal);
} else {
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
}
@@ -414,8 +419,10 @@ sub print_config_box {
- '.$item->{'header'}->[1]->{'col1'}.' |
- '.$item->{'header'}->[1]->{'col2'}.' |
+ '.$item->{'header'}->[1]->{'col1'}.' | ';
+ my $colspan = ($action eq 'coursecategories')?' colspan="2"':'';
+ $output .= '
+ '.$item->{'header'}->[1]->{'col2'}.' |
';
$rowtotal ++;
if ($action eq 'autoupdate') {
@@ -435,6 +442,8 @@ sub print_config_box {
$rowtotal ++;
} elsif ($action eq 'usermodification') {
$output .= &print_usermodification('bottom',$dom,$settings,\$rowtotal);
+ } elsif ($action eq 'coursecategories') {
+ $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);
} else {
$output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
@@ -474,9 +483,8 @@ sub print_config_box {
$output .= '
| '.$item->{'header'}->[0]->{'col1'}.' | ';
}
- my $colspan = ($action eq 'coursecategories')?' colspan="2"':'';
$output .= '
- '.$item->{'header'}->[0]->{'col2'}.' |
+ '.$item->{'header'}->[0]->{'col2'}.' |
';
$rowtotal ++;
if ($action eq 'login') {
@@ -493,8 +501,6 @@ sub print_config_box {
$output .= &print_defaults($dom,\$rowtotal);
} elsif ($action eq 'scantron') {
$output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
- } elsif ($action eq 'coursecategories'){
- $output .= &print_coursecategories($dom,$item,$settings,\$rowtotal);
}
}
$output .= '
@@ -1961,118 +1967,167 @@ sub legacy_scantronformat {
}
sub print_coursecategories {
- my ($dom,$hdritem,$settings,$rowtotal) = @_;
- my ($datatable,$css_class);
- my $itemcount = 1;
- if (ref($settings) eq 'HASH') {
- my (@cats,@trails,%allitems,%idx,@jsarray);
- &Apache::loncommon::extract_categories($settings,\@cats,\@trails,
- \%allitems,\%idx,\@jsarray);
- my $maxdepth = scalar(@cats);
- my $colattrib = '';
- if ($maxdepth > 2) {
- $colattrib = ' colspan="2" ';
- }
- my @path;
- if (@cats > 0) {
- if (ref($cats[0]) eq 'ARRAY') {
- my $numtop = @{$cats[0]};
- my $maxnum = $numtop;
- if ((!grep(/^instcode$/,@{$cats[0]})) || ($settings->{'instcode::0'} eq '')) {
- $maxnum ++;
- }
- my $lastidx;
- for (my $i=0; $i<$numtop; $i++) {
- my $parent = $cats[0][$i];
+ my ($position,$dom,$hdritem,$settings,$rowtotal) = @_;
+ my $datatable;
+ if ($position eq 'top') {
+ my $toggle_cats_crs = ' ';
+ my $toggle_cats_dom = ' checked="checked" ';
+ my $can_cat_crs = ' ';
+ my $can_cat_dom = ' checked="checked" ';
+ if (ref($settings) eq 'HASH') {
+ if ($settings->{'togglecats'} eq 'crs') {
+ $toggle_cats_crs = $toggle_cats_dom;
+ $toggle_cats_dom = ' ';
+ }
+ if ($settings->{'categorize'} eq 'crs') {
+ $can_cat_crs = $can_cat_dom;
+ $can_cat_dom = ' ';
+ }
+ }
+ my %title = &Apache::lonlocal::texthash (
+ togglecats => 'Show/Hide a course in the catalog',
+ categorize => 'Assign a category to a course',
+ );
+ my %level = &Apache::lonlocal::texthash (
+ dom => 'Set in "Modify Course" (Domain)',
+ crs => 'Set in "Parameters" (Course)',
+ );
+ $datatable = ''.
+ ''.$title{'togglecats'}.' | '.
+ ' '.
+ ' | '.
+ '
'.
+ ''.$title{'categorize'}.' | '.
+ ''.
+ ' '.
+ ' | '.
+ '
';
+ $$rowtotal += 2;
+ } else {
+ my $css_class;
+ my $itemcount = 1;
+ my $cathash;
+ if (ref($settings) eq 'HASH') {
+ $cathash = $settings->{'cats'};
+ }
+ if (ref($cathash) eq 'HASH') {
+ my (@cats,@trails,%allitems,%idx,@jsarray);
+ &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,
+ \%allitems,\%idx,\@jsarray);
+ my $maxdepth = scalar(@cats);
+ my $colattrib = '';
+ if ($maxdepth > 2) {
+ $colattrib = ' colspan="2" ';
+ }
+ my @path;
+ if (@cats > 0) {
+ if (ref($cats[0]) eq 'ARRAY') {
+ my $numtop = @{$cats[0]};
+ my $maxnum = $numtop;
+ if ((!grep(/^instcode$/,@{$cats[0]})) || ($cathash->{'instcode::0'} eq '')) {
+ $maxnum ++;
+ }
+ my $lastidx;
+ for (my $i=0; $i<$numtop; $i++) {
+ my $parent = $cats[0][$i];
+ $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ my $item = &escape($parent).'::0';
+ my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','$item','$idx{$item}'".');"';
+ $lastidx = $idx{$item};
+ $datatable .= ''
+ .' | ';
+ if ($parent eq 'instcode') {
+ $datatable .= ''.&mt('Official courses')
+ .' ('
+ .&mt('with institutional codes').') | '
+ .' '
+ .' | ';
+ } else {
+ $datatable .= $parent
+ .' ';
+ }
+ my $depth = 1;
+ push(@path,$parent);
+ $datatable .= &build_category_rows($itemcount,\@cats,$depth,$parent,\@path,\%idx);
+ pop(@path);
+ $datatable .= '
|
';
+ $itemcount ++;
+ }
$css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $item = &escape($parent).'::0';
- my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','$item','$idx{$item}'".');"';
- $lastidx = $idx{$item};
- $datatable .= ''
- .' | '.&mt('New:').' '
+ .' | '
+ .'
'."\n";
$itemcount ++;
- }
- $css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','$lastidx'".');"';
- $datatable .= '';
- for (my $k=0; $k<=$maxnum; $k++) {
- my $vpos = $k+1;
- my $selstr;
- if ($k == $numtop) {
- $selstr = ' selected="selected" ';
- }
- $datatable .= '';
- }
- $datatable .= ' | '.&mt('New:').' '
- .' | '
- .'
'."\n";
- $itemcount ++;
- if ((!grep(/^instcode$/,@{$cats[0]})) || ($settings->{'instcode::0'} eq '')) {
- $css_class = $itemcount%2?' class="LC_odd_row"':'';
- my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','instcode_pos','$lastidx'".');"';
- $datatable .= ' |
'.
- '';
- for (my $k=0; $k<=$maxnum; $k++) {
- my $vpos = $k+1;
- my $selstr;
- if ($k == $maxnum) {
- $selstr = ' selected="selected" ';
+ if ((!grep(/^instcode$/,@{$cats[0]})) || ($cathash->{'instcode::0'} eq '')) {
+ $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','instcode_pos','$lastidx'".');"';
+ $datatable .= ' | '.
+ '';
+ for (my $k=0; $k<=$maxnum; $k++) {
+ my $vpos = $k+1;
+ my $selstr;
+ if ($k == $maxnum) {
+ $selstr = ' selected="selected" ';
+ }
+ $datatable .= '';
}
- $datatable .= '';
+ $datatable .= ' | '
+ .&mt('Official courses').''.' ('
+ .&mt('with institutional codes').') | '
+ .' '
+ .' | ';
}
- $datatable .= ' | '
- .&mt('Official courses').''.' ('
- .&mt('with institutional codes').') | '
- .' '
- .' |
';
}
+ } else {
+ $datatable .= &initialize_categories($itemcount);
}
} else {
- $datatable .= &initialize_categories($itemcount);
+ $datatable .= ''.$hdritem->{'header'}->[0]->{'col2'}.' | '
+ .&initialize_categories($itemcount);
}
- } else {
- $datatable .= ''.$hdritem->{'header'}->[0]->{'col2'}.' | '
- .&initialize_categories($itemcount);
+ $$rowtotal += $itemcount;
}
- $$rowtotal += $itemcount;
return $datatable;
}
sub coursecategories_javascript {
my ($settings) = @_;
- my ($output,$jstext);
+ my ($output,$jstext,$cathash);
if (ref($settings) eq 'HASH') {
+ $cathash = $settings->{'cats'};
+ }
+ if (ref($cathash) eq 'HASH') {
my (@cats,@jsarray,%idx);
- &Apache::loncommon::gather_categories($settings,\@cats,\%idx,\@jsarray);
+ &Apache::loncommon::gather_categories($cathash,\@cats,\%idx,\@jsarray);
if (@jsarray > 0) {
$jstext = ' var categories = Array('.scalar(@jsarray).');'."\n";
for (my $i=0; $i<@jsarray; $i++) {
@@ -4257,69 +4312,85 @@ sub modify_scantron {
sub modify_coursecategories {
my ($dom,%domconfig) = @_;
- my ($resulttext,%deletions,%reorderings,%needreordering,%adds,$errors);
+ my ($resulttext,%deletions,%reorderings,%needreordering,%adds,%changes,$errors,
+ $cathash);
my @deletecategory = &Apache::loncommon::get_env_multiple('form.deletecategory');
if (ref($domconfig{'coursecategories'}) eq 'HASH') {
- if (($domconfig{'coursecategories'}{'instcode::0'} ne '') && ($env{'form.instcode'} == 0)) {
+ $cathash = $domconfig{'coursecategories'}{'cats'};
+ if ($domconfig{'coursecategories'}{'togglecats'} ne $env{'form.togglecats'}) {
+ $changes{'togglecats'} = 1;
+ $domconfig{'coursecategories'}{'togglecats'} = $env{'form.togglecats'};
+ }
+ if ($domconfig{'coursecategories'}{'categorize'} ne $env{'form.categorize'}) {
+ $changes{'categorize'} = 1;
+ $domconfig{'coursecategories'}{'categorize'} = $env{'form.categorize'};
+ }
+ } else {
+ $changes{'togglecats'} = 1;
+ $changes{'categorize'} = 1;
+ $domconfig{'coursecategories'}{'togglecats'} = $env{'form.togglecats'};
+ $domconfig{'coursecategories'}{'categorize'} = $env{'form.categorize'};
+ }
+ if (ref($cathash) eq 'HASH') {
+ if (($domconfig{'coursecategories'}{'cats'}{'instcode::0'} ne '') && ($env{'form.instcode'} == 0)) {
push (@deletecategory,'instcode::0');
}
}
- my (@predelcats,@predeltrails,%predelallitems);
- if (ref($domconfig{'coursecategories'}) eq 'HASH') {
+ my (@predelcats,@predeltrails,%predelallitems,%sort_by_deltrail);
+ if (ref($cathash) eq 'HASH') {
if (@deletecategory > 0) {
#FIXME Need to remove category from all courses using a deleted category
- &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems);
+ &Apache::loncommon::extract_categories($cathash,\@predelcats,\@predeltrails,\%predelallitems);
foreach my $item (@deletecategory) {
- if ($domconfig{'coursecategories'}{$item} ne '') {
- delete($domconfig{'coursecategories'}{$item});
+ if ($domconfig{'coursecategories'}{'cats'}{$item} ne '') {
+ delete($domconfig{'coursecategories'}{'cats'}{$item});
$deletions{$item} = 1;
- &recurse_cat_deletes($item,$domconfig{'coursecategories'},
- \%deletions);
+ &recurse_cat_deletes($item,$cathash,\%deletions);
}
}
}
- foreach my $item (keys(%{$domconfig{'coursecategories'}})) {
+ foreach my $item (keys(%{$cathash})) {
my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$item);
- if ($domconfig{'coursecategories'}{$item} ne $env{'form.'.$item}) {
+ if ($cathash->{$item} ne $env{'form.'.$item}) {
$reorderings{$item} = 1;
- $domconfig{'coursecategories'}{$item} = $env{'form.'.$item};
+ $domconfig{'coursecategories'}{'cats'}{$item} = $env{'form.'.$item};
}
if ($env{'form.addcategory_name_'.$item} ne '') {
my $newcat = $env{'form.addcategory_name_'.$item};
my $newdepth = $depth+1;
my $newitem = &escape($newcat).':'.&escape($cat).':'.$newdepth;
- $domconfig{'coursecategories'}{$newitem} = $env{'form.addcategory_pos_'.$item};
+ $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.addcategory_pos_'.$item};
$adds{$newitem} = 1;
}
if ($env{'form.subcat_'.$item} ne '') {
my $newcat = $env{'form.subcat_'.$item};
my $newdepth = $depth+1;
my $newitem = &escape($newcat).':'.&escape($cat).':'.$newdepth;
- $domconfig{'coursecategories'}{$newitem} = 0;
+ $domconfig{'coursecategories'}{'cats'}{$newitem} = 0;
$adds{$newitem} = 1;
}
}
}
if ($env{'form.instcode'} eq '1') {
- if (ref($domconfig{'coursecategories'}) eq 'HASH') {
+ if (ref($cathash) eq 'HASH') {
my $newitem = 'instcode::0';
- if ($domconfig{'coursecategories'}{$newitem} eq '') {
- $domconfig{'coursecategories'}{$newitem} = $env{'form.instcode_pos'};
+ if ($cathash->{$newitem} eq '') {
+ $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.instcode_pos'};
$adds{$newitem} = 1;
}
} else {
my $newitem = 'instcode::0';
- $domconfig{'coursecategories'}{$newitem} = $env{'form.instcode_pos'};
+ $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.instcode_pos'};
$adds{$newitem} = 1;
}
}
if ($env{'form.addcategory_name'} ne '') {
my $newitem = &escape($env{'form.addcategory_name'}).'::0';
- $domconfig{'coursecategories'}{$newitem} = $env{'form.addcategory_pos'};
+ $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.addcategory_pos'};
$adds{$newitem} = 1;
}
+ my $putresult;
if ((keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {
- my %sort_by_deltrail;
if (keys(%deletions) > 0) {
foreach my $key (keys(%deletions)) {
if ($predelallitems{$key} ne '') {
@@ -4328,7 +4399,7 @@ sub modify_coursecategories {
}
}
my (@chkcats,@chktrails,%chkallitems);
- &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems);
+ &Apache::loncommon::extract_categories($domconfig{'coursecategories'}{'cats'},\@chkcats,\@chktrails,\%chkallitems);
if (ref($chkcats[0]) eq 'ARRAY') {
my $depth = 0;
my $chg = 0;
@@ -4340,56 +4411,80 @@ sub modify_coursecategories {
} else {
$item = &escape($name).'::0';
if ($chg) {
- $domconfig{'coursecategories'}{$item} -= $chg;
+ $domconfig{'coursecategories'}{'cats'}{$item} -= $chg;
}
$depth ++;
- &recurse_check(\@chkcats,$domconfig{'coursecategories'},$depth,$name);
+ &recurse_check(\@chkcats,$domconfig{'coursecategories'}{'cats'},$depth,$name);
$depth --;
}
}
}
- my $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);
- my (@cats,@trails,%allitems);
- &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems);
+ }
+ if ((keys(%changes) > 0) || (keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {
+ $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);
if ($putresult eq 'ok') {
+ my %title = (
+ togglecats => 'Show/Hide a course in the catalog',
+ categorize => 'Category assigned to course',
+ );
+ my %level = (
+ dom => 'set from "Modify Course" (Domain)',
+ crs => 'set from "Parameters" (Course)',
+ );
$resulttext = &mt('Changes made:').'';
- if (keys(%deletions) > 0) {
- $resulttext .= '- '.&mt('Deleted categories:').'
';
- foreach my $predeltrail (sort {$a <=> $b } (keys(%sort_by_deltrail))) {
- $resulttext .= '- '.$predeltrails[$predeltrail].'
';
- }
- $resulttext .= '
';
+ if ($changes{'togglecats'}) {
+ $resulttext .= '- '.&mt("$title{'togglecats'} $level{$env{'form.togglecats'}}").'
';
}
- if (keys(%reorderings) > 0) {
- my %sort_by_trail;
- $resulttext .= '- '.&mt('Reordered categories:').'
';
- foreach my $key (keys(%reorderings)) {
- if ($allitems{$key} ne '') {
- $sort_by_trail{$allitems{$key}} = $trails[$allitems{$key}];
- }
- }
- foreach my $trail (sort {$a <=> $b } (keys(%sort_by_trail))) {
- $resulttext .= '- '.$trails[$trail].'
';
- }
- $resulttext .= '
';
+ if ($changes{'categorize'}) {
+ $resulttext .= '- '.&mt("$title{'categorize'} $level{$env{'form.categorize'}}").'
';
}
- if (keys(%adds) > 0) {
- my %sort_by_trail;
- $resulttext .= '- '.&mt('Added categories:').'
';
- foreach my $key (keys(%adds)) {
- if ($allitems{$key} ne '') {
- $sort_by_trail{$allitems{$key}} = $trails[$allitems{$key}];
+ if ((keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {
+ my $cathash;
+ if (ref($domconfig{'coursecategories'}) eq 'HASH') {
+ $cathash = $domconfig{'coursecategories'}{'cats'};
+ } else {
+ $cathash = {};
+ }
+ my (@cats,@trails,%allitems);
+ &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,\%allitems);
+ if (keys(%deletions) > 0) {
+ $resulttext .= '- '.&mt('Deleted categories:').'
';
+ foreach my $predeltrail (sort {$a <=> $b } (keys(%sort_by_deltrail))) {
+ $resulttext .= '- '.$predeltrails[$predeltrail].'
';
+ }
+ $resulttext .= '
';
+ }
+ if (keys(%reorderings) > 0) {
+ my %sort_by_trail;
+ $resulttext .= '- '.&mt('Reordered categories:').'
';
+ foreach my $key (keys(%reorderings)) {
+ if ($allitems{$key} ne '') {
+ $sort_by_trail{$allitems{$key}} = $trails[$allitems{$key}];
+ }
}
+ foreach my $trail (sort {$a <=> $b } (keys(%sort_by_trail))) {
+ $resulttext .= '- '.$trails[$trail].'
';
+ }
+ $resulttext .= '
';
}
- foreach my $trail (sort {$a <=> $b } (keys(%sort_by_trail))) {
- $resulttext .= '- '.$trails[$trail].'
';
+ if (keys(%adds) > 0) {
+ my %sort_by_trail;
+ $resulttext .= '- '.&mt('Added categories:').'
';
+ foreach my $key (keys(%adds)) {
+ if ($allitems{$key} ne '') {
+ $sort_by_trail{$allitems{$key}} = $trails[$allitems{$key}];
+ }
+ }
+ foreach my $trail (sort {$a <=> $b } (keys(%sort_by_trail))) {
+ $resulttext .= '- '.$trails[$trail].'
';
+ }
+ $resulttext .= '
';
}
- $resulttext .= '
';
}
$resulttext .= '
';
} else {
$resulttext = ''.
- &mt('An error occurred: [_1]',$putresult).'';
+ &mt('An error occurred: [_1]',$putresult).'';
}
} else {
$resulttext = &mt('No changes made to course categories');