]> ruin.nu Git - ndwebbie.git/blob - lib/NDWeb/Controller/Rankings.pm
Change database structure for planets and alliances + PG 8.4 changes
[ndwebbie.git] / lib / NDWeb / Controller / Rankings.pm
1 package NDWeb::Controller::Rankings;
2
3 use strict;
4 use warnings;
5 use parent 'Catalyst::Controller';
6
7 use NDWeb::Include;
8
9 =head1 NAME
10
11 NDWeb::Controller::Rankings - Catalyst Controller
12
13 =head1 DESCRIPTION
14
15 Catalyst Controller.
16
17 =head1 METHODS
18
19 =cut
20
21
22 =head2 index 
23
24 =cut
25
26 #sub index :Path :Args(0) {
27 #    my ( $self, $c ) = @_;
28 #
29 #    $c->response->body('Matched NDWeb::Controller::Rankings in Rankings.');
30 #}
31
32 sub planets : Local {
33         my ( $self, $c, $order, $offset ) = @_;
34         my $dbh = $c->model;
35
36         my $error = '';
37
38         $offset = 0 unless $offset;
39         $c->detach('/default') if $offset < 0;
40         $c->stash(offset => $offset);
41
42         if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|hit_us)$/){
43                 $order = $1;
44         }else {
45                 $order = 'scorerank';
46         }
47         my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?};
48         if ($order =~ /rank$/){
49                 $browse = qq{WHERE $order > ? ORDER BY $order ASC LIMIT 100};
50         }
51         $c->stash(order => $order);
52
53         my $extra_columns = '';
54         if ($c->check_user_roles(qw/rankings_planet_intel/)){
55                 $c->stash(extracolumns => 1);
56                 $extra_columns = ",planet_status,hit_us, alliance,relationship,nick";
57         }
58
59         my $query = $dbh->prepare(qq{SELECT pid AS id,x,y,z,ruler,planet,race,
60                 size, size_gain, size_gain_day,
61                 score,score_gain,score_gain_day,
62                 value,value_gain,value_gain_day,
63                 xp,xp_gain,xp_gain_day,
64                 sizerank,sizerank_gain,sizerank_gain_day,
65                 scorerank,scorerank_gain,scorerank_gain_day,
66                 valuerank,valuerank_gain,valuerank_gain_day,
67                 xprank,xprank_gain,xprank_gain_day
68                 $extra_columns FROM current_planet_stats_full
69                 $browse
70                 });
71         $query->execute($offset);
72         my @planets;
73         while (my $planet = $query->fetchrow_hashref){
74                 push @planets,$planet;
75         }
76         $c->detach('/default') unless @planets;
77         $c->stash(planets => \@planets);
78 }
79
80 sub galaxies : Local {
81         my ( $self, $c, $order, $offset ) = @_;
82         my $dbh = $c->model;
83
84         my $error = '';
85
86         $offset = 0 unless $offset;
87         $c->detach('/default') if $offset < 0;
88         $c->stash(offset => $offset);
89
90         if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|planets)$/){
91                 $order = $1;
92         }else{
93                 $order = 'scorerank';
94         }
95         $c->stash(order => $order);
96
97         my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?};
98         if ($order =~ /rank$/){
99                 $browse = qq{AND $order > ? ORDER BY $order ASC LIMIT 100};
100         }
101         my $query = $dbh->prepare(qq{SELECT x,y,
102                 size, size_gain, size_gain_day,
103                 score,score_gain,score_gain_day,
104                 value,value_gain,value_gain_day,
105                 xp,xp_gain,xp_gain_day,
106                 sizerank,sizerank_gain,sizerank_gain_day,
107                 scorerank,scorerank_gain,scorerank_gain_day,
108                 valuerank,valuerank_gain,valuerank_gain_day,
109                 xprank,xprank_gain,xprank_gain_day,
110                 planets,planets_gain,planets_gain_day
111                 FROM galaxies g 
112                 WHERE tick = ( SELECT max(tick) AS max FROM galaxies)
113                 $browse
114                 });
115         $query->execute($offset);
116         my @galaxies;
117         while (my $galaxy = $query->fetchrow_hashref){
118                 push @galaxies,$galaxy;
119         }
120         $c->detach('/default') unless @galaxies;
121         $c->stash(galaxies => \@galaxies);
122 }
123
124
125 sub alliances : Local {
126         my ( $self, $c, $order, $offset ) = @_;
127         my $dbh = $c->model;
128
129         my $error = '';
130
131         $offset = 0 unless $offset;
132         $c->detach('/default') if $offset < 0;
133         $c->stash(offset => $offset);
134
135         if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|avgsize|avgscore|members)$/){
136                 $order = $1;
137         }else{
138                 $order = 'scorerank';
139         }
140         $c->stash(order => $order);
141
142         my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?};
143         if ($order =~ /rank$/){
144                 $browse = qq{WHERE $order > ? ORDER BY $order ASC LIMIT 100};
145         }
146         my $query = $dbh->prepare(qq{SELECT alliance AS name,aid AS id,
147                 size, size_gain, size_gain_day,
148                 score,score_gain,score_gain_day,
149                 avgsize,avgsize_gain,avgsize_gain_day,
150                 avgscore,avgscore_gain,avgscore_gain_day,
151                 sizerank,sizerank_gain,sizerank_gain_day,
152                 scorerank,scorerank_gain,scorerank_gain_day,
153                 members,members_gain,members_gain_day
154         FROM ( SELECT *, (size/members) AS avgsize
155                         ,(score/scoremem) AS avgscore
156                         ,(size_gain/members) AS avgsize_gain
157                         ,(score_gain/scoremem) AS avgscore_gain
158                         ,(size_gain_day/members) AS avgsize_gain_day
159                         ,(score_gain_day/scoremem) AS avgscore_gain_day
160                         FROM (SELECT *,(CASE WHEN members > 60 THEN 60 ELSE members END) AS scoremem
161                                 FROM alliance_stats WHERE
162                                         tick = ( SELECT max(tick) AS max FROM alliance_stats)) ast2
163                 ) ast
164                 NATURAL JOIN alliances a
165                 $browse
166                 });
167         $query->execute($offset);
168         my @alliances;
169         while (my $alliance = $query->fetchrow_hashref){
170                 push @alliances,$alliance;
171         }
172         $c->detach('/default') unless @alliances;
173         $c->stash(alliances => \@alliances);
174 }
175
176 =head1 AUTHOR
177
178 Michael Andreen (harv@ruin.nu)
179
180 =head1 LICENSE
181
182 GPL 2.0, or later
183
184 =cut
185
186 1;