OSDN Git Service

add story list page for admin
authorhylom <hylom@users.osdn.me>
Tue, 4 Jun 2019 17:50:15 +0000 (17:50 +0000)
committerhylom <hylom@users.osdn.me>
Tue, 4 Jun 2019 17:50:15 +0000 (17:50 +0000)
src/newslash_web/lib/Newslash/Web.pm
src/newslash_web/lib/Newslash/Web/Controller/Admin/Story.pm
src/newslash_web/templates/admin/admin_bar.html.tt2
src/newslash_web/templates/admin/story/list.html.tt2 [new file with mode: 0644]

index 2d0174a..71242dc 100644 (file)
@@ -377,6 +377,7 @@ sub startup {
 
     $admin->get('/css')->to('admin-css#edit');
     $admin->get('/story/edit')->to('admin-story#edit');
+    $admin->get('/story/list')->to('admin-story#list');
 
     $admin->get('/users')->to('admin-users#index');
 
index f4bf965..218e141 100644 (file)
@@ -35,6 +35,31 @@ sub edit {
     $c->render(authors => $authors, source => $source, page => $page);
 }
 
+sub list {
+    my $c = shift;
+    my $page = $c->param('page') || 0;
+    my $users = $c->model('users');
+    my $stories = $c->model('stories');
+
+    my $items_per_page = 20;
+    
+    my $items = $stories->select(limit => $items_per_page,
+                                offset => $page * $items_per_page,
+                                order_by => { create_time => "DESC" });
+
+    # convert submitter UID to user hash
+    my $user_cache = {};
+    for my $item (@$items) {
+       my $submitter = $item->{submitter};
+       if (!defined $user_cache->{$submitter}) {
+           my $u = $users->select(uid => $submitter);
+           $user_cache->{$submitter} = $u ? $u : {};
+       }
+       $item->{submitter} = $user_cache->{$submitter};
+    }
+
+    $c->render(items => $items, page_num => $page, );
+}
 
 1;
 
index badf75d..d3efb5f 100644 (file)
@@ -2,6 +2,7 @@
   <ul class="menu-bar">
     <li><a href="[% Site.root %]">[% Site.name %]</a></li>
     <li><a href="/admin/submissions">タレコミリスト</a></li>
+    <li><a href="/admin/story/list">記事リスト</a></li>
 
     <!-- story -->
     <li class="dropdown">
diff --git a/src/newslash_web/templates/admin/story/list.html.tt2 b/src/newslash_web/templates/admin/story/list.html.tt2
new file mode 100644 (file)
index 0000000..894406a
--- /dev/null
@@ -0,0 +1,49 @@
+[% WRAPPER common/layout %]
+
+<div class="app-frame" id="stories-manager">
+  <h3>Stories</h3>
+  <div v-text="message"></div>
+  <div>
+    <a href="/admin/story/list">[top]</a>
+    [%- IF page_num -%]
+    <a href="/admin/story/list?page=[% page_num - 1 %]">[prev]</a>
+    [%- END -%]
+    <a href="/admin/story/list?page=[% page_num + 1 %]">[next]</a>
+  </div>
+  <table class="table">
+    <thead>
+      <tr>
+        <th>date (GMT)</th>
+        <th></th>
+        <th>title</th>
+        <th>submit</th>
+        <th>author</th>
+        <th>hits</th>
+        <th>comments</th>
+      </tr>
+    </thead>
+    <tbody>
+      [%- FOREACH item IN items %]
+      <tr>
+       <td>[% item.create_time %]</td>
+       <td><a href="/admin/story/edit?stoid=[% item.stoid %]" target="_blank_">[編集]</a></td>
+       <td><a href="/story/[% item.sid %]">[% item.title %]</a></td>
+       <td>[% item.submitter.nickname %]</td>
+       <td>[% item.author %]</td>
+       <td>[% item.hits %]</td>
+       <td>[% item.commentcount %]</td>
+      </tr>
+      [%- END %]
+    </tbody>
+  </table>
+  <div>
+    <a href="/admin/story/list">[top]</a>
+    [%- IF page_num -%]
+    <a href="/admin/story/list?page=[% page_num - 1 %]">[prev]</a>
+    [%- END -%]
+    <a href="/admin/story/list?page=[% page_num + 1 %]">[next]</a>
+  </div>
+</div>
+
+
+[% END %]