--- loncom/interface/domainprefs.pm 2012/08/25 04:34:44 1.165
+++ loncom/interface/domainprefs.pm 2012/08/27 06:28:05 1.169
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.165 2012/08/25 04:34:44 raeburn Exp $
+# $Id: domainprefs.pm,v 1.169 2012/08/27 06:28:05 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -238,10 +238,11 @@ sub handler {
'login' =>
{ text => 'Log-in page options',
help => 'Domain_Configuration_Login_Page',
- header => [{col1 => 'Item',
- col2 => '',}],
+ header => [{col1 => 'Log-in Page Items',
+ col2 => '',},
+ {col1 => 'Log-in Help',
+ col2 => 'Value'}],
},
-
'defaults' =>
{ text => 'Default authentication/language/timezone/portal',
help => 'Domain_Configuration_LangTZAuth',
@@ -353,10 +354,8 @@ sub handler {
'helpsettings' =>
{text => 'Help page settings',
help => 'Domain_Configuration_Help_Settings',
- header => [{col1 => 'Authenticated Help Settings',
- col2 => ''},
- {col1 => 'Unauthenticated Help Settings',
- col2 => ''}],
+ header => [{col1 => 'Help Settings (logged-in users)',
+ col2 => 'Value'}],
},
'coursedefaults' =>
{text => 'Course/Community defaults',
@@ -398,7 +397,9 @@ sub handler {
header => [{col1 => 'Log-in Service',
col2 => 'Server Setting',},
{col1 => 'Log-in Page Items',
- col2 => ''}],
+ col2 => ''},
+ {col1 => 'Log-in Help',
+ col2 => 'Value'}],
};
}
my @roles = ('student','coordinator','author','admin');
@@ -533,7 +534,8 @@ sub print_config_box {
if ($numheaders > 1) {
my $colspan = '';
my $rightcolspan = '';
- if (($action eq 'rolecolors') || ($action eq 'coursecategories') || ($action eq 'helpsettings')) {
+ if (($action eq 'rolecolors') || ($action eq 'coursecategories') ||
+ (($action eq 'login') && ($numheaders < 3))) {
$colspan = ' colspan="2"';
}
if ($action eq 'usersessions') {
@@ -557,14 +559,16 @@ sub print_config_box {
} 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"';
+ if ($numheaders == 3) {
+ $colspan = ' colspan="2"';
+ $output .= &print_login('service',$dom,$confname,$phase,$settings,\$rowtotal);
+ } else {
+ $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal);
+ }
} elsif ($action eq 'requestcourses') {
$output .= &print_quotas($dom,$settings,\$rowtotal,$action);
} elsif ($action eq 'requestauthor') {
$output .= &print_quotas($dom,$settings,\$rowtotal,$action);
- } elsif ($action eq 'helpsettings') {
- $output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal);
} elsif ($action eq 'usersessions') {
$output .= &print_usersessions('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'rolecolors') {
@@ -627,13 +631,26 @@ sub print_config_box {
} 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);
+ if ($numheaders == 3) {
+ $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal).'
+
+
+
+
+
+
+
+ '.&mt($item->{'header'}->[2]->{'col1'}).' |
+ '.&mt($item->{'header'}->[2]->{'col2'}).' | '.
+ &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal);
+ $rowtotal ++;
+ } else {
+ $output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal);
+ }
} elsif ($action eq 'requestcourses') {
$output .= &print_requestmail($dom,$action,$settings,\$rowtotal);
} elsif ($action eq 'requestauthor') {
$output .= &print_requestmail($dom,$action,$settings,\$rowtotal);
- } elsif ($action eq 'helpsettings') {
- $output .= &print_helpsettings('bottom',$dom,$confname,$settings,\$rowtotal);
} elsif ($action eq 'usersessions') {
$output .= &print_usersessions('middle',$dom,$settings,\$rowtotal).'
@@ -725,10 +742,7 @@ sub print_config_box {
}
$output .= ' |
';
$rowtotal ++;
- if ($action eq 'login') {
- $output .= &print_login('bottom',$dom,$confname,$phase,$settings,
- \$rowtotal);
- } elsif ($action eq 'quotas') {
+ if ($action eq 'quotas') {
$output .= &print_quotas($dom,$settings,\$rowtotal,$action);
} elsif ($action eq 'autoenroll') {
$output .= &print_autoenroll($dom,$settings,\$rowtotal);
@@ -745,7 +759,7 @@ sub print_config_box {
} elsif ($action eq 'serverstatuses') {
$output .= &print_serverstatuses($dom,$settings,\$rowtotal);
} elsif ($action eq 'helpsettings') {
- $output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal);
+ $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal);
} elsif ($action eq 'loadbalancing') {
$output .= &print_loadbalancing($dom,$settings,\$rowtotal);
}
@@ -759,11 +773,11 @@ sub print_config_box {
}
sub print_login {
- my ($position,$dom,$confname,$phase,$settings,$rowtotal) = @_;
+ my ($caller,$dom,$confname,$phase,$settings,$rowtotal) = @_;
my ($css_class,$datatable);
my %choices = &login_choices();
- if ($position eq 'top') {
+ if ($caller eq 'service') {
my %servers = &Apache::lonnet::internet_dom_servers($dom);
my $choice = $choices{'disallowlogin'};
$css_class = ' class="LC_odd_row"';
@@ -830,131 +844,220 @@ sub print_login {
}
$datatable .= '';
return $datatable;
- }
-
- my %defaultchecked = (
- 'coursecatalog' => 'on',
- 'adminmail' => 'off',
- 'newuser' => 'off',
- );
- my @toggles = ('coursecatalog','adminmail','newuser');
- my (%checkedon,%checkedoff);
- foreach my $item (@toggles) {
- if ($defaultchecked{$item} eq 'on') {
- $checkedon{$item} = ' checked="checked" ';
- $checkedoff{$item} = ' ';
- } elsif ($defaultchecked{$item} eq 'off') {
- $checkedoff{$item} = ' checked="checked" ';
- $checkedon{$item} = ' ';
- }
- }
- my @images = ('img','logo','domlogo','login');
- my @logintext = ('textcol','bgcol');
- my @bgs = ('pgbg','mainbg','sidebg');
- my @links = ('link','alink','vlink');
- my %designhash = &Apache::loncommon::get_domainconf($dom);
- my %defaultdesign = %Apache::loncommon::defaultdesign;
- my (%is_custom,%designs);
- my %defaults = (
- font => $defaultdesign{'login.font'},
- );
- foreach my $item (@images) {
- $defaults{$item} = $defaultdesign{'login.'.$item};
- $defaults{'showlogo'}{$item} = 1;
- }
- foreach my $item (@bgs) {
- $defaults{'bgs'}{$item} = $defaultdesign{'login.'.$item};
- }
- foreach my $item (@logintext) {
- $defaults{'logintext'}{$item} = $defaultdesign{'login.'.$item};
- }
- foreach my $item (@links) {
- $defaults{'links'}{$item} = $defaultdesign{'login.'.$item};
- }
- if (ref($settings) eq 'HASH') {
+ } elsif ($caller eq 'page') {
+ my %defaultchecked = (
+ 'coursecatalog' => 'on',
+ 'adminmail' => 'off',
+ 'newuser' => 'off',
+ );
+ my @toggles = ('coursecatalog','adminmail','newuser');
+ my (%checkedon,%checkedoff);
foreach my $item (@toggles) {
- if ($settings->{$item} eq '1') {
- $checkedon{$item} = ' checked="checked" ';
+ if ($defaultchecked{$item} eq 'on') {
+ $checkedon{$item} = ' checked="checked" ';
$checkedoff{$item} = ' ';
- } elsif ($settings->{$item} eq '0') {
- $checkedoff{$item} = ' checked="checked" ';
+ } elsif ($defaultchecked{$item} eq 'off') {
+ $checkedoff{$item} = ' checked="checked" ';
$checkedon{$item} = ' ';
}
}
+ my @images = ('img','logo','domlogo','login');
+ my @logintext = ('textcol','bgcol');
+ my @bgs = ('pgbg','mainbg','sidebg');
+ my @links = ('link','alink','vlink');
+ my %designhash = &Apache::loncommon::get_domainconf($dom);
+ my %defaultdesign = %Apache::loncommon::defaultdesign;
+ my (%is_custom,%designs);
+ my %defaults = (
+ font => $defaultdesign{'login.font'},
+ );
foreach my $item (@images) {
- if (defined($settings->{$item})) {
- $designs{$item} = $settings->{$item};
- $is_custom{$item} = 1;
- }
- if (defined($settings->{'showlogo'}{$item})) {
- $designs{'showlogo'}{$item} = $settings->{'showlogo'}{$item};
- }
+ $defaults{$item} = $defaultdesign{'login.'.$item};
+ $defaults{'showlogo'}{$item} = 1;
+ }
+ foreach my $item (@bgs) {
+ $defaults{'bgs'}{$item} = $defaultdesign{'login.'.$item};
}
foreach my $item (@logintext) {
- if ($settings->{$item} ne '') {
- $designs{'logintext'}{$item} = $settings->{$item};
- $is_custom{$item} = 1;
- }
+ $defaults{'logintext'}{$item} = $defaultdesign{'login.'.$item};
}
- if ($settings->{'font'} ne '') {
- $designs{'font'} = $settings->{'font'};
- $is_custom{'font'} = 1;
+ foreach my $item (@links) {
+ $defaults{'links'}{$item} = $defaultdesign{'login.'.$item};
}
- foreach my $item (@bgs) {
- if ($settings->{$item} ne '') {
- $designs{'bgs'}{$item} = $settings->{$item};
- $is_custom{$item} = 1;
+ if (ref($settings) eq 'HASH') {
+ foreach my $item (@toggles) {
+ if ($settings->{$item} eq '1') {
+ $checkedon{$item} = ' checked="checked" ';
+ $checkedoff{$item} = ' ';
+ } elsif ($settings->{$item} eq '0') {
+ $checkedoff{$item} = ' checked="checked" ';
+ $checkedon{$item} = ' ';
+ }
}
- }
- foreach my $item (@links) {
- if ($settings->{$item} ne '') {
- $designs{'links'}{$item} = $settings->{$item};
- $is_custom{$item} = 1;
+ foreach my $item (@images) {
+ 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 '') {
+ $designs{'logintext'}{$item} = $settings->{$item};
+ $is_custom{$item} = 1;
+ }
+ }
+ if ($settings->{'font'} ne '') {
+ $designs{'font'} = $settings->{'font'};
+ $is_custom{'font'} = 1;
+ }
+ foreach my $item (@bgs) {
+ if ($settings->{$item} ne '') {
+ $designs{'bgs'}{$item} = $settings->{$item};
+ $is_custom{$item} = 1;
+ }
+ }
+ foreach my $item (@links) {
+ if ($settings->{$item} ne '') {
+ $designs{'links'}{$item} = $settings->{$item};
+ $is_custom{$item} = 1;
+ }
+ }
+ } else {
+ if ($designhash{$dom.'.login.font'} ne '') {
+ $designs{'font'} = $designhash{$dom.'.login.font'};
+ $is_custom{'font'} = 1;
+ }
+ foreach my $item (@images) {
+ if ($designhash{$dom.'.login.'.$item} ne '') {
+ $designs{$item} = $designhash{$dom.'.login.'.$item};
+ $is_custom{$item} = 1;
+ }
+ }
+ foreach my $item (@bgs) {
+ if ($designhash{$dom.'.login.'.$item} ne '') {
+ $designs{'bgs'}{$item} = $designhash{$dom.'.login.'.$item};
+ $is_custom{$item} = 1;
+ }
+ }
+ foreach my $item (@links) {
+ if ($designhash{$dom.'.login.'.$item} ne '') {
+ $designs{'links'}{$item} = $designhash{$dom.'.login.'.$item};
+ $is_custom{$item} = 1;
+ }
}
}
- } else {
- if ($designhash{$dom.'.login.font'} ne '') {
- $designs{'font'} = $designhash{$dom.'.login.font'};
- $is_custom{'font'} = 1;
+ my %alt_text = &Apache::lonlocal::texthash ( img => 'Log-in banner',
+ logo => 'Institution Logo',
+ domlogo => 'Domain Logo',
+ login => 'Login box');
+ my $itemcount = 1;
+ foreach my $item (@toggles) {
+ $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ $datatable .=
+ ''.$choices{$item}.
+ ' | '.
+ ' | '.
+ '
';
+ $itemcount ++;
}
- foreach my $item (@images) {
- if ($designhash{$dom.'.login.'.$item} ne '') {
- $designs{$item} = $designhash{$dom.'.login.'.$item};
- $is_custom{$item} = 1;
+ $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal,\@logintext);
+ $datatable .= '';
+ } elsif ($caller eq 'help') {
+ my ($defaulturl,$defaulttype,%url,%type,%lt,%langchoices);
+ my $switchserver = &check_switchserver($dom,$confname);
+ my $itemcount = 1;
+ $defaulturl = '/adm/loginproblems.html';
+ $defaulttype = 'default';
+ %lt = &Apache::lonlocal::texthash (
+ del => 'Delete?',
+ rep => 'Replace:',
+ upl => 'Upload:',
+ default => 'Default',
+ custom => 'Custom',
+ );
+ %langchoices = &Apache::lonlocal::texthash(&get_languages_hash());
+ my @currlangs;
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'helpurl'}) eq 'HASH') {
+ foreach my $key (sort(keys(%{$settings->{'helpurl'}}))) {
+ next if ($settings->{'helpurl'}{$key} eq '');
+ $url{$key} = $settings->{'helpurl'}{$key}.'?inhibitmenu=yes';
+ $type{$key} = 'custom';
+ unless ($key eq 'nolang') {
+ push(@currlangs,$key);
+ }
+ }
+ } elsif ($settings->{'helpurl'} ne '') {
+ $type{'nolang'} = 'custom';
+ $url{'nolang'} = $settings->{'helpurl'}.'?inhibitmenu=yes';
}
}
- foreach my $item (@bgs) {
- if ($designhash{$dom.'.login.'.$item} ne '') {
- $designs{'bgs'}{$item} = $designhash{$dom.'.login.'.$item};
- $is_custom{$item} = 1;
+ foreach my $lang ('nolang',sort(@currlangs)) {
+ $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
+ $datatable .= '';
+ if ($url{$lang} eq '') {
+ $url{$lang} = $defaulturl;
+ }
+ if ($type{$lang} eq '') {
+ $type{$lang} = $defaulttype;
+ }
+ $datatable .= '';
+ if ($lang eq 'nolang') {
+ $datatable .= &mt('Log-in help page if no specific language file: [_1]',
+ &Apache::loncommon::modal_link($url{$lang},$lt{$type{$lang}},600,500));
+ } else {
+ $datatable .= &mt('Log-in help page for language: [_1] is [_2]',
+ $langchoices{$lang},
+ &Apache::loncommon::modal_link($url{$lang},$lt{$type{$lang}},600,500));
+ }
+ $datatable .= ' | '."\n".
+ '';
+ if ($type{$lang} eq 'custom') {
+ $datatable .= ' '.$lt{'rep'}.'';
+ } else {
+ $datatable .= $lt{'upl'};
+ }
+ $datatable .=' ';
+ if ($switchserver) {
+ $datatable .= &mt('Upload to library server: [_1]',$switchserver);
+ } else {
+ $datatable .= '';
}
+ $datatable .= ' |
';
+ $itemcount ++;
}
- foreach my $item (@links) {
- if ($designhash{$dom.'.login.'.$item} ne '') {
- $designs{'links'}{$item} = $designhash{$dom.'.login.'.$item};
- $is_custom{$item} = 1;
+ my @addlangs;
+ foreach my $lang (sort(keys(%langchoices))) {
+ next if ((grep(/^\Q$lang\E$/,@currlangs)) || ($lang eq 'x_chef'));
+ push(@addlangs,$lang);
+ }
+ if (@addlangs > 0) {
+ my %toadd;
+ map { $toadd{$_} = $langchoices{$_} ; } @addlangs;
+ $toadd{''} = &mt('Select');
+ $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
+ $datatable .= ''.
+ &mt('Add log-in help page for a specific language:').' '.
+ &Apache::loncommon::select_form('','loginhelpurl_add_lang',\%toadd).
+ ' | '.$lt{'upl'}.' ';
+ if ($switchserver) {
+ $datatable .= &mt('Upload to library server: [_1]',$switchserver);
+ } else {
+ $datatable .= '';
}
+ $datatable .= ' |
';
+ $itemcount ++;
}
+ $datatable .= &captcha_choice('login',$settings,$itemcount);
}
- my %alt_text = &Apache::lonlocal::texthash ( img => 'Log-in banner',
- logo => 'Institution Logo',
- domlogo => 'Domain Logo',
- login => 'Login box');
- my $itemcount = 1;
- foreach my $item (@toggles) {
- $css_class = $itemcount%2?' class="LC_odd_row"':'';
- $datatable .=
- ''.$choices{$item}.
- ' | '.
- ' | '.
- '
';
- $itemcount ++;
- }
- $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal,\@logintext);
- $datatable .= '';
return $datatable;
}
@@ -2263,103 +2366,27 @@ sub print_contacts {
}
sub print_helpsettings {
+ my ($dom,$confname,$settings,$rowtotal) = @_;
+ my ($datatable,$itemcount);
+ $itemcount = 1;
+ my (%choices,%defaultchecked,@toggles);
+ $choices{'submitbugs'} = &mt('Display link to: [_1]?',
+ &Apache::loncommon::modal_link('http://bugs.loncapa.org',
+ &mt('LON-CAPA bug tracker'),600,500));
+ %defaultchecked = ('submitbugs' => 'on');
+ @toggles = ('submitbugs',);
- my ($position,$dom,$confname,$settings,$rowtotal) = @_;
- my ($css_class,$datatable);
-
- my $switchserver = &check_switchserver($dom,$confname);
-
- my $itemcount = 1;
-
- if ($position eq 'top') {
-
- my (%checkedon,%checkedoff,%choices,%defaultchecked,@toggles);
-
- %choices =
- &Apache::lonlocal::texthash (
- submitbugs => 'Display "Submit a bug" link?',
- );
-
- %defaultchecked = ('submitbugs' => 'on');
-
- @toggles = ('submitbugs',);
-
- foreach my $item (@toggles) {
- if ($defaultchecked{$item} eq 'on') {
- $checkedon{$item} = ' checked="checked" ';
- $checkedoff{$item} = ' ';
- } elsif ($defaultchecked{$item} eq 'off') {
- $checkedoff{$item} = ' checked="checked" ';
- $checkedon{$item} = ' ';
- }
- }
-
- if (ref($settings) eq 'HASH') {
- foreach my $item (@toggles) {
- if ($settings->{$item} eq '1') {
- $checkedon{$item} = ' checked="checked" ';
- $checkedoff{$item} = ' ';
- } elsif ($settings->{$item} eq '0') {
- $checkedoff{$item} = ' checked="checked" ';
- $checkedon{$item} = ' ';
- }
- }
- }
-
- foreach my $item (@toggles) {
- $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
- $datatable .=
- '
- '.$choices{$item}.' |
- |
-
-
- '.
- ' | '.
- '
';
- $itemcount ++;
- }
-
- } else {
-
- $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
-
- $datatable .= '';
-
- if (ref($settings) eq 'HASH') {
- if ($settings->{'loginhelpurl'} ne '') {
- my($directory, $filename) = $settings->{'loginhelpurl'} =~ m/(.*\/)(.*)$/;
- $datatable .= ' | ';
- $datatable .= ' | '
- } else {
- $datatable .= ' | ';
- $datatable .= ' | ';
- }
- } else {
- $datatable .= ' | ';
- $datatable .= ' | ';
- }
-
- $datatable .= '';
- if ($switchserver) {
- $datatable .= &mt('Upload to library server: [_1]',$switchserver);
- } else {
- $datatable .= &mt('Upload Custom Login Page Help File:');
- $datatable .='';
- }
- $datatable .= ' |
';
-
- }
- return $datatable;
+ ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
+ \%choices,$itemcount);
+ return $datatable;
}
-
sub radiobutton_prefs {
my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_;
return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') &&
(ref($choices) eq 'HASH'));
- my (%checkedon,%checkedoff,$datatable,$css_class);
+ my (%checkedon,%checkedoff,$datatable,$css_class,$cell_colspan);
foreach my $item (@{$toggles}) {
if ($defaultchecked->{$item} eq 'on') {
@@ -3274,9 +3301,10 @@ sub print_usercreation {
$dom,$numinrow,$othertitle,
'statustocreate');
$$rowtotal ++;
+ $rownum ++;
}
}
- $datatable .= &captcha_choice('cancreate',$createsettings);
+ $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
} else {
my @contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
@@ -3329,14 +3357,14 @@ sub print_usercreation {
}
sub captcha_choice {
- my ($context,$settings) = @_;
+ my ($context,$settings,$itemcount) = @_;
my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext);
my %lt = &captcha_phrases();
$keyentry = 'hidden';
if ($context eq 'cancreate') {
$rowname = &mt('CAPTCHA validation (e-mail as username)');
- } elsif ($context eq 'help') {
- $rowname = &mt('CAPTCHA validation');
+ } elsif ($context eq 'login') {
+ $rowname = &mt('"Contact helpdesk" CAPTCHA validation');
}
if (ref($settings) eq 'HASH') {
if ($settings->{'captcha'}) {
@@ -3356,8 +3384,9 @@ sub captcha_choice {
} else {
$checked{'original'} = ' checked="checked"';
}
- my $output = ''.
- ''.$rowname.' | '."\n".
+ my $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ my $output = ' |
'.
+ ''.$rowname.' | '."\n".
''."\n";
foreach my $option ('original','recaptcha','notused') {
$output .= ' |
|