]> ruin.nu Git - ndwebbie.git/blob - ND/Web/Pages/Graph.pm
more graphs
[ndwebbie.git] / ND / Web / Pages / Graph.pm
1 #**************************************************************************
2 #   Copyright (C) 2006 by Michael Andreen <harvATruinDOTnu>               *
3 #                                                                         *
4 #   This program is free software; you can redistribute it and/or modify  *
5 #   it under the terms of the GNU General Public License as published by  *
6 #   the Free Software Foundation; either version 2 of the License, or     *
7 #   (at your option) any later version.                                   *
8 #                                                                         *
9 #   This program is distributed in the hope that it will be useful,       *
10 #   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12 #   GNU General Public License for more details.                          *
13 #                                                                         *
14 #   You should have received a copy of the GNU General Public License     *
15 #   along with this program; if not, write to the                         *
16 #   Free Software Foundation, Inc.,                                       *
17 #   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
18 #**************************************************************************/
19
20 package ND::Web::Pages::Graph;
21 use strict;
22 use warnings FATAL => 'all';
23 use ND::Include;
24 use ND::Web::Graph;
25
26 use base qw/ND::Web::Image/;
27
28 $ND::Web::Page::PAGES{graph} = 'ND::Web::Pages::Graph';
29
30 sub render_body {
31         my $self = shift;
32         my $DBH = $self->{DBH};
33
34         my %graph_settings = (
35                 y_number_format => sub { prettyValue abs $_[0]},
36                 y1_label => 'size',
37                 y2_label => 'rest',
38         );
39         my $img;
40         if ($self->{URI} =~ m{^/\w+/(stats|ranks)/(.*)}){
41                 my $type = $1;
42                 my ($x,$y,$z);
43                 if ($2 =~ m{(\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?$}){
44                         $x = $1;
45                         $y = $2;
46                         $z = $3;
47                 }
48                 my $findGraph;
49                 if (defined $z){
50                         $findGraph = $DBH->prepare(q{SELECT graph FROM planet_graphs WHERE planet = planetid($1,$2,$3,$4) AND tick = $4 AND type = $5});
51                         $findGraph->execute($x,$y,$z,$ND::TICK,$type) or die $DBH->errstr;
52                 }
53                 if (defined $findGraph and my $graph = $findGraph->fetchrow_hashref){
54                         $img = $graph->{graph};
55                 }elsif(defined $x){
56                         my $query;
57                         if (defined $z){
58                                 if ($type eq 'stats'){
59                                         $query = $DBH->prepare(q{SELECT tick,score,size,value,xp*60 AS "xp*60" FROM planets natural join planet_stats WHERE id = planetid($1,$2,$3,$4) ORDER BY tick ASC});
60                                 }elsif($type eq 'ranks'){
61                                         $query = $DBH->prepare(q{SELECT tick,-scorerank AS score,-sizerank AS size,-valuerank AS value,-xprank AS xp FROM planets natural join planet_stats WHERE id = planetid($1,$2,$3,$4) ORDER BY tick ASC});
62                                 }
63                                 $query->execute($x,$y,$z,$ND::TICK) or die $DBH->errstr;
64                         }else{
65                                 if ($type eq 'stats'){
66                                         $query = $DBH->prepare(q{SELECT tick,score,size,value,xp*60 AS "xp*60" FROM galaxies WHERE x = $1 AND y = $2 ORDER BY tick ASC});
67                                 }elsif($type eq 'ranks'){
68                                         $query = $DBH->prepare(q{SELECT tick,-scorerank AS score,-sizerank AS size,-valuerank AS value,-xprank AS xp FROM galaxies WHERE x = $1 AND y = $2  ORDER BY tick ASC});
69                                 }
70                                 $query->execute($x,$y) or die $DBH->errstr;
71                         }
72
73                         $graph_settings{title} = $type;
74                         $graph_settings{two_axes} = 1;
75                         $graph_settings{use_axis} = [2,1,2,2];
76                         $graph_settings{y_max_value} = 0 if $type eq 'ranks';
77                         $img = graphFromQuery 500,300,\%graph_settings,$query;
78                 }
79         }elsif ($self->{URI} =~ m{^/\w+/alliance(avg)?/(.*)}){
80
81
82                 $graph_settings{title} = 'Alliance vs known members';
83                 $graph_settings{two_axes} = 1;
84                 $graph_settings{use_axis} = [1,2,1,2];
85                 $graph_settings{y2_label} = 'score';
86
87                 my $query;
88                 unless (defined $1){
89                         $query = $DBH->prepare(q{SELECT a.tick,a.size,a.score,memsize, memscore FROM (SELECT tick,SUM(size) AS memsize,SUM(score) AS memscore FROM planets p JOIN planet_stats ps USING (id) WHERE p.alliance_id = $1 GROUP BY tick) p JOIN alliance_stats a ON a.tick = p.tick
90 WHERE a.id = $1 ORDER BY tick});
91                 }else{
92                         $graph_settings{title} = 'Average alliance vs known members';
93                         $query = $DBH->prepare(q{SELECT a.tick,a.size/members AS size,a.score/members AS score,memsize, memscore FROM (SELECT tick,AVG(size) AS memsize,AVG(score) AS memscore FROM planets p JOIN planet_stats ps USING (id) WHERE p.alliance_id = $1 GROUP BY tick) p JOIN alliance_stats a ON a.tick = p.tick
94 WHERE a.id = $1 ORDER BY tick});
95                 }
96                 $query->execute($2) or die $DBH->errstr;
97
98                 $img = graphFromQuery 500,300,\%graph_settings,$query;
99         }elsif ($self->{URI} =~ m{^/\w+/planetvsnd/(\d+)}){
100
101
102                 $graph_settings{title} = 'You vs ND AVG';
103                 $graph_settings{two_axes} = 1;
104                 $graph_settings{use_axis} = [1,2,1,2];
105                 $graph_settings{y2_label} = 'score';
106
107                 my $query = $DBH->prepare(q{SELECT a.tick,a.size/members as NDsize,a.score/members AS NDscore,memsize, memscore FROM (SELECT tick,size AS memsize,score AS memscore FROM planets p JOIN planet_stats ps USING (id) WHERE p.id = $1) p JOIN alliance_stats a ON a.tick = p.tick
108 WHERE a.id = 1});
109                 $query->execute($1) or die $DBH->errstr;
110
111                 $img = graphFromQuery 500,300,\%graph_settings,$query;
112         }
113
114         die 'no image' unless defined $img;
115
116         return $img;
117 };
118
119 1;