X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Frating.pl;h=557231538514e8743bf8463418e1d10aea5b7a15;hb=cec2dc50dba0555927a1c19cfc0126955e7713dc;hp=fe97fd631908d86760713ea46b4d51e7d8965b79;hpb=eeb38a26bdcd6eb6a7d8bc75fe586f31461c2b2c;p=wloh diff --git a/www/rating.pl b/www/rating.pl index fe97fd6..5572315 100755 --- a/www/rating.pl +++ b/www/rating.pl @@ -10,7 +10,9 @@ use POSIX; use HTML::Entities; use utf8; use locale; -require '../config.pm'; +use lib qw(../include); +require 'config.pm'; +require 'common.pm'; my $dbh = DBI->connect($config::local_connstr, $config::local_username, $config::local_password) or die "connect: " . $DBI::errstr; @@ -19,127 +21,91 @@ $dbh->{RaiseError} = 1; binmode STDOUT, ':utf8'; -# Find auxillary parameters. -my %params = (); -my $q = $dbh->prepare('SELECT * FROM ratings WHERE id < 0'); -$q->execute; +my $cgi = CGI->new; +my $locale = wloh_common::get_locale($cgi); + +my $aux_parms = wloh_common::get_auxillary_parameters($dbh, $locale); + +wloh_common::set_locale($locale); + +my $season = wloh_common::get_max_season($dbh, $locale); + +# Pick up all the subdivisions' ratings. +my %subdivision_ratings = (); +my $q = $dbh->prepare('SELECT divisjon, avdeling, serie_id, AVG(rating) AS avg_rating FROM ratings NATURAL JOIN siste_divisjon NATURAL JOIN spiller_kultur WHERE kultur=? AND sesong=? GROUP BY divisjon, avdeling, serie_id ORDER BY divisjon, avdeling'); +$q->execute($locale, $season); + while (my $ref = $q->fetchrow_hashref) { - $params{$ref->{'id'}} = $ref->{'rating'}; + my $division = $ref->{'divisjon'}; + my $rating = $ref->{'avg_rating'}; + my $id = $ref->{'serie_id'}; + + push @{$subdivision_ratings{$division}}, [ $id, $rating ]; } -my $match_stddev = $params{-2} * sqrt(2.0); - -print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+5m'); -POSIX::setlocale(&POSIX::LC_ALL, 'nb_NO.UTF-8'); - -printf <<"EOF", $params{-3}, $match_stddev; - - - WLoH-rating - - - -

WLoH-rating

- -

Dette er et hobbyprosjekt fra tredjepart, og ikke en offisiell del av - Wordfeud Leage of Honour.

- -

Ratingen er dog basert på spilledata fra WLoH (takk til Lobotommy - for tilgang!), og oppdateres - hver hele time. Den er fullstendig uoffisiell, og har ingen innflytelse - på WLoH, men brukes for å estimere vinnersannsynligheter i - sannsynlighetsberegningen.

- -

Vær obs på at det - er betydelig usikkerhetsmargin, spesielt for spillere som ikke - har spilt spesielt mange kamper.

- -

Modellen kan endre seg når som helst når jeg føler for det :-) - Ikke ta ratingen alt for alvorlig, selv om den er basert på - relativt fornuftige matematiske modeller. Husk at all statistikk - sier mer om fortiden enn om framtiden.

- -

Modellparametre

- -

For de som vet litt om slikt. Mer utførlig forklaring for begynnere kommer seinere.

- - - -

Divisjonsoversikt

