# # MTEntriesRecentlyPinged # 2005/01/23 0.01 First version # 2005/10/05 1.01 Update for Movable Type 3.2 # # Copyright(c) by H.Fujimoto # package MT::Plugin::EntriesRecentlyPinged; use strict; use MT; use MT::Template::Context; use MT::Plugin; use MT::TBPing; use MT::Trackback; use MT::Entry; # show plugin information to main menu my $plugin = MT::Plugin->new; if (MT->version_number >= 3.2) { $plugin->name('MTEntriesRecentlyPinged'); $plugin->version('1.01'); $plugin->author_name('Hajime Fujimoto'); $plugin->author_link('http://www.h-fj.com/blog/'); } else { $plugin->name('MTEntriesRecentlyPinged 1.01'); } $plugin->description('Get recently pinged entries.'); $plugin->doc_link('http://www.h-fj.com/blog/archives/2005/01/23-004109.php'); MT->add_plugin($plugin); # add container tag MT::Template::Context->add_container_tag(EntriesRecentlyPinged => \&entryrecentlypinged); # main sub entryrecentlypinged { my ($ctx, $args, $cond) = @_; my $tokens = $ctx->stash('tokens'); my $builder = $ctx->stash('builder'); my $res = ''; my @recententries = (); my %recententryflag = (); my $ctr = 0; my ($lastn, $trackback, $entry, $entry_id, $sort_order, $iter); # get 'lastn' attribute $lastn = $args->{'lastn'} or $lastn = 0; $sort_order = $args->{'sort_order'} or $sort_order = 'descend'; # get recently pings if (MT->version_number >= 3.2) { $iter = MT::TBPing->load_iter( { blog_id => $ctx->stash('blog_id'), visible => 1 }, { sort => 'created_on', direction => 'descend' } ); } else { $iter = MT::TBPing->load_iter( { blog_id => $ctx->stash('blog_id') }, { sort => 'created_on', direction => 'descend' } ); } # loop each MT::TBPing while (my $ping = $iter->()) { # load MT::Trackback object and get entry_id $trackback = MT::Trackback->load($ping->tb_id); $entry_id = $trackback->entry_id; # skip already listed entry or pinged to category next if ($recententryflag{$entry_id} || $entry_id == 0); # load pinged entry $entry = MT::Entry->load($entry_id); # skip not released entry next if ($entry->status != MT::Entry::RELEASE()); # set recentry pinged entry information $recententryflag{$entry->id} = 1; push @recententries, $entry; # when listed lastn entries, exit loop $ctr++; last if ($ctr == $lastn); } # backup stash('entry') my $entrybackup = $ctx->stash('entry'); # out recently pinged entries $ctr = 0; my ($last_day, $next_day) = ('00000000') x 2; foreach $entry (@recententries) { $ctx->stash('entry', $entry); local $ctx->{current_timestamp} = $entry->created_on; my $this_day = substr $entry->created_on, 0, 8; my $next_day = $this_day; my $footer = 0; if (defined $recententries[$ctr + 1]) { $next_day = substr($recententries[$ctr + 1]->created_on, 0, 8); $footer = $this_day ne $next_day; } else { $footer++ } my $allow_comments ||= 0; defined(my $out = $builder->build($ctx, $tokens, { %$cond, DateHeader => ($this_day ne $last_day), DateFooter => $footer, EntryIfExtended => $entry->text_more ? 1 : 0, EntryIfAllowComments => $entry->allow_comments, EntryIfCommentsOpen => $entry->allow_comments && $entry->allow_comments eq '1', EntryIfAllowPings => $entry->allow_pings, EntriesHeader => !$ctr, EntriesFooter => !defined $recententries[$ctr + 1] })) or return $ctx->error($ctx->errstr); $res .= $out; $ctr++; $last_day = $this_day; } # restore stash('entry') $ctx->stash('entry', $entrybackup); $res; }