--- /dev/null
+CREATE OR REPLACE VIEW users_defprio AS
+SELECT u.*, (0.2 * (u.attack_points / GREATEST(a.attack, 1::numeric))
+ + 0.4 * (u.defense_points / GREATEST(a.defense, 1::numeric))
+ + 0.2 * (p.size::numeric / a.size) + 0.05 * (p.score::numeric / a.score)
+ + 0.15 * (p.value::numeric / a.value))::numeric(3,2) AS defprio
+FROM users u
+ JOIN current_planet_stats p ON u.planet = p.id
+ , (
+ SELECT avg(u.attack_points) AS attack, avg(u.defense_points) AS defense, avg(p.size) AS size, avg(p.score) AS score, avg(p.value) AS value
+ FROM users u
+ JOIN current_planet_stats p ON p.id = u.planet
+ WHERE u.uid IN ( SELECT groupmembers.uid FROM groupmembers WHERE groupmembers.gid = 2)
+ ) a;
use strict;
use warnings;
+use feature ":5.10";
use parent 'Catalyst::Controller';
use NDWeb::Include;
$c->stash(u => $dbh->selectrow_hashref(q{SELECT planet,defense_points
,attack_points,scan_points,humor_points
, (attack_points+defense_points+scan_points/20)::NUMERIC(5,1) as total_points
- , sms,rank,hostmask,call_if_needed,sms_note
- FROM users WHERE uid = ?
+ , sms,rank,hostmask,call_if_needed,sms_note,defprio
+ FROM users_defprio WHERE uid = ?
},undef,$c->user->id)
);
my ( $self, $c, $order ) = @_;
my $dbh = $c->model;
- if ($order && $order =~ /^((?:defense|attack|total|humor|scan|raid)_points)$/){
+ if ($order ~~ /^((?:defense|attack|total|humor|scan|raid)_points)$/
+ || $order ~~ /^(defprio)$/){
$order = "$1 DESC";
}else{
$order = 'total_points DESC';
my $limit = 'LIMIT 10';
$limit = '' if $c->check_user_roles(qw/members_points_nolimit/);
- my $query = $dbh->prepare(qq{SELECT username,defense_points,attack_points
- ,scan_points,humor_points
- ,(attack_points+defense_points+scan_points/20)::NUMERIC(4,0) as total_points
- , count(NULLIF(rc.launched,FALSE)) AS raid_points
- FROM users u LEFT OUTER JOIN raid_claims rc USING (uid)
- WHERE uid IN (SELECT uid FROM groupmembers WHERE gid = 2)
- GROUP BY username,defense_points,attack_points,scan_points,humor_points,rank
- ORDER BY $order $limit});
+ my $query = $dbh->prepare(q{
+SELECT username,defense_points,attack_points
+ ,scan_points,humor_points,defprio
+ ,(attack_points+defense_points+scan_points/20)::NUMERIC(4,0) as total_points
+ , count(NULLIF(rc.launched,FALSE)) AS raid_points
+FROM users_defprio u LEFT OUTER JOIN raid_claims rc USING (uid)
+WHERE uid IN (SELECT uid FROM groupmembers WHERE gid = 2)
+GROUP BY username,defense_points,attack_points,scan_points,humor_points,defprio
+ORDER BY } . "$order $limit"
+ );
$query->execute;
- my @members;
- while (my $member = $query->fetchrow_hashref){
- push @members,$member;
- }
- $c->stash(members => \@members);
+ $c->stash(members => $query->fetchall_arrayref({}));
}
sub addintel : Local {
<tr>
<th>User</th>
<th><a href="[% c.uri_for('points','total_points') %]">Total</a></th>
+ <th><a href="[% c.uri_for('points','defprio') %]">Defprio</a></th>
<th><a href="[% c.uri_for('points','defense_points') %]">Defenses</a></th>
<th><a href="[% c.uri_for('points','attack_points') %]">Attacks</a></th>
<th><a href="[% c.uri_for('points','raid_points') %]">Raid</a></th>
<tr align="right" class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
<td align="left">[% m.username %]</td>
<td>[% m.total_points %]</td>
+ <td>[% m.defprio %]</td>
<td>[% m.defense_points %]</td>
<td>[% m.attack_points %]</td>
<td>[% m.raid_points %]</td>