X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=lib%2FNDWeb%2FController%2FRankings.pm;fp=lib%2FNDWeb%2FController%2FRankings.pm;h=30407c659c897884a6269315f2598baa969cc6fe;hb=f9f06136c85f9634c409b71e18452c358530556e;hp=0000000000000000000000000000000000000000;hpb=b56f06604e4e01c764201b73bfe6c1d746942516;p=ndwebbie.git diff --git a/lib/NDWeb/Controller/Rankings.pm b/lib/NDWeb/Controller/Rankings.pm new file mode 100644 index 0000000..30407c6 --- /dev/null +++ b/lib/NDWeb/Controller/Rankings.pm @@ -0,0 +1,186 @@ +package NDWeb::Controller::Rankings; + +use strict; +use warnings; +use parent 'Catalyst::Controller'; + +use NDWeb::Include; + +=head1 NAME + +NDWeb::Controller::Rankings - Catalyst Controller + +=head1 DESCRIPTION + +Catalyst Controller. + +=head1 METHODS + +=cut + + +=head2 index + +=cut + +#sub index :Path :Args(0) { +# my ( $self, $c ) = @_; +# +# $c->response->body('Matched NDWeb::Controller::Rankings in Rankings.'); +#} + +sub planets : Local { + my ( $self, $c, $order, $offset ) = @_; + my $dbh = $c->model; + + my $error = ''; + + $offset = 0 unless $offset; + $c->stash(offset => $offset); + + $c->stash( comma => \&comma_value); + + if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|hit_us)$/){ + $order = $1; + }else { + $order = 'scorerank'; + } + my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?}; + if ($order =~ /rank$/){ + $browse = qq{WHERE $order > ? ORDER BY $order ASC LIMIT 100}; + } + $c->stash(order => $order); + + my $extra_columns = ''; + if ($c->check_user_roles(qw/rankings_planet_intel/)){ + $c->stash(extracolumns => 1); + $extra_columns = ",planet_status,hit_us, alliance,relationship,nick"; + } + + my $query = $dbh->prepare(qq{SELECT id,x,y,z,ruler,planet,race, + size, size_gain, size_gain_day, + score,score_gain,score_gain_day, + value,value_gain,value_gain_day, + xp,xp_gain,xp_gain_day, + sizerank,sizerank_gain,sizerank_gain_day, + scorerank,scorerank_gain,scorerank_gain_day, + valuerank,valuerank_gain,valuerank_gain_day, + xprank,xprank_gain,xprank_gain_day + $extra_columns FROM current_planet_stats_full + $browse + }); + $query->execute($offset); + my @planets; + while (my $planet = $query->fetchrow_hashref){ + push @planets,$planet; + } + $c->stash(planets => \@planets); +} + +sub galaxies : Local { + my ( $self, $c, $order, $offset ) = @_; + my $dbh = $c->model; + + my $error = ''; + + $offset = 0 unless $offset; + $c->stash(offset => $offset); + + $c->stash( comma => \&comma_value); + + if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|planets)$/){ + $order = $1; + }else{ + $order = 'scorerank'; + } + $c->stash(order => $order); + + my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?}; + if ($order =~ /rank$/){ + $browse = qq{AND $order > ? ORDER BY $order ASC LIMIT 100}; + } + my $query = $dbh->prepare(qq{SELECT x,y, + size, size_gain, size_gain_day, + score,score_gain,score_gain_day, + value,value_gain,value_gain_day, + xp,xp_gain,xp_gain_day, + sizerank,sizerank_gain,sizerank_gain_day, + scorerank,scorerank_gain,scorerank_gain_day, + valuerank,valuerank_gain,valuerank_gain_day, + xprank,xprank_gain,xprank_gain_day, + planets,planets_gain,planets_gain_day + FROM galaxies g + WHERE tick = ( SELECT max(tick) AS max FROM galaxies) + $browse + }); + $query->execute($offset); + my @galaxies; + while (my $galaxy = $query->fetchrow_hashref){ + push @galaxies,$galaxy; + } + $c->stash(galaxies => \@galaxies); +} + + +sub alliances : Local { + my ( $self, $c, $order, $offset ) = @_; + my $dbh = $c->model; + + my $error = ''; + + $offset = 0 unless $offset; + $c->stash(offset => $offset); + + $c->stash( comma => \&comma_value); + + if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|avgsize|avgscore|members)$/){ + $order = $1; + }else{ + $order = 'scorerank'; + } + $c->stash(order => $order); + + my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?}; + if ($order =~ /rank$/){ + $browse = qq{WHERE $order > ? ORDER BY $order ASC LIMIT 100}; + } + my $query = $dbh->prepare(qq{SELECT a.name,a.id, + size, size_gain, size_gain_day, + score,score_gain,score_gain_day, + avgsize,avgsize_gain,avgsize_gain_day, + avgscore,avgscore_gain,avgscore_gain_day, + sizerank,sizerank_gain,sizerank_gain_day, + scorerank,scorerank_gain,scorerank_gain_day, + members,members_gain,members_gain_day + FROM ( SELECT *, (size/members) AS avgsize + ,(score/scoremem) AS avgscore + ,(size_gain/members) AS avgsize_gain + ,(score_gain/scoremem) AS avgscore_gain + ,(size_gain_day/members) AS avgsize_gain_day + ,(score_gain_day/scoremem) AS avgscore_gain_day + FROM (SELECT *,(CASE WHEN members > 60 THEN 60 ELSE members END) AS scoremem + FROM alliance_stats WHERE + tick = ( SELECT max(tick) AS max FROM alliance_stats)) ast2 + ) ast + NATURAL JOIN alliances a + $browse + }); + $query->execute($offset); + my @alliances; + while (my $alliance = $query->fetchrow_hashref){ + push @alliances,$alliance; + } + $c->stash(alliances => \@alliances); +} + +=head1 AUTHOR + +Michael Andreen (harv@ruin.nu) + +=head1 LICENSE + +GPL 2.0, or later + +=cut + +1;