--- loncom/interface/domainprefs.pm 2009/08/11 23:24:29 1.102
+++ loncom/interface/domainprefs.pm 2009/10/08 22:37:33 1.113
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.102 2009/08/11 23:24:29 raeburn Exp $
+# $Id: domainprefs.pm,v 1.113 2009/10/08 22:37:33 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -105,7 +105,7 @@ affiliate type (and also default, and _L
(official, unofficial and community). In each case the radio buttons allow the
selection of one of four values:
-0, approve, validate, autolimit=N (where N is blank, or a positive integer).
+0, approval, validate, autolimit=N (where N is blank, or a positive integer).
which have the following effects:
0
@@ -116,7 +116,7 @@ which have the following effects:
=back
-approve
+approval
=over
@@ -220,12 +220,13 @@ sub handler {
{col1 => 'Administrator Settings',
col2 => '',}],
},
- 'login' =>
+ 'login' =>
{ text => 'Log-in page options',
help => 'Domain_Configuration_Login_Page',
header => [{col1 => 'Item',
col2 => '',}],
},
+
'defaults' =>
{ text => 'Default authentication/language/timezone',
help => 'Domain_Configuration_LangTZAuth',
@@ -319,6 +320,16 @@ sub handler {
}],
},
);
+ my %servers = &Apache::lonnet::get_servers($dom);
+ if (keys(%servers) > 1) {
+ $prefs{'login'} = { text => 'Log-in page options',
+ help => 'Domain_Configuration_Login_Page',
+ header => [{col1 => 'Log-in Service',
+ col2 => 'Server Setting',},
+ {col1 => 'Log-in Page Items',
+ col2 => ''}],
+ };
+ }
my @roles = ('student','coordinator','author','admin');
my @actions = &Apache::loncommon::get_env_multiple('form.actions');
&Apache::lonhtmlcommon::add_breadcrumb
@@ -423,9 +434,11 @@ sub print_config_box {
&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') || ($action eq 'requestcourses')) {
+ my $numheaders = 1;
+ if (ref($item->{'header'}) eq 'ARRAY') {
+ $numheaders = scalar(@{$item->{'header'}});
+ }
+ if ($numheaders > 1) {
my $colspan = '';
if (($action eq 'rolecolors') || ($action eq 'coursecategories')) {
$colspan = ' colspan="2"';
@@ -447,6 +460,9 @@ sub print_config_box {
$output .= &print_usermodification('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'coursecategories') {
$output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal);
+ } elsif ($action eq 'login') {
+ $output .= &print_login('top',$dom,$confname,$phase,$settings,\$rowtotal);
+ $colspan = ' colspan="2"';
} elsif ($action eq 'requestcourses') {
$output .= &print_quotas($dom,$settings,\$rowtotal,$action);
} else {
@@ -496,6 +512,8 @@ sub print_config_box {
$rowtotal ++;
} elsif ($action eq 'coursecategories') {
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);
+ } elsif ($action eq 'login') {
+ $output .= &print_login('bottom',$dom,$confname,$phase,$settings,\$rowtotal);
} elsif ($action eq 'requestcourses') {
$output .= &print_courserequestmail($dom,$settings,\$rowtotal);
} else {
@@ -566,7 +584,8 @@ sub print_config_box {
$output .= '';
$rowtotal ++;
if ($action eq 'login') {
- $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);
+ $output .= &print_login('bottom',$dom,$confname,$phase,$settings,
+ \$rowtotal);
} elsif ($action eq 'quotas') {
$output .= &print_quotas($dom,$settings,\$rowtotal,$action);
} elsif ($action eq 'autoenroll') {
@@ -592,8 +611,48 @@ sub print_config_box {
}
sub print_login {
- my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
+ my ($position,$dom,$confname,$phase,$settings,$rowtotal) = @_;
+ my ($css_class,$datatable);
my %choices = &login_choices();
+ my $itemcount = 1;
+
+ if ($position eq 'top') {
+ my %servers = &Apache::lonnet::get_servers($dom);
+ my $choice = $choices{'disallowlogin'};
+ $css_class = ' class="LC_odd_row"';
+ $datatable .= '
'.$choices{'disallowlogin'}.' | '.
+ ''.$choices{'hostid'}.' | '.
+ ''.$choices{'serverurl'}.' | '."\n";
+ my %disallowed;
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'loginvia'}) eq 'HASH') {
+ %disallowed = %{$settings->{'loginvia'}};
+ }
+ }
+ foreach my $lonhost (sort(keys(%servers))) {
+ my $direct = 'selected="selected"';
+ if ($disallowed{$lonhost} eq '') {
+ $direct = '';
+ }
+ $datatable .= ''.$lonhost.' | '.
+ ' | ';
+ }
+ $datatable .= '
|
';
+ return $datatable;
+ }
+
my %defaultchecked = (
'coursecatalog' => 'on',
'adminmail' => 'off',
@@ -729,23 +788,27 @@ sub login_choices {
my %choices =
&Apache::lonlocal::texthash (
coursecatalog => 'Display Course Catalog link?',
- adminmail => "Display Administrator's E-mail Address?",
- newuser => "Link to create a user account",
- img => "Header",
- logo => "Main Logo",
- domlogo => "Domain Logo",
- login => "Log-in Header",
- textcol => "Text color",
- bgcol => "Box color",
- bgs => "Background colors",
- links => "Link colors",
- font => "Font color",
- pgbg => "Header",
- mainbg => "Page",
- sidebg => "Login box",
- link => "Link",
- alink => "Active link",
- vlink => "Visited link",
+ adminmail => "Display Administrator's E-mail Address?",
+ disallowlogin => "Login page requests redirected",
+ hostid => "Server",
+ serverurl => "Redirect to log-in via:",
+ directlogin => "No redirect",
+ newuser => "Link to create a user account",
+ img => "Header",
+ logo => "Main Logo",
+ domlogo => "Domain Logo",
+ login => "Log-in Header",
+ textcol => "Text color",
+ bgcol => "Box color",
+ bgs => "Background colors",
+ links => "Link colors",
+ font => "Font color",
+ pgbg => "Header",
+ mainbg => "Page",
+ sidebg => "Login box",
+ link => "Link",
+ alink => "Active link",
+ vlink => "Visited link",
);
return %choices;
}
@@ -849,20 +912,22 @@ sub display_color_options {
' '.
'';
- $datatable .= ''.
- ''.$choices->{'fontmenu'}.' | ';
- if (!$is_custom->{'fontmenu'}) {
- $datatable .= ''.&mt('Default in use:').' '.$defaults->{'fontmenu'}.' | ';
- } else {
- $datatable .= ' | ';
+ unless ($role eq 'login') {
+ $datatable .= '
'.
+ ''.$choices->{'fontmenu'}.' | ';
+ if (!$is_custom->{'fontmenu'}) {
+ $datatable .= ''.&mt('Default in use:').' '.$defaults->{'fontmenu'}.' | ';
+ } else {
+ $datatable .= ' | ';
+ }
+ $fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'});
+ $datatable .= ''.
+ ' '.$fontlink.
+ ' '.
+ ' |
';
}
- $fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'});
- $datatable .= ''.
- ' '.$fontlink.
- ' '.
- ' | ';
my $switchserver = &check_switchserver($dom,$confname);
foreach my $img (@{$images}) {
$itemcount ++;
@@ -1149,7 +1214,7 @@ sub print_quotas {
my ($css_class,%titles);
if ($context eq 'requestcourses') {
@usertools = ('official','unofficial','community');
- @options =('norequest','approve','autolimit','validate');
+ @options =('norequest','approval','validate','autolimit');
%validations = &Apache::lonnet::auto_courserequest_checks($dom);
%titles = &courserequest_titles();
} else {
@@ -1222,9 +1287,12 @@ sub print_quotas {
if ($option eq 'autolimit') {
$cell{$item} .= '';
+ 'value="'.$currlimit.'" />';
}
$cell{$item} .= ' ';
+ if ($option eq 'autolimit') {
+ $cell{$item} .= $titles{'unlimited'}
+ }
}
} else {
my $checked = 'checked="checked" ';
@@ -1246,7 +1314,7 @@ sub print_quotas {
if ($context eq 'requestcourses') {
$datatable .= '';
foreach my $item (@usertools) {
- $datatable .= ''.$cell{$item}.' | ';
+ $datatable .= ''.$cell{$item}.' | ';
}
$datatable .= '
';
}
@@ -1328,6 +1396,9 @@ sub print_quotas {
'value="'.$currlimit.'" />';
}
$defcell{$item} .= ' ';
+ if ($option eq 'autolimit') {
+ $defcell{$item} .= $titles{'unlimited'}
+ }
}
} else {
my $checked = 'checked="checked" ';
@@ -1349,7 +1420,7 @@ sub print_quotas {
if ($context eq 'requestcourses') {
$datatable .= '';
foreach my $item (@usertools) {
- $datatable .= ''.$defcell{$item}.' | ';
+ $datatable .= ''.$defcell{$item}.' | ';
}
$datatable .= '
';
}
@@ -1363,14 +1434,17 @@ sub print_quotas {
$typecount ++;
$css_class = $typecount%2?' class="LC_odd_row"':'';
$datatable .= ''.
- ''.&mt('LON-CAPA Advanced Users').
- ' ('.
- &mt('overrides affiliation').') | '.
- '';
+ ' | '.&mt('LON-CAPA Advanced Users').' ';
if ($context eq 'requestcourses') {
- $datatable .= '';
+ $datatable .= &mt('(overrides affiliation, if set)').
+ ''.
+ ''.
+ '';
}
@@ -1452,7 +1534,7 @@ sub print_quotas {
sub print_courserequestmail {
my ($dom,$settings,$rowtotal) = @_;
- my ($now,$datatable,%dompersonnel,@domcoord,@currapprove,$rows);
+ my ($now,$datatable,%dompersonnel,@domcoord,@currapproval,$rows);
$now = time;
$rows = 0;
%dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now);
@@ -1467,12 +1549,12 @@ sub print_courserequestmail {
if (ref($settings) eq 'HASH') {
if (ref($settings->{'notify'}) eq 'HASH') {
if ($settings->{'notify'}{'approval'} ne '') {
- @currapprove = split(',',$settings->{'notify'}{'approval'});
+ @currapproval = split(',',$settings->{'notify'}{'approval'});
}
}
}
- if (@currapprove) {
- foreach my $dc (@currapprove) {
+ if (@currapproval) {
+ foreach my $dc (@currapproval) {
unless (grep(/^\Q$dc\E$/,@domcoord)) {
push(@domcoord,$dc);
}
@@ -1498,7 +1580,7 @@ sub print_courserequestmail {
$rows ++;
}
my $check = ' ';
- if (grep(/^\Q$domcoord[$i]\E$/,@currapprove)) {
+ if (grep(/^\Q$domcoord[$i]\E$/,@currapproval)) {
$check = ' checked="checked" ';
}
my ($uname,$udom) = split(':',$domcoord[$i]);
@@ -1869,16 +1951,17 @@ sub courserequest_titles {
unofficial => 'Unofficial',
community => 'Communities',
norequest => 'Not allowed',
- approve => 'Approval by Dom. Coord.',
+ approval => 'Approval by Dom. Coord.',
validate => 'With validation',
autolimit => 'Numerical limit',
+ unlimited => '(blank for unlimited)',
);
return %titles;
}
sub courserequest_conditions {
my %conditions = &Apache::lonlocal::texthash (
- approve => '(Processing of request subject to approval by Domain Coordinator).',
+ approval => '(Processing of request subject to approval by Domain Coordinator).',
validate => '(Processing of request subject to instittutional validation).',
);
return %conditions;
@@ -2638,7 +2721,7 @@ sub print_serverstatuses {
sub serverstatus_pages {
return ('userstatus','lonstatus','loncron','server-status','codeversions',
'clusterstatus','metadata_keywords','metadata_harvest',
- 'takeoffline','takeonline','showenv');
+ 'takeoffline','takeonline','showenv','toggledebug');
}
sub coursecategories_javascript {
@@ -2665,6 +2748,7 @@ sub coursecategories_javascript {
}
$output = <<"ENDSCRIPT";
ENDSCRIPT
@@ -3054,6 +3139,14 @@ sub modify_login {
newuser => 'Link for visitors to create a user account',
loginheader => 'Log-in box header');
my @offon = ('off','on');
+ my %curr_loginvia;
+ if (ref($domconfig{login}) eq 'HASH') {
+ if (ref($domconfig{login}{loginvia}) eq 'HASH') {
+ foreach my $lonhost (keys(%{$domconfig{login}{loginvia}})) {
+ $curr_loginvia{$lonhost} = $domconfig{login}{loginvia}{$lonhost};
+ }
+ }
+ }
my %loginhash;
($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'],
\%domconfig,\%loginhash);
@@ -3066,6 +3159,24 @@ sub modify_login {
$colchgtext = &display_colorchgs($dom,\%colchanges,['login'],
\%loginhash);
}
+
+ my %servers = &Apache::lonnet::get_servers($dom);
+ if (keys(%servers) > 1) {
+ foreach my $lonhost (keys(%servers)) {
+ next if ($env{'form.'.$lonhost.'_serverurl'} eq $curr_loginvia{$lonhost});
+ next if ($env{'form.'.$lonhost.'_serverurl'} eq $lonhost);
+ if ($curr_loginvia{$lonhost} ne '') {
+ $loginhash{login}{loginvia}{$lonhost} = $env{'form.'.$lonhost.'_serverurl'};
+ $changes{'loginvia'}{$lonhost} = 1;
+ } else {
+ if (defined($servers{$env{'form.'.$lonhost.'_serverurl'}})) {
+ $loginhash{login}{loginvia}{$lonhost} = $env{'form.'.$lonhost.'_serverurl'};
+ $changes{'loginvia'}{$lonhost} = 1;
+ }
+ }
+ }
+ }
+
my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,
$dom);
if ($putresult eq 'ok') {
@@ -3112,6 +3223,18 @@ sub modify_login {
foreach my $item (sort(keys(%changes))) {
if ($item eq 'loginheader') {
$resulttext .= ''.&mt("$title{$item} set to $env{'form.loginheader'}").'';
+ } elsif ($item eq 'loginvia') {
+ if (ref($changes{$item}) eq 'HASH') {
+ $resulttext .= ''.&mt('Log-in page availability:').'';
+ foreach my $lonhost (sort(keys(%{$changes{$item}}))) {
+ if ($servers{$env{'form.'.$lonhost.'_serverurl'}} ne '') {
+ $resulttext .= '- '.&mt('Server: [_1] log-in page now redirects to [_2]',$lonhost,$servers{$env{'form.'.$lonhost.'_serverurl'}}).'
';
+ } else {
+ $resulttext .= '- '.&mt('Server: [_1] now has standard log-in page.',$lonhost).'
';
+ }
+ }
+ $resulttext .= ' ';
+ }
} else {
$resulttext .= ''.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'';
}
@@ -3197,6 +3320,7 @@ sub modify_colors {
@logintext = ('textcol','bgcol');
} else {
%choices = &color_font_choices();
+ $confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'};
}
if ($role eq 'login') {
@images = ('img','logo','domlogo','login');
@@ -3206,7 +3330,6 @@ sub modify_colors {
@bgs = ('pgbg','tabbg','sidebg');
}
$confhash->{$role}{'font'} = $env{'form.'.$role.'_font'};
- $confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'};
foreach my $item (@bgs,@links,@logintext) {
$confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item};
}
@@ -3320,13 +3443,15 @@ sub modify_colors {
$changes{$role}{'font'} = 1;
}
}
- if ($domconfig->{$role}{'fontmenu'} ne '') {
- if ($confhash->{$role}{'fontmenu'} ne $domconfig->{$role}{'fontmenu'}) {
- $changes{$role}{'fontmenu'} = 1;
- }
- } else {
- if ($confhash->{$role}{'fontmenu'}) {
- $changes{$role}{'fontmenu'} = 1;
+ if ($role ne 'login') {
+ if ($domconfig->{$role}{'fontmenu'} ne '') {
+ if ($confhash->{$role}{'fontmenu'} ne $domconfig->{$role}{'fontmenu'}) {
+ $changes{$role}{'fontmenu'} = 1;
+ }
+ } else {
+ if ($confhash->{$role}{'fontmenu'}) {
+ $changes{$role}{'fontmenu'} = 1;
+ }
}
}
foreach my $item (@bgs) {
@@ -3769,7 +3894,7 @@ sub modify_quotas {
}
if ($context eq 'requestcourses') {
@usertools = ('official','unofficial','community');
- @options =('norequest','approve','autolimit','validate');
+ @options =('norequest','approval','validate','autolimit');
%validations = &Apache::lonnet::auto_courserequest_checks($dom);
%titles = &courserequest_titles();
$toolregexp = join('|',@usertools);
@@ -3824,7 +3949,12 @@ sub modify_quotas {
}
foreach my $item (@usertools) {
foreach my $type (@{$types},'default','_LC_adv') {
+ my $unset;
if ($context eq 'requestcourses') {
+ $unset = '0';
+ if ($type eq '_LC_adv') {
+ $unset = '';
+ }
if ($confhash{$item}{$type} eq 'autolimit') {
$confhash{$item}{$type} .= '=';
unless ($limithash{$item}{$type} =~ /\D/) {
@@ -3845,7 +3975,7 @@ sub modify_quotas {
}
} else {
if ($context eq 'requestcourses') {
- if ($confhash{$item}{$type} ne 'norequest') {
+ if ($confhash{$item}{$type} ne $unset) {
$changes{$item}{$type} = 1;
}
} else {
@@ -3856,7 +3986,7 @@ sub modify_quotas {
}
} else {
if ($context eq 'requestcourses') {
- if ($confhash{$item}{$type} eq 'norequest') {
+ if ($confhash{$item}{$type} ne $unset) {
$changes{$item}{$type} = 1;
}
} else {
@@ -3948,8 +4078,8 @@ sub modify_quotas {
$env{'user.domain'},
$item,'reload',$context);
if ($context eq 'requestcourses') {
- if ($env{'environment.crsrequest.'.$item} ne $newacc) {
- $newenv{'environment.crsrequest.'.$item} = $newacc;
+ if ($env{'environment.canrequest.'.$item} ne $newacc) {
+ $newenv{'environment.canrequest.'.$item} = $newacc;
}
} else {
if ($env{'environment.availabletools.'.$item} ne $newacc) {
@@ -3982,7 +4112,15 @@ sub modify_quotas {
$resulttext .= ''.&mt('Set to be available to [_1]',$typetitle).'';
}
} else {
- $resulttext .= ''.&mt('Set to be unavailable to [_1]',$typetitle).'';
+ if ($type eq '_LC_adv') {
+ if ($confhash{$item}{$type} eq '0') {
+ $resulttext .= ''.&mt('Set to be unavailable to [_1]',$typetitle).'';
+ } else {
+ $resulttext .= ''.&mt('No override set for [_1]',$typetitle).'';
+ }
+ } else {
+ $resulttext .= ''.&mt('Set to be unavailable to [_1]',$typetitle).'';
+ }
}
}
}
@@ -4530,6 +4668,8 @@ sub modify_usercreation {
if (@{$types} > 0) {
@{$cancreate{'statustocreate'}} =
&Apache::loncommon::get_env_multiple('form.statustocreate');
+ } else {
+ @{$cancreate{'statustocreate'}} = ();
}
push(@contexts,'statustocreate');
}
@@ -4538,9 +4678,11 @@ sub modify_usercreation {
if (($item eq 'selfcreate') || ($item eq 'statustocreate')) {
if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) {
- if (!grep(/^$curr$/,@{$cancreate{$item}})) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($cancreate{$item}) eq 'ARRAY') {
+ if (!grep(/^$curr$/,@{$cancreate{$item}})) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
}
}
@@ -5009,8 +5151,10 @@ sub modify_defaults {
if ($newvalues{$item} ne '') {
if ($newvalues{$item} =~ /^(\w+)/) {
my $langcode = $1;
- if (code2language($langcode) eq '') {
- push(@errors,$item);
+ if ($langcode ne 'x_chef') {
+ if (code2language($langcode) eq '') {
+ push(@errors,$item);
+ }
}
} else {
push(@errors,$item);
|
|