- - - - - - - -EOF - -$q = $dbh->prepare('SELECT divisjon,AVG(rating) AS avg_rating,STDDEV(rating) AS stddev_rating FROM ratings NATURAL JOIN siste_divisjon GROUP BY divisjon ORDER BY divisjon'); -$q->execute; + +$q = $dbh->prepare('SELECT divisjon,AVG(rating) AS avg_rating,STDDEV(rating) AS stddev_rating FROM ratings NATURAL JOIN siste_divisjon NATURAL JOIN spiller_kultur WHERE kultur=? AND sesong=? GROUP BY divisjon ORDER BY divisjon'); +$q->execute($locale, $season); + +my @divisions = (); my $i = 0; while (my $ref = $q->fetchrow_hashref) { - if (++$i % 2 == 0) { - print " \n"; - } else { - print " \n"; + my %division = (); + + $division{'#rank'} = wloh_common::get_ordinal($ref->{'divisjon'}, $locale); + $division{'#average'} = sprintf "%.1f", $ref->{'avg_rating'}; + $division{'#stddev'} = sprintf "%.1f", $ref->{'stddev_rating'}; + + my @subdivisions = (); + for my $arr (@{$subdivision_ratings{$ref->{'divisjon'}}}) { + my ($id, $rating) = @$arr; + push @subdivisions, { + '#divlink' => sprintf("%.1f", $rating), + '#divlink/href' => sprintf("http://wordfeud.aasmul.net/serie-%d", $id) + }; } - printf " \n", $ref->{'divisjon'}; - printf " \n", $ref->{'avg_rating'}; - printf " \n", $ref->{'stddev_rating'}; - print " \n"; -} - -print <<"EOF"; -
Div.SnittStd.avvik
%d.%.1f%.1f
-

Rankingliste

+ $division{'subdivisions'} = \@subdivisions; - - - - - - - -EOF + push @divisions, \%division; +} $q = $dbh->prepare(' SELECT * FROM ratings NATURAL JOIN kanonisk_navn NATURAL JOIN siste_divisjon + NATURAL JOIN spiller_kultur +WHERE kultur=? ORDER BY rating DESC'); -$q->execute; +$q->execute($locale); + +my @players = (); $i = 0; while (my $ref = $q->fetchrow_hashref) { - if (++$i % 2 == 0) { - print " \n"; - } else { - print " \n"; - } - printf " \n", $i; - printf " \n", $ref->{'id'}, HTML::Entities::encode_entities(Encode::decode_utf8($ref->{'navn'})); - printf " \n", $ref->{'rating'}; - printf " \n", $ref->{'serie_id'}, $ref->{'serie_navn'}; - print " \n"; -} + my %player = (); -print <<"EOF"; -
NickRatingSist sett
%d.%s%.1f%s
- - -EOF + $player{'#rank'} = wloh_common::get_ordinal(++$i, $locale); + $player{'#user'} = Encode::decode_utf8($ref->{'navn'}); + $player{'#user/href'} = sprintf "http://wordfeud.aasmul.net/bruker-%d", $ref->{'id'}; + $player{'#rating'} = sprintf "%.1f", $ref->{'rating'}; + $player{'#stddev'} = sprintf "%.1f", $ref->{'rating_stddev'}; + $player{'#divlink'} = $ref->{'serie_navn'}; + $player{'#divlink/href'} = sprintf "http://wordfeud.aasmul.net/serie-%d", $ref->{'serie_id'}; + + push @players, \%player; +} -$match_stddev = $params{-2} * sqrt(2.0); +print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+75m'); +wloh_common::process_template('rating', $locale, { + '#navbar' => wloh_common::get_navbar($cgi, $dbh, $locale), + 'iterations' => $aux_parms->{'num_iterations'}, + 'rating-prior-stddev' => sprintf("%.1f", $aux_parms->{'rating_prior_stddev'}), + 'match-stddev' => sprintf("%.1f", $aux_parms->{'score_stddev'} * sqrt(2.0)), + '#divisions' => XML::Template::alternate('tr/class', \@divisions, 'even', 'odd'), + '#players' => XML::Template::alternate('tr/class', \@players, 'even', 'odd'), + 'last-sync' => wloh_common::get_last_sync($dbh) +}); $dbh->rollback;