--- loncom/interface/domainprefs.pm 2008/05/15 01:56:44 1.51 +++ loncom/interface/domainprefs.pm 2008/06/03 17:02:12 1.55 @@ -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.55 2008/06/03 17:02:12 raeburn 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'}], @@ -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('Add category').''.&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:').'