implemented forum post controller
This commit is contained in:
@@ -1,16 +1,20 @@
|
||||
class ArtistsController < ApplicationController
|
||||
respond_to :html, :xml, :json
|
||||
before_filter :member_only, :except => [:index, :show]
|
||||
|
||||
def new
|
||||
@artist = Artist.new_with_defaults(params)
|
||||
respond_with(@artist)
|
||||
end
|
||||
|
||||
def edit
|
||||
@artist = Artist.find(params[:id])
|
||||
respond_with(@artist)
|
||||
end
|
||||
|
||||
def index
|
||||
@artists = Artist.build_relation(params).paginate(:per_page => 25, :page => params[:page])
|
||||
respond_with(@artists)
|
||||
end
|
||||
|
||||
def show
|
||||
@@ -18,38 +22,26 @@ class ArtistsController < ApplicationController
|
||||
|
||||
if @artist
|
||||
@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
|
||||
|
||||
respond_with(@artist)
|
||||
end
|
||||
|
||||
def create
|
||||
@artist = Artist.create(params[:artist])
|
||||
|
||||
if @artist.errors.empty?
|
||||
redirect_to artist_path(@artist), :notice => "Artist created"
|
||||
else
|
||||
flash[:notice] = "There were errors"
|
||||
render :action => "new"
|
||||
end
|
||||
respond_with(@artist)
|
||||
end
|
||||
|
||||
def update
|
||||
@artist = Artist.find(params[:id])
|
||||
@artist.update_attributes(params[:artist])
|
||||
|
||||
if @artist.errors.empty?
|
||||
redirect_to artist_path(@artist), :notice => "Artist updated"
|
||||
else
|
||||
flash[:notice] = "There were errors"
|
||||
render :action => "edit"
|
||||
end
|
||||
respond_with(@artist)
|
||||
end
|
||||
|
||||
def revert
|
||||
@artist = Artist.find(params[:id])
|
||||
@version = ArtistVersion.find(params[:version_id])
|
||||
@artist.revert_to!(@version)
|
||||
redirect_to artist_path(@artist), :notice => "Artist updated"
|
||||
respond_with(@artist)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,7 +3,11 @@ class CommentsController < ApplicationController
|
||||
before_filter :member_only, :only => [:update, :create]
|
||||
|
||||
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
|
||||
|
||||
def update
|
||||
@@ -21,8 +25,22 @@ class CommentsController < ApplicationController
|
||||
format.html do
|
||||
redirect_to post_path(@comment.post), :notice => "Comment posted"
|
||||
end
|
||||
|
||||
format.js
|
||||
end
|
||||
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
|
||||
|
||||
@@ -15,7 +15,8 @@ class ForumPostsController < ApplicationController
|
||||
end
|
||||
|
||||
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)
|
||||
end
|
||||
|
||||
@@ -25,7 +26,7 @@ class ForumPostsController < ApplicationController
|
||||
end
|
||||
|
||||
def create
|
||||
@forum_post = ForumPost.new(params[:forum_post])
|
||||
@forum_post = ForumPost.create(params[:forum_post])
|
||||
respond_with(@forum_post)
|
||||
end
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ class ForumPost < ActiveRecord::Base
|
||||
after_save :update_topic_updated_at
|
||||
validates_presence_of :body, :creator_id
|
||||
scope :body_matches, lambda {|body| where(["text_index @@ plainto_tsquery(?)", body])}
|
||||
search_methods :body_matches
|
||||
search_method :body_matches
|
||||
|
||||
def editable_by?(user)
|
||||
creator_id == user.id || user.is_moderator?
|
||||
|
||||
@@ -186,7 +186,8 @@ class User < ActiveRecord::Base
|
||||
return false unless is_privileged?
|
||||
newest_topic = ForumPost.first(:order => "updated_at desc", :select => "updated_at")
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
should "get the index page" do
|
||||
get :index
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
should "update a comment" do
|
||||
post :update, {:id => @comment.id, :comment => {:body => "abc"}}, {:user_id => @comment.creator_id}
|
||||
assert_redirected_to comment_path(@comment)
|
||||
end
|
||||
|
||||
should "create a comment" do
|
||||
p = Factory.create(:post)
|
||||
assert_difference("Comment.count", 1) do
|
||||
post :create, {:comment => Factory.attributes_for(:comment, :post_id => p.id)}, {:user_id => @user.id}
|
||||
context "index action" do
|
||||
should "render by post" do
|
||||
get :index, {:group_by => "post"}
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
should "render by comment" do
|
||||
get :index, {:group_by => "comment"}
|
||||
assert_response :success
|
||||
end
|
||||
end
|
||||
|
||||
context "update action" do
|
||||
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
|
||||
comment = Comment.last
|
||||
assert_redirected_to post_path(comment.post)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -58,7 +58,7 @@ class ForumPostsControllerTest < ActionController::TestCase
|
||||
|
||||
context "new action" 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
|
||||
end
|
||||
end
|
||||
@@ -66,7 +66,7 @@ class ForumPostsControllerTest < ActionController::TestCase
|
||||
context "create action" do
|
||||
should "create a new forum post" 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
|
||||
|
||||
forum_post = ForumPost.last
|
||||
|
||||
Reference in New Issue
Block a user