--- loncom/interface/domainprefs.pm 2007/09/12 12:01:04 1.27
+++ loncom/interface/domainprefs.pm 2007/09/26 12:42:32 1.30
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.27 2007/09/12 12:01:04 raeburn Exp $
+# $Id: domainprefs.pm,v 1.30 2007/09/26 12:42:32 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -61,96 +61,181 @@ sub handler {
&Apache::lonhtmlcommon::clear_breadcrumbs();
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['phase']);
- my $phase = "display";
+ my $phase = 'pickactions';
if ( exists($env{'form.phase'}) ) {
$phase = $env{'form.phase'};
}
my %domconfig =
&Apache::lonnet::get_dom('configuration',['login','rolecolors',
'quotas','autoenroll','autoupdate','directorysrch',
- 'usercreation'],$dom);
- my @prefs = (
- { text => 'Default color schemes',
- help => 'Default_Color_Schemes',
- action => 'rolecolors',
- header => [{col1 => 'Student Settings',
- col2 => '',},
- {col1 => 'Coordinator Settings',
- col2 => '',},
- {col1 => 'Author Settings',
- col2 => '',},
- {col1 => 'Administrator Settings',
- col2 => '',}],
- },
- { text => 'Log-in page options',
- help => 'Domain_Log-in_Page',
- action => 'login',
- header => [{col1 => 'Item',
- col2 => '',}],
- },
- { text => 'Default quotas for user portfolios',
- help => 'Default_User_Quota',
- action => 'quotas',
- header => [{col1 => 'User type',
- col2 => 'Default quota'}],
- },
- { text => 'Auto-enrollment settings',
- help => 'Domain_Auto_Enrollment',
- action => 'autoenroll',
- header => [{col1 => 'Configuration setting',
- col2 => 'Value(s)'}],
- },
- { text => 'Auto-update settings',
- help => 'Domain_Auto_Update',
- action => 'autoupdate',
- header => [{col1 => 'Setting',
- col2 => 'Value',},
- {col1 => 'User Population',
- col2 => 'Updataeable user data'}],
- },
- { text => 'Institutional directory searches',
- help => 'Domain_Directory_Search',
- action => 'directorysrch',
- header => [{col1 => 'Setting',
- col2 => 'Value',}],
- },
- { text => 'User creation',
- help => 'Domain_User_Creation',
- action => 'usercreation',
- header => [{col1 => 'Setting',
- col2 => 'Value',}],
- },
+ 'usercreation','contacts'],$dom);
+ my @prefs_order = ('rolecolors','login','quotas','autoenroll',
+ 'autoupdate','directorysrch','contacts',
+ 'usercreation');
+ my %prefs = (
+ 'rolecolors' =>
+ { text => 'Default color schemes',
+ help => 'Default_Color_Schemes',
+ header => [{col1 => 'Student Settings',
+ col2 => '',},
+ {col1 => 'Coordinator Settings',
+ col2 => '',},
+ {col1 => 'Author Settings',
+ col2 => '',},
+ {col1 => 'Administrator Settings',
+ col2 => '',}],
+ },
+ 'login' =>
+ { text => 'Log-in page options',
+ help => 'Domain_Log-in_Page',
+ header => [{col1 => 'Item',
+ col2 => '',}],
+ },
+ 'quotas' =>
+ { text => 'Default quotas for user portfolios',
+ help => 'Default_User_Quota',
+ header => [{col1 => 'User type',
+ col2 => 'Default quota'}],
+ },
+ 'autoenroll' =>
+ { text => 'Auto-enrollment settings',
+ help => 'Domain_Auto_Enrollment',
+ header => [{col1 => 'Configuration setting',
+ col2 => 'Value(s)'}],
+ },
+ 'autoupdate' =>
+ { text => 'Auto-update settings',
+ help => 'Domain_Auto_Update',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',},
+ {col1 => 'User Population',
+ col2 => 'Updataeable user data'}],
+ },
+ 'directorysrch' =>
+ { text => 'Institutional directory searches',
+ help => 'Domain_Directory_Search',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ },
+ 'contacts' =>
+ { text => 'Contact Information',
+ help => 'Domain_Contact_Information',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ },
+
+ 'usercreation' =>
+ { text => 'User creation',
+ help => 'Domain_User_Creation',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',},
+ {col1 => 'Context',
+ col2 => 'Assignable Authentication Types'}],
+ },
);
my @roles = ('student','coordinator','author','admin');
+ my @actions = &Apache::loncommon::get_env_multiple('form.actions');
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'display')",
- text=>"Domain Configuration"});
+ ({href=>"javascript:changePage(document.$phase,'pickactions')",
+ text=>"Pick functionality"});
my $confname = $dom.'-domainconfig';
if ($phase eq 'process') {
&Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"javascript:changePage(document.$phase,'$phase')",
+ ({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) {
- $r->print('
'.&mt($item->{'text'}).' '.
- &process_changes($r,$dom,$confname,
- $item->{'action'},\@roles,%domconfig));
+ 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 actions menu');
+ &print_footer($r,$phase,'display','Back to configuration display',
+ \@actions);
$r->print('
');
+ } 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());
} else {
if ($phase eq '') {
- $phase = 'display';
+ $phase = 'pickactions';
}
- my %helphash;
- my $numprefs = @prefs;
+ my %helphash;
&print_header($r,$phase);
if (keys(%domconfig) == 0) {
my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
- my $perlvarref = &LONCAPA::Configuration::read_conf('loncapa.conf');
- my $hostid = $perlvarref->{'lonHostID'};
- if ($hostid ne $primarylibserv) {
+ my @ids=&Apache::lonnet::current_machine_ids();
+ if (!grep(/^\Q$primarylibserv\E$/,@ids)) {
my %designhash = &Apache::loncommon::get_domainconf($dom);
my @loginimages = ('img','logo','domlogo');
my $custom_img_count = 0;
@@ -166,24 +251,39 @@ sub handler {
}
if ($custom_img_count > 0) {
my $switch_server = &check_switchserver($dom,$confname);
- $r->print(&mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').' '.&mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").' '.&mt("Thereafter, you will be able to update settings from this screen when logged in to any server in the LON-CAPA network (with a DC role selected in the domain), although you will still need to switch to the domain's primary library server to upload new images or logos.").' '.$switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
+ $r->print(
+ &mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').' '.
+ &mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").' '.
+ &mt("Thereafter, (with a Domain Coordinator role selected in the domain) you will be able to update settings when logged in to any server in the LON-CAPA network.").' '.
+ &mt("However, you will still need to switch to the domain's primary library server to upload new images or logos.").' ');
+ if ($switch_server) {
+ $r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
+ }
return OK;
}
}
}
- $r->print('');
- foreach my $item (@prefs) {
- if ($item->{'action'} eq 'login') {
- $r->print(' ');
- }
- &print_config_box($r,$dom,$confname,$phase,$item->{'action'},
- $item,$domconfig{$item->{'action'}});
- }
- $r->print('
-
-
-
');
- &print_footer($r,$phase,'process','Save changes');
+ $r->print(''.&mt('Functionality to display/modify').' ');
+ $r->print(''."\n".' '.
+ '
');
+ foreach my $item (@prefs_order) {
+ $r->print(' '.$prefs{$item}->{'text'}.'
');
+ }
+ $r->print(''.&mt('Display options').' '."\n".
+ ''.&mt('Display using: ')."\n".
+ ' '.
+ &mt('one column').' '.
+ ' '.
+ &mt('two columns').'
');
+ $r->print(&print_footer($r,$phase,'display','Go'));
+ $r->print('');
+ $r->print(&Apache::loncommon::end_page());
}
return OK;
}
@@ -205,38 +305,47 @@ sub process_changes {
} elsif ($action eq 'directorysrch') {
$output = &modify_directorysrch($dom,%domconfig);
} elsif ($action eq 'usercreation') {
- $output = &modify_user_creation($dom,%domconfig);
+ $output = &modify_usercreation($dom,%domconfig);
+ } elsif ($action eq 'contacts') {
+ $output = &modify_contacts($dom,%domconfig);
}
return $output;
}
sub print_config_box {
my ($r,$dom,$confname,$phase,$action,$item,$settings) = @_;
- $r->print('
-
+ my $rowtotal = 0;
+ my $output =
+ '
- '.&mt($item->{text}).' ');
+ '.&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'}).'
# ');
- if (($action eq 'autoupdate') || ($action eq 'rolecolors')) {
+ $rowtotal ++;
+ if (($action eq 'autoupdate') || ($action eq 'rolecolors') ||
+ ($action eq 'usercreation')) {
my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
- $r->print('
+ $output .= '
'.$item->{'header'}->[0]->{'col1'}.'
'.$item->{'header'}->[0]->{'col2'}.'
- ');
+ ';
+ $rowtotal ++;
if ($action eq 'autoupdate') {
- $r->print(&print_autoupdate('top',$dom,$settings));
+ $output .= &print_autoupdate('top',$dom,$settings,\$rowtotal);
+ } elsif ($action eq 'usercreation') {
+ $output .= &print_usercreation('top',$dom,$settings,\$rowtotal);
} else {
- $r->print(&print_rolecolors($phase,'student',$dom,$confname,$settings));
+ $output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
}
- $r->print('
+ $output .= '
@@ -246,11 +355,14 @@ sub print_config_box {
'.$item->{'header'}->[1]->{'col1'}.'
'.$item->{'header'}->[1]->{'col2'}.'
- ');
+ ';
+ $rowtotal ++;
if ($action eq 'autoupdate') {
- $r->print(&print_autoupdate('bottom',$dom,$settings));
+ $output .= &print_autoupdate('bottom',$dom,$settings,\$rowtotal);
+ } elsif ($action eq 'usercreation') {
+ $output .= &print_usercreation('bottom',$dom,$settings,\$rowtotal);
} else {
- $r->print(&print_rolecolors($phase,'coordinator',$dom,$confname,$settings).'
+ $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
@@ -261,7 +373,7 @@ sub print_config_box {
'.$item->{'header'}->[2]->{'col1'}.'
'.$item->{'header'}->[2]->{'col2'}.'
'.
- &print_rolecolors($phase,'author',$dom,$confname,$settings).'
+ &print_rolecolors($phase,'author',$dom,$confname,$settings,\$rowtotal).'
@@ -272,58 +384,99 @@ sub print_config_box {
'.$item->{'header'}->[3]->{'col1'}.'
'.$item->{'header'}->[3]->{'col2'}.'
'.
- &print_rolecolors($phase,'admin',$dom,$confname,$settings));
+ &print_rolecolors($phase,'admin',$dom,$confname,$settings,\$rowtotal);
+ $rowtotal += 2;
}
} else {
- $r->print('
+ $output .= '
- ');
+ ';
if (($action eq 'login') || ($action eq 'directorysrch')) {
- $r->print('
- '.$item->{'header'}->[0]->{'col1'}.' ');
+ $output .= '
+ '.$item->{'header'}->[0]->{'col1'}.' ';
} else {
- $r->print('
- '.$item->{'header'}->[0]->{'col1'}.' ');
+ $output .= '
+ '.$item->{'header'}->[0]->{'col1'}.' ';
}
- $r->print('
+ $output .= '
'.$item->{'header'}->[0]->{'col2'}.'
- ');
+ ';
+ $rowtotal ++;
if ($action eq 'login') {
- $r->print(&print_login($dom,$confname,$phase,$settings));
+ $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);
} elsif ($action eq 'quotas') {
- $r->print(&print_quotas($dom,$settings));
+ $output .= &print_quotas($dom,$settings,\$rowtotal);
} elsif ($action eq 'autoenroll') {
- $r->print(&print_autoenroll($dom,$settings));
+ $output .= &print_autoenroll($dom,$settings,\$rowtotal);
} elsif ($action eq 'directorysrch') {
- $r->print(&print_directorysrch($dom,$settings));
- } elsif ($action eq 'usercreation') {
- $r->print(&print_usercreation($dom,$settings));
+ $output .= &print_directorysrch($dom,$settings,\$rowtotal);
+ } elsif ($action eq 'contacts') {
+ $output .= &print_contacts($dom,$settings,\$rowtotal);
}
}
- $r->print('
+ $output .= '
- ');
- return;
+ ';
+ 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:;getDimensions(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);",
+ );
+ $additem = {'add_entries' => \%loaditems,};
+ } else {
+ my %loaditems = (
+ 'onload' => "javascript:getDimensions(document.$phase.width,document.$phase.height)",
+ );
+ $additem = {'add_entries' => \%loaditems,};
+ }
$r->print(&Apache::loncommon::start_page('View/Modify Domain Settings',
- $js));
+ $js,$additem));
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings'));
$r->print('
'.&Apache::loncommon::end_page());
}
- $r->print('');
- $r->print(' '.&Apache::loncommon::end_page());
return;
}
sub print_login {
- my ($dom,$confname,$phase,$settings) = @_;
+ my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
my %choices = &login_choices();
my ($catalogon,$catalogoff,$adminmailon,$adminmailoff);
$catalogon = ' checked="checked" ';
@@ -455,7 +627,7 @@ sub print_login {
' '.&mt('No').' ';
$itemcount ++;
- $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text);
+ $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal);
$datatable .= '';
return $datatable;
}
@@ -482,7 +654,7 @@ sub login_choices {
}
sub print_rolecolors {
- my ($phase,$role,$dom,$confname,$settings) = @_;
+ my ($phase,$role,$dom,$confname,$settings,$rowtotal) = @_;
my %choices = &color_font_choices();
my @bgs = ('pgbg','tabbg','sidebg');
my @links = ('link','alink','vlink');
@@ -548,19 +720,19 @@ sub print_rolecolors {
}
}
my $itemcount = 1;
- my $datatable = &display_color_options($dom,$confname,$phase,$role,$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text);
+ my $datatable = &display_color_options($dom,$confname,$phase,$role,$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal);
$datatable .= '';
return $datatable;
}
sub display_color_options {
my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs,
- $images,$bgs,$links,$alt_text) = @_;
+ $images,$bgs,$links,$alt_text,$rowtotal) = @_;
my $css_class = $itemcount%2?' class="LC_odd_row"':'';
my $datatable = ''.
''.$choices->{'font'}.' ';
if (!$is_custom->{'font'}) {
- $datatable .= ''.&mt('Default in use:').' '.$defaults->{'font'}.' ';
+ $datatable .= ''.&mt('Default in use:').' '.$defaults->{'font'}.' ';
} else {
$datatable .= ' ';
}
@@ -568,6 +740,8 @@ sub display_color_options {
$datatable .= ''.
' '.$fontlink.
+ ' '.
' ';
my $switchserver = &check_switchserver($dom,$confname);
foreach my $img (@{$images}) {
@@ -663,7 +837,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) {
@@ -677,10 +851,10 @@ sub display_color_options {
my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'bgs'}{$item});
$datatable .= ''.$link;
if ($designs->{'bgs'}{$item}) {
- $datatable .= ' ';
+ $datatable .= ' ';
}
$datatable .= ' ';
+ '" onblur = "javascript:document.display.css_'.$role.'_'.$item.'.style.background-color = document.display.'.$role.'_'.$item.'.value;"/>';
}
$datatable .= '';
$itemcount ++;
@@ -690,7 +864,7 @@ sub display_color_options {
my $links_def;
foreach my $item (@{$links}) {
if (!$is_custom->{$item}) {
- $links_def .= ''.$choices->{$item}.' '.$defaults->{'links'}{$item}.' ';
+ $links_def .= ''.$choices->{$item}.''.$defaults->{'links'}{$item}.' ';
}
}
if ($links_def) {
@@ -701,17 +875,16 @@ sub display_color_options {
$datatable .= ''.
'';
foreach my $item (@{$links}) {
- $datatable .= '';
- my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'links'}{$item});
+ $datatable .= ' '."\n".
+ &color_pick($phase,$role,$item,$choices->{$item},
+ $designs->{'links'}{$item});
if ($designs->{'links'}{$item}) {
- $datatable.=''.
- $link.' ';
- } else {
- $datatable .= $link;
+ $datatable.=' ';
}
$datatable .= ' ';
}
+ $$rowtotal += $itemcount;
return $datatable;
}
@@ -751,7 +924,7 @@ ENDCOL
}
sub print_quotas {
- my ($dom,$settings) = @_;
+ my ($dom,$settings,$rowtotal) = @_;
my $datatable;
my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
my $typecount = 0;
@@ -783,11 +956,12 @@ sub print_quotas {
''.
' Mb ';
+ $$rowtotal += $typecount;
return $datatable;
}
sub print_autoenroll {
- my ($dom,$settings) = @_;
+ my ($dom,$settings,$rowtotal) = @_;
my $autorun = &Apache::lonnet::auto_run(undef,$dom),
my ($defdom,$runon,$runoff);
if (ref($settings) eq 'HASH') {
@@ -836,11 +1010,12 @@ sub print_autoenroll {
$settings->{'sender_uname'}.
'" size="10" /> '.&mt('domain').
': '.$domform.'';
+ $$rowtotal += 2;
return $datatable;
}
sub print_autoupdate {
- my ($position,$dom,$settings) = @_;
+ my ($position,$dom,$settings,$rowtotal) = @_;
my $datatable;
if ($position eq 'top') {
my $updateon = ' ';
@@ -876,6 +1051,7 @@ sub print_autoupdate {
' '.&mt('No').' '.
'';
+ $$rowtotal += 2;
} else {
my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
my @fields = ('lastname','firstname','middlename','gen',
@@ -894,18 +1070,20 @@ sub print_autoupdate {
$datatable =
&usertype_update_row($settings,$usertypes,\%fieldtitles,
\@fields,$types,\$numrows);
+ $$rowtotal += @{$types};
}
}
$datatable .=
&usertype_update_row($settings,{'default' => $othertitle},
\%fieldtitles,\@fields,['default'],
\$numrows);
+ $$rowtotal ++;
}
return $datatable;
}
sub print_directorysrch {
- my ($dom,$settings) = @_;
+ my ($dom,$settings,$rowtotal) = @_;
my $srchon = ' ';
my $srchoff = ' checked="checked" ';
my ($exacton,$containson,$beginson);
@@ -947,20 +1125,21 @@ sub print_directorysrch {
my $numinrow = 4;
my $cansrchrow = 0;
my $datatable=''.
- ''.&mt('Directory search available?').' '.
+ ''.&mt('Directory search available?').' '.
''.
' '.&mt('Yes').' '.
' '.&mt('No').' '.
' '.
- ''.&mt('Other domains can search?').' '.
+ ''.&mt('Other domains can search?').' '.
''.
' '.&mt('Yes').' '.
' '.&mt('No').' '.
' ';
+ $$rowtotal += 2;
if (ref($usertypes) eq 'HASH') {
if (keys(%{$usertypes}) > 0) {
$datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom,
@@ -969,12 +1148,13 @@ sub print_directorysrch {
}
}
if ($cansrchrow) {
+ $$rowtotal ++;
$datatable .= '';
} else {
$datatable .= ' ';
}
- $datatable .= ''.&mt('Supported search methods').
- ' ';
+ $datatable .= ''.&mt('Supported search methods').
+ ' ';
foreach my $title (@{$titleorder}) {
if (defined($searchtitles->{$title})) {
my $check = ' ';
@@ -991,12 +1171,13 @@ sub print_directorysrch {
}
}
$datatable .= '
';
+ $$rowtotal ++;
if ($cansrchrow) {
$datatable .= '';
} else {
$datatable .= ' ';
}
- $datatable .= ''.&mt('Search latitude').' '.
+ $datatable .= ''.&mt('Search latitude').' '.
''.
''.
' '.&mt('Contains').
' ';
+ $$rowtotal ++;
+ return $datatable;
+}
+
+sub print_contacts {
+ my ($dom,$settings,$rowtotal) = @_;
+ my $datatable;
+ my @contacts = ('adminemail','supportemail');
+ my (%checked,%to,%otheremails);
+ my @mailings = ('errormail','packagesmail','helpdeskmail');
+ foreach my $type (@mailings) {
+ $otheremails{$type} = '';
+ }
+ if (ref($settings) eq 'HASH') {
+ foreach my $item (@contacts) {
+ if (exists($settings->{$item})) {
+ $to{$item} = $settings->{$item};
+ }
+ }
+ foreach my $type (@mailings) {
+ if (exists($settings->{$type})) {
+ if (ref($settings->{$type}) eq 'HASH') {
+ foreach my $item (@contacts) {
+ if ($settings->{$type}{$item}) {
+ $checked{$type}{$item} = ' checked="checked" ';
+ }
+ }
+ $otheremails{$type} = $settings->{$type}{'others'};
+ }
+ }
+ }
+ } else {
+ $to{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
+ $to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'};
+ $checked{'errormail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'packagesmail'}{'adminemail'} = ' checked="checked" ';
+ $checked{'helpdeskmail'}{'supportemail'} = ' 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" ';
+ }
+ $datatable .= ''.
+ ''.$titles->{$item}.
+ ' '.
+ ' ';
+ $rownum ++;
+ }
+ foreach my $type (@mailings) {
+ if ($rownum%2) {
+ $css_class = '';
+ } else {
+ $css_class = ' class="LC_odd_row" ';
+ }
+ $datatable .= ''.
+ ''.
+ $titles->{$type}.': '.
+ ''.
+ '';
+ foreach my $item (@contacts) {
+ $datatable .= ''.
+ ' '.$short_titles->{$item}.
+ ' ';
+ }
+ $datatable .= ' '.&mt('Others').': '.
+ ' '.
+ ' '."\n";
+ $rownum ++;
+ }
+ $$rowtotal += $rownum;
return $datatable;
}
+sub contact_titles {
+ my %titles = &Apache::lonlocal::texthash (
+ 'supportemail' => 'Support 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'
+ );
+ my %short_titles = &Apache::lonlocal::texthash (
+ adminemail => 'Admin E-mail address',
+ supportemail => 'Support E-mail',
+ );
+ return (\%titles,\%short_titles);
+}
+
sub print_usercreation {
- my ($dom,$settings) = @_;
+ my ($position,$dom,$settings,$rowtotal) = @_;
my $numinrow = 4;
my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);
- my %checked;
- if (ref($settings) eq 'HASH') {
- if (ref($settings->{'cancreate'}) eq 'ARRAY') {
- foreach my $item (@{$settings->{'cancreate'}}) {
- $checked{$item} = ' checked="checked" ';
+ my $datatable;
+ my %lt = &Apache::lonlocal::texthash (
+ nondc => 'User creation other than by Domain Coordinator: ',
+ author => 'When adding a co-author/assistant author',
+ course => 'When adding users to a course',
+ );
+ if ($position eq 'top') {
+ my %checked;
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'cancreate'}) eq 'ARRAY') {
+ foreach my $item (@{$settings->{'cancreate'}}) {
+ $checked{$item} = ' checked="checked" ';
+ }
}
}
- }
- my $datatable = ''.&mt('User creation other than by DC: ').' '.
- ' ';
- if (ref($rules) eq 'HASH') {
- if (keys(%{$rules}) > 0) {
- $datatable .= &username_formats_row($settings,$rules,$ruleorder,
- $numinrow);
+ $datatable = ''.
+ ''.$lt{'nondc'}.
+ ' ';
+ $$rowtotal ++;
+ if (ref($rules) eq 'HASH') {
+ if (keys(%{$rules}) > 0) {
+ $datatable .= &username_formats_row($settings,$rules,
+ $ruleorder,$numinrow);
+ $$rowtotal ++;
+ }
+ }
+ } else {
+ my @contexts = ('author','course','domain');
+ my @authtypes = ('int','krb4','krb5','loc');
+ my %checked;
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'authtypes'}) eq 'HASH') {
+ foreach my $item (@contexts) {
+ if (ref($settings->{'authtypes'}{$item}) eq 'HASH') {
+ foreach my $auth (@authtypes) {
+ if ($settings->{'authtypes'}{$item}{$auth}) {
+ $checked{$item}{$auth} = ' checked="checked" ';
+ }
+ }
+ }
+ }
+ }
}
+ my @authtypes = ('int','krb4','krb5','loc');
+ my %title = &context_names();
+ my %authname = &authtype_names();
+ my $rownum = 0;
+ my $css_class;
+ foreach my $item (@contexts) {
+ if ($rownum%2) {
+ $css_class = '';
+ } else {
+ $css_class = ' class="LC_odd_row" ';
+ }
+ $datatable .= ''.
+ ''.$title{$item}.
+ ' '.
+ '';
+ foreach my $auth (@authtypes) {
+ $datatable .= ''.
+ ' '.
+ $authname{$auth}.' ';
+ }
+ $datatable .= ' ';
+ $rownum ++;
+ }
+ $$rowtotal += $rownum;
}
return $datatable;
}
sub username_formats_row {
my ($settings,$rules,$ruleorder,$numinrow) = @_;
- my $output = ''.
- ''.&mt('Format rules to check for new usernames').
- ' ';
+ my $output = ''.
+ ''.
+ &mt('Format rules to check for new usernames: ').
+ ' '.
+ '';
my $rem;
if (ref($ruleorder) eq 'ARRAY') {
for (my $i=0; $i<@{$ruleorder}; $i++) {
@@ -1087,6 +1413,26 @@ sub username_formats_row {
return $output;
}
+sub authtype_names {
+ my %lt = &Apache::lonlocal::texthash(
+ int => 'Internal',
+ krb4 => 'Kerberos 4',
+ krb5 => 'Kerberos 5',
+ loc => 'Local',
+ );
+ return %lt;
+}
+
+sub context_names {
+ my %context_title = &Apache::lonlocal::texthash(
+ author => 'Creating users when an Author',
+ course => 'Creating users when in a course',
+ domain => 'Creating users when a Domain Coordinator',
+ );
+ return %context_title;
+}
+
+
sub users_cansearch_row {
my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle) = @_;
my $output = ''.
@@ -1827,6 +2173,18 @@ sub check_switchserver {
return $switchserver;
}
+sub javascript_set_colnums {
+ return < 1100) {
+ document.pickactions.numcols[1].checked = true;
+ } else {
+ document.pickactions.numcols[0].checked = true;
+ }
+}
+END
+}
+
sub modify_quotas {
my ($dom,%domconfig) = @_;
my ($resulttext,%changes);
@@ -2248,9 +2606,118 @@ sub modify_directorysrch {
return $resulttext;
}
-sub modify_user_creation {
+sub modify_contacts {
+ my ($dom,%domconfig) = @_;
+ my ($resulttext,%currsetting,%newsetting,%changes,%contacts_hash);
+ if (ref($domconfig{'contacts'}) eq 'HASH') {
+ foreach my $key (keys(%{$domconfig{'contacts'}})) {
+ $currsetting{$key} = $domconfig{'contacts'}{$key};
+ }
+ }
+ my (%others,%to);
+ my @contacts = ('supportemail','adminemail');
+ my @mailings = ('errormail','packagesmail','helpdeskmail');
+ foreach my $type (@mailings) {
+ @{$newsetting{$type}} =
+ &Apache::loncommon::get_env_multiple('form.'.$type);
+ foreach my $item (@contacts) {
+ if (grep(/^\Q$item\E$/,@{$newsetting{$type}})) {
+ $contacts_hash{contacts}{$type}{$item} = 1;
+ } else {
+ $contacts_hash{contacts}{$type}{$item} = 0;
+ }
+ }
+ $others{$type} = $env{'form.'.$type.'_others'};
+ $contacts_hash{contacts}{$type}{'others'} = $others{$type};
+ }
+ foreach my $item (@contacts) {
+ $to{$item} = $env{'form.'.$item};
+ $contacts_hash{'contacts'}{$item} = $to{$item};
+ }
+ if (keys(%currsetting) > 0) {
+ foreach my $item (@contacts) {
+ if ($to{$item} ne $currsetting{$item}) {
+ $changes{$item} = 1;
+ }
+ }
+ foreach my $type (@mailings) {
+ foreach my $item (@contacts) {
+ if (ref($currsetting{$type}) eq 'HASH') {
+ if ($currsetting{$type}{$item} ne $contacts_hash{contacts}{$type}{$item}) {
+ push(@{$changes{$type}},$item);
+ }
+ } else {
+ push(@{$changes{$type}},@{$newsetting{$type}});
+ }
+ }
+ if ($others{$type} ne $currsetting{$type}{'others'}) {
+ push(@{$changes{$type}},'others');
+ }
+ }
+ } else {
+ my %default;
+ $default{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
+ $default{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'};
+ $default{'errormail'} = 'adminemail';
+ $default{'packagesmail'} = 'adminemail';
+ $default{'helpdeskmail'} = 'supportemail';
+ foreach my $item (@contacts) {
+ if ($to{$item} ne $default{$item}) {
+ $changes{$item} = 1;
+ }
+ }
+ foreach my $type (@mailings) {
+ if ((@{$newsetting{$type}} != 1) || ($newsetting{$type}[0] ne $default{$type})) {
+
+ push(@{$changes{$type}},@{$newsetting{$type}});
+ }
+ if ($others{$type} ne '') {
+ push(@{$changes{$type}},'others');
+ }
+ }
+ }
+ my $putresult = &Apache::lonnet::put_dom('configuration',\%contacts_hash,
+ $dom);
+ if ($putresult eq 'ok') {
+ if (keys(%changes) > 0) {
+ my ($titles,$short_titles) = &contact_titles();
+ $resulttext = &mt('Changes made:').'';
+ foreach my $item (@contacts) {
+ if ($changes{$item}) {
+ $resulttext .= ''.$titles->{$item}.
+ &mt(' set to: ').
+ ''.
+ $to{$item}.' ';
+ }
+ }
+ foreach my $type (@mailings) {
+ if (ref($changes{$type}) eq 'ARRAY') {
+ $resulttext .= ''.$titles->{$type}.': ';
+ my @text;
+ foreach my $item (@{$newsetting{$type}}) {
+ push(@text,$short_titles->{$item});
+ }
+ if ($others{$type} ne '') {
+ push(@text,$others{$type});
+ }
+ $resulttext .= ''.
+ join(', ',@text).' ';
+ }
+ }
+ $resulttext .= ' ';
+ } else {
+ $resulttext = &mt('No changes made to contact information.');
+ }
+ } else {
+ $resulttext = ''.
+ &mt('An error occurred: [_1].',$putresult).' ';
+ }
+ return $resulttext;
+}
+
+sub modify_usercreation {
my ($dom,%domconfig) = @_;
- my ($resulttext,%curr_usercreation,%changes);
+ my ($resulttext,%curr_usercreation,%changes,%authallowed);
if (ref($domconfig{'usercreation'}) eq 'HASH') {
foreach my $key (keys(%{$domconfig{'usercreation'}})) {
$curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
@@ -2291,10 +2758,41 @@ sub modify_user_creation {
push(@{$changes{'username_rule'}},@username_rule);
}
+ my @contexts = ('author','course','domain');
+ my @authtypes = ('int','krb4','krb5','loc');
+ my %authhash;
+ foreach my $item (@contexts) {
+ my @authallowed = &Apache::loncommon::get_env_multiple('form.'.$item.'_auth');
+ foreach my $auth (@authtypes) {
+ if (grep(/^\Q$auth\E$/,@authallowed)) {
+ $authhash{$item}{$auth} = 1;
+ } else {
+ $authhash{$item}{$auth} = 0;
+ }
+ }
+ }
+ if (ref($curr_usercreation{'authtypes'}) eq 'HASH') {
+ foreach my $item (@contexts) {
+ if (ref($curr_usercreation{'authtypes'}{$item}) eq 'HASH') {
+ foreach my $auth (@authtypes) {
+ if ($authhash{$item}{$auth} ne $curr_usercreation{'authtypes'}{$item}{$auth}) {
+ push(@{$changes{'authtypes'}},$item);
+ last;
+ }
+ }
+ }
+ }
+ } else {
+ foreach my $item (@contexts) {
+ push(@{$changes{'authtypes'}},$item);
+ }
+ }
+
my %usercreation_hash = (
- usercreation => {
+ usercreation => {
cancreate => \@cancreate,
username_rule => \@username_rule,
+ authtypes => \%authhash,
}
);
@@ -2303,7 +2801,6 @@ sub modify_user_creation {
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
$resulttext = &mt('Changes made:').'';
- my $chgtext;
if (ref($changes{'cancreate'}) eq 'ARRAY') {
my $chgtext = '';
foreach my $type (@cancreate) {
@@ -2328,12 +2825,31 @@ sub modify_user_creation {
if (@username_rule > 0) {
$resulttext .= ''.&mt('Usernames with the following formats are restricted to verified users in the institutional directory: ').$chgtext.' ';
} else {
- $resulttext .= ''.&mt('There are now no username formats currenty restricted to verified users in the institutional directory.').' ';
+ $resulttext .= ''.&mt('There are now no username formats restricted to verified users in the institutional directory.').' ';
}
}
+ my %authname = &authtype_names();
+ my %context_title = &context_names();
+ if (ref($changes{'authtypes'}) eq 'ARRAY') {
+ my @unchanged;
+ my $chgtext = '';
+ foreach my $type (@{$changes{'authtypes'}}) {
+ my @allowed;
+ $chgtext .= ''.$context_title{$type}.' - '.&mt('assignable authentication types: ');
+ foreach my $auth (@authtypes) {
+ if ($authhash{$type}{$auth}) {
+ push(@allowed,$authname{$auth});
+ }
+ }
+ $chgtext .= join(', ',@allowed).' ';
+ }
+ $chgtext .= ' ';
+ $resulttext .= ''.&mt('Authentication types available for assignment to new users').' '.$chgtext;
+ $resulttext .= ' ';
+ }
$resulttext .= ' ';
} else {
- $resulttext = &mt('No changes made to log-in page settings');
+ $resulttext = &mt('No changes made to user creation settings');
}
} else {
$resulttext = ''.