X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=NDWeb%2FPages%2FMain.pm;h=083b96da133a0fb365905090a9661e197b19ccfa;hb=da77e07d9a4ac17a25796a0b897a03f4853ba341;hp=45fdd35c663a9a08b2e877f6b38d4fe66bfcfea9;hpb=9b97803df653aaa97c48acecaeb34606022bccee;p=ndwebbie.git diff --git a/NDWeb/Pages/Main.pm b/NDWeb/Pages/Main.pm index 45fdd35..083b96d 100644 --- a/NDWeb/Pages/Main.pm +++ b/NDWeb/Pages/Main.pm @@ -116,12 +116,7 @@ sub render_body { $query->execute($1,$2,$3,$ND::UID); } - my ($motd) = $DBH->selectrow_array("SELECT value FROM misc WHERE id='MOTD'"); - - $BODY->param(MOTD => parseMarkup($motd)); - $BODY->param(Username => $self->{USER}); $BODY->param(isMember => $self->isMember()); - $BODY->param(isHC => $self->isHC()); my @groups = map {name => $_}, sort keys %{$self->{GROUPS}}; $BODY->param(Groups => \@groups); @@ -141,38 +136,41 @@ sub render_body { $BODY->param(Planet => $planet); - $query = $DBH->prepare(qq{ - SELECT c.id, c.landing_tick, dc.username,c.covered, - TRIM('/' FROM concat(p2.race||' /')) AS race, TRIM('/' FROM concat(i.amount||' /')) AS amount, - TRIM('/' FROM concat(i.eta||' /')) AS eta, TRIM('/' FROM concat(i.shiptype||' /')) AS shiptype, - (c.landing_tick - tick()) AS curreta, - TRIM('/' FROM concat(coords(p2.x,p2.y,p2.z) ||' /')) AS attackers - FROM calls c - JOIN incomings i ON i.call = c.id - JOIN current_planet_stats p2 ON i.sender = p2.id - LEFT OUTER JOIN users dc ON c.dc = dc.uid - WHERE c.member = ? AND (c.landing_tick - tick()) > 0 - GROUP BY c.id, c.landing_tick,dc.username,c.covered - ORDER BY c.landing_tick DESC + my $calls = $DBH->prepare(qq{ + SELECT id,landing_tick,dc,curreta,covered, + TRIM('/' FROM concat(DISTINCT race||' /')) AS race, TRIM('/' FROM concat(amount||' /')) AS amount, + TRIM('/' FROM concat(DISTINCT eta||' /')) AS eta, TRIM('/' FROM concat(DISTINCT shiptype||' /')) AS shiptype, + TRIM('/' FROM concat(coords||' /')) AS attackers + FROM (SELECT c.id,p.x,p.y,p.z, u.defense_points, c.landing_tick, dc.username AS dc,covered, + (c.landing_tick - tick()) AS curreta,p2.race, i.amount, i.eta, i.shiptype, p2.alliance, + coords(p2.x,p2.y,p2.z), COUNT(DISTINCT f.id) AS fleets + FROM calls c + JOIN incomings i ON i.call = c.id + JOIN users u ON c.member = u.uid + JOIN current_planet_stats p ON u.planet = p.id + JOIN current_planet_stats p2 ON i.sender = p2.id + LEFT OUTER JOIN users dc ON c.dc = dc.uid + LEFT OUTER JOIN fleets f ON f.target = u.planet AND f.tick = c.landing_tick AND f.back = f.tick + f.eta - 1 + WHERE u.uid = ? AND c.landing_tick >= tick() + GROUP BY c.id, p.x,p.y,p.z, c.landing_tick, u.defense_points,dc.username,covered,p2.race,i.amount,i.eta,i.shiptype,p2.alliance,p2.x,p2.y,p2.z) a + GROUP BY id, x,y,z,landing_tick, defense_points,dc,covered,curreta,fleets + ORDER BY landing_tick DESC })or warn $DBH->errstr; - $query->execute($ND::UIN) or warn $DBH->errstr; + $calls->execute($ND::UID) or warn $DBH->errstr; - my $i = 0; my @calls; - while (my $call = $query->fetchrow_hashref){ + while (my $call = $calls->fetchrow_hashref){ $call->{attackers} =~ s{(\d+:\d+:\d+)}{$1}g; - unless(defined $call->{username}){ - $call->{dc} = 'Hostile'; - $call->{username} = 'none'; + unless(defined $call->{dc}){ + $call->{activedc} = 'Hostile'; + $call->{dc} = 'none'; } if($call->{covered}){ $call->{covered} = 'Friendly'; }else{ $call->{covered} = 'Hostile'; } - $i++; - $call->{ODD} = $i % 2; - $call->{shiptype} = escapeHTML($call->{shiptype}); + $call->{shiptype} = $call->{shiptype}; push @calls, $call; } $BODY->param(Calls => \@calls); @@ -210,26 +208,23 @@ sub render_body { $query = $DBH->prepare(q{SELECT f.id, coords(x,y,z) AS target, mission , f.amount, tick, back FROM fleets f -JOIN fleet_ships fs USING (id) LEFT OUTER JOIN current_planet_stats p ON f.target = p.id -WHERE f.uid = ? AND f.sender = ? AND +WHERE NOT ingal AND f.uid = ? AND f.sender = ? AND (back >= ? OR (tick >= tick() - 24 AND name = 'Main')) GROUP BY f.id, x,y,z, mission, tick,back,f.amount ORDER BY x,y,z,mission,tick }); - my $ships = $DBH->prepare(q{SELECT ship,amount FROM fleet_ships where id = ?}); + my $ships = $DBH->prepare(q{SELECT ship,amount FROM fleet_ships + WHERe id = ? ORDER BY num + }); $query->execute($self->{UID},$self->{PLANET},$self->{TICK}) or warn $DBH->errstr; my @fleets; - $i = 0; while (my $fleet = $query->fetchrow_hashref){ - $fleet->{ODD} = $i++ % 2; my @ships; $ships->execute($fleet->{id}); - my $j = 0; while (my $ship = $ships->fetchrow_hashref){ - $ship->{ODD} = $j++ % 2; push @ships,$ship; } $fleet->{ships} = \@ships; @@ -239,6 +234,29 @@ ORDER BY x,y,z,mission,tick $BODY->param(SMS => $sms); $BODY->param(Hostname => $hostname); + + if ($self->isMember()){ + my $announcements = $DBH->prepare(q{SELECT ft.ftid AS id,u.username,ft.subject, + count(NULLIF(COALESCE(fp.time > ftv.time,TRUE),FALSE)) AS unread,count(fp.fpid) AS posts, + date_trunc('seconds',max(fp.time)::timestamp) as last_post, + min(fp.time)::date as posting_date, ft.sticky + FROM forum_threads ft JOIN forum_posts fp USING (ftid) + JOIN users u ON u.uid = ft.uid + LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $1) ftv ON ftv.ftid = ft.ftid + WHERE ft.fbid = 1 + GROUP BY ft.ftid, ft.subject,ft.sticky,u.username + HAVING count(NULLIF(COALESCE(ft.sticky OR fp.time > ftv.time,TRUE),FALSE)) >= $2 + ORDER BY sticky DESC,last_post DESC + }); + $announcements->execute($ND::UID,1) or warn $DBH->errstr; + my @threads; + while (my $thread = $announcements->fetchrow_hashref){ + push @threads,$thread; + } + $BODY->param(Announcements => \@threads); + } + + return $BODY; }