OSDN Git Service

Plugin::Stories: add storiees->latest helper
authorhylom <hylom@users.sourceforge.jp>
Fri, 30 Nov 2018 12:26:45 +0000 (21:26 +0900)
committerhylom <hylom@users.sourceforge.jp>
Fri, 30 Nov 2018 12:26:45 +0000 (21:26 +0900)
src/newslash_web/lib/Newslash/Plugin/Stories.pm
src/newslash_web/lib/Newslash/Web.pm

index 402e286..a689187 100644 (file)
@@ -6,11 +6,13 @@ use DateTime::Format::MySQL;
 use DateTime::Format::ISO8601;
 
 has 'last_error';
+has 'app';
+has 'c';
 
 sub register {
     my ($self, $app, $conf) = @_;
-    $self->attr(app => $app);
-    $app->helper(stories => sub { state $stories = $self; });
+    $self->app($app);
+    $app->helper(stories => sub { $self->c(shift); state $stories = $self; });
 
     # default config values
     my $cnf = $app->config->{Stories} ||= {};
@@ -18,16 +20,50 @@ sub register {
     $cnf->{submission_karma_bonus} = 3 if !defined $cnf->{submission_karma_bonus};
 }
 
+sub related_stories {
+    my ($self, $stoid) = @_;
+    my $stories = $self->app->model('stories');
+
+    return $stories->get_related_items(stoid => $stoid);
+}
+
+sub latest {
+    my ($self, $limit) = @_;
+    my $c = $self->c;
+
+    my $user = $c->stash('user');
+    $limit ||= $c->_get_config("item_per_page", 10);
+    my $show_future = $user->{is_admin} ? 1 : 0;
+    my $show_nonpublic = $user->{is_admin} ? 1 : 0;
+
+    my $stories;
+    if ($user->{is_login}) {
+        $stories = $c->model('stories');
+    }
+    else {
+        # TODO: check expire time
+        $stories = $c->ezcache->model('stories', { expire => 60 });
+    }
+    my $items = $stories->select(hide_future => !$user->{is_admin},
+                                 public_only => !$user->{is_admin},
+                                 limit => $limit + 1,
+                                 order_by => {create_time => 'desc'},
+                                );
+
+    return $items;
+}
+
 sub create {
     my ($self, @params) = @_;
-    my $params = {@_};
+    my $params = {@params};
     my $err = "";
     my $config = $self->app->config->{Stories} || {};
     my $stories = $self->model("stories");
 
     # check parameters
     # required parameters are: uid, title, introtext
-    $err = "no_introtext_given" if !$params->{introtext} && !$params->{intro_text};;
+    my $intro_text = $params->{introtext} || $params->{intro_text};
+    $err = "no_introtext_given" if !$intro_text;
     $err = "no_title_given" if !$params->{title};
     $err = "no_uid_given" if !$params->{uid};
 
index f291e64..a497974 100644 (file)
@@ -217,6 +217,9 @@ sub startup {
     # Users helper
     $app->plugin('Newslash::Plugin::Users');
 
+    # Stories helper
+    $app->plugin('Newslash::Plugin::Stories');
+
     # Sendmail helper
     $app->plugin('Newslash::Plugin::Sendmail');
 
@@ -237,6 +240,9 @@ sub startup {
     $r->get('/submissions')->to('timeline#submissions');
     $r->get('/polls')->to('timeline#polls');
 
+    # RSS
+    $r->get('/rss/sradjp' => [format => ['rss', 'xml']])->to('rss#sradjp');
+
     # Banned page
     $r->get('/banned')->to('index#banned', noindex => 1);