Messing with common i18n modules.
[blog.pm.git] / lib / Blog / Helper / Post.pm
blobe117f0a2da6b6b567f97c059406d99a91eb7a864
1 package Blog::Helper::Post;
3 use strict;
5 use base 'Blog::Helper';
7 sub list {
8 my ( $self, $args ) = @_;
10 my $c = Blog->context;
12 my $posts = $c->model( 'Post' )->manager->list( %$args );
14 return [
15 map {
17 $_->column_value_pairs,
18 comment_count => $_->comment_count,
19 tags => [ $_->tags ]
21 } @$posts
25 sub list_by_tag {
26 my ( $self, $args ) = @_;
28 my $c = Blog->context;
30 my $tag_id = delete $args->{ tag_id };
31 my $cond = {
32 %$args,
33 query => [ 't3.tag_id' => $tag_id ],
34 with_objects => [ 'post_tag_map' ]
37 return $self->list( $cond );
40 sub pager {
41 my ( $self, $page ) = @_;
43 $page = 1 unless $page && $page =~ m/^\d+$/o;
45 my $c = Blog->context;
47 return {
48 count => $c->model( 'Post' )->count(),
49 page_size => $c->model( 'Post' )->manager->default_objects_per_page,
50 page => $page
54 sub recent {
55 my ( $self, $limit ) = @_;
57 my $c = Blog->context;
59 my $posts = $c->model( 'Post' )->manager->recent( $limit || 10 );
61 return [ map { scalar $_->column_value_pairs } @$posts ];
64 sub newer {
65 my ( $self, $post ) = @_;
67 my $c = Blog->context;
69 my $newer_post = $c->model( 'Post' )->manager->newer( $post->{ addtime } );
71 return unless $newer_post;
73 return scalar $newer_post->column_value_pairs;
76 sub older {
77 my ( $self, $post ) = @_;
79 my $c = Blog->context;
81 my $older_post = $c->model( 'Post' )->manager->older( $post->{ addtime } );
83 return unless $older_post;
85 return scalar $older_post->column_value_pairs;
88 sub list_by_month {
89 my ( $self ) = @_;
91 my $c = Blog->context;
93 my $oldest = $c->model( 'Post' )->search(
94 select => 'addtime',
95 sort_by => 'addtime ASC',
96 limit => 1
99 my $newest = $c->model( 'Post' )->search(
100 select => 'addtime',
101 sort_by => 'addtime DESC',
102 limit => 1
105 $oldest = $oldest->[0];
106 $newest = $newest->[0];
108 return unless $oldest && $newest;
110 $oldest = $oldest->addtime;
111 $newest = $newest->addtime;
113 my $list = [];
114 my $dt = $newest;
115 while ( $dt > $oldest ) {
116 my $count = $c->model( 'Post' )->manager->get_posts_count(
117 query => [
118 addtime => { gt => $dt->clone->subtract( months => 1 )->epoch },
119 addtime => { le => $dt->epoch }
123 push @$list,
125 count => $count,
126 year => $dt->year,
127 month => $dt->month,
128 month_name => $c->helper('Util')->mon2name($dt->month - 1)
130 if $count;
132 $dt->subtract( months => 1 );
135 return $list;
138 sub archive {
139 my $self = shift;
141 my $c = Blog->context;
143 my $posts = $c->model( 'Post' )->manager->archive( @_ );
145 return [
146 map {
148 $_->column_value_pairs,
149 comment_count => $_->comment_count,
150 tags => [ $_->tags ]
152 } @$posts
156 =head1 AUTHOR
160 =head1 LICENSE
162 This library is free software, you can redistribute it and/or modify
163 it under the same terms as Perl itself.
165 =cut