implemented forum post controller
This commit is contained in:
@@ -1,16 +1,20 @@
|
|||||||
class ArtistsController < ApplicationController
|
class ArtistsController < ApplicationController
|
||||||
|
respond_to :html, :xml, :json
|
||||||
before_filter :member_only, :except => [:index, :show]
|
before_filter :member_only, :except => [:index, :show]
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@artist = Artist.new_with_defaults(params)
|
@artist = Artist.new_with_defaults(params)
|
||||||
|
respond_with(@artist)
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@artist = Artist.find(params[:id])
|
@artist = Artist.find(params[:id])
|
||||||
|
respond_with(@artist)
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@artists = Artist.build_relation(params).paginate(:per_page => 25, :page => params[:page])
|
@artists = Artist.build_relation(params).paginate(:per_page => 25, :page => params[:page])
|
||||||
|
respond_with(@artists)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@@ -18,38 +22,26 @@ class ArtistsController < ApplicationController
|
|||||||
|
|
||||||
if @artist
|
if @artist
|
||||||
@posts = Danbooru.config.select_posts_visible_to_user(CurrentUser.user, Post.find_by_tags(@artist.name, :limit => 6))
|
@posts = Danbooru.config.select_posts_visible_to_user(CurrentUser.user, Post.find_by_tags(@artist.name, :limit => 6))
|
||||||
else
|
|
||||||
redirect_to new_artist_path(params[:name])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
respond_with(@artist)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@artist = Artist.create(params[:artist])
|
@artist = Artist.create(params[:artist])
|
||||||
|
respond_with(@artist)
|
||||||
if @artist.errors.empty?
|
|
||||||
redirect_to artist_path(@artist), :notice => "Artist created"
|
|
||||||
else
|
|
||||||
flash[:notice] = "There were errors"
|
|
||||||
render :action => "new"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@artist = Artist.find(params[:id])
|
@artist = Artist.find(params[:id])
|
||||||
@artist.update_attributes(params[:artist])
|
@artist.update_attributes(params[:artist])
|
||||||
|
respond_with(@artist)
|
||||||
if @artist.errors.empty?
|
|
||||||
redirect_to artist_path(@artist), :notice => "Artist updated"
|
|
||||||
else
|
|
||||||
flash[:notice] = "There were errors"
|
|
||||||
render :action => "edit"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def revert
|
def revert
|
||||||
@artist = Artist.find(params[:id])
|
@artist = Artist.find(params[:id])
|
||||||
@version = ArtistVersion.find(params[:version_id])
|
@version = ArtistVersion.find(params[:version_id])
|
||||||
@artist.revert_to!(@version)
|
@artist.revert_to!(@version)
|
||||||
redirect_to artist_path(@artist), :notice => "Artist updated"
|
respond_with(@artist)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,7 +3,11 @@ class CommentsController < ApplicationController
|
|||||||
before_filter :member_only, :only => [:update, :create]
|
before_filter :member_only, :only => [:update, :create]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@posts = Post.commented_before(params[:before_date] || Time.now).limit(8)
|
if params[:group_by] == "post"
|
||||||
|
index_by_post
|
||||||
|
else
|
||||||
|
index_by_comment
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@@ -21,8 +25,22 @@ class CommentsController < ApplicationController
|
|||||||
format.html do
|
format.html do
|
||||||
redirect_to post_path(@comment.post), :notice => "Comment posted"
|
redirect_to post_path(@comment.post), :notice => "Comment posted"
|
||||||
end
|
end
|
||||||
|
end
|
||||||
format.js
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def index_by_post
|
||||||
|
@posts = Post.find_by_tags(params[:tags]).commented_before(params[:before_date] || Time.now).limit(8)
|
||||||
|
respond_with(@posts) do |format|
|
||||||
|
format.html {render :action => "index_by_post"}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def index_by_comment
|
||||||
|
@search = Comment.search(params[:search])
|
||||||
|
@comments = @search.paginate(:page => params[:page])
|
||||||
|
respond_with(@comments) do |format|
|
||||||
|
format.html {render :action => "index_by_comment"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ class ForumPostsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@forum_posts = ForumPost.search(params[:search])
|
@search = ForumPost.search(params[:search])
|
||||||
|
@forum_posts = @search.paginate(:page => params[:page], :order => "id DESC")
|
||||||
respond_with(@forum_posts)
|
respond_with(@forum_posts)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ class ForumPostsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@forum_post = ForumPost.new(params[:forum_post])
|
@forum_post = ForumPost.create(params[:forum_post])
|
||||||
respond_with(@forum_post)
|
respond_with(@forum_post)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ class ForumPost < ActiveRecord::Base
|
|||||||
after_save :update_topic_updated_at
|
after_save :update_topic_updated_at
|
||||||
validates_presence_of :body, :creator_id
|
validates_presence_of :body, :creator_id
|
||||||
scope :body_matches, lambda {|body| where(["text_index @@ plainto_tsquery(?)", body])}
|
scope :body_matches, lambda {|body| where(["text_index @@ plainto_tsquery(?)", body])}
|
||||||
search_methods :body_matches
|
search_method :body_matches
|
||||||
|
|
||||||
def editable_by?(user)
|
def editable_by?(user)
|
||||||
creator_id == user.id || user.is_moderator?
|
creator_id == user.id || user.is_moderator?
|
||||||
|
|||||||
@@ -186,7 +186,8 @@ class User < ActiveRecord::Base
|
|||||||
return false unless is_privileged?
|
return false unless is_privileged?
|
||||||
newest_topic = ForumPost.first(:order => "updated_at desc", :select => "updated_at")
|
newest_topic = ForumPost.first(:order => "updated_at desc", :select => "updated_at")
|
||||||
return false if newest_topic.nil?
|
return false if newest_topic.nil?
|
||||||
return newest_topic.updated_at > user.last_forum_read_at
|
return true if last_forum_read_at.nil?
|
||||||
|
return newest_topic.updated_at > last_forum_read_at
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
7
app/views/comments/index_by_comment.html.erb
Normal file
7
app/views/comments/index_by_comment.html.erb
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<div class="comments">
|
||||||
|
<div class="index">
|
||||||
|
<% @comments.each do |comment| %>
|
||||||
|
<%= render :partial => "comments/partials/index/list", :locals => {:post => comment.post, :comments => [comment], :show_header => false} %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
7
app/views/forum_posts/_search.html.erb
Normal file
7
app/views/forum_posts/_search.html.erb
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<div>
|
||||||
|
<%= simple_form_for @search do |f| %>
|
||||||
|
<%= f.input :body_matches %>
|
||||||
|
<%= f.input :creator_name_equals %>
|
||||||
|
<%= f.button :submit %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
6
app/views/forum_posts/edit.html.erb
Normal file
6
app/views/forum_posts/edit.html.erb
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<h1>Edit Post</h1>
|
||||||
|
|
||||||
|
<%= simple_form_for(@forum_post) do |f| %>
|
||||||
|
<%= f.input :body %>
|
||||||
|
<%= f.button :submit %>
|
||||||
|
<% end %>
|
||||||
26
app/views/forum_posts/index.html.erb
Normal file
26
app/views/forum_posts/index.html.erb
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<%= render "search" %>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Topic</th>
|
||||||
|
<th>Excerpt</th>
|
||||||
|
<th>Creator</th>
|
||||||
|
<th>Date</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @forum_posts.each do |forum_post| %>
|
||||||
|
<tr>
|
||||||
|
<td><%= forum_post.topic.title %></td>
|
||||||
|
<td><%= truncate forum_post.body, :length => 50 %></td>
|
||||||
|
<td><%= forum_post.creator.name %></td>
|
||||||
|
<td><%= forum_post.created_at %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div id="paginator">
|
||||||
|
<%= will_paginate @forum_posts %>
|
||||||
|
</div>
|
||||||
7
app/views/forum_posts/new.html.erb
Normal file
7
app/views/forum_posts/new.html.erb
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<h1>New Post</h1>
|
||||||
|
|
||||||
|
<%= simple_form_for(@forum_post) do |f| %>
|
||||||
|
<%= f.input :topic_id, :as => :hidden %>
|
||||||
|
<%= f.input :body %>
|
||||||
|
<%= f.button :submit %>
|
||||||
|
<% end %>
|
||||||
@@ -14,23 +14,37 @@ class CommentsControllerTest < ActionController::TestCase
|
|||||||
CurrentUser.ip_addr = nil
|
CurrentUser.ip_addr = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
should "get the index page" do
|
context "index action" do
|
||||||
get :index
|
should "render by post" do
|
||||||
assert_response :success
|
get :index, {:group_by => "post"}
|
||||||
end
|
assert_response :success
|
||||||
|
end
|
||||||
should "update a comment" do
|
|
||||||
post :update, {:id => @comment.id, :comment => {:body => "abc"}}, {:user_id => @comment.creator_id}
|
should "render by comment" do
|
||||||
assert_redirected_to comment_path(@comment)
|
get :index, {:group_by => "comment"}
|
||||||
end
|
assert_response :success
|
||||||
|
end
|
||||||
should "create a comment" do
|
end
|
||||||
p = Factory.create(:post)
|
|
||||||
assert_difference("Comment.count", 1) do
|
context "update action" do
|
||||||
post :create, {:comment => Factory.attributes_for(:comment, :post_id => p.id)}, {:user_id => @user.id}
|
should "update the comment" do
|
||||||
|
post :update, {:id => @comment.id, :comment => {:body => "abc"}}, {:user_id => @comment.creator_id}
|
||||||
|
assert_redirected_to comment_path(@comment)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "create action"do
|
||||||
|
setup do
|
||||||
|
@post = Factory.create(:post)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "create a comment" do
|
||||||
|
assert_difference("Comment.count", 1) do
|
||||||
|
post :create, {:comment => Factory.attributes_for(:comment, :post_id => @post.id)}, {:user_id => @user.id}
|
||||||
|
end
|
||||||
|
comment = Comment.last
|
||||||
|
assert_redirected_to post_path(comment.post)
|
||||||
end
|
end
|
||||||
comment = Comment.last
|
|
||||||
assert_redirected_to post_path(comment.post)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class ForumPostsControllerTest < ActionController::TestCase
|
|||||||
|
|
||||||
context "new action" do
|
context "new action" do
|
||||||
should "render" do
|
should "render" do
|
||||||
get :new, {}, {:user_id => @user.id}
|
get :new, {}, {:user_id => @user.id, :topic_id => @forum_topic.id}, {:user_id => @user.id}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -66,7 +66,7 @@ class ForumPostsControllerTest < ActionController::TestCase
|
|||||||
context "create action" do
|
context "create action" do
|
||||||
should "create a new forum post" do
|
should "create a new forum post" do
|
||||||
assert_difference("ForumPost.count", 1) do
|
assert_difference("ForumPost.count", 1) do
|
||||||
post :create, {:forum_post => {:body => "xaxaxa"}}, {:user_id => @user.id}
|
post :create, {:forum_post => {:body => "xaxaxa", :topic_id => @forum_topic.id}}, {:user_id => @user.id}
|
||||||
end
|
end
|
||||||
|
|
||||||
forum_post = ForumPost.last
|
forum_post = ForumPost.last
|
||||||
|
|||||||
Reference in New Issue
Block a user