OSDN Git Service

search: add comment/journal/submission/pll/user search
authorhylom <hylom@users.sourceforge.jp>
Fri, 6 Apr 2018 12:19:58 +0000 (21:19 +0900)
committerhylom <hylom@users.sourceforge.jp>
Fri, 6 Apr 2018 12:19:58 +0000 (21:19 +0900)
src/newslash_web/lib/Newslash/Web/Controller/Search.pm
src/newslash_web/templates/search/search.html.tt2

index 02fccbd..ca4fb12 100644 (file)
@@ -12,6 +12,7 @@ sub search {
 
     my $query = $c->param('q');
     my $start = $c->param('start') || 0;
+    my $target = $c->param('target') || "story";
 
     my $item_per_page = 10;
 
@@ -30,6 +31,7 @@ sub search {
     my $req= { query => $query,
                limit => $item_per_page,
                offset => $start,
+               target => $target,
              };
     $ua->post($url => {Accept => 'application/json'} => json => $req => sub {
                   my ($ua_, $tx) = @_;
@@ -64,6 +66,7 @@ sub search {
                      }
 
                      $c->render(query_words => $query,
+                                target => $target,
                                 message => $message,
                                 error => 1,
                                 status => $code,
@@ -77,15 +80,29 @@ sub search {
                       $c->app->log->error("searchd Error: receive invalid message");
                       $message = "searchd_error";
                       $c->render(query_words => $query,
+                                 target => $target,
                                  message => $message,
                                  error => 1,
                                  status => 500,
                                 );
                       $c->rendered(500);
                       return;
-                 }
+                  }
+
+                  # convert data
+                  my $users = $c->model('users');
+                  for my $item (@{$result->{hits}}) {
+                      if ($item->{author}) {
+                          if ($item->{author} == 1) {
+                              $item->{author} = $users->anonymous_user;
+                          } else {
+                              $item->{author} = $users->select(uid => $item->{author});
+                          }
+                      }
+                  }
 
                   $c->render(query_words => $query,
+                             target => $target,
                              results => $result,
                              message => "",
                              error => 0,
index d051acc..b3f61cd 100644 (file)
@@ -1,16 +1,32 @@
 [% WRAPPER common/layout enable_sidebar=1 %]
-
+[% USE date %]
 <div class="main-column">
   <div class="main-contents">
 
     <div class="search-form">
       <form  method="get" action="/search">
-        <div class="form-group col-sm-10">
-          <label class="sr-only" for="query">検索キーワード</label>
-          <input type="text" class="form-control" id="query" name="q" placeholder="検索キーワードを入力..." value="[% query_words FILTER html %]">
+
+        <div class="form-group">
+          <div class="col-sm-10">
+            <label class="sr-only" for="query">検索キーワード</label>
+            <input type="text" class="form-control" id="query" name="q" placeholder="検索キーワードを入力..." value="[% query_words FILTER html %]">
+          </div>
+          <div class="col-sm-2">
+            <button type="submit" class="btn btn-default">検索</button>
+          </div>
         </div>
-        <div class="form-group col-sm-2">
-          <button type="submit" class="btn btn-default">検索</button>
+
+        <div class="form-inline col-sm-12">
+          <label class="control-label" for="target">検索対象:</label>
+          <select class="form-control" id="target" name="target">
+            <option value="story" [% IF target == "story" %]selected="1"[% END %]>ストーリー</option>
+            <option value="comment" [% IF target == "comment" %]selected="1"[% END %]>コメント</option>
+            <option value="journal" [% IF target == "journal" %]selected="1"[% END %]>日記</option>
+            <option value="submission" [% IF target == "submission" %]selected="1"[% END %]>タレコミ</option>
+            <option value="poll" [% IF target == "poll" %]selected="1"[% END %]>投票</option>
+            <option value="user" [% IF target == "user" %]selected="1"[% END %]>ユーザー</option>
+            <option value="all" [% IF target == "all" %]selected="1"[% END %]>すべて</option>
+          </select>
         </div>
       </form>
     </div>
           <div class="title">
             <a href="/[% result.type %]/[% result.id %]">[% result.title %]</a>
           </div>
+          <div class="header">
+            <span class="type">[% result.type %]</span>
+            [% IF result.author %]<span class="author">by [% result.author.nickname %]</span>[% END %]
+            <span class="timestamp">([% date.format(result.create_time, '%Y-%m-%d %H:%M', 'ja_JP') %])</span>
+          </div>
           <div class="contents-text">
             [% result.content_text FILTER html %]
           </div>
       [%- IF results.total_hits > (start + item_per_page); next_page = 1; ELSE; next_page = 0; END%]
       [%- IF start > 0; prev_page = 1; ELSE; prev_page = 0; END %]
       [%- IF next_page || prev_page %]
+      [% IF target; target_token = "&target=" _ target; ELSE; target_token = ""; END %]
       <div class="pager">
         [%- IF prev_page -%]
         <span class="prev">
           [%- IF start == item_per_page %]
-          <a href="/search?q=[% query_words %]">≪前</a>
+          <a href="/search?q=[% query_words %][% target_token %]">≪前</a>
           [%- ELSE %]
-          <a href="/search?q=[% query_words %]">≪最初</a>
-          <a href="/search?q=[% query_words %]&start=[% start - item_per_page %]">≪前</a>
+          <a href="/search?q=[% query_words %][% target_token %]">≪最初</a>
+          <a href="/search?q=[% query_words %][% target_token %]&start=[% start - item_per_page %]">≪前</a>
           [%- END %]
         </span>
         [%- END -%]
         [%- IF next_page -%]
         <span class="next">
-          <a href="/search?q=[% query_words %]&start=[% start + item_per_page %]">次≫</a>
+          <a href="/search?q=[% query_words %][% target_token %]&start=[% start + item_per_page %]">次≫</a>
         </span>
         [%- END -%]
       </div>