]> ruin.nu Git - ndwebbie.git/blob - lib/NDWeb/Controller/Rankings.pm
Added more status codes
[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         $c->stash( comma => \&comma_value);
43
44         if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|hit_us)$/){
45                 $order = $1;
46         }else {
47                 $order = 'scorerank';
48         }
49         my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?};
50         if ($order =~ /rank$/){
51                 $browse = qq{WHERE $order > ? ORDER BY $order ASC LIMIT 100};
52         }
53         $c->stash(order => $order);
54
55         my $extra_columns = '';
56         if ($c->check_user_roles(qw/rankings_planet_intel/)){
57                 $c->stash(extracolumns => 1);
58                 $extra_columns = ",planet_status,hit_us, alliance,relationship,nick";
59         }
60
61         my $query = $dbh->prepare(qq{SELECT id,x,y,z,ruler,planet,race,
62                 size, size_gain, size_gain_day,
63                 score,score_gain,score_gain_day,
64                 value,value_gain,value_gain_day,
65                 xp,xp_gain,xp_gain_day,
66                 sizerank,sizerank_gain,sizerank_gain_day,
67                 scorerank,scorerank_gain,scorerank_gain_day,
68                 valuerank,valuerank_gain,valuerank_gain_day,
69                 xprank,xprank_gain,xprank_gain_day
70                 $extra_columns FROM current_planet_stats_full
71                 $browse
72                 });
73         $query->execute($offset);
74         my @planets;
75         while (my $planet = $query->fetchrow_hashref){
76                 push @planets,$planet;
77         }
78         $c->detach('/default') unless @planets;
79         $c->stash(planets => \@planets);
80 }
81
82 sub galaxies : Local {
83         my ( $self, $c, $order, $offset ) = @_;
84         my $dbh = $c->model;
85
86         my $error = '';
87
88         $offset = 0 unless $offset;
89         $c->detach('/default') if $offset < 0;
90         $c->stash(offset => $offset);
91
92         $c->stash( comma => \&comma_value);
93
94         if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|planets)$/){
95                 $order = $1;
96         }else{
97                 $order = 'scorerank';
98         }
99         $c->stash(order => $order);
100
101         my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?};
102         if ($order =~ /rank$/){
103                 $browse = qq{AND $order > ? ORDER BY $order ASC LIMIT 100};
104         }
105         my $query = $dbh->prepare(qq{SELECT x,y,
106                 size, size_gain, size_gain_day,
107                 score,score_gain,score_gain_day,
108                 value,value_gain,value_gain_day,
109                 xp,xp_gain,xp_gain_day,
110                 sizerank,sizerank_gain,sizerank_gain_day,
111                 scorerank,scorerank_gain,scorerank_gain_day,
112                 valuerank,valuerank_gain,valuerank_gain_day,
113                 xprank,xprank_gain,xprank_gain_day,
114                 planets,planets_gain,planets_gain_day
115                 FROM galaxies g 
116                 WHERE tick = ( SELECT max(tick) AS max FROM galaxies)
117                 $browse
118                 });
119         $query->execute($offset);
120         my @galaxies;
121         while (my $galaxy = $query->fetchrow_hashref){
122                 push @galaxies,$galaxy;
123         }
124         $c->detach('/default') unless @galaxies;
125         $c->stash(galaxies => \@galaxies);
126 }
127
128
129 sub alliances : Local {
130         my ( $self, $c, $order, $offset ) = @_;
131         my $dbh = $c->model;
132
133         my $error = '';
134
135         $offset = 0 unless $offset;
136         $c->detach('/default') if $offset < 0;
137         $c->stash(offset => $offset);
138
139         $c->stash( comma => \&comma_value);
140
141         if (defined $order && $order =~ /^(scorerank|sizerank|valuerank|xprank|avgsize|avgscore|members)$/){
142                 $order = $1;
143         }else{
144                 $order = 'scorerank';
145         }
146         $c->stash(order => $order);
147
148         my $browse = qq{ORDER BY $order DESC LIMIT 100 OFFSET ?};
149         if ($order =~ /rank$/){
150                 $browse = qq{WHERE $order > ? ORDER BY $order ASC LIMIT 100};
151         }
152         my $query = $dbh->prepare(qq{SELECT a.name,a.id,
153                 size, size_gain, size_gain_day,
154                 score,score_gain,score_gain_day,
155                 avgsize,avgsize_gain,avgsize_gain_day,
156                 avgscore,avgscore_gain,avgscore_gain_day,
157                 sizerank,sizerank_gain,sizerank_gain_day,
158                 scorerank,scorerank_gain,scorerank_gain_day,
159                 members,members_gain,members_gain_day
160         FROM ( SELECT *, (size/members) AS avgsize
161                         ,(score/scoremem) AS avgscore
162                         ,(size_gain/members) AS avgsize_gain
163                         ,(score_gain/scoremem) AS avgscore_gain
164                         ,(size_gain_day/members) AS avgsize_gain_day
165                         ,(score_gain_day/scoremem) AS avgscore_gain_day
166                         FROM (SELECT *,(CASE WHEN members > 60 THEN 60 ELSE members END) AS scoremem
167                                 FROM alliance_stats WHERE
168                                         tick = ( SELECT max(tick) AS max FROM alliance_stats)) ast2
169                 ) ast
170                 NATURAL JOIN alliances a
171                 $browse
172                 });
173         $query->execute($offset);
174         my @alliances;
175         while (my $alliance = $query->fetchrow_hashref){
176                 push @alliances,$alliance;
177         }
178         $c->detach('/default') unless @alliances;
179         $c->stash(alliances => \@alliances);
180 }
181
182 =head1 AUTHOR
183
184 Michael Andreen (harv@ruin.nu)
185
186 =head1 LICENSE
187
188 GPL 2.0, or later
189
190 =cut
191
192 1;