diff --git a/guestbook-ng.pl b/guestbook-ng.pl index 6d5b902..0df94ca 100755 --- a/guestbook-ng.pl +++ b/guestbook-ng.pl @@ -132,12 +132,20 @@ any [qw{GET POST}], '/sign' => sub ($c) { $c->render(); }; -under '/message'; +group { + under '/message'; -get '/:id', [id => qr/[0-9]+/] => sub ($c) { - my $message_id = $c->param('id'); + get '/:message_id', [message_id => qr/[0-9]+/] => sub ($c) { + my $message_id = $c->param('message_id'); + my @view_post = $c->message->get_post_by_id($message_id); - $c->render(text => "You've requested message number: $message_id"); + $c->stash(status => 404) unless $view_post[0]; + + $c->stash(view_post => @view_post); + + #$c->render(text => "You've requested message number: $message_id"); + $c->render(); + }; }; # Send it diff --git a/lib/GuestbookNg/Model/Message.pm b/lib/GuestbookNg/Model/Message.pm index 71bed9d..6943190 100644 --- a/lib/GuestbookNg/Model/Message.pm +++ b/lib/GuestbookNg/Model/Message.pm @@ -95,7 +95,7 @@ sub create_post($self, $name, $message, $url = undef, $spam = 1) { } sub max_posts($self, $value = undef) { - return $self->{'max_posts'} = $value // $self->{'max_posts'} + $self->{'max_posts'} = $value // $self->{'max_posts'} } sub get_last_page($self, $want_spam = undef) { @@ -103,23 +103,35 @@ sub get_last_page($self, $want_spam = undef) { my $last_page = int($post_count / $self->{'max_posts'}); # Add a page if we have "remainder" posts - return $post_count % $self->{'max_posts'} ? ++$last_page : $last_page; + $post_count % $self->{'max_posts'} ? ++$last_page : $last_page; } sub get_post_count($self) { - return $self->pg->db->query(<<~'END_SQL')->text() - SELECT COUNT(*) - FROM messages - WHERE NOT is_spam; - END_SQL + $self->pg->db->query(<<~'END_SQL')->text() + SELECT COUNT(*) + FROM messages + WHERE NOT is_spam; + END_SQL } sub get_spam_count($self) { - return $self->pg->db->query(<<~'END_SQL')->text() - SELECT COUNT(*) - FROM messages - WHERE is_spam; - END_SQL + $self->pg->db->query(<<~'END_SQL')->text() + SELECT COUNT(*) + FROM messages + WHERE is_spam; + END_SQL +} + +sub get_post_by_id($self, $message_id) { + $self->pg->db->query(<<~'END_SQL', $message_id)->array() + SELECT TO_CHAR(message_date, 'Dy Mon DD HH:MI:SS AM TZ YYYY'), + visitor_name, + message, + homepage_url, + message_id + FROM messages + WHERE message_id = ?; + END_SQL } 1; diff --git a/templates/message_id.html.ep b/templates/message_id.html.ep new file mode 100644 index 0000000..50114d7 --- /dev/null +++ b/templates/message_id.html.ep @@ -0,0 +1,20 @@ +% layout 'default'; +% title 'View'; +

Messages from the World Wide Web

+
+
+

<%= @$view_post[0] %>

+
+

<%= @$view_post[2] %>

+
+
+

+ - <%= @$view_post[1] %> + <% if (@$view_post[3]) { =%> + (<%= link_to Homepage => @$view_post[3] %>) + <% } =%> +

+
+ +
+