- if ($from){
- $from = "AND modified > '$from'";
- }else{
- $from = '';
- }
- my $targets = $ND::DBH->prepare(qq{SELECT r.id,r.planet FROM raid_targets r WHERE $target $from});
- $targets->execute or print p($ND::DBH->errstr);
- my $claims = $ND::DBH->prepare(qq{ SELECT username,joinable,launched FROM raid_claims
- NATURAL JOIN users WHERE target = ? AND wave = ?});
- my @targets;
- while (my $target = $targets->fetchrow_hashref){
- my %target;
- $target{Id} = $target->{id};
- $target{Coords} = $target->{id};
- my @waves;
- for (my $i = 1; $i <= $raid->{waves}; $i++){
- my %wave;
- $wave{Id} = $i;
- $claims->execute($target->{id},$i);
- my $joinable = 0;
- my $claimers;
- if ($claims->rows != 0){
- my $owner = 0;
- my @claimers;
- while (my $claim = $claims->fetchrow_hashref){
- $owner = 1 if ($ND::USER eq $claim->{username});
- $joinable = 1 if ($claim->{joinable});
- $claim->{username} .= '*' if ($claim->{launched});
- push @claimers,$claim->{username};
- }
- $claimers = join '/', @claimers;
- if ($owner){
- $wave{Command} = 'Unclaim';
- if ($raid->{released_coords}){
- $target{Coords} = $ND::DBH->selectrow_array('SELECT coords(x,y,z) FROM current_planet_stats WHERE id = ?',undef,$target->{planet});
- }
- }elsif ($joinable){
- $wave{Command} = 'Join';
- }else{
- $wave{Command} = 'none';
- }
- }else{
- #if (!isset($planet) || ($target->value/$planet->value > 0.4 || $target->score/$planet->score > 0.4))
- $wave{Command} = 'Claim';
- }
- $wave{Claimers} = $claimers;
- $wave{Joinable} = $joinable;
- push @waves,\%wave;
- }
- $target{Waves} = \@waves;
- push @targets,\%target;
- }
- $ND::BODY->param(Targets => \@targets);
+sub unread_query {
+ return $ND::DBH->prepare_cached(q{
+ SELECT count(*) AS unread, count(NULLIF(fp.time > $2,FALSE)) AS new
+FROM forum_boards fb NATURAL JOIN forum_threads ft
+ JOIN forum_posts fp USING (ftid) LEFT OUTER JOIN
+ (SELECT * FROM forum_thread_visits WHERE uid = $1) ftv ON ftv.ftid = ft.ftid
+WHERE (ftv.time IS NULL OR fp.time > ftv.time) AND fbid > 0 AND
+ fbid IN (SELECT fbid FROM forum_access WHERE gid IN (SELECT groups($1)))
+ });