Scoop -- the swiss army chainsaw of content management
Front Page · Everything · News · Code · Help! · Wishlist · Project · Scoop Sites · Dev Notes · Latest CVS changes · Development Activities
Scoop Box Exchange - Show Box: hotlist_flex+diaries K5 style 1.00

Author: rusty [Info]

Description:

hillct's hotlist_flex+diaries, modified for high-volume use on K5. Some queries streamlined and rewritten, it's generally faster and more efficient. Watch out for

Box Code:

## START hotlist_flex+diary ##
# Display Hotlist, Stories and unread replies to user comments
# Version 0.3.1 by hillct
return unless ($S->have_perm('hotlist_flex'));
my($view,$content,$item);
my $uri=$S->{APACHE}->uri;
my $arg = $S->apache->args();
$arg =~ s/set-view=\w+//g;
$arg =~ s/;$//;

$uri .= ($arg) ? "?$arg;" : '?';

if($S->{GID} ne 'Anonymous') { # Only if we're logged in
if($S->{CGI}->param('set-view')=~/Hotlist\|Replies\|Stories\|Diaries/){
$view=$S->{CGI}->param('set-view');
$S->session('hotlist-view',$view);
} else {$view = $S->session('hotlist-view') \|\| 'Hotlist';}

$content="<center>";
for ('Hotlist','Replies','Stories','Diaries'){
$content.=(($_ eq $view)?"<b>$_</b> \| ":"<a
href=\"$uri"."set-view=$_\">$_</a> \| ");
}
$content =~ s/\\|\s$//;
$content.="</center>";

if($view eq 'Hotlist'){
$content .= '<p>';


if ($S->{HOTLIST} && $#{$S->{HOTLIST}} >= 0) {
$content .= qq{
<TABLE WIDTH="100%" BORDER=0 CELLPADDING=1 CELLSPACING=0>};

foreach my $sid (@{$S->{HOTLIST}}) {
my $stories = $S->getstories(
{-type => 'fullstory',
-sid => $sid});
my $story = $stories->[0];

my $show = $S->{UI}->{VARS}->{show_new_comments};
my $num_new = $S->new_comments_since_last_seen($sid) if
($show eq "hotlist" \|\| $show eq "all");

my $end_s = ($story->{commentcount} == 1) ? '' : 's';
$content .= qq{
<TR>
<TD VALIGN="top"><A HREF="|rootdir|/hotlist/remove/$sid/displaystory">|hotlist_remove_link|</A></TD><TD>|norm_font|<A CLASS="light" HREF="|rootdir|/story/$sid">$story->{title}</A><BR>($story->{commentcount} comment$end_s};
$content .= ", <B>$num_new</B> new" if defined($num_new);
$content .= qq{)|norm_font_end|</TD>
</TR>};
}
$content .= qq{
</TABLE>};

} else{ $content.="<font size=1>No Hotlisted Stories</font>"; }
}elsif($view eq 'Replies'){
$content .= '<p>';

my($results,$comment,$sid);
my ($rv, $sth) = $S->db_select({
WHAT => 'c1.sid,c2.cid,c2.subject',
FROM => 'comments AS c1 LEFT JOIN comments as c2 on c2.sid=c1.sid
AND c2.pid=c1.cid LEFT JOIN viewed_stories ON viewed_stories.sid=c1.sid
AND viewed_stories.uid=c1.uid',
WHERE => qq{c1.uid=$S->{UID} AND c2.sid IS NOT NULL AND c2.date > DATE_SUB(NOW(), INTERVAL 14 DAY) AND c2.cid > viewed_stories.highest_idx}
});

while ($comment = $sth->fetchrow_hashref()) {
$results->{$comment->{'sid'}}.=qq{
<br>|dot|
<a href="|rootdir|/comments/$comment->{'sid'}/$comment->{'cid'}#$comment->{'cid'}"><font size="1">$comment->{'subject'}</font></a> };
}
my $reply_txt;
for $sid (keys %$results){
my ($rv, $sth) = $S->db_select({
WHAT => 'title, displaystatus',
FROM => 'stories',
WHERE => qq{sid = "$sid"}
});
my ($title, $disp) = $sth->fetchrow();
$sth->finish();
next if ($disp == -1);
$reply_txt .= qq{
<p>
<a href="|rootdir|/story/$sid"><font
size="2">$title</font></a>
$results->{$sid}
</p>
};

}

$content .= $reply_txt \|\| qq{<font size="1">No New Replies to your Comments</font>};

}elsif($view eq 'Stories'){
$content.='<p>';
my ($results,$story);
my ($rv, $sth) = $S->db_select({
WHAT => 'stories.title,stories.sid,stories.section,COUNT(comments.cid) AS commentcount',
FROM => 'stories LEFT JOIN comments ON comments.sid=stories.sid',
WHERE => qq{aid='$S->{NICK}' AND time >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND displaystatus != '-1'},
GROUP_BY => 'stories.sid',
ORDER_BY => 'time DESC'
});

my $linknick = $S->urlify($S->{NICK});
my $stories_text;
my ($story_count, $diary_count);
while ($story = $sth->fetchrow_hashref()) {
my $sid=$story->{sid};
if ($story->{section} eq 'Diary') {
$diary_count++;
} elsif ($story->{section} ne 'advertisements') {
$story_count++;
}
my $show = $S->{UI}->{VARS}->{show_new_comments};
my $num_new = $S->new_comments_since_last_seen($sid) if
($show eq "hotlist" \|\| $show eq "all");

my $end_s = ($story->{commentcount} == 1) ? '' : 's';
$stories_text .= qq{
<TR>
<TD VALIGN="top">|dot|</td>
<td valign="top">|norm_font|<a class="light" href="|rootdir|/story/$sid">$story->{title}</a><br>($story->{commentcount}
comment$end_s};
$stories_text .= qq{, <b>$num_new</b> new} if defined($num_new);
$stories_text .= qq{)|norm_font_end|</td></tr>};
}

if ($stories_text) {
$content .= qq{
<TABLE WIDTH="100%" BORDER=0 CELLPADDING=1 CELLSPACING=0>
$stories_text
</TABLE>
<p>
Older: <a href="|rootdir|/?op=search&offset=$story_count&old_count=0&type=author&topic=§ion=&string=$linknick&count=30&next=Next+Page+%3E%3E">Stories</a>,
<a href="|rootdir|/?op=search&offset=$diary_count&old_count=0&type=diary_by&topic=§ion=&string=$linknick&count=30&next=Next+Page+%3E%3E">Diaries</a>};
} else {
$content.="<font size=1>You have written no stories in the last 30 days.</font>";
}
#"
}elsif($view eq 'Diaries'){
$content.='<p>';
my @subscriptions=split(/,/,$S->pref('diary_sub'));

my $authors;
my @sids;
my $titles;
foreach my $auth (sort @subscriptions) {
my ($rv, $sth) = $S->db_select({
DEBUG=> 0,
WHAT => 'aid, sid, title',
FROM => 'stories',
WHERE => qq{aid="$auth" AND time >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND section='Diary'},
ORDER_BY => 'time desc'
});


while (my ($aid, $sid, $title) = $sth->fetchrow()) {
next if (defined $S->story_last_seen($sid));
push @sids, $sid;
push @{$authors->{$aid}}, $sid;
if (length($title) > 25) {
$title =~ s/^(.{25}).*$/$1.../;
}
$titles->{$sid} = $title;
}
$sth->finish();

}

foreach my $author (@subscriptions) {
my $l_author = $S->urlify($author);
my $new = 0;
#warn "Author is $author, new is $new\n";
$content.=qq{<b><a href="|rootdir|/diary/$l_author">|hotlist_remove_link|</a> };
$content.=qq{<a href="|rootdir|/user/$l_author/diary">$author</a></b>};
#"
my $title_links;
foreach my $posted_sid (@{$authors->{$author}}) {
#warn "SID is $posted_sid, New is $new\n";
$new++;
$title_links .= qq{<br>|dot| <a href="/story/$posted_sid">$titles->{$posted_sid}</a>};
}

if ($new) {
$content .= qq{ (<b>$new</b> new) |smallfont|$title_links|smallfont_end|<br>};
} else {
$content .= qq{ (0 new)<br>};
}

}
$content.="<font size=1>You have no diaries on your watch list</font>" if $#subscriptions==-1;
}else{$content.="This error should never occur.";}
return {title => "$S->{NICK}'s $view", content => $content};
}

## END hotlist_flex+diary ##
Menu
· create account
· faq
· search
· report bugs
· Scoop Administrators Guide
· Scoop Box Exchange

Scoop Site Scroller: Get one yourself!
Keepers of Lists
Got Lists? We've got over 1800

Login
Make a new account
Username:
Password:

Hosted by ScoopHost.com Powered by Scoop
All trademarks and copyrights on this page are owned by their respective companies. Comments are owned by the Poster. The Rest © 1999 The Management

create account | faq | search