--- loncom/interface/domainprefs.pm 2008/07/13 00:00:50 1.63
+++ loncom/interface/domainprefs.pm 2009/03/31 16:59:01 1.91
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.63 2008/07/13 00:00:50 raeburn Exp $
+# $Id: domainprefs.pm,v 1.91 2009/03/31 16:59:01 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,11 +37,14 @@ use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::lonlocal;
use Apache::lonmsg();
-use LONCAPA;
+use Apache::lonconfigsettings;
+use LONCAPA qw(:DEFAULT :match);
use LONCAPA::Enrollment;
+use LONCAPA::lonauthcgi();
use File::Copy;
use Locale::Language;
use DateTime::TimeZone;
+use DateTime::Locale;
sub handler {
my $r=shift;
@@ -51,6 +54,7 @@ sub handler {
return OK;
}
+ my $context = 'domain';
my $dom = $env{'request.role.domain'};
my $domdesc = &Apache::lonnet::domain($dom,'description');
if (&Apache::lonnet::allowed('mau',$dom)) {
@@ -72,15 +76,16 @@ sub handler {
&Apache::lonnet::get_dom('configuration',['login','rolecolors',
'quotas','autoenroll','autoupdate','directorysrch',
'usercreation','usermodification','contacts','defaults',
- 'scantron','coursecategories'],$dom);
+ 'scantron','coursecategories','serverstatuses',
+ 'requestcourses'],$dom);
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
'autoupdate','directorysrch','contacts',
'usercreation','usermodification','scantron',
- 'coursecategories');
+ 'requestcourses','coursecategories','serverstatuses');
my %prefs = (
'rolecolors' =>
{ text => 'Default color schemes',
- help => 'Default_Color_Schemes',
+ help => 'Domain_Configuration_Color_Schemes',
header => [{col1 => 'Student Settings',
col2 => '',},
{col1 => 'Coordinator Settings',
@@ -92,31 +97,32 @@ sub handler {
},
'login' =>
{ text => 'Log-in page options',
- help => 'Domain_Log-in_Page',
+ help => 'Domain_Configuration_Login_Page',
header => [{col1 => 'Item',
col2 => '',}],
},
'defaults' =>
{ text => 'Default authentication/language/timezone',
- help => '',
+ help => 'Domain_Configuration_LangTZAuth',
header => [{col1 => 'Setting',
col2 => 'Value'}],
},
'quotas' =>
- { text => 'Default quotas for user portfolios',
- help => 'Default_User_Quota',
- header => [{col1 => 'User type',
- col2 => 'Default quota'}],
+ { text => 'User blogs, personal information pages and portfolios',
+ help => 'Domain_Configuration_Quotas',
+ header => [{col1 => 'User affiliation',
+ col2 => 'Available tools',
+ col3 => 'Portfolio quota',}],
},
'autoenroll' =>
{ text => 'Auto-enrollment settings',
- help => 'Domain_Auto_Enrollment',
+ help => 'Domain_Configuration_Auto_Enrollment',
header => [{col1 => 'Configuration setting',
col2 => 'Value(s)'}],
},
'autoupdate' =>
{ text => 'Auto-update settings',
- help => 'Domain_Auto_Update',
+ help => 'Domain_Configuration_Auto_Updates',
header => [{col1 => 'Setting',
col2 => 'Value',},
{col1 => 'User population',
@@ -124,20 +130,20 @@ sub handler {
},
'directorysrch' =>
{ text => 'Institutional directory searches',
- help => 'Domain_Directory_Search',
+ help => 'Domain_Configuration_InstDirectory_Search',
header => [{col1 => 'Setting',
col2 => 'Value',}],
},
'contacts' =>
{ text => 'Contact Information',
- help => 'Domain_Contact_Information',
+ help => 'Domain_Configuration_Contact_Info',
header => [{col1 => 'Setting',
col2 => 'Value',}],
},
'usercreation' =>
{ text => 'User creation',
- help => 'Domain_User_Creation',
+ help => 'Domain_Configuration_User_Creation',
header => [{col1 => 'Format rule type',
col2 => 'Format rules in force'},
{col1 => 'User account creation',
@@ -145,9 +151,9 @@ sub handler {
{col1 => 'Context',
col2 => 'Assignable authentication types'}],
},
- 'usermodification' =>
+ 'usermodification' =>
{ text => 'User modification',
- help => 'Domain_User_Modification',
+ help => 'Domain_Configuration_User_Modification',
header => [{col1 => 'Target user has role',
col2 => 'User information updateable in author context'},
{col1 => 'Target user has role',
@@ -155,22 +161,36 @@ sub handler {
{col1 => "Status of user",
col2 => 'Information settable when self-creating account (if directory data blank)'}],
},
- 'scantron' =>
+ 'scantron' =>
{ text => 'Scantron format file',
- help => 'Domain_Scantron_Formats',
+ help => 'Domain_Configuration_Scantron_Format',
header => [ {col1 => 'Item',
col2 => '',
}],
},
- 'coursecategories' =>
+ 'requestcourses' =>
+ {text => 'Request creation of courses',
+ help => 'Domain_Configuration_Request_Courses',
+ header => [{col1 => 'User affiliation',
+ col2 => 'Requestable course types',}],
+ },
+ 'coursecategories' =>
{ text => 'Cataloging of courses',
- help => 'Domain_Course_Catalog',
- header => [{col1 => 'Category settings',
+ help => 'Domain_Configuration_Cataloging_Courses',
+ header => [{col1 => 'Category settings',
col2 => '',},
{col1 => 'Categories',
col2 => '',
}],
- }
+ },
+ 'serverstatuses' =>
+ {text => 'Access to server status pages',
+ help => 'Domain_Configuration_Server_Status',
+ header => [{col1 => 'Status Page',
+ col2 => 'Other named users',
+ col3 => 'Specific IPs',
+ }],
+ },
);
my @roles = ('student','coordinator','author','admin');
my @actions = &Apache::loncommon::get_env_multiple('form.actions');
@@ -179,99 +199,12 @@ sub handler {
text=>"Pick functionality"});
my $confname = $dom.'-domainconfig';
if ($phase eq 'process') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'display')",
- text=>"Domain Configuration"},
- {href=>"javascript:changePage(document.$phase,'$phase')",
- text=>"Updated"});
- &print_header($r,$phase);
- foreach my $item (@prefs_order) {
- if (grep(/^\Q$item\E$/,@actions)) {
- $r->print('
'.&mt($prefs{$item}{'text'}).'
'.
- &process_changes($r,$dom,$confname,$item,
- \@roles,%domconfig));
- }
- }
- $r->print('');
- &print_footer($r,$phase,'display','Back to configuration display',
- \@actions);
- $r->print('
');
+ &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles);
} elsif ($phase eq 'display') {
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'display')",
- text=>"Domain Configuration"});
- &print_header($r,$phase);
- if (@actions > 0) {
- my $rowsum = 0;
- my (%output,%rowtotal,@items);
- my $halfway = @actions/2;
- foreach my $item (@prefs_order) {
- if (grep(/^\Q$item\E$/,@actions)) {
- push(@items,$item);
- ($output{$item},$rowtotal{$item}) =
- &print_config_box($r,$dom,$confname,$phase,
- $item,$prefs{$item},
- $domconfig{$item});
- $rowsum += $rowtotal{$item};
- }
- }
- my $colend;
- my $halfway = $rowsum/2;
- my $aggregate = 0;
- my $sumleft = 0;
- my $sumright = 0;
- my $crossover;
- for (my $i=0; $i<@items; $i++) {
- $aggregate += $rowtotal{$items[$i]};
- if ($aggregate > $halfway) {
- $crossover = $i;
- last;
- }
- }
- for (my $i=0; $i<$crossover; $i++) {
- $sumleft += $rowtotal{$items[$i]};
- }
- for (my $i=$crossover+1; $i<@items; $i++) {
- $sumright += $rowtotal{$items[$i]};
- }
- if ((@items > 1) && ($env{'form.numcols'} == 2)) {
- my $sumdiff = $sumright - $sumleft;
- if ($sumdiff > 0) {
- $colend = $crossover + 1;
- } else {
- $colend = $crossover;
- }
- } else {
- $colend = @items;
- }
- $r->print('');
- for (my $i=0; $i<$colend; $i++) {
- $r->print($output{$items[$i]});
- }
- $r->print(' | | ');
- if ($colend < @items) {
- for (my $i=$colend; $i<@items; $i++) {
- $r->print($output{$items[$i]});
- }
- }
- $r->print(' |
');
- $r->print(&print_footer($r,$phase,'process','Save',\@actions));
- } else {
- $r->print(''.
- ''."\n".
- ''.&mt('No settings chosen').
- '');
- }
- $r->print('');
- $r->print(&Apache::loncommon::end_page());
+ &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname);
} else {
- if ($phase eq '') {
- $phase = 'pickactions';
- }
- my %helphash;
- &print_header($r,$phase);
if (keys(%domconfig) == 0) {
+ &Apache::lonconfigsettings::print_header($r,$phase,$context);
my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
my @ids=&Apache::lonnet::current_machine_ids();
if (!grep(/^\Q$primarylibserv\E$/,@ids)) {
@@ -298,44 +231,12 @@ sub handler {
if ($switch_server) {
$r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
}
+ $r->print(&Apache::loncommon::end_page());
return OK;
}
}
}
- $r->print(''.&mt('Functionality to display/modify').'
');
- $r->print(''."\n".' '.
- '
');
- my ($numitems,$midpoint,$seconddiv,$count);
- $numitems = @prefs_order;
- $midpoint = int($numitems/2);
- if ($numitems%2) {
- $midpoint ++;
- }
- $count = 0;
- foreach my $item (@prefs_order) {
- $r->print('
');
- $count ++;
- if ((!$seconddiv) && ($count >= $midpoint)) {
- $r->print(''."\n".''."\n");
- $seconddiv = 1;
- }
- }
- $r->print('
'.
- &mt('Display options').'
'."\n".
- ''.&mt('Display using: ')."\n".
- '
');
- $r->print(&print_footer($r,$phase,'display','Go'));
- $r->print('');
- $r->print(&Apache::loncommon::end_page());
+ &Apache::lonconfigsettings::display_choices($r,$phase,$context,\@prefs_order,\%prefs);
}
return OK;
}
@@ -349,7 +250,7 @@ sub process_changes {
$output = &modify_rolecolors($r,$dom,$confname,$roles,
%domconfig);
} elsif ($action eq 'quotas') {
- $output = &modify_quotas($dom,%domconfig);
+ $output = &modify_quotas($dom,$action,%domconfig);
} elsif ($action eq 'autoenroll') {
$output = &modify_autoenroll($dom,%domconfig);
} elsif ($action eq 'autoupdate') {
@@ -368,6 +269,10 @@ sub process_changes {
$output = &modify_scantron($r,$dom,$confname,%domconfig);
} elsif ($action eq 'coursecategories') {
$output = &modify_coursecategories($dom,%domconfig);
+ } elsif ($action eq 'serverstatuses') {
+ $output = &modify_serverstatuses($dom,%domconfig);
+ } elsif ($action eq 'requestcourses') {
+ $output = &modify_quotas($dom,$action,%domconfig);
}
return $output;
}
@@ -378,22 +283,22 @@ sub print_config_box {
my $output;
if ($action eq 'coursecategories') {
$output = &coursecategories_javascript($settings);
- }
+ }
$output .=
'
- '.&mt($item->{text}).
- ' |
';
-#
-# FIXME - put the help link back in when the help files exist
-# '.&mt($item->{text}).' '.
-# &Apache::loncommon::help_open_topic($item->{'help'}).' |
-# ');
+ '.
+ &mt($item->{text}).' '.
+ &Apache::loncommon::help_open_topic($item->{'help'}).' | '."\n".
+ '';
$rowtotal ++;
if (($action eq 'autoupdate') || ($action eq 'rolecolors') ||
($action eq 'usercreation') || ($action eq 'usermodification') ||
($action eq 'coursecategories')) {
- my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
+ my $colspan = '';
+ if (($action eq 'rolecolors') || ($action eq 'coursecategories')) {
+ $colspan = ' colspan="2"';
+ }
$output .= '
@@ -402,7 +307,7 @@ sub print_config_box {
| '.&mt($item->{'header'}->[0]->{'col1'}).' |
'.&mt($item->{'header'}->[0]->{'col2'}).' |
';
- $rowtotal ++;
+ $rowtotal ++;
if ($action eq 'autoupdate') {
$output .= &print_autoupdate('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'usercreation') {
@@ -423,7 +328,6 @@ sub print_config_box {
'.&mt($item->{'header'}->[1]->{'col1'}).' | ';
- my $colspan = ($action eq 'coursecategories')?' colspan="2"':'';
$output .= '
'.&mt($item->{'header'}->[1]->{'col2'}).' |
';
@@ -468,8 +372,10 @@ sub print_config_box {
- '.&mt($item->{'header'}->[2]->{'col1'}).' |
- '.&mt($item->{'header'}->[2]->{'col2'}).' |
+ '.
+ &mt($item->{'header'}->[2]->{'col1'}).' |
+ '.
+ &mt($item->{'header'}->[2]->{'col2'}).' |
'.
&print_rolecolors($phase,'author',$dom,$confname,$settings,\$rowtotal).'
@@ -494,18 +400,40 @@ sub print_config_box {
if (($action eq 'login') || ($action eq 'directorysrch')) {
$output .= '
| '.&mt($item->{'header'}->[0]->{'col1'}).' | ';
+ } elsif ($action eq 'serverstatuses') {
+ $output .= '
+ '.&mt($item->{'header'}->[0]->{'col1'}).
+ ' ('.&mt('Automatic access for Dom. Coords.').') | ';
+
} else {
$output .= '
- '.&mt($item->{'header'}->[0]->{'col1'}).' | ';
+ '.&mt($item->{'header'}->[0]->{'col1'}).' | ';
}
- $output .= '
- '.&mt($item->{'header'}->[0]->{'col2'}).' |
- ';
+ if (defined($item->{'header'}->[0]->{'col3'})) {
+ $output .= ''.
+ &mt($item->{'header'}->[0]->{'col2'});
+ if ($action eq 'serverstatuses') {
+ $output .= ' ('.&mt('user1:domain1,user2:domain2 etc.').')';
+ }
+ } else {
+ $output .= ' | '.
+ &mt($item->{'header'}->[0]->{'col2'});
+ }
+ $output .= ' | ';
+ if ($item->{'header'}->[0]->{'col3'}) {
+ $output .= ''.
+ &mt($item->{'header'}->[0]->{'col3'});
+ if ($action eq 'serverstatuses') {
+ $output .= ' ('.&mt('IP1,IP2 etc.').')';
+ }
+ $output .= ' | ';
+ }
+ $output .= '';
$rowtotal ++;
if ($action eq 'login') {
$output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);
} elsif ($action eq 'quotas') {
- $output .= &print_quotas($dom,$settings,\$rowtotal);
+ $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
} elsif ($action eq 'autoenroll') {
$output .= &print_autoenroll($dom,$settings,\$rowtotal);
} elsif ($action eq 'directorysrch') {
@@ -516,6 +444,10 @@ sub print_config_box {
$output .= &print_defaults($dom,\$rowtotal);
} elsif ($action eq 'scantron') {
$output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
+ } elsif ($action eq 'serverstatuses') {
+ $output .= &print_serverstatuses($dom,$settings,\$rowtotal);
+ } elsif ($action eq 'requestcourses') {
+ $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
}
}
$output .= '
@@ -526,107 +458,6 @@ sub print_config_box {
return ($output,$rowtotal);
}
-sub print_header {
- my ($r,$phase) = @_;
- my $alert = &mt('You must select at least one functionality type to display.');
- my $js = '
-
-';
- my $additem;
- if ($phase eq 'pickactions') {
- my %loaditems = (
- 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);",
- );
- $additem = {'add_entries' => \%loaditems,};
- } else {
- my %loaditems = (
- 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);",
- );
- $additem = {'add_entries' => \%loaditems,};
- }
- $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings',
- $js,$additem));
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings'));
- $r->print('
-
-');
- $r->print(''.&Apache::loncommon::end_page());
- }
- return;
-}
-
sub print_login {
my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
my %choices = &login_choices();
@@ -659,6 +490,7 @@ sub print_login {
);
foreach my $item (@images) {
$defaults{$item} = $defaultdesign{'login.'.$item};
+ $defaults{'showlogo'}{$item} = 1;
}
foreach my $item (@bgs) {
$defaults{'bgs'}{$item} = $defaultdesign{'login.'.$item};
@@ -680,10 +512,13 @@ sub print_login {
}
}
foreach my $item (@images) {
- if ($settings->{$item} ne '') {
+ if (defined($settings->{$item})) {
$designs{$item} = $settings->{$item};
$is_custom{$item} = 1;
}
+ if (defined($settings->{'showlogo'}{$item})) {
+ $designs{'showlogo'}{$item} = $settings->{'showlogo'}{$item};
+ }
}
foreach my $item (@logintext) {
if ($settings->{$item} ne '') {
@@ -772,9 +607,9 @@ sub login_choices {
bgs => "Background colors",
links => "Link colors",
font => "Font color",
- pgbg => "Page",
- mainbg => "Main panel",
- sidebg => "Side panel",
+ pgbg => "Header",
+ mainbg => "Page",
+ sidebg => "Login box",
link => "Link",
alink => "Active link",
vlink => "Visited link",
@@ -877,20 +712,27 @@ sub display_color_options {
$itemcount ++;
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= ''.
- ''.$choices->{$img}.' | ';
+ ''.$choices->{$img};
my ($imgfile,$img_import,$login_hdr_pick,$logincolors);
+ if ($role eq 'login') {
+ if ($img eq 'login') {
+ $login_hdr_pick =
+ &login_header_options($img,$role,$defaults,$is_custom,$choices,
+ $loginheader);
+ $logincolors =
+ &login_text_colors($img,$role,$logintext,$phase,$choices,
+ $designs);
+ } elsif ($img ne 'domlogo') {
+ $datatable.= &logo_display_options($img,$defaults,$designs);
+ }
+ }
+ $datatable .= ' | ';
if ($designs->{$img} ne '') {
$imgfile = $designs->{$img};
$img_import = ($imgfile =~ m{^/adm/});
} else {
$imgfile = $defaults->{$img};
}
- if ($img eq 'login') {
- $login_hdr_pick = &login_header_options($img,$role,$defaults,$is_custom,$choices,
- $loginheader);
- $logincolors =
- &login_text_colors($img,$role,$logintext,$phase,$choices,$designs);
- }
if ($imgfile) {
my ($showfile,$fullsize);
if ($imgfile =~ m-^(/res/\Q$dom\E/\Q$confname\E/\Q$img\E)/([^/]+)$-) {
@@ -979,7 +821,7 @@ sub display_color_options {
my $bgs_def;
foreach my $item (@{$bgs}) {
if (!$is_custom->{$item}) {
- $bgs_def .= ''.$choices->{$item}.' '.$defaults->{'bgs'}{$item}.' | ';
+ $bgs_def .= ''.$choices->{$item}.' '.$defaults->{'bgs'}{$item}.' | ';
}
}
if ($bgs_def) {
@@ -1030,6 +872,32 @@ sub display_color_options {
return $datatable;
}
+sub logo_display_options {
+ my ($img,$defaults,$designs) = @_;
+ my $checkedon;
+ if (ref($defaults) eq 'HASH') {
+ if (ref($defaults->{'showlogo'}) eq 'HASH') {
+ if ($defaults->{'showlogo'}{$img}) {
+ $checkedon = 'checked="checked" ';
+ }
+ }
+ }
+ if (ref($designs) eq 'HASH') {
+ if (ref($designs->{'showlogo'}) eq 'HASH') {
+ if (defined($designs->{'showlogo'}{$img})) {
+ if ($designs->{'showlogo'}{$img} == 0) {
+ $checkedon = '';
+ } elsif ($designs->{'showlogo'}{$img} == 1) {
+ $checkedon = 'checked="checked" ';
+ }
+ }
+ }
+ }
+ return '
'."\n";
+}
+
sub login_header_options {
my ($img,$role,$defaults,$is_custom,$choices,$loginheader) = @_;
my $image_checked = ' checked="checked" ';
@@ -1081,7 +949,7 @@ sub image_changes {
my ($is_custom,$alt_text,$img_import,$showfile,$fullsize,$role,$img,$imgfile,$logincolors) = @_;
my $output;
if (!$is_custom) {
- if ($img eq 'login') {
+ if ($img ne 'domlogo') {
$output .= &mt('Default image:').'
';
} else {
$output .= &mt('Default in use:').'
';
@@ -1111,85 +979,140 @@ sub color_pick {
return $link;
}
-sub color_pick_js {
- my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
- my $output = <<"ENDCOL";
- function pclose() {
- parmwin=window.open("/adm/rat/empty.html","LONCAPAparms","height=350,width=350,scrollbars=no,menubar=no");
- parmwin.close();
- }
-
- $pjump_def
-
- function psub() {
- pclose();
- if (document.parmform.pres_marker.value!='') {
- if (document.parmform.pres_type.value!='') {
- eval('document.display.'+
- document.parmform.pres_marker.value+
- '.value=document.parmform.pres_value.value;');
- }
- } else {
- document.parmform.pres_value.value='';
- document.parmform.pres_marker.value='';
- }
- }
-
- function get_id (span_id) {
- if (document.getElementById) {
- return document.getElementById(span_id);
- }
- if (document.all) {
- return document.all[span_id];
- }
- return false;
- }
-
- function colchg_span (span_id_str,new_color_item) {
- var span_ref = get_id(span_id_str);
- if (span_ref.style) { span_ref = span_ref.style; }
- span_ref.background = new_color_item.value;
- span_ref.backgroundColor = new_color_item.value;
- span_ref.bgColor = new_color_item.value;
- }
-
-ENDCOL
- return $output;
-}
-
sub print_quotas {
- my ($dom,$settings,$rowtotal) = @_;
- my $datatable;
+ my ($dom,$settings,$rowtotal,$action) = @_;
+ my $context;
+ if ($action eq 'quotas') {
+ $context = 'tools';
+ } else {
+ $context = $action;
+ }
+ my ($datatable,$defaultquota,@usertools);
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
my $typecount = 0;
my $css_class;
+ if ($context eq 'requestcourses') {
+ @usertools = ('official','unofficial');
+ } else {
+ @usertools = ('aboutme','blog','portfolio');
+ }
+ my %titles = &tool_titles();
if (ref($types) eq 'ARRAY') {
foreach my $type (@{$types}) {
+ my $currdefquota;
+ unless ($context eq 'requestcourses') {
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{defaultquota}) eq 'HASH') {
+ $currdefquota = $settings->{defaultquota}->{$type};
+ } else {
+ $currdefquota = $settings->{$type};
+ }
+ }
+ }
if (defined($usertypes->{$type})) {
$typecount ++;
$css_class = $typecount%2?' class="LC_odd_row"':'';
- $datatable .= '
'.
+ $datatable .= '
'.
''.$usertypes->{$type}.' | '.
+ '';
+ foreach my $item (@usertools) {
+ my $checked;
+ unless ($context eq 'requestcourses') {
+ $checked = 'checked="checked" ';
+ }
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{$item}) eq 'HASH') {
+ if ($settings->{$item}->{$type} == 0) {
+ $checked = '';
+ } elsif ($settings->{$item}->{$type} == 1) {
+ $checked = 'checked="checked" ';
+ }
+ }
+ }
+ $datatable .= ' ';
+ }
+ $datatable .= ' | ';
+ unless ($context eq 'requestcourses') {
+ $datatable .=
''.
' Mb |
';
+ '" value="'.$currdefquota.
+ '" size="5" /> Mb';
+ }
+ $datatable .= '';
}
}
}
- my $defaultquota = '20';
- if (ref($settings) eq 'HASH') {
- if (defined($settings->{'default'})) {
- $defaultquota = $settings->{'default'};
+ unless ($context eq 'requestcourses') {
+ $defaultquota = '20';
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'defaultquota'}) eq 'HASH') {
+ $defaultquota = $settings->{'defaultquota'}->{'default'};
+ } elsif (defined($settings->{'default'})) {
+ $defaultquota = $settings->{'default'};
+ }
}
}
$typecount ++;
$css_class = $typecount%2?' class="LC_odd_row"':'';
$datatable .= ''.
''.$othertitle.' | '.
- ''.
- ' Mb |
';
+ '';
+ foreach my $item (@usertools) {
+ my $checked;
+ unless ($context eq 'requestcourses') {
+ $checked = 'checked="checked" ';
+ }
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{$item}) eq 'HASH') {
+ if ($settings->{$item}->{'default'} == 0) {
+ $checked = '';
+ } elsif ($settings->{$item}->{'default'} == 1) {
+ $checked = 'checked="checked" ';
+ }
+ }
+ }
+ $datatable .= ' ';
+ }
+ $datatable .= ' | ';
+ unless ($context eq 'requestcourses') {
+ $datatable .= ''.
+ ' Mb | ';
+ }
+ $datatable .= '';
+ $typecount ++;
+ $css_class = $typecount%2?' class="LC_odd_row"':'';
+ $datatable .= ''.
+ ' '.&mt('LON-CAPA Advanced Users').' | '.
+ ' ';
+ foreach my $item (@usertools) {
+ my $checked;
+ unless ($context eq 'requestcourses') {
+ $checked = 'checked="checked" ';
+ }
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{$item}) eq 'HASH') {
+ if ($settings->{$item}->{'_LC_adv'} == 0) {
+ $checked = '';
+ } elsif ($settings->{$item}->{'_LC_adv'} == 1) {
+ $checked = 'checked="checked" ';
+ }
+ }
+ }
+ $datatable .= ' ';
+ }
+ $datatable .= '('.&mt('overrides affiliation').
+ ') |
';
$$rowtotal += $typecount;
return $datatable;
}
@@ -1430,7 +1353,7 @@ sub print_contacts {
my $datatable;
my @contacts = ('adminemail','supportemail');
my (%checked,%to,%otheremails);
- my @mailings = ('errormail','packagesmail','helpdeskmail');
+ my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail');
foreach my $type (@mailings) {
$otheremails{$type} = '';
}
@@ -1450,6 +1373,8 @@ sub print_contacts {
}
$otheremails{$type} = $settings->{$type}{'others'};
}
+ } elsif ($type eq 'lonstatusmail') {
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
}
}
} else {
@@ -1457,30 +1382,24 @@ sub print_contacts {
$to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'};
$checked{'errormail'}{'adminemail'} = ' checked="checked" ';
$checked{'packagesmail'}{'adminemail'} = ' checked="checked" ';
- $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
+ $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" ';
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
}
my ($titles,$short_titles) = &contact_titles();
my $rownum = 0;
my $css_class;
foreach my $item (@contacts) {
- if ($rownum%2) {
- $css_class = '';
- } else {
- $css_class = ' class="LC_odd_row" ';
- }
+ $rownum ++;
+ $css_class = $rownum%2?' class="LC_odd_row"':'';
$datatable .= ''.
''.$titles->{$item}.
' | '.
' |
';
- $rownum ++;
}
foreach my $type (@mailings) {
- if ($rownum%2) {
- $css_class = '';
- } else {
- $css_class = ' class="LC_odd_row" ';
- }
+ $rownum ++;
+ $css_class = $rownum%2?' class="LC_odd_row"':'';
$datatable .= ''.
''.
$titles->{$type}.': | '.
@@ -1497,7 +1416,6 @@ sub print_contacts {
''.
'
'."\n";
- $rownum ++;
}
$$rowtotal += $rownum;
return $datatable;
@@ -1506,10 +1424,11 @@ sub print_contacts {
sub contact_titles {
my %titles = &Apache::lonlocal::texthash (
'supportemail' => 'Support E-mail address',
- 'adminemail' => 'Default Server Admin E-mail address',
+ 'adminemail' => 'Default Server Admin E-mail address',
'errormail' => 'Error reports to be e-mailed to',
'packagesmail' => 'Package update alerts to be e-mailed to',
- 'helpdeskmail' => 'Helpdesk requests to be e-mailed to'
+ 'helpdeskmail' => 'Helpdesk requests to be e-mailed to',
+ 'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)',
);
my %short_titles = &Apache::lonlocal::texthash (
adminemail => 'Admin E-mail address',
@@ -1518,6 +1437,17 @@ sub contact_titles {
return (\%titles,\%short_titles);
}
+sub tool_titles {
+ my %titles = &Apache::lonlocal::texthash (
+ aboutme => 'Personal Information Page',
+ blog => 'Blog',
+ portfolio => 'Portfolio',
+ official => 'Official courses (with institutional codes)',
+ unofficial => 'Unofficial courses',
+ );
+ return %titles;
+}
+
sub print_usercreation {
my ($position,$dom,$settings,$rowtotal) = @_;
my $numinrow = 4;
@@ -1752,7 +1682,7 @@ sub usercreation_types {
any => 'Any',
official => 'Institutional only ',
unofficial => 'Non-institutional only',
- email => 'Email address',
+ email => 'E-mail address',
login => 'Institutional Login',
sso => 'SSO',
none => 'None',
@@ -1821,7 +1751,8 @@ sub print_usermodification {
sub print_defaults {
my ($dom,$rowtotal) = @_;
- my @items = ('auth_def','auth_arg_def','lang_def','timezone_def');
+ my @items = ('auth_def','auth_arg_def','lang_def','timezone_def',
+ 'datelocale_def');
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
my $titles = &defaults_titles();
my $rownum = 0;
@@ -1856,6 +1787,9 @@ sub print_defaults {
} elsif ($item eq 'timezone_def') {
my $includeempty = 1;
$datatable .= &Apache::loncommon::select_timezone($item,$domdefaults{$item},undef,$includeempty);
+ } elsif ($item eq 'datelocale_def') {
+ my $includeempty = 1;
+ $datatable .= &Apache::loncommon::select_datelocale($item,$domdefaults{$item},undef,$includeempty);
} else {
$datatable .= '';
@@ -1873,6 +1807,7 @@ sub defaults_titles {
'auth_arg_def' => 'Default authentication argument',
'lang_def' => 'Default language',
'timezone_def' => 'Default timezone',
+ 'datelocale_def' => 'Default locale for dates',
);
return (\%titles);
}
@@ -1983,14 +1918,15 @@ sub print_scantronformat {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= '';
if (!$is_custom) {
- $datatable .= ''.&mt('Default in use:').' ';
+ $datatable .= ' | '.&mt('Default in use:').' '.
+ '';
if ($scantronurl) {
$datatable .= ''.
&mt('Default scantron format file').'';
} else {
$datatable = &mt('File unavailable for display');
}
- $datatable .= ' | ';
+ $datatable .= '';
if (keys(%error) == 0) {
$datatable .= '';
if (!$switchserver) {
@@ -2011,19 +1947,21 @@ sub print_scantronformat {
}
$datatable .= ' | '.$errorstr.' | ';
} elsif ($scantronurl) {
- $datatable .= ' | '
- .&mt('Custom scantron format file').''
- .' | '
- .''.&mt('Replace:').' ';
+ $datatable .= ' | '.
+ ''.
+ &mt('Custom scantron format file').' | '.
+ ' '.
+ &mt('Replace:').' ';
}
}
if (keys(%error) == 0) {
if ($switchserver) {
$datatable .= &mt('Upload to library server: [_1]',$switchserver);
} else {
- $datatable .=' ';
+ $datatable .=' '.
+ '';
}
}
$datatable .= ' |
';
@@ -2199,6 +2137,58 @@ sub print_coursecategories {
return $datatable;
}
+sub print_serverstatuses {
+ my ($dom,$settings,$rowtotal) = @_;
+ my $datatable;
+ my @pages = &serverstatus_pages();
+ my (%namedaccess,%machineaccess);
+ foreach my $type (@pages) {
+ $namedaccess{$type} = '';
+ $machineaccess{$type}= '';
+ }
+ if (ref($settings) eq 'HASH') {
+ foreach my $type (@pages) {
+ if (exists($settings->{$type})) {
+ if (ref($settings->{$type}) eq 'HASH') {
+ foreach my $key (keys(%{$settings->{$type}})) {
+ if ($key eq 'namedusers') {
+ $namedaccess{$type} = $settings->{$type}->{$key};
+ } elsif ($key eq 'machines') {
+ $machineaccess{$type} = $settings->{$type}->{$key};
+ }
+ }
+ }
+ }
+ }
+ }
+ my $titles= &LONCAPA::lonauthcgi::serverstatus_titles();
+ my $rownum = 0;
+ my $css_class;
+ foreach my $type (@pages) {
+ $rownum ++;
+ $css_class = $rownum%2?' class="LC_odd_row"':'';
+ $datatable .= ''.
+ ''.
+ $titles->{$type}.' | '.
+ ''.
+ ' | '.
+ ''.
+ ''.
+ ''.
+ ' |
'."\n";
+ }
+ $$rowtotal += $rownum;
+ return $datatable;
+}
+
+sub serverstatus_pages {
+ return ('userstatus','lonstatus','loncron','server-status','codeversions',
+ 'clusterstatus','metadata_keywords','metadata_harvest',
+ 'takeoffline','takeonline','showenv');
+}
+
sub coursecategories_javascript {
my ($settings) = @_;
my ($output,$jstext,$cathash);
@@ -2757,6 +2747,13 @@ sub modify_colors {
$domconfig->{$role} = {};
}
foreach my $img (@images) {
+ if (($role eq 'login') && (($img eq 'img') || ($img eq 'logo'))) {
+ if (defined($env{'form.login_showlogo_'.$img})) {
+ $confhash->{$role}{'showlogo'}{$img} = 1;
+ } else {
+ $confhash->{$role}{'showlogo'}{$img} = 0;
+ }
+ }
if ( ! $env{'form.'.$role.'_'.$img.'.filename'}
&& !defined($domconfig->{$role}{$img})
&& !$env{'form.'.$role.'_del_'.$img}
@@ -2831,7 +2828,19 @@ sub modify_colors {
$changes{$role}{'images'}{$img} = 1;
}
}
- }
+ if (($role eq 'login') && (($img eq 'logo') || ($img eq 'img'))) {
+ if (ref($domconfig->{'login'}{'showlogo'}) eq 'HASH') {
+ if ($confhash->{$role}{'showlogo'}{$img} ne
+ $domconfig->{$role}{'showlogo'}{$img}) {
+ $changes{$role}{'showlogo'}{$img} = 1;
+ }
+ } else {
+ if ($confhash->{$role}{'showlogo'}{$img} == 0) {
+ $changes{$role}{'showlogo'}{$img} = 1;
+ }
+ }
+ }
+ }
if ($domconfig->{$role}{'font'} ne '') {
if ($confhash->{$role}{'font'} ne $domconfig->{$role}{'font'}) {
$changes{$role}{'font'} = 1;
@@ -2923,6 +2932,11 @@ sub default_change_checker {
$confhash->{$role}{$img} = '';
$changes->{$role}{'images'}{$img} = 1;
}
+ if ($role eq 'login') {
+ if ($confhash->{$role}{'showlogo'}{$img} == 0) {
+ $changes->{$role}{'showlogo'}{$img} = 1;
+ }
+ }
}
if ($confhash->{$role}{'font'}) {
$changes->{$role}{'font'} = 1;
@@ -2954,7 +2968,13 @@ sub display_colorchgs {
$resulttext .= ''.&mt($choices{$key}).':';
}
foreach my $item (sort(keys(%{$changes->{$role}{$key}}))) {
- if ($confhash->{$role}{$item} eq '') {
+ if (($role eq 'login') && ($key eq 'showlogo')) {
+ if ($confhash->{$role}{$key}{$item}) {
+ $resulttext .= '- '.&mt("$choices{$item} set to be displayed").'
';
+ } else {
+ $resulttext .= '- '.&mt("$choices{$item} set to not be displayed").'
';
+ }
+ } elsif ($confhash->{$role}{$item} eq '') {
$resulttext .= '- '.&mt("$choices{$item} set to default").'
';
} else {
my $newitem = $confhash->{$role}{$item};
@@ -3259,71 +3279,191 @@ sub check_switchserver {
return $switchserver;
}
-sub javascript_set_colnums {
- return < 1100) {
- document.pickactions.numcols[1].checked = true;
+sub modify_quotas {
+ my ($dom,$action,%domconfig) = @_;
+ my ($context,@usertools);
+ if ($action eq 'quotas') {
+ $context = 'tools';
+ } else {
+ $context = $action;
+ }
+ if ($context eq 'requestcourses') {
+ @usertools = ('official','unofficial');
} else {
- document.pickactions.numcols[0].checked = true;
+ @usertools = ('aboutme','blog','portfolio');
}
-}
-END
-}
-
-sub modify_quotas {
- my ($dom,%domconfig) = @_;
+ my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
my ($resulttext,%changes);
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
- my %formhash;
+ my %titles = &tool_titles();
+ my (%confhash,%toolshash);
foreach my $key (keys(%env)) {
- if ($key =~ /^form\.quota_(.+)$/) {
- $formhash{$1} = $env{$key};
+ unless ($context eq 'requestcourses') {
+ if ($key =~ /^form\.quota_(.+)$/) {
+ $confhash{'defaultquota'}{$1} = $env{$key};
+ }
+ }
+ if ($key =~ /^form\.\Q$context\E_(.+)$/) {
+ @{$toolshash{$1}} = &Apache::loncommon::get_env_multiple($key);
}
}
- $formhash{'default'} = $env{'form.defaultquota'};
- if (ref($domconfig{'quotas'}) eq 'HASH') {
- foreach my $key (keys(%{$domconfig{'quotas'}})) {
- if (exists($formhash{$key})) {
- if ($formhash{$key} ne $domconfig{'quotas'}{$key}) {
- $changes{$key} = 1;
+ unless ($context eq 'requestcourses') {
+ $confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'};
+ }
+ foreach my $item (@usertools) {
+ foreach my $type (@{$types},'default','_LC_adv') {
+ if (grep(/^\Q$type\E$/,@{$toolshash{$item}})) {
+ $confhash{$item}{$type} = 1;
+ } else {
+ $confhash{$item}{$type} = 0;
+ }
+ if (ref($domconfig{$action}) eq 'HASH') {
+ if (ref($domconfig{$action}{$item}) eq 'HASH') {
+ if ($domconfig{$action}{$item}{$type} ne $confhash{$item}{$type}) {
+ $changes{$item}{$type} = 1;
+ }
+ } else {
+ if ($context eq 'requestcourses') {
+ if ($confhash{$item}{$type}) {
+ $changes{$item}{$type} = 1;
+ }
+ } else {
+ if (!$confhash{$item}{$type}) {
+ $changes{$item}{$type} = 1;
+ }
+ }
}
} else {
- $formhash{$key} = $domconfig{'quotas'}{$key};
+ if ($context eq 'requestcourses') {
+ if ($confhash{$item}{$type}) {
+ $changes{$item}{$type} = 1;
+ }
+ } else {
+ if (!$confhash{$item}{$type}) {
+ $changes{$item}{$type} = 1;
+ }
+ }
}
}
}
- foreach my $key (keys(%formhash)) {
- if ($formhash{$key} ne '') {
- if (ref($domconfig{'quotas'}) eq 'HASH') {
- if (!exists($domconfig{'quotas'}{$key})) {
- $changes{$key} = 1;
+ unless ($context eq 'requestcourses') {
+ if (ref($domconfig{'quotas'}) eq 'HASH') {
+ if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') {
+ foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) {
+ if (exists($confhash{'defaultquota'}{$key})) {
+ if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{'defaultquota'}{$key}) {
+ $changes{'defaultquota'}{$key} = 1;
+ }
+ } else {
+ $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{'defaultquota'}{$key};
+ }
}
} else {
- $changes{$key} = 1;
+ foreach my $key (keys(%{$domconfig{'quotas'}})) {
+ if (exists($confhash{'defaultquota'}{$key})) {
+ if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{$key}) {
+ $changes{'defaultquota'}{$key} = 1;
+ }
+ } else {
+ $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{$key};
+ }
+ }
}
}
+ if (ref($confhash{'defaultquota'}) eq 'HASH') {
+ foreach my $key (keys(%{$confhash{'defaultquota'}})) {
+ if (ref($domconfig{'quotas'}) eq 'HASH') {
+ if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') {
+ if (!exists($domconfig{'quotas'}{'defaultquota'}{$key})) {
+ $changes{'defaultquota'}{$key} = 1;
+ }
+ } else {
+ if (!exists($domconfig{'quotas'}{$key})) {
+ $changes{'defaultquota'}{$key} = 1;
+ }
+ }
+ } else {
+ $changes{'defaultquota'}{$key} = 1;
+ }
+ }
+ }
+ }
+
+ foreach my $key (keys(%confhash)) {
+ $domdefaults{$key} = $confhash{$key};
}
+
my %quotahash = (
- quotas => {%formhash},
+ $action => { %confhash }
);
my $putresult = &Apache::lonnet::put_dom('configuration',\%quotahash,
$dom);
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
+ my $cachetime = 24*60*60;
+ &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
+
$resulttext = &mt('Changes made:').'';
- foreach my $type (@{$types},'default') {
- if (defined($changes{$type})) {
- my $typetitle = $usertypes->{$type};
- if ($type eq 'default') {
- $typetitle = $othertitle;
+ unless ($context eq 'requestcourses') {
+ if (ref($changes{'defaultquota'}) eq 'HASH') {
+ $resulttext .= '- '.&mt('Portfolio default quotas').'
';
+ foreach my $type (@{$types},'default') {
+ if (defined($changes{'defaultquota'}{$type})) {
+ my $typetitle = $usertypes->{$type};
+ if ($type eq 'default') {
+ $typetitle = $othertitle;
+ }
+ $resulttext .= '- '.&mt('[_1] set to [_2] Mb',$typetitle,$confhash{'defaultquota'}{$type}).'
';
+ }
}
- $resulttext .= '- '.&mt('[_1] set to [_2] Mb',$typetitle,$formhash{$type}).'
';
+ $resulttext .= '
';
+ }
+ }
+ my %newenv;
+ foreach my $item (@usertools) {
+ if (ref($changes{$item}) eq 'HASH') {
+ my $newacc =
+ &Apache::lonnet::usertools_access($env{'user.name'},
+ $env{'user.domain'},
+ $item,'reload',$context);
+ if ($context eq 'requestcourses') {
+ if ($env{'environment.canrequest.'.$item} ne $newacc) {
+ $newenv{'environment.canrequest.'.$item} = $newacc;
+ }
+ } else {
+ if ($env{'environment.availabletools.'.$item} ne $newacc) {
+ $newenv{'environment.availabletools.'.$item} = $newacc;
+ }
+ }
+ $resulttext .= '- '.$titles{$item}.'
';
+ foreach my $type (@{$types},'default','_LC_adv') {
+ if ($changes{$item}{$type}) {
+ my $typetitle = $usertypes->{$type};
+ if ($type eq 'default') {
+ $typetitle = $othertitle;
+ } elsif ($type eq '_LC_adv') {
+ $typetitle = 'LON-CAPA Advanced Users';
+ }
+ if ($confhash{$item}{$type}) {
+ $resulttext .= '- '.&mt('Set to be available to [_1]',$typetitle).'
';
+ } else {
+ $resulttext .= '- '.&mt('Set to be unavailable to [_1]',$typetitle).'
';
+ }
+ }
+ }
+ $resulttext .= '
';
}
}
$resulttext .= '
';
+ if (keys(%newenv)) {
+ &Apache::lonnet::appenv(\%newenv);
+ }
} else {
- $resulttext = &mt('No changes made to default quotas');
+ if ($context eq 'requestcourses') {
+ $resulttext = &mt('No changes made to rights to request creation of courses.');
+ } else {
+ $resulttext = &mt('No changes made to availability of personal information pages, blogs, portfolios or default quotas');
+ }
}
} else {
$resulttext = ''.
@@ -3706,7 +3846,7 @@ sub modify_contacts {
}
my (%others,%to);
my @contacts = ('supportemail','adminemail');
- my @mailings = ('errormail','packagesmail','helpdeskmail');
+ my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail');
foreach my $type (@mailings) {
@{$newsetting{$type}} =
&Apache::loncommon::get_env_multiple('form.'.$type);
@@ -3751,6 +3891,7 @@ sub modify_contacts {
$default{'errormail'} = 'adminemail';
$default{'packagesmail'} = 'adminemail';
$default{'helpdeskmail'} = 'supportemail';
+ $default{'lonstatusmail'} = 'adminemail';
foreach my $item (@contacts) {
if ($to{$item} ne $default{$item}) {
$changes{$item} = 1;
@@ -4246,7 +4387,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','timezone_def');
+ my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def');
my @authtypes = ('internal','krb4','krb5','localauth');
foreach my $item (@items) {
$newvalues{$item} = $env{'form.'.$item};
@@ -4273,20 +4414,24 @@ sub modify_defaults {
push(@errors,$item);
}
}
+ } elsif ($item eq 'datelocale_def') {
+ if ($newvalues{$item} ne '') {
+ my @datelocale_ids = DateTime::Locale->ids();
+ if (!grep(/^\Q$newvalues{$item}\E$/,@datelocale_ids)) {
+ push(@errors,$item);
+ }
+ }
}
if (grep(/^\Q$item\E$/,@errors)) {
$newvalues{$item} = $domdefaults{$item};
} elsif ($domdefaults{$item} ne $newvalues{$item}) {
$changes{$item} = 1;
}
+ $domdefaults{$item} = $newvalues{$item};
}
my %defaults_hash = (
- defaults => { auth_def => $newvalues{'auth_def'},
- auth_arg_def => $newvalues{'auth_arg_def'},
- lang_def => $newvalues{'lang_def'},
- timezone_def => $newvalues{'timezone_def'},
- }
- );
+ defaults => \%newvalues,
+ );
my $title = &defaults_titles();
my $putresult = &Apache::lonnet::put_dom('configuration',\%defaults_hash,
$dom);
@@ -4315,9 +4460,8 @@ sub modify_defaults {
$resulttext .= '
';
$mailmsgtext .= "\n";
my $cachetime = 24*60*60;
- &Apache::lonnet::do_cache_new('domdefaults',$dom,
- $defaults_hash{'defaults'},$cachetime);
- if ($changes{'auth_def'} || $changes{'auth_arg_def'} || $changes{'lang_def'}) {
+ &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
+ if ($changes{'auth_def'} || $changes{'auth_arg_def'} || $changes{'lang_def'} || $changes{'datelocale_def'}) {
my $sysmail = $r->dir_config('lonSysEMail');
&Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext);
}
@@ -4435,8 +4579,10 @@ sub modify_coursecategories {
} else {
$changes{'togglecats'} = 1;
$changes{'categorize'} = 1;
- $domconfig{'coursecategories'}{'togglecats'} = $env{'form.togglecats'};
- $domconfig{'coursecategories'}{'categorize'} = $env{'form.categorize'};
+ $domconfig{'coursecategories'} = {
+ togglecats => $env{'form.togglecats'},
+ categorize => $env{'form.categorize'},
+ };
}
if (ref($cathash) eq 'HASH') {
if (($domconfig{'coursecategories'}{'cats'}{'instcode::0'} ne '') && ($env{'form.instcode'} == 0)) {
@@ -4598,6 +4744,131 @@ sub modify_coursecategories {
}
return $resulttext;
}
+
+sub modify_serverstatuses {
+ my ($dom,%domconfig) = @_;
+ my ($resulttext,%changes,%currserverstatus,%newserverstatus);
+ if (ref($domconfig{'serverstatuses'}) eq 'HASH') {
+ %currserverstatus = %{$domconfig{'serverstatuses'}};
+ }
+ my @pages = &serverstatus_pages();
+ foreach my $type (@pages) {
+ $newserverstatus{$type}{'namedusers'} = '';
+ $newserverstatus{$type}{'machines'} = '';
+ if (defined($env{'form.'.$type.'_namedusers'})) {
+ my @users = split(/,/,$env{'form.'.$type.'_namedusers'});
+ my @okusers;
+ foreach my $user (@users) {
+ my ($uname,$udom) = split(/:/,$user);
+ if (($udom =~ /^$match_domain$/) &&
+ (&Apache::lonnet::domain($udom)) &&
+ ($uname =~ /^$match_username$/)) {
+ if (!grep(/^\Q$user\E/,@okusers)) {
+ push(@okusers,$user);
+ }
+ }
+ }
+ if (@okusers > 0) {
+ @okusers = sort(@okusers);
+ $newserverstatus{$type}{'namedusers'} = join(',',@okusers);
+ }
+ }
+ if (defined($env{'form.'.$type.'_machines'})) {
+ my @machines = split(/,/,$env{'form.'.$type.'_machines'});
+ my @okmachines;
+ foreach my $ip (@machines) {
+ my @parts = split(/\./,$ip);
+ next if (@parts < 4);
+ my $badip = 0;
+ for (my $i=0; $i<4; $i++) {
+ if (!(($parts[$i] >= 0) && ($parts[$i] <= 255))) {
+ $badip = 1;
+ last;
+ }
+ }
+ if (!$badip) {
+ push(@okmachines,$ip);
+ }
+ }
+ @okmachines = sort(@okmachines);
+ $newserverstatus{$type}{'machines'} = join(',',@okmachines);
+ }
+ }
+ my %serverstatushash = (
+ serverstatuses => \%newserverstatus,
+ );
+ my %changes;
+ foreach my $type (@pages) {
+ foreach my $setting ('namedusers','machines') {
+ my (@current,@new);
+ if (ref($currserverstatus{$type}) eq 'HASH') {
+ if ($currserverstatus{$type}{$setting} ne '') {
+ @current = split(/,/,$currserverstatus{$type}{$setting});
+ }
+ }
+ if ($newserverstatus{$type}{$setting} ne '') {
+ @new = split(/,/,$newserverstatus{$type}{$setting});
+ }
+ if (@current > 0) {
+ if (@new > 0) {
+ foreach my $item (@current) {
+ if (!grep(/^\Q$item\E$/,@new)) {
+ $changes{$type}{$setting} = 1;
+ last;
+ }
+ }
+ foreach my $item (@new) {
+ if (!grep(/^\Q$item\E$/,@current)) {
+ $changes{$type}{$setting} = 1;
+ last;
+ }
+ }
+ } else {
+ $changes{$type}{$setting} = 1;
+ }
+ } elsif (@new > 0) {
+ $changes{$type}{$setting} = 1;
+ }
+ }
+ }
+ if (keys(%changes) > 0) {
+ my $titles= &LONCAPA::lonauthcgi::serverstatus_titles();
+ my $putresult = &Apache::lonnet::put_dom('configuration',
+ \%serverstatushash,$dom);
+ if ($putresult eq 'ok') {
+ $resulttext .= &mt('Changes made:').'';
+ foreach my $type (@pages) {
+ if (ref($changes{$type}) eq 'HASH') {
+ $resulttext .= '- '.$titles->{$type}.'
';
+ if ($changes{$type}{'namedusers'}) {
+ if ($newserverstatus{$type}{'namedusers'} eq '') {
+ $resulttext .= '- '.&mt("Access terminated for all specific (named) users").'
'."\n";
+ } else {
+ $resulttext .= '- '.&mt("Access available for the following specified users: ").$newserverstatus{$type}{'namedusers'}.'
'."\n";
+ }
+ }
+ if ($changes{$type}{'machines'}) {
+ if ($newserverstatus{$type}{'machines'} eq '') {
+ $resulttext .= '- '.&mt("Access terminated for all specific IP addresses").'
'."\n";
+ } else {
+ $resulttext .= '- '.&mt("Access available for the following specified IP addresses: ").$newserverstatus{$type}{'machines'}.'
'."\n";
+ }
+
+ }
+ $resulttext .= '
';
+ }
+ }
+ $resulttext .= '
';
+ } else {
+ $resulttext = ''.
+ &mt('An error occurred saving access settings for server status pages: [_1].',$putresult).'';
+
+ }
+ } else {
+ $resulttext = &mt('No changes made to access to server status pages');
+ }
+ return $resulttext;
+}
sub recurse_check {
my ($chkcats,$categories,$depth,$name) = @_;