--- loncom/interface/domainprefs.pm 2008/05/15 01:56:44 1.51
+++ loncom/interface/domainprefs.pm 2008/06/24 15:01:23 1.56
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.51 2008/05/15 01:56:44 raeburn Exp $
+# $Id: domainprefs.pm,v 1.56 2008/06/24 15:01:23 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -96,7 +96,7 @@ sub handler {
col2 => '',}],
},
'defaults' =>
- { text => 'Default authentication/language',
+ { text => 'Default authentication/language/timezone',
help => '',
header => [{col1 => 'Setting',
col2 => 'Value'}],
@@ -300,10 +300,10 @@ sub handler {
$r->print('
');
my ($numitems,$midpoint,$seconddiv,$count);
@@ -314,7 +314,7 @@ sub handler {
}
$count = 0;
foreach my $item (@prefs_order) {
- $r->print('
');
+ $r->print('');
$count ++;
if ((!$seconddiv) && ($count >= $midpoint)) {
$r->print(''."\n".''."\n");
@@ -1782,7 +1782,7 @@ sub print_usermodification {
sub print_defaults {
my ($dom,$rowtotal) = @_;
- my @items = ('auth_def','auth_arg_def','lang_def');
+ my @items = ('auth_def','auth_arg_def','lang_def','timezone_def');
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
my $titles = &defaults_titles();
my $rownum = 0;
@@ -1814,6 +1814,9 @@ sub print_defaults {
'" value="'.$auth.'"'.$checked.'/>'.
$authnames{$shortauth{$auth}}.' ';
}
+ } elsif ($item eq 'timezone_def') {
+ my $includeempty = 1;
+ $datatable .= &Apache::loncommon::select_timezone($item,$domdefaults{$item},undef,$includeempty);
} else {
$datatable .= '
';
@@ -1830,6 +1833,7 @@ sub defaults_titles {
'auth_def' => 'Default authentication type',
'auth_arg_def' => 'Default authentication argument',
'lang_def' => 'Default language',
+ 'timezone_def' => 'Default timezone',
);
return (\%titles);
}
@@ -1962,7 +1966,8 @@ sub print_coursecategories {
my $itemcount = 1;
if (ref($settings) eq 'HASH') {
my (@cats,@trails,%allitems,%idx,@jsarray);
- &extract_categories($settings,\@cats,\@trails,\%allitems,\%idx,\@jsarray);
+ &Apache::loncommon::extract_categories($settings,\@cats,\@trails,
+ \%allitems,\%idx,\@jsarray);
my $maxdepth = scalar(@cats);
my $colattrib = '';
if ($maxdepth > 2) {
@@ -2067,7 +2072,7 @@ sub coursecategories_javascript {
my ($output,$jstext);
if (ref($settings) eq 'HASH') {
my (@cats,@jsarray,%idx);
- &gather_categories($settings,\@cats,\%idx,\@jsarray);
+ &Apache::loncommon::gather_categories($settings,\@cats,\%idx,\@jsarray);
if (@jsarray > 0) {
$jstext = ' var categories = Array('.scalar(@jsarray).');'."\n";
for (my $i=0; $i<@jsarray; $i++) {
@@ -2164,7 +2169,7 @@ sub initialize_categories {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"';
$datatable .= '
'
- .' | '.&mt('Name:')
.' |
';
@@ -2469,34 +2474,36 @@ sub modify_login {
'adminmail' => 'off',
'newuser' => 'off',
);
- foreach my $item (@toggles) {
- if ($defaultchecked{$item} eq 'on') {
- if (($domconfig{'login'}{$item} eq '0') &&
- ($env{'form.'.$item} eq '1')) {
- $changes{$item} = 1;
- } elsif (($domconfig{'login'}{$item} eq '' ||
- $domconfig{'login'}{$item} eq '1') &&
- ($env{'form.'.$item} eq '0')) {
- $changes{$item} = 1;
- }
- } elsif ($defaultchecked{$item} eq 'off') {
- if (($domconfig{'login'}{$item} eq '1') &&
- ($env{'form.'.$item} eq '0')) {
- $changes{$item} = 1;
- } elsif (($domconfig{'login'}{$item} eq '' ||
- $domconfig{'login'}{$item} eq '0') &&
- ($env{'form.'.$item} eq '1')) {
- $changes{$item} = 1;
+ if (ref($domconfig{'login'}) eq 'HASH') {
+ foreach my $item (@toggles) {
+ if ($defaultchecked{$item} eq 'on') {
+ if (($domconfig{'login'}{$item} eq '0') &&
+ ($env{'form.'.$item} eq '1')) {
+ $changes{$item} = 1;
+ } elsif (($domconfig{'login'}{$item} eq '' ||
+ $domconfig{'login'}{$item} eq '1') &&
+ ($env{'form.'.$item} eq '0')) {
+ $changes{$item} = 1;
+ }
+ } elsif ($defaultchecked{$item} eq 'off') {
+ if (($domconfig{'login'}{$item} eq '1') &&
+ ($env{'form.'.$item} eq '0')) {
+ $changes{$item} = 1;
+ } elsif (($domconfig{'login'}{$item} eq '' ||
+ $domconfig{'login'}{$item} eq '0') &&
+ ($env{'form.'.$item} eq '1')) {
+ $changes{$item} = 1;
+ }
}
}
- }
- if (($domconfig{'login'}{'loginheader'} eq 'text') &&
- ($env{'form.loginheader'} eq 'image')) {
- $changes{'loginheader'} = 1;
- } elsif (($domconfig{'login'}{'loginheader'} eq '' ||
- $domconfig{'login'}{'loginheader'} eq 'image') &&
- ($env{'form.loginheader'} eq 'text')) {
- $changes{'loginheader'} = 1;
+ if (($domconfig{'login'}{'loginheader'} eq 'text') &&
+ ($env{'form.loginheader'} eq 'image')) {
+ $changes{'loginheader'} = 1;
+ } elsif (($domconfig{'login'}{'loginheader'} eq '' ||
+ $domconfig{'login'}{'loginheader'} eq 'image') &&
+ ($env{'form.loginheader'} eq 'text')) {
+ $changes{'loginheader'} = 1;
+ }
}
if (keys(%changes) > 0 || $colchgtext) {
&Apache::loncommon::devalidate_domconfig_cache($dom);
@@ -2529,6 +2536,7 @@ sub color_font_choices {
img => "Header",
bgs => "Background colors",
links => "Link colors",
+ images => "Images",
font => "Font color",
pgbg => "Page",
tabbg => "Header",
@@ -2544,6 +2552,11 @@ sub modify_rolecolors {
my ($r,$dom,$confname,$roles,%domconfig) = @_;
my ($resulttext,%rolehash);
$rolehash{'rolecolors'} = {};
+ if (ref($domconfig{'rolecolors'}) ne 'HASH') {
+ if ($domconfig{'rolecolors'} eq '') {
+ $domconfig{'rolecolors'} = {};
+ }
+ }
my ($errors,%changes) = &modify_colors($r,$dom,$confname,$roles,
$domconfig{'rolecolors'},$rolehash{'rolecolors'});
my $putresult = &Apache::lonnet::put_dom('configuration',\%rolehash,
@@ -3139,7 +3152,11 @@ sub modify_quotas {
}
foreach my $key (keys(%formhash)) {
if ($formhash{$key} ne '') {
- if (!exists($domconfig{'quotas'}{$key})) {
+ if (ref($domconfig{'quotas'}) eq 'HASH') {
+ if (!exists($domconfig{'quotas'}{$key})) {
+ $changes{$key} = 1;
+ }
+ } else {
$changes{$key} = 1;
}
}
@@ -4066,7 +4083,7 @@ sub modify_defaults {
my ($dom,$r) = @_;
my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors);
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
- my @items = ('auth_def','auth_arg_def','lang_def');
+ my @items = ('auth_def','auth_arg_def','lang_def','timezone_def');
my @authtypes = ('internal','krb4','krb5','localauth');
foreach my $item (@items) {
$newvalues{$item} = $env{'form.'.$item};
@@ -4087,6 +4104,13 @@ sub modify_defaults {
push(@errors,$item);
}
}
+ } elsif ($item eq 'timezone_def') {
+ if ($newvalues{$item} ne '') {
+ my @timezones = &DateTime::TimeZone->all_names;
+ if (!grep(/^\Q$newvalues{$item}\E/,@timezones)) {
+ push(@errors,$item);
+ }
+ }
}
if (grep(/^\Q$item\E$/,@errors)) {
$newvalues{$item} = $domdefaults{$item};
@@ -4098,6 +4122,7 @@ sub modify_defaults {
defaults => { auth_def => $newvalues{'auth_def'},
auth_arg_def => $newvalues{'auth_arg_def'},
lang_def => $newvalues{'lang_def'},
+ timezone_def => $newvalues{'timezone_def'},
}
);
my $title = &defaults_titles();
@@ -4130,10 +4155,12 @@ sub modify_defaults {
my $cachetime = 24*60*60;
&Apache::lonnet::do_cache_new('domdefaults',$dom,
$defaults_hash{'defaults'},$cachetime);
- my $sysmail = $r->dir_config('lonSysEMail');
- &Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext);
+ if ($changes{'auth_def'} || $changes{'auth_arg_def'} || $changes{'lang_def'}) {
+ my $sysmail = $r->dir_config('lonSysEMail');
+ &Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext);
+ }
} else {
- $resulttext = &mt('No changes made to default authentication/language settings');
+ $resulttext = &mt('No changes made to default authentication/language/timezone settings');
}
} else {
$resulttext = '
'.
@@ -4232,14 +4259,16 @@ sub modify_coursecategories {
my ($dom,%domconfig) = @_;
my ($resulttext,%deletions,%reorderings,%needreordering,%adds,$errors);
my @deletecategory = &Apache::loncommon::get_env_multiple('form.deletecategory');
- if (($domconfig{'coursecategories'}{'instcode::0'} ne '') && ($env{'form.instcode'} == 0)) {
- push (@deletecategory,'instcode::0');
+ if (ref($domconfig{'coursecategories'}) eq 'HASH') {
+ if (($domconfig{'coursecategories'}{'instcode::0'} ne '') && ($env{'form.instcode'} == 0)) {
+ push (@deletecategory,'instcode::0');
+ }
}
my (@predelcats,@predeltrails,%predelallitems);
if (ref($domconfig{'coursecategories'}) eq 'HASH') {
if (@deletecategory > 0) {
#FIXME Need to remove category from all courses using a deleted category
- &extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems);
+ &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@predelcats,\@predeltrails,\%predelallitems);
foreach my $item (@deletecategory) {
if ($domconfig{'coursecategories'}{$item} ne '') {
delete($domconfig{'coursecategories'}{$item});
@@ -4299,7 +4328,7 @@ sub modify_coursecategories {
}
}
my (@chkcats,@chktrails,%chkallitems);
- &extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems);
+ &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@chkcats,\@chktrails,\%chkallitems);
if (ref($chkcats[0]) eq 'ARRAY') {
my $depth = 0;
my $chg = 0;
@@ -4321,7 +4350,7 @@ sub modify_coursecategories {
}
my $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);
my (@cats,@trails,%allitems);
- &extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems);
+ &Apache::loncommon::extract_categories($domconfig{'coursecategories'},\@cats,\@trails,\%allitems);
if ($putresult eq 'ok') {
$resulttext = &mt('Changes made:').'';
if (keys(%deletions) > 0) {
@@ -4406,91 +4435,6 @@ sub recurse_cat_deletes {
}
}
return;
-}
-
-sub gather_categories {
- my ($categories,$cats,$idx,$jsarray) = @_;
- my %counters;
- my $num = 0;
- foreach my $item (keys(%{$categories})) {
- my ($cat,$container,$depth) = map { &unescape($_); } split(/:/,$item);
- if ($container eq '' && $depth == 0) {
- $cats->[$depth][$categories->{$item}] = $cat;
- } else {
- $cats->[$depth]{$container}[$categories->{$item}] = $cat;
- }
- my ($escitem,$tail) = split(/:/,$item,2);
- if ($counters{$tail} eq '') {
- $counters{$tail} = $num;
- $num ++;
- }
- if (ref($idx) eq 'HASH') {
- $idx->{$item} = $counters{$tail};
- }
- if (ref($jsarray) eq 'ARRAY') {
- push(@{$jsarray->[$counters{$tail}]},$item);
- }
- }
- return;
-}
-
-sub extract_categories {
- my ($categories,$cats,$trails,$allitems,$idx,$jsarray) = @_;
- if (ref($categories) eq 'HASH') {
- &gather_categories($categories,$cats,$idx,$jsarray);
- if (ref($cats->[0]) eq 'ARRAY') {
- for (my $i=0; $i<@{$cats->[0]}; $i++) {
- my $name = $cats->[0][$i];
- my $item = &escape($name).'::0';
- my $trailstr;
- if ($name eq 'instcode') {
- $trailstr = &mt('Official courses (with institutional codes)');
- } else {
- $trailstr = $name;
- }
- if ($allitems->{$item} eq '') {
- push(@{$trails},$trailstr);
- $allitems->{$item} = scalar(@{$trails})-1;
- }
- my @parents = ($name);
- if (ref($cats->[1]{$name}) eq 'ARRAY') {
- for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) {
- my $category = $cats->[1]{$name}[$j];
- &recurse_categories($cats,2,$category,$trails,$allitems,\@parents);
- }
- }
- }
- }
- }
- return;
-}
-
-sub recurse_categories {
- my ($cats,$depth,$category,$trails,$allitems,$parents) = @_;
- my $shallower = $depth - 1;
- if (ref($cats->[$depth]{$category}) eq 'ARRAY') {
- for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) {
- my $name = $cats->[$depth]{$category}[$k];
- my $item = &escape($category).':'.&escape($parents->[-1]).':'.$shallower;
- my $trailstr = join(' -> ',(@{$parents},$category));
- if ($allitems->{$item} eq '') {
- push(@{$trails},$trailstr);
- $allitems->{$item} = scalar(@{$trails})-1;
- }
- my $deeper = $depth+1;
- push(@{$parents},$category);
- &recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents);
- pop(@{$parents});
- }
- } else {
- my $item = &escape($category).':'.&escape($parents->[-1]).':'.$shallower;
- my $trailstr = join(' -> ',(@{$parents},$category));
- if ($allitems->{$item} eq '') {
- push(@{$trails},$trailstr);
- $allitems->{$item} = scalar(@{$trails})-1;
- }
- }
- return;
}
1;