my %ratings_stddev = ();
my @matches = ();
-sub sanitize {
- return HTML::Entities::encode_entities(shift);
-}
-
sub color {
my $x = shift;
return int(255.0 * ($x ** (1.80)));
while (my $ref = $q->fetchrow_hashref) {
my $id = $ref->{'id'};
- $players{$id} = sanitize(Encode::decode_utf8($ref->{'navn'}));
+ $players{$id} = Encode::decode_utf8($ref->{'navn'});
$ratings{$id} = $ref->{'rating'};
$ratings_stddev{$id} = $ref->{'rating_stddev'};
}
}
sub write_parms_to_file {
- my ($aux_parms, $match_stddev, $used_ratings, $used_cov) = @_;
+ my ($locale, $aux_parms, $match_stddev, $used_ratings, $used_cov) = @_;
- POSIX::setlocale(&POSIX::LC_ALL, 'nb_NO.UTF-8');
+ wloh_common::set_locale($locale);
my @sorted_players = sort { $players{$a} cmp $players{$b} } keys %players;
}
close MCCALC;
- POSIX::setlocale(&POSIX::LC_ALL, 'nb_NO.UTF-8');
+ wloh_common::set_locale($locale);
return $tmpnam;
}
sub make_table {
my ($locale, $aux_parms, $match_stddev, $lowest_division, $used_ratings, $used_cov, $division, $subdivision, $table_id) = @_;
- my $tmpnam = write_parms_to_file($aux_parms, $match_stddev, $used_ratings, $used_cov);
+ my $tmpnam = write_parms_to_file($locale, $aux_parms, $match_stddev, $used_ratings, $used_cov);
my %prob = ();
open MCCALC, "$config::base_dir/mcwordfeud $trials < $tmpnam |"
my $num_games = scalar keys %prob;
- # Make list of ranks.
+ # Make list of ranks. (Relegation is handled specially.)
my @ranks = ();
for my $i (1..$num_games) {
- push @ranks, { 'th' => "$i." };
+ push @ranks, { 'th' => wloh_common::get_ordinal($i, $locale) };
}
- push @ranks, { 'th' => 'NEDRYKK' } unless ($lowest_division);
my @players = ();
push @player_ranks, {
'td/style' => "background-color: rgb($r, $g, $b)",
'a' => sprintf("%.1f%%", $pn * 100.0),
- 'a/href' => "javascript:showScenario('$table_id', '/$locale/?divisjon=$division;avdeling=$subdivision;spiller=$pnum;posisjon=$i"
+ 'a/href' => "javascript:showScenario('$table_id', '/$locale/?divisjon=$division;avdeling=$subdivision;spiller=$pnum;posisjon=$i')"
};
}
}
};
}
- return {
+ my $parms = {
'ranks' => \@ranks,
'tbody' => \@players,
};
+ $parms->{'relegation'} = '' if ($lowest_division);
+ return $parms;
}
sub make_cov_table {
my $cov = get_covariance_matrix($dbh, keys %players);
if (defined($match_player) && defined($match_position)) {
- print_header($cgi, 'WLoH-plasseringsannsynlighetsberegning');
- my $tmpnam = write_parms_to_file($aux_parms, $match_stddev, \%ratings, $cov);
+ my $tmpnam = write_parms_to_file($locale, $aux_parms, $match_stddev, \%ratings, $cov);
--$match_player;
--$match_position;
while (<MCCALC>) {
/(\d+) (\d+) (-?\d+)/ or next;
chomp;
- push @scenario, [ $1, $2, $3 ];
+ push @scenario, {
+ 'player-1' => $players{$1},
+ 'player-2' => $players{$2},
+ 'result' => sprintf("%+d", $3),
+ };
}
close MCCALC;
unlink $tmpnam;
my $player_name = $players{$sorted_players[$match_player]};
if (scalar @scenario == 0) {
- printf " <p>Fant ingen måte <strong>%s</strong> kan ende på <strong>%d.</strong> plass på.</p>\n",
- $player_name, ($match_position + 1);
+ print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+5m');
+ wloh_common::process_template('scenario-not-found', $locale, {
+ '#nick' => $player_name,
+ '#rank' => wloh_common::get_ordinal($match_position + 1, $locale)
+ });
} else {
- printf " <p>Scenario der <strong>%s</strong> ender på <strong>%d.</strong> plass:</p>\n",
- $player_name, ($match_position + 1);
- print " <ul>\n";
- for my $m (@scenario) {
- printf " <li>%s – %s: %+d</li>\n", $players{$m->[0]}, $players{$m->[1]}, $m->[2];
- }
- print " </ul>\n";
+ print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+5m');
+ wloh_common::process_template('scenario', $locale, {
+ '#nick' => $player_name,
+ '#rank' => wloh_common::get_ordinal($match_position + 1, $locale),
+ '#results' => \@scenario
+ });
}
- print_footer();
} else {
- POSIX::setlocale(&POSIX::LC_ALL, 'nb_NO.UTF-8');
+ wloh_common::set_locale($locale);
my $max_division = $divisions[$#divisions];
my $lowest_division = ($division == $max_division);
my $avg_rating = find_avg_rating(\%ratings);
print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+5m');
- wloh_common::process_template('index.xml', {
+ wloh_common::process_template('index', $locale, {
'#navbar' => wloh_common::get_navbar($cgi, $dbh, $locale),
'#division-selector/action' => "/$locale/",
'#division' => get_division_selector(\@divisions, $division),