version 1.150, 2011/08/09 01:35:18
|
version 1.160.6.2, 2012/05/14 00:04:01
|
Line 171 use Locale::Language;
|
Line 171 use Locale::Language;
|
use DateTime::TimeZone; |
use DateTime::TimeZone; |
use DateTime::Locale; |
use DateTime::Locale; |
|
|
|
my $registered_cleanup; |
|
my $modified_urls; |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
if ($r->header_only) { |
if ($r->header_only) { |
Line 190 sub handler {
|
Line 193 sub handler {
|
"/adm/domainprefs:mau:0:0:Cannot modify domain settings"; |
"/adm/domainprefs:mau:0:0:Cannot modify domain settings"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
|
|
$registered_cleanup=0; |
|
@{$modified_urls}=(); |
|
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['phase','actions']); |
['phase','actions']); |
Line 203 sub handler {
|
Line 210 sub handler {
|
'quotas','autoenroll','autoupdate','autocreate', |
'quotas','autoenroll','autoupdate','autocreate', |
'directorysrch','usercreation','usermodification', |
'directorysrch','usercreation','usermodification', |
'contacts','defaults','scantron','coursecategories', |
'contacts','defaults','scantron','coursecategories', |
'serverstatuses','requestcourses','helpsettings', |
'serverstatuses','requestcourses','usersessions', |
'coursedefaults','usersessions','loadbalancing'],$dom); |
'loadbalancing'],$dom); |
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', |
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', |
'autoupdate','autocreate','directorysrch','contacts', |
'autoupdate','autocreate','directorysrch','contacts', |
'usercreation','usermodification','scantron', |
'usercreation','usermodification','scantron', |
'requestcourses','coursecategories','serverstatuses','helpsettings', |
'requestcourses','coursecategories','serverstatuses', |
'coursedefaults','usersessions'); |
'usersessions'); |
if (keys(%servers) > 1) { |
if (keys(%servers) > 1) { |
push(@prefs_order,'loadbalancing'); |
push(@prefs_order,'loadbalancing'); |
} |
} |
Line 333 sub handler {
|
Line 340 sub handler {
|
col3 => 'Specific IPs', |
col3 => 'Specific IPs', |
}], |
}], |
}, |
}, |
'helpsettings' => |
|
{text => 'Help page settings', |
|
help => 'Domain_Configuration_Help_Settings', |
|
header => [{col1 => 'Authenticated Help Settings', |
|
col2 => ''}, |
|
{col1 => 'Unauthenticated Help Settings', |
|
col2 => ''}], |
|
}, |
|
'coursedefaults' => |
|
{text => 'Course/Community defaults', |
|
help => 'Domain_Configuration_Course_Defaults', |
|
header => [{col1 => 'Defaults which can be overridden in each course by a CC', |
|
col2 => 'Value',}, |
|
{col1 => 'Defaults which can be overridden for each course by a DC', |
|
col2 => 'Value',},], |
|
}, |
|
'privacy' => |
|
{text => 'User Privacy', |
|
help => 'Domain_Configuration_User_Privacy', |
|
header => [{col1 => 'Setting', |
|
col2 => 'Value',}], |
|
}, |
|
'usersessions' => |
'usersessions' => |
{text => 'User session hosting/offloading', |
{text => 'User session hosting/offloading', |
help => 'Domain_Configuration_User_Sessions', |
help => 'Domain_Configuration_User_Sessions', |
Line 375 sub handler {
|
Line 360 sub handler {
|
], |
], |
}, |
}, |
); |
); |
my $js; |
|
if (keys(%servers) > 1) { |
if (keys(%servers) > 1) { |
$prefs{'login'} = { text => 'Log-in page options', |
$prefs{'login'} = { text => 'Log-in page options', |
help => 'Domain_Configuration_Login_Page', |
help => 'Domain_Configuration_Login_Page', |
Line 384 sub handler {
|
Line 368 sub handler {
|
{col1 => 'Log-in Page Items', |
{col1 => 'Log-in Page Items', |
col2 => ''}], |
col2 => ''}], |
}; |
}; |
my ($othertitle,$usertypes,$types) = |
|
&Apache::loncommon::sorted_inst_types($dom); |
|
|
|
$js = &lonbalance_targets_js($dom,$types,\%servers); |
|
} |
} |
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'); |
Line 398 sub handler {
|
Line 378 sub handler {
|
if ($phase eq 'process') { |
if ($phase eq 'process') { |
&Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); |
&Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); |
} elsif ($phase eq 'display') { |
} elsif ($phase eq 'display') { |
|
my $js; |
|
if (keys(%servers) > 1) { |
|
my ($othertitle,$usertypes,$types) = |
|
&Apache::loncommon::sorted_inst_types($dom); |
|
$js = &lonbalance_targets_js($dom,$types,\%servers). |
|
&new_spares_js(). |
|
&common_domprefs_js(). |
|
&Apache::loncommon::javascript_array_indexof(); |
|
} |
&Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js); |
&Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js); |
} else { |
} else { |
if (keys(%domconfig) == 0) { |
if (keys(%domconfig) == 0) { |
Line 476 sub process_changes {
|
Line 465 sub process_changes {
|
$output = &modify_serverstatuses($dom,%domconfig); |
$output = &modify_serverstatuses($dom,%domconfig); |
} elsif ($action eq 'requestcourses') { |
} elsif ($action eq 'requestcourses') { |
$output = &modify_quotas($dom,$action,%domconfig); |
$output = &modify_quotas($dom,$action,%domconfig); |
} elsif ($action eq 'helpsettings') { |
|
$output = &modify_helpsettings($r,$dom,$confname,%domconfig); |
|
} elsif ($action eq 'coursedefaults') { |
|
$output = &modify_coursedefaults($dom,%domconfig); |
|
} elsif ($action eq 'usersessions') { |
} elsif ($action eq 'usersessions') { |
$output = &modify_usersessions($dom,%domconfig); |
$output = &modify_usersessions($dom,%domconfig); |
} elsif ($action eq 'loadbalancing') { |
} elsif ($action eq 'loadbalancing') { |
Line 538 sub print_config_box {
|
Line 523 sub print_config_box {
|
$colspan = ' colspan="2"'; |
$colspan = ' colspan="2"'; |
} elsif ($action eq 'requestcourses') { |
} elsif ($action eq 'requestcourses') { |
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
$output .= &print_quotas($dom,$settings,\$rowtotal,$action); |
} elsif ($action eq 'helpsettings') { |
|
$output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal); |
|
} elsif ($action eq 'usersessions') { |
} elsif ($action eq 'usersessions') { |
$output .= &print_usersessions('top',$dom,$settings,\$rowtotal); |
$output .= &print_usersessions('top',$dom,$settings,\$rowtotal); |
} elsif ($action eq 'rolecolors') { |
} elsif ($action eq 'rolecolors') { |
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal); |
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal); |
} elsif ($action eq 'coursedefaults') { |
|
$output .= &print_coursedefaults('top',$dom,$settings,\$rowtotal); |
|
} |
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
Line 1047 sub print_rolecolors {
|
Line 1028 sub print_rolecolors {
|
sub display_color_options { |
sub display_color_options { |
my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs, |
my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs, |
$images,$bgs,$links,$alt_text,$rowtotal,$logintext) = @_; |
$images,$bgs,$links,$alt_text,$rowtotal,$logintext) = @_; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $css_class = $itemcount%2?' class="LC_odd_row"':''; |
my $css_class = $itemcount%2?' class="LC_odd_row"':''; |
my $datatable = '<tr'.$css_class.'>'. |
my $datatable = '<tr'.$css_class.'>'. |
'<td>'.$choices->{'font'}.'</td>'; |
'<td>'.$choices->{'font'}.'</td>'; |
Line 1124 sub display_color_options {
|
Line 1106 sub display_color_options {
|
$showfile = $imgfile; |
$showfile = $imgfile; |
my $imgdir = $1; |
my $imgdir = $1; |
my $filename = $2; |
my $filename = $2; |
if (-e "/home/httpd/html/$imgdir/tn-".$filename) { |
if (-e "$londocroot/$imgdir/tn-".$filename) { |
$showfile = "/$imgdir/tn-".$filename; |
$showfile = "/$imgdir/tn-".$filename; |
} else { |
} else { |
my $input = "/home/httpd/html".$imgfile; |
my $input = $londocroot.$imgfile; |
my $output = '/home/httpd/html/'.$imgdir.'/tn-'.$filename; |
my $output = "$londocroot/$imgdir/tn-".$filename; |
if (!-e $output) { |
if (!-e $output) { |
my ($width,$height) = &thumb_dimensions(); |
my ($width,$height) = &thumb_dimensions(); |
my ($fullwidth,$fullheight) = &check_dimensions($input); |
my ($fullwidth,$fullheight) = &check_dimensions($input); |
Line 1136 sub display_color_options {
|
Line 1118 sub display_color_options {
|
if ($fullwidth > $width && $fullheight > $height) { |
if ($fullwidth > $width && $fullheight > $height) { |
my $size = $width.'x'.$height; |
my $size = $width.'x'.$height; |
system("convert -sample $size $input $output"); |
system("convert -sample $size $input $output"); |
$showfile = '/'.$imgdir.'/tn-'.$filename; |
$showfile = "/$imgdir/tn-".$filename; |
} |
} |
} |
} |
} |
} |
Line 2336 sub print_usersessions {
|
Line 2318 sub print_usersessions {
|
&build_location_hashes(\@intdoms,\%by_ip,\%by_location); |
&build_location_hashes(\@intdoms,\%by_ip,\%by_location); |
|
|
my @alldoms = &Apache::lonnet::all_domains(); |
my @alldoms = &Apache::lonnet::all_domains(); |
my %uniques = &Apache::lonnet::get_unique_servers(\@alldoms); |
my %serverhomes = %Apache::lonnet::serverhomeIDs; |
my %servers = &Apache::lonnet::internet_dom_servers($dom); |
my %servers = &Apache::lonnet::internet_dom_servers($dom); |
|
my %altids = &id_for_thisdom(%servers); |
my $itemcount = 1; |
my $itemcount = 1; |
if ($position eq 'top') { |
if ($position eq 'top') { |
if (keys(%uniques) > 1) { |
if (keys(%serverhomes) > 1) { |
my %spareid = ¤t_offloads_to($dom,$settings,\%servers); |
my %spareid = ¤t_offloads_to($dom,$settings,\%servers); |
$datatable .= &spares_row(\%servers,\%spareid,\%uniques,$rowtotal); |
$datatable .= &spares_row($dom,\%servers,\%spareid,\%serverhomes,\%altids,$rowtotal); |
} else { |
} else { |
$datatable .= '<tr'.$css_class.'><td colspan="2">'. |
$datatable .= '<tr'.$css_class.'><td colspan="2">'. |
&mt('Nothing to set here, as the cluster to which this domain belongs only contains one server.'); |
&mt('Nothing to set here, as the cluster to which this domain belongs only contains one server.'); |
Line 2515 sub build_location_hashes {
|
Line 2498 sub build_location_hashes {
|
sub current_offloads_to { |
sub current_offloads_to { |
my ($dom,$settings,$servers) = @_; |
my ($dom,$settings,$servers) = @_; |
my (%spareid,%otherdomconfigs); |
my (%spareid,%otherdomconfigs); |
if ((ref($settings) eq 'HASH') && (ref($servers) eq 'HASH')) { |
if (ref($servers) eq 'HASH') { |
foreach my $lonhost (sort(keys(%{$servers}))) { |
foreach my $lonhost (sort(keys(%{$servers}))) { |
my $gotspares; |
my $gotspares; |
if (ref($settings->{'spares'}) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if (ref($settings->{'spares'}{$lonhost}) eq 'HASH') { |
if (ref($settings->{'spares'}) eq 'HASH') { |
$spareid{$lonhost}{'primary'} = $settings->{'spares'}{$lonhost}{'primary'}; |
if (ref($settings->{'spares'}{$lonhost}) eq 'HASH') { |
$spareid{$lonhost}{'default'} = $settings->{'spares'}{$lonhost}{'default'}; |
$spareid{$lonhost}{'primary'} = $settings->{'spares'}{$lonhost}{'primary'}; |
$gotspares = 1; |
$spareid{$lonhost}{'default'} = $settings->{'spares'}{$lonhost}{'default'}; |
|
$gotspares = 1; |
|
} |
} |
} |
} |
} |
unless ($gotspares) { |
unless ($gotspares) { |
Line 2590 sub current_offloads_to {
|
Line 2575 sub current_offloads_to {
|
} |
} |
|
|
sub spares_row { |
sub spares_row { |
my ($servers,$spareid,$uniques,$rowtotal) = @_; |
my ($dom,$servers,$spareid,$serverhomes,$altids,$rowtotal) = @_; |
my $css_class; |
my $css_class; |
my $numinrow = 4; |
my $numinrow = 4; |
my $itemcount = 1; |
my $itemcount = 1; |
my $datatable; |
my $datatable; |
if ((ref($servers) eq 'HASH') && (ref($spareid) eq 'HASH')) { |
my %typetitles = &sparestype_titles(); |
|
if ((ref($servers) eq 'HASH') && (ref($spareid) eq 'HASH') && (ref($altids) eq 'HASH')) { |
foreach my $server (sort(keys(%{$servers}))) { |
foreach my $server (sort(keys(%{$servers}))) { |
|
my $serverhome = &Apache::lonnet::get_server_homeID($servers->{$server}); |
|
my ($othercontrol,$serverdom); |
|
if ($serverhome ne $server) { |
|
$serverdom = &Apache::lonnet::host_domain($serverhome); |
|
$othercontrol = &mt('Session offloading controlled by domain: [_1]','<b>'.$serverdom.'</b>'); |
|
} else { |
|
$serverdom = &Apache::lonnet::host_domain($server); |
|
if ($serverdom ne $dom) { |
|
$othercontrol = &mt('Session offloading controlled by domain: [_1]','<b>'.$serverdom.'</b>'); |
|
} |
|
} |
|
next unless (ref($spareid->{$server}) eq 'HASH'); |
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; |
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; |
$datatable .= '<tr'.$css_class.'> |
$datatable .= '<tr'.$css_class.'> |
<td rowspan="2"> |
<td rowspan="2"> |
<span class="LC_nobreak"><b>'.$server.'</b> when busy, offloads to:</span></td>'; |
<span class="LC_nobreak"><b>'.$server.'</b> when busy, offloads to:</span></td>'."\n"; |
my (%current,%canselect); |
my (%current,%canselect); |
if (ref($spareid->{$server}) eq 'HASH') { |
my @choices = |
foreach my $type ('primary','default') { |
&possible_newspares($server,$spareid->{$server},$serverhomes,$altids); |
|
foreach my $type ('primary','default') { |
|
if (ref($spareid->{$server}) eq 'HASH') { |
if (ref($spareid->{$server}{$type}) eq 'ARRAY') { |
if (ref($spareid->{$server}{$type}) eq 'ARRAY') { |
my @spares = @{$spareid->{$server}{$type}}; |
my @spares = @{$spareid->{$server}{$type}}; |
if (@spares > 0) { |
if (@spares > 0) { |
$current{$type} .= '<table>'; |
if ($othercontrol) { |
for (my $i=0; $i<@spares; $i++) { |
$current{$type} = join(', ',@spares); |
my $rem = $i%($numinrow); |
} else { |
if ($rem == 0) { |
$current{$type} .= '<table>'; |
if ($i > 0) { |
my $numspares = scalar(@spares); |
$current{$type} .= '</tr>'; |
for (my $i=0; $i<@spares; $i++) { |
|
my $rem = $i%($numinrow); |
|
if ($rem == 0) { |
|
if ($i > 0) { |
|
$current{$type} .= '</tr>'; |
|
} |
|
$current{$type} .= '<tr>'; |
} |
} |
$current{$type} .= '<tr>'; |
$current{$type} .= '<td><label><input type="checkbox" name="spare_'.$type.'_'.$server.'" id="spare_'.$type.'_'.$server.'_'.$i.'" checked="checked" value="'.$spareid->{$server}{$type}[$i].'" onclick="updateNewSpares(this.form,'."'$server'".');" /> '. |
|
$spareid->{$server}{$type}[$i]. |
|
'</label></td>'."\n"; |
} |
} |
$current{$type} .= '<td><label><input type="checkbox" name="spare_'.$type.'_'.$server.'" checked="checked" value="'.$spareid->{$server}{$type}[$i].'" /> '. |
my $rem = @spares%($numinrow); |
$spareid->{$server}{$type}[$i]. |
my $colsleft = $numinrow - $rem; |
'</label></td>'; |
if ($colsleft > 1 ) { |
} |
$current{$type} .= '<td colspan="'.$colsleft. |
my $rem = @spares%($numinrow); |
'" class="LC_left_item">'. |
my $colsleft = $numinrow - $rem; |
' </td>'; |
if ($colsleft > 1 ) { |
} elsif ($colsleft == 1) { |
$current{$type} .= '<td colspan="'.$colsleft. |
$current{$type} .= '<td class="LC_left_item"> </td>'."\n"; |
'" class="LC_left_item">'. |
} |
' </td>'; |
$current{$type} .= '</tr></table>'; |
} elsif ($colsleft == 1) { |
|
$current{$type} .= '<td class="LC_left_item"> </td>'; |
|
} |
} |
} |
} |
$current{$type} .= '</tr></table>'; |
|
} |
} |
if ($current{$type} eq '') { |
if ($current{$type} eq '') { |
$current{$type} = &mt('None specified'); |
$current{$type} = &mt('None specified'); |
} |
} |
$canselect{$type} = |
if ($othercontrol) { |
&newspare_select($server,$type,$spareid->{$server}{$type},$uniques); |
if ($type eq 'primary') { |
|
$canselect{$type} = $othercontrol; |
|
} |
|
} else { |
|
$canselect{$type} = |
|
&mt('Add new [_1]'.$type.'[_2]:','<i>','</i>').' '. |
|
'<select name="newspare_'.$type.'_'.$server.'" '. |
|
'id="newspare_'.$type.'_'.$server.'" onchange="checkNewSpares('."'$server','$type'".');">'."\n". |
|
'<option value="" selected ="selected">'.&mt('Select').'</option>'."\n"; |
|
if (@choices > 0) { |
|
foreach my $lonhost (@choices) { |
|
$canselect{$type} .= '<option value="'.$lonhost.'">'.$lonhost.'</option>'."\n"; |
|
} |
|
} |
|
$canselect{$type} .= '</select>'."\n"; |
|
} |
|
} else { |
|
$current{$type} = &mt('Could not be determined'); |
|
if ($type eq 'primary') { |
|
$canselect{$type} = $othercontrol; |
|
} |
|
} |
|
if ($type eq 'default') { |
|
$datatable .= '<tr'.$css_class.'>'; |
} |
} |
|
$datatable .= '<td><i>'.$typetitles{$type}.'</i></td>'."\n". |
|
'<td>'.$current{$type}.'</td>'."\n". |
|
'<td>'.$canselect{$type}.'</td></tr>'."\n"; |
} |
} |
$datatable .= '<td><i>'.&mt('primary').'</i><td>'.$current{'primary'}.'</td>'. |
|
'<td>'.&mt('Add new [_1]primary[_2]:','<i>','</i>').' '. |
|
$canselect{'primary'}.'</td></tr>'. |
|
'<tr'.$css_class.'>'. |
|
'<td><i>'.&mt('default').'</i></td>'. |
|
'<td>'.$current{'default'}.'</td>'. |
|
'<td>'.&mt('Add new [_1]default[_2]:','<i>','</i>').' '. |
|
$canselect{'default'}.'</td></tr>'; |
|
$itemcount ++; |
$itemcount ++; |
} |
} |
} |
} |
Line 2654 sub spares_row {
|
Line 2677 sub spares_row {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
sub newspare_select { |
sub possible_newspares { |
my ($server,$type,$currspares,$uniques) = @_; |
my ($server,$currspares,$serverhomes,$altids) = @_; |
my $output; |
my $serverhostname = &Apache::lonnet::hostname($server); |
if (ref($uniques) eq 'HASH') { |
my %excluded; |
if (keys(%{$uniques}) > 1) { |
if ($serverhostname ne '') { |
$output = '<select name="newspare_'.$type.'_'.$server.'">'."\n". |
%excluded = ( |
'<option value="" selected ="selected">'.&mt('Select').'</option>'."\n"; |
$serverhostname => 1, |
foreach my $lonhost (sort(keys(%{$uniques}))) { |
); |
next if ($lonhost eq $server); |
} |
if (ref($currspares) eq 'ARRAY') { |
if (ref($currspares) eq 'HASH') { |
if (@{$currspares} > 0) { |
foreach my $type (keys(%{$currspares})) { |
next if (grep(/^\Q$lonhost\E$/,@{$currspares})); |
if (ref($currspares->{$type}) eq 'ARRAY') { |
|
if (@{$currspares->{$type}} > 0) { |
|
foreach my $curr (@{$currspares->{$type}}) { |
|
my $hostname = &Apache::lonnet::hostname($curr); |
|
$excluded{$hostname} = 1; |
} |
} |
} |
} |
$output .= '<option value="'.$lonhost.'">'.$lonhost.'</option>'."\n"; |
|
} |
} |
$output .= '<select>'; |
|
} |
} |
} |
} |
return $output; |
my @choices; |
|
if ((ref($serverhomes) eq 'HASH') && (ref($altids) eq 'HASH')) { |
|
if (keys(%{$serverhomes}) > 1) { |
|
foreach my $name (sort(keys(%{$serverhomes}))) { |
|
unless ($excluded{$name}) { |
|
if (exists($altids->{$serverhomes->{$name}})) { |
|
push(@choices,$altids->{$serverhomes->{$name}}); |
|
} else { |
|
push(@choices,$serverhomes->{$name}); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return sort(@choices); |
} |
} |
|
|
sub print_loadbalancing { |
sub print_loadbalancing { |
Line 2702 sub print_loadbalancing {
|
Line 2741 sub print_loadbalancing {
|
if (ref($types) eq 'ARRAY') { |
if (ref($types) eq 'ARRAY') { |
$rownum += scalar(@{$types}); |
$rownum += scalar(@{$types}); |
} |
} |
my $css_class = 'class="LC_odd_row"'; |
my $css_class = ' class="LC_odd_row"'; |
my $targets_div_style = 'display: none'; |
my $targets_div_style = 'display: none'; |
my $disabled_div_style = 'display: block'; |
my $disabled_div_style = 'display: block'; |
my $homedom_div_style = 'display: none'; |
my $homedom_div_style = 'display: none'; |
Line 2775 sub print_loadbalancing {
|
Line 2814 sub print_loadbalancing {
|
$datatable .= '</div></td></tr>'. |
$datatable .= '</div></td></tr>'. |
&loadbalancing_rules($dom,$intdom,$currrules,$othertitle, |
&loadbalancing_rules($dom,$intdom,$currrules,$othertitle, |
$usertypes,$types,\%servers,$currbalancer, |
$usertypes,$types,\%servers,$currbalancer, |
$targets_div_style,$homedom_div_style); |
$targets_div_style,$homedom_div_style,$css_class); |
$$rowtotal += $rownum; |
$$rowtotal += $rownum; |
return $datatable; |
return $datatable; |
} |
} |
|
|
sub loadbalancing_rules { |
sub loadbalancing_rules { |
my ($dom,$intdom,$currrules,$othertitle,$usertypes,$types,$servers, |
my ($dom,$intdom,$currrules,$othertitle,$usertypes,$types,$servers, |
$currbalancer,$targets_div_style,$homedom_div_style) = @_; |
$currbalancer,$targets_div_style,$homedom_div_style,$css_class) = @_; |
my $output; |
my $output; |
my ($alltypes,$othertypes,$titles) = |
my ($alltypes,$othertypes,$titles) = |
&loadbalancing_titles($dom,$intdom,$usertypes,$types); |
&loadbalancing_titles($dom,$intdom,$usertypes,$types); |
Line 2799 sub loadbalancing_rules {
|
Line 2838 sub loadbalancing_rules {
|
} |
} |
$output .= &loadbalance_rule_row($type,$titles->{$type},$current, |
$output .= &loadbalance_rule_row($type,$titles->{$type},$current, |
$servers,$currbalancer,$dom, |
$servers,$currbalancer,$dom, |
$targets_div_style,$homedom_div_style); |
$targets_div_style,$homedom_div_style,$css_class); |
} |
} |
} |
} |
return $output; |
return $output; |
Line 2837 sub loadbalancing_titles {
|
Line 2876 sub loadbalancing_titles {
|
|
|
sub loadbalance_rule_row { |
sub loadbalance_rule_row { |
my ($type,$title,$current,$servers,$currbalancer,$dom,$targets_div_style, |
my ($type,$title,$current,$servers,$currbalancer,$dom,$targets_div_style, |
$homedom_div_style) = @_; |
$homedom_div_style,$css_class) = @_; |
my @rulenames = ('default','homeserver'); |
my @rulenames = ('default','homeserver'); |
my %ruletitles = &offloadtype_text(); |
my %ruletitles = &offloadtype_text(); |
if ($type eq '_LC_external') { |
if ($type eq '_LC_external') { |
Line 2850 sub loadbalance_rule_row {
|
Line 2889 sub loadbalance_rule_row {
|
$style = $homedom_div_style; |
$style = $homedom_div_style; |
} |
} |
my $output = |
my $output = |
'<tr><td valign="top"><div id="balanceruletitle_'.$type.'" style="'.$style.'">'.$title.'</div></td>'."\n". |
'<tr'.$css_class.'><td valign="top"><div id="balanceruletitle_'.$type.'" style="'.$style.'">'.$title.'</div></td>'."\n". |
'<td><div id="balancerule_'.$type.'" style="'.$style.'">'."\n"; |
'<td><div id="balancerule_'.$type.'" style="'.$style.'">'."\n"; |
for (my $i=0; $i<@rulenames; $i++) { |
for (my $i=0; $i<@rulenames; $i++) { |
my $rule = $rulenames[$i]; |
my $rule = $rulenames[$i]; |
Line 3798 sub print_serverstatuses {
|
Line 3837 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','toggledebug'); |
'takeoffline','takeonline','showenv','toggledebug','ping','domconf'); |
} |
} |
|
|
sub coursecategories_javascript { |
sub coursecategories_javascript { |
Line 4866 sub publishlogo {
|
Line 4905 sub publishlogo {
|
# See if there is anything left |
# See if there is anything left |
unless ($fname) { return ('error: no uploaded file'); } |
unless ($fname) { return ('error: no uploaded file'); } |
$fname="$subdir/$fname"; |
$fname="$subdir/$fname"; |
my $filepath='/home/'.$confname.'/public_html'; |
my $filepath=$r->dir_config('lonDocRoot')."/priv/$dom/$confname"; |
my ($fnamepath,$file,$fetchthumb); |
my ($fnamepath,$file,$fetchthumb); |
$file=$fname; |
$file=$fname; |
if ($fname=~m|/|) { |
if ($fname=~m|/|) { |
Line 4944 $env{'user.name'}.':'.$env{'user.domain'
|
Line 4983 $env{'user.name'}.':'.$env{'user.domain'
|
if (copy($source,$copyfile)) { |
if (copy($source,$copyfile)) { |
print $logfile "\nCopied original source to ".$copyfile."\n"; |
print $logfile "\nCopied original source to ".$copyfile."\n"; |
$output = 'ok'; |
$output = 'ok'; |
&write_metadata($dom,$confname,$formname,$targetdir,$file,$logfile); |
|
$logourl = '/res/'.$dom.'/'.$confname.'/'.$fname; |
$logourl = '/res/'.$dom.'/'.$confname.'/'.$fname; |
|
push(@{$modified_urls},[$copyfile,$source]); |
|
my $metaoutput = |
|
&write_metadata($dom,$confname,$formname,$targetdir,$file,$logfile); |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\¬ifysubscribed,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
} else { |
} else { |
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; |
print $logfile "\nUnable to write ".$copyfile.':'.$!."\n"; |
$output = &mt('Failed to copy file to RES space').", $!"; |
$output = &mt('Failed to copy file to RES space').", $!"; |
Line 4963 $env{'user.name'}.':'.$env{'user.domain'
|
Line 5009 $env{'user.name'}.':'.$env{'user.domain'
|
my $copyfile=$targetdir.'/tn-'.$file; |
my $copyfile=$targetdir.'/tn-'.$file; |
if (copy($outfile,$copyfile)) { |
if (copy($outfile,$copyfile)) { |
print $logfile "\nCopied source to ".$copyfile."\n"; |
print $logfile "\nCopied source to ".$copyfile."\n"; |
&write_metadata($dom,$confname,$formname, |
my $thumb_metaoutput = |
$targetdir,'tn-'.$file,$logfile); |
&write_metadata($dom,$confname,$formname, |
|
$targetdir,'tn-'.$file,$logfile); |
|
push(@{$modified_urls},[$copyfile,$outfile]); |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => [\¬ifysubscribed,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
} else { |
} else { |
print $logfile "\nUnable to write ".$copyfile. |
print $logfile "\nUnable to write ".$copyfile. |
':'.$!."\n"; |
':'.$!."\n"; |
Line 5029 sub write_metadata {
|
Line 5082 sub write_metadata {
|
{ |
{ |
print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file; |
print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file; |
my $mfh; |
my $mfh; |
unless (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) { |
if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) { |
|
foreach (sort keys %metadatafields) { |
|
unless ($_=~/\./) { |
|
my $unikey=$_; |
|
$unikey=~/^([A-Za-z]+)/; |
|
my $tag=$1; |
|
$tag=~tr/A-Z/a-z/; |
|
print $mfh "\n\<$tag"; |
|
foreach (split(/\,/,$metadatakeys{$unikey})) { |
|
my $value=$metadatafields{$unikey.'.'.$_}; |
|
$value=~s/\"/\'\'/g; |
|
print $mfh ' '.$_.'="'.$value.'"'; |
|
} |
|
print $mfh '>'. |
|
&HTML::Entities::encode($metadatafields{$unikey},'<>&"') |
|
.'</'.$tag.'>'; |
|
} |
|
} |
|
$output = 'ok'; |
|
print $logfile "\nWrote metadata"; |
|
close($mfh); |
|
} else { |
|
print $logfile "\nFailed to open metadata file"; |
$output = &mt('Could not write metadata'); |
$output = &mt('Could not write metadata'); |
} |
} |
foreach (sort keys %metadatafields) { |
|
unless ($_=~/\./) { |
|
my $unikey=$_; |
|
$unikey=~/^([A-Za-z]+)/; |
|
my $tag=$1; |
|
$tag=~tr/A-Z/a-z/; |
|
print $mfh "\n\<$tag"; |
|
foreach (split(/\,/,$metadatakeys{$unikey})) { |
|
my $value=$metadatafields{$unikey.'.'.$_}; |
|
$value=~s/\"/\'\'/g; |
|
print $mfh ' '.$_.'="'.$value.'"'; |
|
} |
|
print $mfh '>'. |
|
&HTML::Entities::encode($metadatafields{$unikey},'<>&"') |
|
.'</'.$tag.'>'; |
|
} |
|
} |
|
$output = 'ok'; |
|
print $logfile "\nWrote metadata"; |
|
close($mfh); |
|
} |
} |
|
return $output; |
|
} |
|
|
|
sub notifysubscribed { |
|
foreach my $targetsource (@{$modified_urls}){ |
|
next unless (ref($targetsource) eq 'ARRAY'); |
|
my ($target,$source)=@{$targetsource}; |
|
if ($source ne '') { |
|
if (open(my $logfh,'>>'.$source.'.log')) { |
|
print $logfh "\nCleanup phase: Notifications\n"; |
|
my @subscribed=&subscribed_hosts($target); |
|
foreach my $subhost (@subscribed) { |
|
print $logfh "\nNotifying host ".$subhost.':'; |
|
my $reply=&Apache::lonnet::critical('update:'.$target,$subhost); |
|
print $logfh $reply; |
|
} |
|
my @subscribedmeta=&subscribed_hosts("$target.meta"); |
|
foreach my $subhost (@subscribedmeta) { |
|
print $logfh "\nNotifying host for metadata only ".$subhost.':'; |
|
my $reply=&Apache::lonnet::critical('update:'.$target.'.meta', |
|
$subhost); |
|
print $logfh $reply; |
|
} |
|
print $logfh "\n============ Done ============\n"; |
|
close($logfh); |
|
} |
|
} |
|
} |
|
return OK; |
|
} |
|
|
|
sub subscribed_hosts { |
|
my ($target) = @_; |
|
my @subscribed; |
|
if (open(my $fh,"<$target.subscription")) { |
|
while (my $subline=<$fh>) { |
|
if ($subline =~ /^($match_lonid):/) { |
|
my $host = $1; |
|
if ($host ne $Apache::lonnet::perlvar{'lonHostID'}) { |
|
unless (grep(/^\Q$host\E$/,@subscribed)) { |
|
push(@subscribed,$host); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return @subscribed; |
} |
} |
|
|
sub check_switchserver { |
sub check_switchserver { |
Line 7342 sub modify_usersessions {
|
Line 7444 sub modify_usersessions {
|
} |
} |
|
|
my @alldoms = &Apache::lonnet::all_domains(); |
my @alldoms = &Apache::lonnet::all_domains(); |
my %uniques = &Apache::lonnet::get_unique_servers(\@alldoms); |
|
my %servers = &Apache::lonnet::internet_dom_servers($dom); |
my %servers = &Apache::lonnet::internet_dom_servers($dom); |
my %spareid = ¤t_offloads_to($dom,$domconfig{'usersessions'},\%servers); |
my %spareid = ¤t_offloads_to($dom,$domconfig{'usersessions'},\%servers); |
my $savespares; |
my $savespares; |
Line 7350 sub modify_usersessions {
|
Line 7451 sub modify_usersessions {
|
foreach my $lonhost (sort(keys(%servers))) { |
foreach my $lonhost (sort(keys(%servers))) { |
my $serverhomeID = |
my $serverhomeID = |
&Apache::lonnet::get_server_homeID($servers{$lonhost}); |
&Apache::lonnet::get_server_homeID($servers{$lonhost}); |
|
my $serverhostname = &Apache::lonnet::hostname($lonhost); |
$defaultshash{'usersessions'}{'spares'}{$lonhost} = {}; |
$defaultshash{'usersessions'}{'spares'}{$lonhost} = {}; |
my %spareschg; |
my %spareschg; |
foreach my $type (@{$types{'spares'}}) { |
foreach my $type (@{$types{'spares'}}) { |
my @okspares; |
my @okspares; |
my @checked = &Apache::loncommon::get_env_multiple('form.spare_'.$type.'_'.$lonhost); |
my @checked = &Apache::loncommon::get_env_multiple('form.spare_'.$type.'_'.$lonhost); |
foreach my $server (@checked) { |
foreach my $server (@checked) { |
unless (($server eq $lonhost) || ($server eq $serverhomeID)) { |
if (&Apache::lonnet::hostname($server) ne '') { |
if ($uniques{$server}) { |
unless (&Apache::lonnet::hostname($server) eq $serverhostname) { |
push(@okspares,$server); |
unless (grep(/^\Q$server\E$/,@okspares)) { |
|
push(@okspares,$server); |
|
} |
} |
} |
} |
} |
} |
} |
my $new = $env{'form.newspare_'.$type.'_'.$lonhost}; |
my $new = $env{'form.newspare_'.$type.'_'.$lonhost}; |
my $newspare; |
my $newspare; |
if (($new ne '') && ($uniques{$new})) { |
if (($new ne '') && (&Apache::lonnet::hostname($new))) { |
unless (($new eq $lonhost) || ($new eq $serverhomeID)) { |
unless (&Apache::lonnet::hostname($new) eq $serverhostname) { |
$newspare = $new; |
$newspare = $new; |
$spareschg{$type} = 1; |
|
} |
|
} |
|
if (ref($spareid{$lonhost}) eq 'HASH') { |
|
if (ref($spareid{$lonhost}{$type}) eq 'ARRAY') { |
|
my @diffs = &Apache::loncommon::compare_arrays($domconfig{'usersessions'}{'spares'}{$lonhost}{$type},\@okspares); |
|
if (@diffs > 0) { |
|
$spareschg{$type} = 1; |
|
} elsif ($new ne '') { |
|
$spareschg{$type} = 1; |
|
} |
|
} |
} |
} |
} |
my @spares; |
my @spares; |
Line 7387 sub modify_usersessions {
|
Line 7480 sub modify_usersessions {
|
@spares = sort(@okspares); |
@spares = sort(@okspares); |
} |
} |
$defaultshash{'usersessions'}{'spares'}{$lonhost}{$type} = \@spares; |
$defaultshash{'usersessions'}{'spares'}{$lonhost}{$type} = \@spares; |
|
if (ref($spareid{$lonhost}) eq 'HASH') { |
|
if (ref($spareid{$lonhost}{$type}) eq 'ARRAY') { |
|
my @diffs = &Apache::loncommon::compare_arrays($spareid{$lonhost}{$type},\@spares); |
|
if (@diffs > 0) { |
|
$spareschg{$type} = 1; |
|
} |
|
} |
|
} |
} |
} |
if (keys(%spareschg) > 0) { |
if (keys(%spareschg) > 0) { |
$changes{'spares'}{$lonhost} = \%spareschg; |
$changes{'spares'}{$lonhost} = \%spareschg; |
Line 7533 sub modify_loadbalancing {
|
Line 7634 sub modify_loadbalancing {
|
} |
} |
foreach my $sparetype (@sparestypes) { |
foreach my $sparetype (@sparestypes) { |
my @targets = &Apache::loncommon::get_env_multiple('form.loadbalancing_target_'.$sparetype); |
my @targets = &Apache::loncommon::get_env_multiple('form.loadbalancing_target_'.$sparetype); |
|
my @offloadto; |
foreach my $target (@targets) { |
foreach my $target (@targets) { |
my @offloadto; |
|
if (($servers{$target}) && ($target ne $balancer)) { |
if (($servers{$target}) && ($target ne $balancer)) { |
if ($sparetype eq 'default') { |
if ($sparetype eq 'default') { |
if (ref($defaultshash{'loadbalancing'}{'targets'}{'primary'}) eq 'ARRAY') { |
if (ref($defaultshash{'loadbalancing'}{'targets'}{'primary'}) eq 'ARRAY') { |
Line 7802 sub active_dc_picker {
|
Line 7903 sub active_dc_picker {
|
sub usersession_titles { |
sub usersession_titles { |
return &Apache::lonlocal::texthash( |
return &Apache::lonlocal::texthash( |
hosted => 'Hosting of sessions for users from other domains on servers in this domain', |
hosted => 'Hosting of sessions for users from other domains on servers in this domain', |
|
|
remote => 'Hosting of sessions for users in this domain on servers in other domains', |
remote => 'Hosting of sessions for users in this domain on servers in other domains', |
spares => 'Servers offloaded to, when busy', |
spares => 'Servers offloaded to, when busy', |
version => 'LON-CAPA version requirement', |
version => 'LON-CAPA version requirement', |
excludedomain => 'Allow all, but exclude specific domains', |
excludedomain => 'Allow all, but exclude specific domains', |
includedomain => 'Deny all, but include specific domains', |
includedomain => 'Deny all, but include specific domains', |
primary => 'Primary (checked first)', |
primary => 'Primary (checked first)', |
default => 'Default', |
default => 'Default', |
); |
); |
} |
} |
|
|
|
sub id_for_thisdom { |
|
my (%servers) = @_; |
|
my %altids; |
|
foreach my $server (keys(%servers)) { |
|
my $serverhome = &Apache::lonnet::get_server_homeID($servers{$server}); |
|
if ($serverhome ne $server) { |
|
$altids{$serverhome} = $server; |
|
} |
|
} |
|
return %altids; |
|
} |
|
|
sub count_servers { |
sub count_servers { |
my ($currbalancer,%servers) = @_; |
my ($currbalancer,%servers) = @_; |
my (@spares,$numspares); |
my (@spares,$numspares); |
Line 7871 function toggleTargets() {
|
Line 7983 function toggleTargets() {
|
function showSpares(balancer,ishomedom) { |
function showSpares(balancer,ishomedom) { |
var alltargets = new Array('$alltargets'); |
var alltargets = new Array('$alltargets'); |
var insttypes = new Array('$allinsttypes'); |
var insttypes = new Array('$allinsttypes'); |
|
var offloadtypes = new Array('primary','default'); |
|
|
document.getElementById('loadbalancing_targets').style.display='block'; |
document.getElementById('loadbalancing_targets').style.display='block'; |
document.getElementById('loadbalancing_disabled').style.display='none'; |
document.getElementById('loadbalancing_disabled').style.display='none'; |
var count = 0; |
|
for (var i=0; i<alltargets.length; i++) { |
for (var i=0; i<offloadtypes.length; i++) { |
if (alltargets[i] != balancer) { |
var count = 0; |
|
for (var j=0; j<alltargets.length; j++) { |
document.getElementById('loadbalancing_target_'+count).value = alltargets[i]; |
if (alltargets[j] != balancer) { |
document.getElementById('loadbalancing_targettxt_'+count).style.textAlign='left'; |
document.getElementById('loadbalancing_target_'+offloadtypes[i]+'_'+count).value = alltargets[j]; |
document.getElementById('loadbalancing_targettxt_'+count).style.textFace='normal'; |
document.getElementById('loadbalancing_targettxt_'+offloadtypes[i]+'_'+count).style.textAlign='left'; |
document.getElementById('loadbalancing_targettxt_'+count).innerHTML = alltargets[i]; |
document.getElementById('loadbalancing_targettxt_'+offloadtypes[i]+'_'+count).style.textFace='normal'; |
|
document.getElementById('loadbalancing_targettxt_'+offloadtypes[i]+'_'+count).innerHTML = alltargets[j]; |
count ++; |
count ++; |
|
} |
} |
} |
} |
} |
for (var j=0; j<insttypes.length; j++) { |
for (var k=0; k<insttypes.length; k++) { |
if ((insttypes[j] == '_LC_external') || (insttypes[j] == '_LC_internetdom')) { |
if ((insttypes[k] == '_LC_external') || (insttypes[k] == '_LC_internetdom')) { |
if (ishomedom == 1) { |
if (ishomedom == 1) { |
document.getElementById('balanceruletitle_'+insttypes[j]).style.display='block'; |
document.getElementById('balanceruletitle_'+insttypes[k]).style.display='block'; |
document.getElementById('balancerule_'+insttypes[j]).style.display='block'; |
document.getElementById('balancerule_'+insttypes[k]).style.display='block'; |
} else { |
} else { |
document.getElementById('balanceruletitle_'+insttypes[j]).style.display='none'; |
document.getElementById('balanceruletitle_'+insttypes[k]).style.display='none'; |
document.getElementById('balancerule_'+insttypes[j]).style.display='none'; |
document.getElementById('balancerule_'+insttypes[k]).style.display='none'; |
|
|
} |
} |
} else { |
} else { |
document.getElementById('balanceruletitle_'+insttypes[j]).style.display='block'; |
document.getElementById('balanceruletitle_'+insttypes[k]).style.display='block'; |
document.getElementById('balancerule_'+insttypes[j]).style.display='block'; |
document.getElementById('balancerule_'+insttypes[k]).style.display='block'; |
} |
} |
if ((insttypes[j] != '_LC_external') && |
if ((insttypes[k] != '_LC_external') && |
((insttypes[j] != '_LC_internetdom') || |
((insttypes[k] != '_LC_internetdom') || |
((insttypes[j] == '_LC_internetdom') && (homedom == 1)))) { |
((insttypes[k] == '_LC_internetdom') && (ishomedom == 1)))) { |
document.getElementById('loadbalancing_singleserver_'+insttypes[j]).options[0] = new Option("","",true,true); |
document.getElementById('loadbalancing_singleserver_'+insttypes[k]).options[0] = new Option("","",true,true); |
for (var k=0; k<alltargets.length; k++) { |
for (var m=0; m<alltargets.length; m++) { |
var idx = k+1; |
var idx = m+1; |
if (alltargets[k] != balancer) { |
if (alltargets[m] != balancer) { |
document.getElementById('loadbalancing_singleserver_'+insttypes[j]).options[idx] = new Option(alltargets[k],alltargets[k],false,false); |
document.getElementById('loadbalancing_singleserver_'+insttypes[k]).options[idx] = new Option(alltargets[m],alltargets[m],false,false); |
} |
} |
} |
} |
} |
} |
Line 7928 function hideSpares() {
|
Line 8043 function hideSpares() {
|
document.getElementById('loadbalancing_target_'+offloadtypes[i]+'_'+j).checked = false; |
document.getElementById('loadbalancing_target_'+offloadtypes[i]+'_'+j).checked = false; |
document.getElementById('loadbalancing_target_'+offloadtypes[i]+'_'+j).value = ''; |
document.getElementById('loadbalancing_target_'+offloadtypes[i]+'_'+j).value = ''; |
document.getElementById('loadbalancing_targettxt_'+offloadtypes[i]+'_'+j).innerHTML = ''; |
document.getElementById('loadbalancing_targettxt_'+offloadtypes[i]+'_'+j).innerHTML = ''; |
|
} |
} |
} |
for (var k=0; k<insttypes.length; k++) { |
for (var k=0; k<insttypes.length; k++) { |
document.getElementById('balanceruletitle_'+insttypes[j]).style.display='none'; |
document.getElementById('balanceruletitle_'+insttypes[k]).style.display='none'; |
document.getElementById('balancerule_'+insttypes[j]).style.display='none'; |
document.getElementById('balancerule_'+insttypes[k]).style.display='none'; |
if (insttypes[j] != '_LC_external') { |
if (insttypes[k] != '_LC_external') { |
document.getElementById('loadbalancing_singleserver_'+insttypes[j]).length = 0; |
document.getElementById('loadbalancing_singleserver_'+insttypes[k]).length = 0; |
document.getElementById('loadbalancing_singleserver_'+insttypes[j]).options[0] = new Option("","",true,true); |
document.getElementById('loadbalancing_singleserver_'+insttypes[k]).options[0] = new Option("","",true,true); |
} |
} |
} |
} |
return; |
return; |
Line 7947 function checkOffloads(item,type) {
|
Line 8063 function checkOffloads(item,type) {
|
var total = alltargets.length - 1; |
var total = alltargets.length - 1; |
var other; |
var other; |
if (type == offloadtypes[0]) { |
if (type == offloadtypes[0]) { |
other = offoadtypes[1]; |
other = offloadtypes[1]; |
} else { |
} else { |
other = offoadtypes[0]; |
other = offloadtypes[0]; |
} |
} |
for (var i=0; i<total; i++) { |
for (var i=0; i<total; i++) { |
var server = document.getElementById('loadbalancing_target_'+other+'_'+i).value; |
var server = document.getElementById('loadbalancing_target_'+other+'_'+i).value; |
Line 7994 function balanceruleChange(formname,type
|
Line 8110 function balanceruleChange(formname,type
|
return; |
return; |
} |
} |
|
|
|
// ]]> |
|
</script> |
|
|
|
END |
|
} |
|
|
|
sub new_spares_js { |
|
my @sparestypes = ('primary','default'); |
|
my $types = join("','",@sparestypes); |
|
my $select = &mt('Select'); |
|
return <<"END"; |
|
|
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
function updateNewSpares(formname,lonhost) { |
|
var types = new Array('$types'); |
|
var include = new Array(); |
|
var exclude = new Array(); |
|
for (var i=0; i<types.length; i++) { |
|
var spareboxes = getIndicesByName(formname,'spare_'+types[i]+'_'+lonhost); |
|
for (var j=0; j<spareboxes.length; j++) { |
|
if (formname.elements[spareboxes[j]].checked) { |
|
exclude.push(formname.elements[spareboxes[j]].value); |
|
} else { |
|
include.push(formname.elements[spareboxes[j]].value); |
|
} |
|
} |
|
} |
|
for (var i=0; i<types.length; i++) { |
|
var newSpare = document.getElementById('newspare_'+types[i]+'_'+lonhost); |
|
var selIdx = newSpare.selectedIndex; |
|
var currnew = newSpare.options[selIdx].value; |
|
var okSpares = new Array(); |
|
for (var j=0; j<newSpare.options.length; j++) { |
|
var possible = newSpare.options[j].value; |
|
if (possible != '') { |
|
if (exclude.indexOf(possible) == -1) { |
|
okSpares.push(possible); |
|
} else { |
|
if (currnew == possible) { |
|
selIdx = 0; |
|
} |
|
} |
|
} |
|
} |
|
for (var k=0; k<include.length; k++) { |
|
if (okSpares.indexOf(include[k]) == -1) { |
|
okSpares.push(include[k]); |
|
} |
|
} |
|
okSpares.sort(); |
|
newSpare.options.length = 0; |
|
if (selIdx == 0) { |
|
newSpare.options[0] = new Option("$select","",true,true); |
|
} else { |
|
newSpare.options[0] = new Option("$select","",false,false); |
|
} |
|
for (var m=0; m<okSpares.length; m++) { |
|
var idx = m+1; |
|
var selThis = 0; |
|
if (selIdx != 0) { |
|
if (okSpares[m] == currnew) { |
|
selThis = 1; |
|
} |
|
} |
|
if (selThis == 1) { |
|
newSpare.options[idx] = new Option(okSpares[m],okSpares[m],true,true); |
|
} else { |
|
newSpare.options[idx] = new Option(okSpares[m],okSpares[m],false,false); |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
function checkNewSpares(lonhost,type) { |
|
var newSpare = document.getElementById('newspare_'+type+'_'+lonhost); |
|
var chosen = newSpare.options[newSpare.selectedIndex].value; |
|
if (chosen != '') { |
|
var othertype; |
|
var othernewSpare; |
|
if (type == 'primary') { |
|
othernewSpare = document.getElementById('newspare_default_'+lonhost); |
|
} |
|
if (type == 'default') { |
|
othernewSpare = document.getElementById('newspare_primary_'+lonhost); |
|
} |
|
if (othernewSpare.options[othernewSpare.selectedIndex].value == chosen) { |
|
othernewSpare.selectedIndex = 0; |
|
} |
|
} |
|
return; |
|
} |
|
|
|
// ]]> |
|
</script> |
|
|
|
END |
|
|
|
} |
|
|
|
sub common_domprefs_js { |
|
return <<"END"; |
|
|
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
function getIndicesByName(formname,item) { |
function getIndicesByName(formname,item) { |
var radiogroup = new Array(); |
var group = new Array(); |
for (var i=0;i<formname.elements.length;i++) { |
for (var i=0;i<formname.elements.length;i++) { |
if (formname.elements[i].name == item) { |
if (formname.elements[i].name == item) { |
radiogroup.push(formname.elements[i].id); |
group.push(formname.elements[i].id); |
} |
} |
} |
} |
return radiogroup; |
return group; |
} |
} |
|
|
// ]]> |
// ]]> |
</script> |
</script> |
|
|
END |
END |
|
|
} |
} |
|
|
1; |
1; |