Plugin Name: Brian's Latest Comments
Plugin URI: http://meidell.dk/archives/category/wordpress/latest-comments/
Description: This shows an overview of the recently active articles and the last people to comment on them. Original idea and code fixes contributed by Michael Heilemann. If you have Dunstan's Time Since installed, this plugin uses it for the title="" attributes on the comments and posts. (For WordPress 1.5)
Author: Brian Meidell
Author URI: http://meidell.dk/
Version 1.5: Now works without LOCK TABLE and CREATE TEMPORARY TABLE priviledges.
Version 1.5.1: Can't remember what I did here
Version 1.5.2: Fixed count select statement to not include spammy comments
Version 1.5.3: Properly excludes track- and pingbacks
Version 1.5.4: Excludes posts that are not published, even if they have comments
Version 1.5.5: Fade old comments, fixed bug that wreaked havoc with Time Since
Version 1.5.6: Bugfix from Jonas Rabbe (http://www.jonas.rabbe.com/) pertaining to timesince
Version 1.5.7: Bugfix so old colors can be darker than new colors (stupid oversight), thanks to http://spiri.dk for spotting it.
Bugfix where single digit hex would cause invalid colors, thanks to http://www.wereldkeuken.be/ for the fix.
Version 1.5.8: Updated to work with WordPress 2.1 alpha by M. Heilemann.
function blc_latest_comments($num_posts = 5, $num_comments = 6, $hide_pingbacks_and_trackbacks = true, $prefix = "
", $postfix = "
", $fade_old = true, $range_in_days = 10, $new_col = "#444444", $old_col = "#cccccc")
function clamp($min, $max, $val)
$usetimesince = function_exists('time_since'); // Work nicely with Dunstan's Time Since plugin (adapted by Michael Heilemann)
// This is compensating for the lack of subqueries in mysql 3.x
// The approach used in previous versions needed the user to
// have database lock and create tmp table priviledges.
// This uses more queries and manual DISTINCT code, but it works with just select privs.
$ping = "";
$ping = "AND comment_type<>'pingback' AND comment_type<>'trackback'";
$posts = $wpdb->get_results("SELECT
FROM ($wpdb->comments LEFT JOIN $wpdb->posts ON (comment_post_ID = ID))
WHERE comment_approved = '1'
ORDER BY comment_date DESC;");
$seen = array();
$num = 0;
$max_time = $range_in_days * 24 * 60 * 60 ;
$r_new = hexdec(substr($new_col, 1, 2));
$r_old = hexdec(substr($old_col, 1, 2));
//$r_min = min($min, $max);
//$r_max = max($min, $max);
$r_range = ($r_old-$r_new);
$g_new = hexdec(substr($new_col, 3, 2));
$g_old = hexdec(substr($old_col, 3, 2));
//$g_min = min($min, $max);
//$g_max = max($min, $max);
$g_range = ($g_old-$g_new);
$b_new = hexdec(substr($new_col, 5, 2));
$b_old = hexdec(substr($old_col, 5, 2));
//$b_min = min($min, $max);
//$b_max = max($min, $max);
$b_range = ($b_old-$b_new);
// print "ranges: $r_range, $g_range, $b_range ";
// print "r: ".(0.5*$r_range+$r_new)." ";
foreach($posts as $post)
// The following 5 lines is a manual DISTINCT and LIMIT,
// since mysql 3.x doesn't allow you to control which way a DISTINCT
// select merges multiple entries.
$seen[$post->comment_post_ID] = true;
if($num++ > $num_posts)
$commenters = $wpdb->get_results("SELECT *, UNIX_TIMESTAMP(comment_date) AS unixdate FROM $wpdb->comments
WHERE comment_approved = '1'
AND comment_post_ID = '".$post->comment_post_ID."'
ORDER BY comment_date DESC
$count = $wpdb->get_var("SELECT COUNT(comment_ID) AS c FROM $wpdb->comments WHERE comment_post_ID = $post->comment_post_ID AND comment_approved = '1' ".$ping);
$i = 0;
$link = get_permalink($post->comment_post_ID);
$title = " title=\"Last comment was ".time_since($comment->unixdate)." ago\"";
$title = "";
echo $prefix."".stripslashes($post->post_title). "".$count." \n";
foreach($commenters as $commenter)
$title = " title=\"Posted ".time_since($commenter->unixdate)." ago\"";
$diff = time() - $commenter->unixdate;
$r = round($diff/$max_time*($r_range))+$r_new;
$r = clamp(min($r_new, $r_old), max($r_new, $r_old), $r);
$g = round($diff/$max_time*($g_range))+$g_new;
$g = clamp(min($g_new, $g_old), max($g_new, $g_old), $g);
$b = round($diff/$max_time*($b_range))+$b_new;
$b = clamp(min($b_new, $b_old), max($b_new, $b_old), $b);
$r_hex = str_pad(dechex($r), 2, '0', STR_PAD_LEFT);
$g_hex = str_pad(dechex($g), 2, '0', STR_PAD_LEFT);
$b_hex = str_pad(dechex($r), 2, '0', STR_PAD_LEFT);
$colstr = " style=\"color: #".$r_hex.$g_hex.$b_hex.";\"";
if($i++ > 0)
echo ", ";
if($count > $num_comments)
echo " [...]";
YEMblog Messages | YEMblog
As a reminder, we won’t be tweeting from shows this fall. We’ll update JamBase.com with The Skinny after each show and we’ll tweet regularly using @YEMblog but no in-show commentary. We recommend the following sites and Twitter feeds for your Summer Tour fix…
@Phish_FTR = Photos, setlists and more from the band @rphish = The latest and greatest Phish-related content @phishnet = A fan-run feed representing Phish.net @Phish_Forum = Show reviews, tour tweets and more @MrMiner = The most popular Phish blogger’s Twitter feed @JamBase = Publication covering the live music world which will publish The Skinny after each show @bizarchive = Scott Marks will tweet commentary from many shows @onlinephishtour = Phish conversation and links to the site’s reviews/news stories and more @CoventryMusic = Pauly, The Joker and crew share thoughts on tour @PhishVids = Updates and the latest and greatest Phish videos @zzyzx = Yes, The Timer now tweets @lumpblockclod = Phish fan Steve Paolini offers his often wise view on the shows @GuyForgetOPT = Ben will tweet opinions that will have you thinking, “He’s right! Can’t believe I didn’t think of that!”
Phish.net = The best Phish-related site on the web features real-time setlists, recaps and more JamBase = The home of “The Skinny” during and after each Phish show plus news & reviews Phish Thoughts = Whether you agree with his take or not, you can always depend on Mr. Miner for a heartfelt review rPhish = The community-run Phish “subreddit” on Reddit.com does what we used to do ThePhish = Turntable.FM room for replays of shows and 24/7 Phish listening parties Live Phish = Official recordings of every Phish show sold here bt.etree = The place to download audience recordings of Phish shows YouTube = Expect tons of fan-shot video to be posted this tour Phish Channel on Vimeo = Where Phish has posted official videos of each show in the past Coventry Blog = Pauly, Joker and Crew post reviews and more from tour PhishVids = Database of Phish videos The Phish Rotation Infographic = The Barn Presents keeps this useful graphic up-to-date to help figure out what to expect next PhishTwit = Watch tweets from the shows roll in + chat with other fans + more
For nearly four years we’ve aimed to highlight the latest and greatest Phish-related content and provide real-time reports from Phish shows through YEMblog.com, the @YEMblog Twitter Feed and YEMblog’s Facebook page on a frequent basis. That mission comes to an end today as I just don’t have the time I used to have to update the site and feeds as frequently as I did in the past. I took this “job” seriously over the years and did my best to keep the links flowing at a regular rate, something I’ll just be unable to do moving forward.
What does that mean for the future of YEMblog? Updates will be much less frequent that they have been in the past and we won’t be providing commentary from each and every Phish show as we have since Hampton. I came close to just stepping away from YEMblog all together, but after lots of internal debate and invaluable advice, I realized that I still love Phish and if I come across a fantastic video or blog post, I’d still like to have the option of sharing that find with other Phish fans. Who knows? Like Phish I could decide that I miss running YEMblog and put “my foot on the gas” once more. I’m going to take the next few weeks to see what it’s like to live my life without worrying about updating the site or the feeds.
Thanks to everyone who has ever written an intelligent article about Phish, uploaded video or audio, guest tweeted or did anything to help our cause. Without y0ur content there wouldn’t have been a YEMblog. Much appreciation to Todd Levy who built YEMblog.com and of course thanks to Jon, Mike, Trey and Page as well as the employees of Phish Inc. and Red Light Management. As for me, I’m still running Hidden Track with a fantastic group of passionate music fans, where we cover the jam, indie and classic rock worlds. I’m also a panelist on both the Type II Cast Phish podcast and the Game Tapes Forum listening parties. Besides that, I contribute to Relix Magazine on a regular basis and I’m a Jeff Waful + 1 producer. I’ve got more projects in the works, so you haven’t heard the last of me.