Add artist commentary listing and search

related to #2084, fixes #2085
This commit is contained in:
Toks
2014-03-10 22:56:38 -04:00
parent 424d84661a
commit 2f3f401f3b
10 changed files with 130 additions and 2 deletions

View File

@@ -15,7 +15,7 @@ header#top {
display: inline-block;
input {
width: 8.5em;
width: 9.5em;
}
}

View File

@@ -2,6 +2,15 @@ class ArtistCommentariesController < ApplicationController
respond_to :html, :xml, :json, :js
before_filter :member_only
def index
@commentaries = ArtistCommentary.search(params[:search]).order("artist_commentaries.id desc").paginate(params[:page], :limit => params[:limit])
respond_with(@commentaries) do |format|
format.xml do
render :xml => @commentaries.to_xml(:root => "artist-commentaries")
end
end
end
def create_or_update
@artist_commentary = ArtistCommentary.find_by_post_id(params[:artist_commentary][:post_id])

View File

@@ -5,6 +5,46 @@ class ArtistCommentary < ActiveRecord::Base
has_many :versions, :class_name => "ArtistCommentaryVersion", :dependent => :destroy, :foreign_key => :post_id, :primary_key => :post_id, :order => "artist_commentary_versions.id ASC"
after_save :create_version
module SearchMethods
def text_matches(query)
escaped_query = query.to_escaped_for_sql_like
where("original_title ILIKE ? ESCAPE E'\\\\' OR original_description ILIKE ? ESCAPE E'\\\\' OR translated_title ILIKE ? ESCAPE E'\\\\' OR translated_description ILIKE ? ESCAPE E'\\\\'", escaped_query, escaped_query, escaped_query, escaped_query)
end
def post_tags_match(query)
joins(:post).where("posts.tag_index @@ to_tsquery('danbooru', ?)", query.to_escaped_for_tsquery_split)
end
def search(params)
q = scoped
params = {} if params.blank?
if params[:text_matches].present?
q = q.text_matches(params[:text_matches])
end
if params[:original_present] == "yes"
q = q.where("(original_title is not null and original_title != '') or (original_description is not null and original_description != '')")
elsif params[:original_present] == "no"
q = q.where("(original_title is null or original_title = '') and (original_description is null or original_description = '')")
end
if params[:translated_present] == "yes"
q = q.where("(translated_title is not null and translated_title != '') or (translated_description is not null and translated_description != '')")
elsif params[:translated_present] == "no"
q = q.where("(translated_title is null or translated_title = '') and (translated_description is null or translated_description = '')")
end
if params[:post_tags_match].present?
q = q.post_tags_match(params[:post_tags_match])
end
q
end
end
extend SearchMethods
def original_present?
original_title.present? || original_description.present?
end

View File

@@ -0,0 +1,3 @@
<%= form_tag(artist_commentaries_path, :method => :get) do %>
<%= text_field "search", "name", :id => "quick_search_name", :placeholder => "Search commentary" %>
<% end %>

View File

@@ -0,0 +1,9 @@
<% content_for(:secondary_links) do %>
<menu>
<li><%= render "artist_commentaries/quick_search" %></li>
<li><%= link_to "Search", search_artist_commentaries_path %></li>
<li><%= link_to "Listing", artist_commentaries_path %></li>
<li><%= link_to "Recent changes", artist_commentary_versions_path %></li>
<li><%= link_to "Translation requests", artist_commentaries_path(:search => {:post_tags_match => "commentary_request"}) %></li>
</menu>
<% end %>

View File

@@ -0,0 +1,38 @@
<div id="c-artist-commentaries">
<div id="a-index">
<h1>Artist Commentary</h1>
<table width="100%" class="striped">
<thead>
<tr>
<th width="1%">Post</th>
<th>Original</th>
<th>Translated</th>
</tr>
</thead>
<tbody>
<% @commentaries.each do |commentary| %>
<tr>
<td><%= PostPresenter.preview(commentary.post) %></td>
<td>
<h3><%= h(commentary.original_title) %></h3>
<%= h(commentary.original_description) %>
</td>
<td>
<h3><%= h(commentary.translated_title) %></h3>
<%= h(commentary.translated_description) %>
</td>
</tr>
<% end %>
</tbody>
</table>
<%= numbered_paginator(@commentaries) %>
<%= render "secondary_links" %>
</div>
</div>
<% content_for(:page_title) do %>
Artist Commentary - <%= Danbooru.config.app_name %>
<% end %>

View File

@@ -0,0 +1,27 @@
<div id="c-artist-commentaries">
<div id="a-search">
<h1>Search Artist Commentary</h1>
<%= form_tag(artist_commentaries_path, :method => :get, :class => "simple_form") do %>
<%= search_field "text_matches", :label => "Text" %>
<div class="input">
<label for="search_original_present">Original present?</label>
<%= select "search", "original_present", ["yes", "no"], :include_blank => true %>
</div>
<div class="input">
<label for="search_translated_present">Translation present?</label>
<%= select "search", "translated_present", ["yes", "no"], :include_blank => true %>
</div>
<%= search_field "post_tags_match", :label => "Tags", :hint => "Meta-tags not supported" %>
<%= submit_tag "Search" %>
<% end %>
</div>
</div>
<%= render "forum_topics/secondary_links" %>
<% content_for(:page_title) do %>
Search Artist Commentary - <%= Danbooru.config.app_name %>
<% end %>

View File

@@ -49,7 +49,7 @@
<%= numbered_paginator(@commentary_versions) %>
<%= render "posts/partials/common/secondary_links" %>
<%= render "artist_commentaries/secondary_links" %>
</div>
</div>

View File

@@ -80,6 +80,7 @@
<ul>
<li><h1>Artist commentary</h1></li>
<li><%= link_to("Help", wiki_pages_path(:title => "help:artist_commentary")) %></li>
<li><%= link_to("Listing", artist_commentaries_path) %></li>
<li><%= link_to("Changes", artist_commentary_versions_path) %></li>
</ul>
</section>

View File

@@ -181,6 +181,7 @@ Danbooru::Application.routes.draw do
resources :artist_commentaries do
collection do
put :create_or_update
get :search
end
member do
put :revert