]> ruin.nu Git - ndwebbie.git/blobdiff - NDWeb/Pages/Main.pm
Better session support and auth logging
[ndwebbie.git] / NDWeb / Pages / Main.pm
index db3a11c7db65d0b56844c3492463ccc2b22d2bb9..083b96da133a0fb365905090a9661e197b19ccfa 100644 (file)
@@ -116,11 +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(isMember => $self->isMember());
-       $BODY->param(isHC => $self->isHC());
        my @groups = map {name => $_}, sort keys %{$self->{GROUPS}};
        $BODY->param(Groups => \@groups);
 
@@ -141,11 +137,11 @@ sub render_body {
        $BODY->param(Planet => $planet);
 
        my $calls = $DBH->prepare(qq{
-               SELECT id,landing_tick,dc,curreta,
+               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,
+                       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 
@@ -156,8 +152,8 @@ sub render_body {
                        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,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,curreta,fleets
+                       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;
        $calls->execute($ND::UID) or warn $DBH->errstr;
@@ -212,15 +208,16 @@ 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;
@@ -237,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;
 }