version 1.101, 2009/08/08 00:36:00
|
version 1.117, 2009/10/25 15:53:25
|
Line 105 affiliate type (and also default, and _L
|
Line 105 affiliate type (and also default, and _L
|
(official, unofficial and community). In each case the radio buttons allow the |
(official, unofficial and community). In each case the radio buttons allow the |
selection of one of four values: |
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: |
which have the following effects: |
|
|
0 |
0 |
Line 116 which have the following effects:
|
Line 116 which have the following effects:
|
|
|
=back |
=back |
|
|
approve |
approval |
|
|
=over |
=over |
|
|
Line 220 sub handler {
|
Line 220 sub handler {
|
{col1 => 'Administrator Settings', |
{col1 => 'Administrator Settings', |
col2 => '',}], |
col2 => '',}], |
}, |
}, |
'login' => |
'login' => |
{ text => 'Log-in page options', |
{ text => 'Log-in page options', |
help => 'Domain_Configuration_Login_Page', |
help => 'Domain_Configuration_Login_Page', |
header => [{col1 => 'Item', |
header => [{col1 => 'Item', |
col2 => '',}], |
col2 => '',}], |
}, |
}, |
|
|
'defaults' => |
'defaults' => |
{ text => 'Default authentication/language/timezone', |
{ text => 'Default authentication/language/timezone', |
help => 'Domain_Configuration_LangTZAuth', |
help => 'Domain_Configuration_LangTZAuth', |
Line 297 sub handler {
|
Line 298 sub handler {
|
{text => 'Request creation of courses', |
{text => 'Request creation of courses', |
help => 'Domain_Configuration_Request_Courses', |
help => 'Domain_Configuration_Request_Courses', |
header => [{col1 => 'User affiliation', |
header => [{col1 => 'User affiliation', |
col2 => 'Availability/Processing of requests',}], |
col2 => 'Availability/Processing of requests',}, |
|
{col1 => 'Setting', |
|
col2 => 'Value'}], |
}, |
}, |
'coursecategories' => |
'coursecategories' => |
{ text => 'Cataloging of courses', |
{ text => 'Cataloging of courses', |
Line 317 sub handler {
|
Line 320 sub handler {
|
}], |
}], |
}, |
}, |
); |
); |
|
my %servers = &dom_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 @roles = ('student','coordinator','author','admin'); |
my @actions = &Apache::loncommon::get_env_multiple('form.actions'); |
my @actions = &Apache::loncommon::get_env_multiple('form.actions'); |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
Line 421 sub print_config_box {
|
Line 434 sub print_config_box {
|
&Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n". |
&Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n". |
'</tr>'; |
'</tr>'; |
$rowtotal ++; |
$rowtotal ++; |
if (($action eq 'autoupdate') || ($action eq 'rolecolors') || |
my $numheaders = 1; |
($action eq 'usercreation') || ($action eq 'usermodification') || |
if (ref($item->{'header'}) eq 'ARRAY') { |
($action eq 'coursecategories')) { |
$numheaders = scalar(@{$item->{'header'}}); |
|
} |
|
if ($numheaders > 1) { |
my $colspan = ''; |
my $colspan = ''; |
if (($action eq 'rolecolors') || ($action eq 'coursecategories')) { |
if (($action eq 'rolecolors') || ($action eq 'coursecategories')) { |
$colspan = ' colspan="2"'; |
$colspan = ' colspan="2"'; |
Line 445 sub print_config_box {
|
Line 460 sub print_config_box {
|
$output .= &print_usermodification('top',$dom,$settings,\$rowtotal); |
$output .= &print_usermodification('top',$dom,$settings,\$rowtotal); |
} elsif ($action eq 'coursecategories') { |
} elsif ($action eq 'coursecategories') { |
$output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal); |
$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 { |
} else { |
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal); |
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal); |
} |
} |
Line 492 sub print_config_box {
|
Line 512 sub print_config_box {
|
$rowtotal ++; |
$rowtotal ++; |
} elsif ($action eq 'coursecategories') { |
} elsif ($action eq 'coursecategories') { |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
$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 { |
} else { |
$output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).' |
$output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).' |
</table> |
</table> |
Line 560 sub print_config_box {
|
Line 584 sub print_config_box {
|
$output .= '</tr>'; |
$output .= '</tr>'; |
$rowtotal ++; |
$rowtotal ++; |
if ($action eq 'login') { |
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') { |
} elsif ($action eq 'quotas') { |
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
} elsif ($action eq 'autoenroll') { |
} elsif ($action eq 'autoenroll') { |
Line 575 sub print_config_box {
|
Line 600 sub print_config_box {
|
$output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); |
$output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); |
} elsif ($action eq 'serverstatuses') { |
} elsif ($action eq 'serverstatuses') { |
$output .= &print_serverstatuses($dom,$settings,\$rowtotal); |
$output .= &print_serverstatuses($dom,$settings,\$rowtotal); |
} elsif ($action eq 'requestcourses') { |
|
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
|
} |
} |
} |
} |
$output .= ' |
$output .= ' |
Line 588 sub print_config_box {
|
Line 611 sub print_config_box {
|
} |
} |
|
|
sub print_login { |
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 %choices = &login_choices(); |
|
my $itemcount = 1; |
|
|
|
if ($position eq 'top') { |
|
my %servers = &dom_servers($dom); |
|
my $choice = $choices{'disallowlogin'}; |
|
$css_class = ' class="LC_odd_row"'; |
|
$datatable .= '<tr'.$css_class.'><td>'.$choices{'disallowlogin'}.'</td>'. |
|
'<td align="right"><table><tr><th>'.$choices{'hostid'}.'</th>'. |
|
'<th>'.$choices{'serverurl'}.'</th></tr>'."\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 .= '<tr><td>'.$servers{$lonhost}.'</td>'. |
|
'<td><select name="'.$lonhost.'_serverurl">'. |
|
'<option value=""'.$direct.'>'.$choices{'directlogin'}. |
|
'</option>'; |
|
foreach my $hostid (keys(%servers)) { |
|
next if ($servers{$hostid} eq $servers{$lonhost}); |
|
my $selected = ''; |
|
if ($hostid eq $disallowed{$lonhost}) { |
|
$selected = 'selected="selected"'; |
|
} |
|
$datatable .= '<option value="'.$hostid.'"'.$selected.'>'. |
|
$servers{$hostid}.'</option>'; |
|
} |
|
$datatable .= '</select></td></tr>'; |
|
} |
|
$datatable .= '</table></td></tr>'; |
|
return $datatable; |
|
} |
|
|
my %defaultchecked = ( |
my %defaultchecked = ( |
'coursecatalog' => 'on', |
'coursecatalog' => 'on', |
'adminmail' => 'off', |
'adminmail' => 'off', |
'newuser' => 'off', |
'newuser' => 'off', |
|
'submitbugs' => 'on', |
); |
); |
my @toggles = ('coursecatalog','adminmail','newuser'); |
my @toggles = ('coursecatalog','adminmail','newuser','submitbugs'); |
my (%checkedon,%checkedoff); |
my (%checkedon,%checkedoff); |
foreach my $item (@toggles) { |
foreach my $item (@toggles) { |
if ($defaultchecked{$item} eq 'on') { |
if ($defaultchecked{$item} eq 'on') { |
Line 724 sub print_login {
|
Line 788 sub print_login {
|
sub login_choices { |
sub login_choices { |
my %choices = |
my %choices = |
&Apache::lonlocal::texthash ( |
&Apache::lonlocal::texthash ( |
coursecatalog => 'Display Course Catalog link?', |
coursecatalog => 'Display Course/Community Catalog link?', |
adminmail => "Display Administrator's E-mail Address?", |
adminmail => "Display Administrator's E-mail Address?", |
newuser => "Link to create a user account", |
disallowlogin => "Login page requests redirected", |
img => "Header", |
submitbugs => "Display "Submit Bug" link?", |
logo => "Main Logo", |
hostid => "Server", |
domlogo => "Domain Logo", |
serverurl => "Redirect to log-in via:", |
login => "Log-in Header", |
directlogin => "No redirect", |
textcol => "Text color", |
newuser => "Link to create a user account", |
bgcol => "Box color", |
img => "Header", |
bgs => "Background colors", |
logo => "Main Logo", |
links => "Link colors", |
domlogo => "Domain Logo", |
font => "Font color", |
login => "Log-in Header", |
pgbg => "Header", |
textcol => "Text color", |
mainbg => "Page", |
bgcol => "Box color", |
sidebg => "Login box", |
bgs => "Background colors", |
link => "Link", |
links => "Link colors", |
alink => "Active link", |
font => "Font color", |
vlink => "Visited link", |
pgbg => "Header", |
|
mainbg => "Page", |
|
sidebg => "Login box", |
|
link => "Link", |
|
alink => "Active link", |
|
vlink => "Visited link", |
); |
); |
return %choices; |
return %choices; |
} |
} |
Line 845 sub display_color_options {
|
Line 914 sub display_color_options {
|
' <span id="css_'.$role.'_font" style="background-color: '. |
' <span id="css_'.$role.'_font" style="background-color: '. |
$designs->{'font'}.';"> </span>'. |
$designs->{'font'}.';"> </span>'. |
'</span></td></tr>'; |
'</span></td></tr>'; |
$datatable .= '<tr'.$css_class.'>'. |
unless ($role eq 'login') { |
'<td>'.$choices->{'fontmenu'}.'</td>'; |
$datatable .= '<tr'.$css_class.'>'. |
if (!$is_custom->{'fontmenu'}) { |
'<td>'.$choices->{'fontmenu'}.'</td>'; |
$datatable .= '<td>'.&mt('Default in use:').' <span id="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>'; |
if (!$is_custom->{'fontmenu'}) { |
} else { |
$datatable .= '<td>'.&mt('Default in use:').' <span id="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>'; |
$datatable .= '<td> </td>'; |
} else { |
|
$datatable .= '<td> </td>'; |
|
} |
|
$fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'}); |
|
$datatable .= '<td><span class="LC_nobreak">'. |
|
'<input type="text" size="10" name="'.$role.'_fontmenu"'. |
|
' value="'.$designs->{'fontmenu'}.'" /> '.$fontlink. |
|
' <span id="css_'.$role.'_fontmenu" style="background-color: '. |
|
$designs->{'fontmenu'}.';"> </span>'. |
|
'</span></td></tr>'; |
} |
} |
$fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'}); |
|
$datatable .= '<td><span class="LC_nobreak">'. |
|
'<input type="text" size="10" name="'.$role.'_fontmenu"'. |
|
' value="'.$designs->{'fontmenu'}.'" /> '.$fontlink. |
|
' <span id="css_'.$role.'_fontmenu" style="background-color: '. |
|
$designs->{'fontmenu'}.';"> </span>'. |
|
'</span></td></tr>'; |
|
my $switchserver = &check_switchserver($dom,$confname); |
my $switchserver = &check_switchserver($dom,$confname); |
foreach my $img (@{$images}) { |
foreach my $img (@{$images}) { |
$itemcount ++; |
$itemcount ++; |
Line 1145 sub print_quotas {
|
Line 1216 sub print_quotas {
|
my ($css_class,%titles); |
my ($css_class,%titles); |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
@usertools = ('official','unofficial','community'); |
@usertools = ('official','unofficial','community'); |
@options =('norequest','approve','autolimit','validate'); |
@options =('norequest','approval','validate','autolimit'); |
%validations = &Apache::lonnet::auto_courserequest_checks($dom); |
%validations = &Apache::lonnet::auto_courserequest_checks($dom); |
%titles = &courserequest_titles(); |
%titles = &courserequest_titles(); |
} else { |
} else { |
Line 1218 sub print_quotas {
|
Line 1289 sub print_quotas {
|
if ($option eq 'autolimit') { |
if ($option eq 'autolimit') { |
$cell{$item} .= '<input type="text" name="crsreq_'. |
$cell{$item} .= '<input type="text" name="crsreq_'. |
$item.'_limit_'.$type.'" size="1" '. |
$item.'_limit_'.$type.'" size="1" '. |
'value="'.$currlimit.'" />'; |
'value="'.$currlimit.'" />'; |
} |
} |
$cell{$item} .= '</span> '; |
$cell{$item} .= '</span> '; |
|
if ($option eq 'autolimit') { |
|
$cell{$item} .= $titles{'unlimited'} |
|
} |
} |
} |
} else { |
} else { |
my $checked = 'checked="checked" '; |
my $checked = 'checked="checked" '; |
Line 1242 sub print_quotas {
|
Line 1316 sub print_quotas {
|
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
$datatable .= '</tr><tr>'; |
$datatable .= '</tr><tr>'; |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
$datatable .= '<td>'.$cell{$item}.'</td>'; |
$datatable .= '<td style="vertical-align: top">'.$cell{$item}.'</td>'; |
} |
} |
$datatable .= '</tr></table>'; |
$datatable .= '</tr></table>'; |
} |
} |
Line 1324 sub print_quotas {
|
Line 1398 sub print_quotas {
|
'value="'.$currlimit.'" />'; |
'value="'.$currlimit.'" />'; |
} |
} |
$defcell{$item} .= '</span> '; |
$defcell{$item} .= '</span> '; |
|
if ($option eq 'autolimit') { |
|
$defcell{$item} .= $titles{'unlimited'} |
|
} |
} |
} |
} else { |
} else { |
my $checked = 'checked="checked" '; |
my $checked = 'checked="checked" '; |
Line 1345 sub print_quotas {
|
Line 1422 sub print_quotas {
|
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
$datatable .= '</tr><tr>'; |
$datatable .= '</tr><tr>'; |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
$datatable .= '<td>'.$defcell{$item}.'</td>'; |
$datatable .= '<td style="vertical-align: top">'.$defcell{$item}.'</td>'; |
} |
} |
$datatable .= '</tr></table>'; |
$datatable .= '</tr></table>'; |
} |
} |
Line 1359 sub print_quotas {
|
Line 1436 sub print_quotas {
|
$typecount ++; |
$typecount ++; |
$css_class = $typecount%2?' class="LC_odd_row"':''; |
$css_class = $typecount%2?' class="LC_odd_row"':''; |
$datatable .= '<tr'.$css_class.'>'. |
$datatable .= '<tr'.$css_class.'>'. |
'<td>'.&mt('LON-CAPA Advanced Users'). |
'<td>'.&mt('LON-CAPA Advanced Users').' '; |
' <span class="LC_nobreak">('. |
|
&mt('overrides affiliation').')</span></td>'. |
|
'<td class="LC_left_item" colspan="2">'; |
|
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
$datatable .= '<table><tr>'; |
$datatable .= &mt('(overrides affiliation, if set)'). |
|
'</td>'. |
|
'<td class="LC_left_item">'. |
|
'<table><tr>'; |
} else { |
} else { |
$datatable .= '<br />'; |
$datatable .= &mt('(overrides affiliation, if checked)'). |
|
'</td>'. |
|
'<td class="LC_left_item" colspan="2">'. |
|
'<br />'; |
} |
} |
my %advcell; |
my %advcell; |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
Line 1380 sub print_quotas {
|
Line 1460 sub print_quotas {
|
} |
} |
} |
} |
} |
} |
if (!$curroption) { |
|
$curroption = 'norequest'; |
|
} |
|
$datatable .= '<th>'.$titles{$item}.'</th>'; |
$datatable .= '<th>'.$titles{$item}.'</th>'; |
|
my $checked = ''; |
|
if ($curroption eq '') { |
|
$checked = ' checked="checked"'; |
|
} |
|
$advcell{$item} .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="crsreq_'.$item. |
|
'__LC_adv" value=""'.$checked.' />'. |
|
&mt('No override set').'</label></span> '; |
foreach my $option (@options) { |
foreach my $option (@options) { |
my $val = $option; |
my $val = $option; |
if ($option eq 'norequest') { |
if ($option eq 'norequest') { |
Line 1399 sub print_quotas {
|
Line 1484 sub print_quotas {
|
next if (!$canvalidate); |
next if (!$canvalidate); |
} |
} |
my $checked = ''; |
my $checked = ''; |
if ($option eq $curroption) { |
if ($val eq $curroption) { |
$checked = ' checked="checked"'; |
$checked = ' checked="checked"'; |
} elsif ($option eq 'autolimit') { |
} elsif ($option eq 'autolimit') { |
if ($curroption =~ /^autolimit/) { |
if ($curroption =~ /^autolimit/) { |
Line 1416 sub print_quotas {
|
Line 1501 sub print_quotas {
|
'value="'.$currlimit.'" />'; |
'value="'.$currlimit.'" />'; |
} |
} |
$advcell{$item} .= '</span> '; |
$advcell{$item} .= '</span> '; |
|
if ($option eq 'autolimit') { |
|
$advcell{$item} .= $titles{'unlimited'} |
|
} |
} |
} |
} else { |
} else { |
my $checked = 'checked="checked" '; |
my $checked = 'checked="checked" '; |
Line 1437 sub print_quotas {
|
Line 1525 sub print_quotas {
|
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
$datatable .= '</tr><tr>'; |
$datatable .= '</tr><tr>'; |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
$datatable .= '<td>'.$advcell{$item}.'</td>'; |
$datatable .= '<td style="vertical-align: top">'.$advcell{$item}.'</td>'; |
} |
} |
$datatable .= '</tr></table>'; |
$datatable .= '</tr></table>'; |
} |
} |
Line 1446 sub print_quotas {
|
Line 1534 sub print_quotas {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
|
sub print_courserequestmail { |
|
my ($dom,$settings,$rowtotal) = @_; |
|
my ($now,$datatable,%dompersonnel,@domcoord,@currapproval,$rows); |
|
$now = time; |
|
$rows = 0; |
|
%dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); |
|
foreach my $server (keys(%dompersonnel)) { |
|
foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { |
|
my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); |
|
if (!grep(/^$uname:$udom$/,@domcoord)) { |
|
push(@domcoord,$uname.':'.$udom); |
|
} |
|
} |
|
} |
|
if (ref($settings) eq 'HASH') { |
|
if (ref($settings->{'notify'}) eq 'HASH') { |
|
if ($settings->{'notify'}{'approval'} ne '') { |
|
@currapproval = split(',',$settings->{'notify'}{'approval'}); |
|
} |
|
} |
|
} |
|
if (@currapproval) { |
|
foreach my $dc (@currapproval) { |
|
unless (grep(/^\Q$dc\E$/,@domcoord)) { |
|
push(@domcoord,$dc); |
|
} |
|
} |
|
} |
|
@domcoord = sort(@domcoord); |
|
my $numinrow = 4; |
|
my $numdc = @domcoord; |
|
my $css_class = 'class="LC_odd_row"'; |
|
$datatable = '<tr'.$css_class.'>'. |
|
' <td>'.&mt('Receive notification of course requests requiring approval.'). |
|
' </td>'. |
|
' <td class="LC_left_item">'; |
|
if (@domcoord > 0) { |
|
$datatable .= '<table>'; |
|
for (my $i=0; $i<$numdc; $i++) { |
|
my $rem = $i%($numinrow); |
|
if ($rem == 0) { |
|
if ($i > 0) { |
|
$datatable .= '</tr>'; |
|
} |
|
$datatable .= '<tr>'; |
|
$rows ++; |
|
} |
|
my $check = ' '; |
|
if (grep(/^\Q$domcoord[$i]\E$/,@currapproval)) { |
|
$check = ' checked="checked" '; |
|
} |
|
my ($uname,$udom) = split(':',$domcoord[$i]); |
|
my $fullname = &Apache::loncommon::plainname($uname,$udom); |
|
if ($i == $numdc-1) { |
|
my $colsleft = $numinrow-$rem; |
|
if ($colsleft > 1) { |
|
$datatable .= '<td colspan="'.$colsleft.'" class="LC_left_item">'; |
|
} else { |
|
$datatable .= '<td class="LC_left_item">'; |
|
} |
|
} else { |
|
$datatable .= '<td class="LC_left_item">'; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="checkbox" name="reqapprovalnotify" '. |
|
'value="'.$domcoord[$i].'"'.$check.'/>'. |
|
$fullname.'</label></span></td>'; |
|
} |
|
$datatable .= '</tr></table>'; |
|
} else { |
|
$datatable .= &mt('There are no active Domain Coordinators'); |
|
$rows ++; |
|
} |
|
$datatable .='</td></tr>'; |
|
$$rowtotal += $rows; |
|
return $datatable; |
|
} |
|
|
sub print_autoenroll { |
sub print_autoenroll { |
my ($dom,$settings,$rowtotal) = @_; |
my ($dom,$settings,$rowtotal) = @_; |
my $autorun = &Apache::lonnet::auto_run(undef,$dom), |
my $autorun = &Apache::lonnet::auto_run(undef,$dom), |
Line 1682 sub print_contacts {
|
Line 1848 sub print_contacts {
|
my $datatable; |
my $datatable; |
my @contacts = ('adminemail','supportemail'); |
my @contacts = ('adminemail','supportemail'); |
my (%checked,%to,%otheremails); |
my (%checked,%to,%otheremails); |
my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail'); |
my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail', |
|
'requestsmail'); |
foreach my $type (@mailings) { |
foreach my $type (@mailings) { |
$otheremails{$type} = ''; |
$otheremails{$type} = ''; |
} |
} |
Line 1713 sub print_contacts {
|
Line 1880 sub print_contacts {
|
$checked{'packagesmail'}{'adminemail'} = ' checked="checked" '; |
$checked{'packagesmail'}{'adminemail'} = ' checked="checked" '; |
$checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; |
$checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; |
$checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; |
$checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; |
|
$checked{'requestsmail'}{'adminemail'} = ' checked="checked" '; |
} |
} |
my ($titles,$short_titles) = &contact_titles(); |
my ($titles,$short_titles) = &contact_titles(); |
my $rownum = 0; |
my $rownum = 0; |
Line 1758 sub contact_titles {
|
Line 1926 sub contact_titles {
|
'packagesmail' => 'Package update alerts 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)', |
'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)', |
|
'requestsmail' => 'E-mail from course requests requiring approval', |
); |
); |
my %short_titles = &Apache::lonlocal::texthash ( |
my %short_titles = &Apache::lonlocal::texthash ( |
adminemail => 'Admin E-mail address', |
adminemail => 'Admin E-mail address', |
Line 1784 sub courserequest_titles {
|
Line 1953 sub courserequest_titles {
|
unofficial => 'Unofficial', |
unofficial => 'Unofficial', |
community => 'Communities', |
community => 'Communities', |
norequest => 'Not allowed', |
norequest => 'Not allowed', |
approve => 'Approval by Dom. Coord.', |
approval => 'Approval by Dom. Coord.', |
validate => 'With validation', |
validate => 'With validation', |
autolimit => 'Numerical limit', |
autolimit => 'Numerical limit', |
|
unlimited => '(blank for unlimited)', |
); |
); |
return %titles; |
return %titles; |
} |
} |
|
|
sub courserequest_conditions { |
sub courserequest_conditions { |
my %conditions = &Apache::lonlocal::texthash ( |
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).', |
validate => '(Processing of request subject to instittutional validation).', |
); |
); |
return %conditions; |
return %conditions; |
Line 2553 sub print_serverstatuses {
|
Line 2723 sub print_serverstatuses {
|
sub serverstatus_pages { |
sub serverstatus_pages { |
return ('userstatus','lonstatus','loncron','server-status','codeversions', |
return ('userstatus','lonstatus','loncron','server-status','codeversions', |
'clusterstatus','metadata_keywords','metadata_harvest', |
'clusterstatus','metadata_keywords','metadata_harvest', |
'takeoffline','takeonline','showenv'); |
'takeoffline','takeonline','showenv','toggledebug'); |
} |
} |
|
|
sub coursecategories_javascript { |
sub coursecategories_javascript { |
Line 2580 sub coursecategories_javascript {
|
Line 2750 sub coursecategories_javascript {
|
} |
} |
$output = <<"ENDSCRIPT"; |
$output = <<"ENDSCRIPT"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
|
// <![CDATA[ |
function reorderCats(form,parent,item,idx) { |
function reorderCats(form,parent,item,idx) { |
var changedVal; |
var changedVal; |
$jstext |
$jstext |
Line 2636 $jstext
|
Line 2807 $jstext
|
} |
} |
return; |
return; |
} |
} |
|
// ]]> |
</script> |
</script> |
|
|
ENDSCRIPT |
ENDSCRIPT |
Line 2967 sub modify_login {
|
Line 3139 sub modify_login {
|
my %title = ( coursecatalog => 'Display course catalog', |
my %title = ( coursecatalog => 'Display course catalog', |
adminmail => 'Display administrator E-mail address', |
adminmail => 'Display administrator E-mail address', |
newuser => 'Link for visitors to create a user account', |
newuser => 'Link for visitors to create a user account', |
|
submitbugs => 'Link for users to submit a bug', |
loginheader => 'Log-in box header'); |
loginheader => 'Log-in box header'); |
my @offon = ('off','on'); |
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; |
my %loginhash; |
($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'], |
($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'], |
\%domconfig,\%loginhash); |
\%domconfig,\%loginhash); |
my @toggles = ('coursecatalog','adminmail','newuser'); |
my @toggles = ('coursecatalog','adminmail','newuser','submitbugs'); |
foreach my $item (@toggles) { |
foreach my $item (@toggles) { |
$loginhash{login}{$item} = $env{'form.'.$item}; |
$loginhash{login}{$item} = $env{'form.'.$item}; |
} |
} |
Line 2981 sub modify_login {
|
Line 3162 sub modify_login {
|
$colchgtext = &display_colorchgs($dom,\%colchanges,['login'], |
$colchgtext = &display_colorchgs($dom,\%colchanges,['login'], |
\%loginhash); |
\%loginhash); |
} |
} |
|
|
|
my %servers = &dom_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, |
my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash, |
$dom); |
$dom); |
if ($putresult eq 'ok') { |
if ($putresult eq 'ok') { |
my @toggles = ('coursecatalog','adminmail','newuser'); |
my @toggles = ('coursecatalog','adminmail','newuser','submitbugs'); |
my %defaultchecked = ( |
my %defaultchecked = ( |
'coursecatalog' => 'on', |
'coursecatalog' => 'on', |
'adminmail' => 'off', |
'adminmail' => 'off', |
'newuser' => 'off', |
'newuser' => 'off', |
|
'submitbugs' => 'on', |
); |
); |
if (ref($domconfig{'login'}) eq 'HASH') { |
if (ref($domconfig{'login'}) eq 'HASH') { |
foreach my $item (@toggles) { |
foreach my $item (@toggles) { |
Line 3027 sub modify_login {
|
Line 3227 sub modify_login {
|
foreach my $item (sort(keys(%changes))) { |
foreach my $item (sort(keys(%changes))) { |
if ($item eq 'loginheader') { |
if ($item eq 'loginheader') { |
$resulttext .= '<li>'.&mt("$title{$item} set to $env{'form.loginheader'}").'</li>'; |
$resulttext .= '<li>'.&mt("$title{$item} set to $env{'form.loginheader'}").'</li>'; |
|
} elsif ($item eq 'loginvia') { |
|
if (ref($changes{$item}) eq 'HASH') { |
|
$resulttext .= '<li>'.&mt('Log-in page availability:').'<ul>'; |
|
foreach my $lonhost (sort(keys(%{$changes{$item}}))) { |
|
if ($servers{$env{'form.'.$lonhost.'_serverurl'}} ne '') { |
|
$resulttext .= '<li>'.&mt('Server: [_1] log-in page now redirects to [_2]',$lonhost,$servers{$env{'form.'.$lonhost.'_serverurl'}}).'</li>'; |
|
} else { |
|
$resulttext .= '<li>'.&mt('Server: [_1] now has standard log-in page.',$lonhost).'</li>'; |
|
} |
|
} |
|
$resulttext .= '</ul></li>'; |
|
} |
} else { |
} else { |
$resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>'; |
$resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>'; |
} |
} |
Line 3112 sub modify_colors {
|
Line 3324 sub modify_colors {
|
@logintext = ('textcol','bgcol'); |
@logintext = ('textcol','bgcol'); |
} else { |
} else { |
%choices = &color_font_choices(); |
%choices = &color_font_choices(); |
|
$confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'}; |
} |
} |
if ($role eq 'login') { |
if ($role eq 'login') { |
@images = ('img','logo','domlogo','login'); |
@images = ('img','logo','domlogo','login'); |
Line 3121 sub modify_colors {
|
Line 3334 sub modify_colors {
|
@bgs = ('pgbg','tabbg','sidebg'); |
@bgs = ('pgbg','tabbg','sidebg'); |
} |
} |
$confhash->{$role}{'font'} = $env{'form.'.$role.'_font'}; |
$confhash->{$role}{'font'} = $env{'form.'.$role.'_font'}; |
$confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'}; |
|
foreach my $item (@bgs,@links,@logintext) { |
foreach my $item (@bgs,@links,@logintext) { |
$confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item}; |
$confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item}; |
} |
} |
Line 3235 sub modify_colors {
|
Line 3447 sub modify_colors {
|
$changes{$role}{'font'} = 1; |
$changes{$role}{'font'} = 1; |
} |
} |
} |
} |
if ($domconfig->{$role}{'fontmenu'} ne '') { |
if ($role ne 'login') { |
if ($confhash->{$role}{'fontmenu'} ne $domconfig->{$role}{'fontmenu'}) { |
if ($domconfig->{$role}{'fontmenu'} ne '') { |
$changes{$role}{'fontmenu'} = 1; |
if ($confhash->{$role}{'fontmenu'} ne $domconfig->{$role}{'fontmenu'}) { |
} |
$changes{$role}{'fontmenu'} = 1; |
} else { |
} |
if ($confhash->{$role}{'fontmenu'}) { |
} else { |
$changes{$role}{'fontmenu'} = 1; |
if ($confhash->{$role}{'fontmenu'}) { |
|
$changes{$role}{'fontmenu'} = 1; |
|
} |
} |
} |
} |
} |
foreach my $item (@bgs) { |
foreach my $item (@bgs) { |
Line 3684 sub modify_quotas {
|
Line 3898 sub modify_quotas {
|
} |
} |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
@usertools = ('official','unofficial','community'); |
@usertools = ('official','unofficial','community'); |
@options =('norequest','approve','autolimit','validate'); |
@options =('norequest','approval','validate','autolimit'); |
%validations = &Apache::lonnet::auto_courserequest_checks($dom); |
%validations = &Apache::lonnet::auto_courserequest_checks($dom); |
%titles = &courserequest_titles(); |
%titles = &courserequest_titles(); |
$toolregexp = join('|',@usertools); |
$toolregexp = join('|',@usertools); |
Line 3715 sub modify_quotas {
|
Line 3929 sub modify_quotas {
|
} |
} |
} |
} |
} |
} |
unless ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
|
my @approvalnotify = &Apache::loncommon::get_env_multiple('form.reqapprovalnotify'); |
|
@approvalnotify = sort(@approvalnotify); |
|
$confhash{'notify'}{'approval'} = join(',',@approvalnotify); |
|
if (ref($domconfig{$action}) eq 'HASH') { |
|
if (ref($domconfig{$action}{'notify'}) eq 'HASH') { |
|
if ($domconfig{$action}{'notify'}{'approval'} ne $confhash{'notify'}{'approval'}) { |
|
$changes{'notify'}{'approval'} = 1; |
|
} |
|
} else { |
|
if ($domconfig{$action}{'notify'}{'approval'}) { |
|
$changes{'notify'}{'approval'} = 1; |
|
} |
|
} |
|
} else { |
|
if ($domconfig{$action}{'notify'}{'approval'}) { |
|
$changes{'notify'}{'approval'} = 1; |
|
} |
|
} |
|
} else { |
$confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; |
$confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; |
} |
} |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
foreach my $type (@{$types},'default','_LC_adv') { |
foreach my $type (@{$types},'default','_LC_adv') { |
|
my $unset; |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
|
$unset = '0'; |
|
if ($type eq '_LC_adv') { |
|
$unset = ''; |
|
} |
if ($confhash{$item}{$type} eq 'autolimit') { |
if ($confhash{$item}{$type} eq 'autolimit') { |
$confhash{$item}{$type} .= '='; |
$confhash{$item}{$type} .= '='; |
unless ($limithash{$item}{$type} =~ /\D/) { |
unless ($limithash{$item}{$type} =~ /\D/) { |
Line 3741 sub modify_quotas {
|
Line 3979 sub modify_quotas {
|
} |
} |
} else { |
} else { |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
if ($confhash{$item}{$type} ne 'norequest') { |
if ($confhash{$item}{$type} ne $unset) { |
$changes{$item}{$type} = 1; |
$changes{$item}{$type} = 1; |
} |
} |
} else { |
} else { |
Line 3752 sub modify_quotas {
|
Line 3990 sub modify_quotas {
|
} |
} |
} else { |
} else { |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
if ($confhash{$item}{$type} eq 'norequest') { |
if ($confhash{$item}{$type} ne $unset) { |
$changes{$item}{$type} = 1; |
$changes{$item}{$type} = 1; |
} |
} |
} else { |
} else { |
Line 3844 sub modify_quotas {
|
Line 4082 sub modify_quotas {
|
$env{'user.domain'}, |
$env{'user.domain'}, |
$item,'reload',$context); |
$item,'reload',$context); |
if ($context eq 'requestcourses') { |
if ($context eq 'requestcourses') { |
if ($env{'environment.crsrequest.'.$item} ne $newacc) { |
if ($env{'environment.canrequest.'.$item} ne $newacc) { |
$newenv{'environment.crsrequest.'.$item} = $newacc; |
$newenv{'environment.canrequest.'.$item} = $newacc; |
} |
} |
} else { |
} else { |
if ($env{'environment.availabletools.'.$item} ne $newacc) { |
if ($env{'environment.availabletools.'.$item} ne $newacc) { |
Line 3878 sub modify_quotas {
|
Line 4116 sub modify_quotas {
|
$resulttext .= '<li>'.&mt('Set to be available to [_1]',$typetitle).'</li>'; |
$resulttext .= '<li>'.&mt('Set to be available to [_1]',$typetitle).'</li>'; |
} |
} |
} else { |
} else { |
$resulttext .= '<li>'.&mt('Set to be unavailable to [_1]',$typetitle).'</li>'; |
if ($type eq '_LC_adv') { |
|
if ($confhash{$item}{$type} eq '0') { |
|
$resulttext .= '<li>'.&mt('Set to be unavailable to [_1]',$typetitle).'</li>'; |
|
} else { |
|
$resulttext .= '<li>'.&mt('No override set for [_1]',$typetitle).'</li>'; |
|
} |
|
} else { |
|
$resulttext .= '<li>'.&mt('Set to be unavailable to [_1]',$typetitle).'</li>'; |
|
} |
} |
} |
} |
} |
} |
} |
$resulttext .= '</ul></li>'; |
$resulttext .= '</ul></li>'; |
} |
} |
} |
} |
|
if ($action eq 'requestcourses') { |
|
if (ref($changes{'notify'}) eq 'HASH') { |
|
if ($changes{'notify'}{'approval'}) { |
|
if (ref($confhash{'notify'}) eq 'HASH') { |
|
if ($confhash{'notify'}{'approval'}) { |
|
$resulttext .= '<li>'.&mt('Notification of requests requiring approval will be sent to: ').$confhash{'notify'}{'approval'}.'</li>'; |
|
} else { |
|
$resulttext .= '<li>'.&mt('No Domain Coordinators will receive notification of course requests requiring approval.').'</li>'; |
|
} |
|
} |
|
} |
|
} |
|
} |
$resulttext .= '</ul>'; |
$resulttext .= '</ul>'; |
if (keys(%newenv)) { |
if (keys(%newenv)) { |
&Apache::lonnet::appenv(\%newenv); |
&Apache::lonnet::appenv(\%newenv); |
Line 4277 sub modify_contacts {
|
Line 4536 sub modify_contacts {
|
} |
} |
my (%others,%to); |
my (%others,%to); |
my @contacts = ('supportemail','adminemail'); |
my @contacts = ('supportemail','adminemail'); |
my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail'); |
my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail', |
|
'requestsmail'); |
foreach my $type (@mailings) { |
foreach my $type (@mailings) { |
@{$newsetting{$type}} = |
@{$newsetting{$type}} = |
&Apache::loncommon::get_env_multiple('form.'.$type); |
&Apache::loncommon::get_env_multiple('form.'.$type); |
Line 4323 sub modify_contacts {
|
Line 4583 sub modify_contacts {
|
$default{'packagesmail'} = 'adminemail'; |
$default{'packagesmail'} = 'adminemail'; |
$default{'helpdeskmail'} = 'supportemail'; |
$default{'helpdeskmail'} = 'supportemail'; |
$default{'lonstatusmail'} = 'adminemail'; |
$default{'lonstatusmail'} = 'adminemail'; |
|
$default{'requestsmail'} = 'adminemail'; |
foreach my $item (@contacts) { |
foreach my $item (@contacts) { |
if ($to{$item} ne $default{$item}) { |
if ($to{$item} ne $default{$item}) { |
$changes{$item} = 1; |
$changes{$item} = 1; |
Line 4411 sub modify_usercreation {
|
Line 4672 sub modify_usercreation {
|
if (@{$types} > 0) { |
if (@{$types} > 0) { |
@{$cancreate{'statustocreate'}} = |
@{$cancreate{'statustocreate'}} = |
&Apache::loncommon::get_env_multiple('form.statustocreate'); |
&Apache::loncommon::get_env_multiple('form.statustocreate'); |
|
} else { |
|
@{$cancreate{'statustocreate'}} = (); |
} |
} |
push(@contexts,'statustocreate'); |
push(@contexts,'statustocreate'); |
} |
} |
Line 4419 sub modify_usercreation {
|
Line 4682 sub modify_usercreation {
|
if (($item eq 'selfcreate') || ($item eq 'statustocreate')) { |
if (($item eq 'selfcreate') || ($item eq 'statustocreate')) { |
if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') { |
if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') { |
foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) { |
foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) { |
if (!grep(/^$curr$/,@{$cancreate{$item}})) { |
if (ref($cancreate{$item}) eq 'ARRAY') { |
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
if (!grep(/^$curr$/,@{$cancreate{$item}})) { |
push(@{$changes{'cancreate'}},$item); |
if (!grep(/^$item$/,@{$changes{'cancreate'}})) { |
|
push(@{$changes{'cancreate'}},$item); |
|
} |
} |
} |
} |
} |
} |
} |
Line 4890 sub modify_defaults {
|
Line 5155 sub modify_defaults {
|
if ($newvalues{$item} ne '') { |
if ($newvalues{$item} ne '') { |
if ($newvalues{$item} =~ /^(\w+)/) { |
if ($newvalues{$item} =~ /^(\w+)/) { |
my $langcode = $1; |
my $langcode = $1; |
if (code2language($langcode) eq '') { |
if ($langcode ne 'x_chef') { |
push(@errors,$item); |
if (code2language($langcode) eq '') { |
|
push(@errors,$item); |
|
} |
} |
} |
} else { |
} else { |
push(@errors,$item); |
push(@errors,$item); |
Line 5399 sub recurse_cat_deletes {
|
Line 5666 sub recurse_cat_deletes {
|
return; |
return; |
} |
} |
|
|
|
sub dom_servers { |
|
my ($dom) = @_; |
|
my (%uniqservers,%servers); |
|
my $primaryserver = &Apache::lonnet::hostname(&Apache::lonnet::domain($dom,'primary')); |
|
my @machinedoms = &Apache::lonnet::machine_domains($primaryserver); |
|
foreach my $mdom (@machinedoms) { |
|
my %currservers = %servers; |
|
my %server = &Apache::lonnet::get_servers($mdom); |
|
%servers = (%currservers,%server); |
|
} |
|
my %by_hostname; |
|
foreach my $id (keys(%servers)) { |
|
push(@{$by_hostname{$servers{$id}}},$id); |
|
} |
|
foreach my $hostname (sort(keys(%by_hostname))) { |
|
if (@{$by_hostname{$hostname}} > 1) { |
|
my $match = 0; |
|
foreach my $id (@{$by_hostname{$hostname}}) { |
|
if (&Apache::lonnet::host_domain($id) eq $dom) { |
|
$uniqservers{$id} = $hostname; |
|
$match = 1; |
|
} |
|
} |
|
unless ($match) { |
|
$uniqservers{$by_hostname{$hostname}[0]} = $hostname; |
|
} |
|
} else { |
|
$uniqservers{$by_hostname{$hostname}[0]} = $hostname; |
|
} |
|
} |
|
return %uniqservers; |
|
} |
|
|
1; |
1; |