diff --git a/app/controllers/artists_controller.rb b/app/controllers/artists_controller.rb index 883e7de43..1bdef22c1 100644 --- a/app/controllers/artists_controller.rb +++ b/app/controllers/artists_controller.rb @@ -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 diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 3de1d1d15..5c83f3d84 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -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 diff --git a/app/controllers/forum_posts_controller.rb b/app/controllers/forum_posts_controller.rb index f57d74714..8c7b87779 100644 --- a/app/controllers/forum_posts_controller.rb +++ b/app/controllers/forum_posts_controller.rb @@ -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 diff --git a/app/models/forum_post.rb b/app/models/forum_post.rb index 16c4a8484..8428b41b4 100644 --- a/app/models/forum_post.rb +++ b/app/models/forum_post.rb @@ -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? diff --git a/app/models/user.rb b/app/models/user.rb index 7b38b1ecf..60bf8532b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/app/views/comments/index_by_comment.html.erb b/app/views/comments/index_by_comment.html.erb new file mode 100644 index 000000000..d55ac72d7 --- /dev/null +++ b/app/views/comments/index_by_comment.html.erb @@ -0,0 +1,7 @@ +
+
+ <% @comments.each do |comment| %> + <%= render :partial => "comments/partials/index/list", :locals => {:post => comment.post, :comments => [comment], :show_header => false} %> + <% end %> +
+
diff --git a/app/views/comments/index.html.erb b/app/views/comments/index_by_post.html.erb similarity index 100% rename from app/views/comments/index.html.erb rename to app/views/comments/index_by_post.html.erb diff --git a/app/views/forum_posts/_search.html.erb b/app/views/forum_posts/_search.html.erb new file mode 100644 index 000000000..a50292aba --- /dev/null +++ b/app/views/forum_posts/_search.html.erb @@ -0,0 +1,7 @@ +
+ <%= simple_form_for @search do |f| %> + <%= f.input :body_matches %> + <%= f.input :creator_name_equals %> + <%= f.button :submit %> + <% end %> +
diff --git a/app/views/forum_posts/edit.html.erb b/app/views/forum_posts/edit.html.erb new file mode 100644 index 000000000..73491740f --- /dev/null +++ b/app/views/forum_posts/edit.html.erb @@ -0,0 +1,6 @@ +

Edit Post

+ +<%= simple_form_for(@forum_post) do |f| %> + <%= f.input :body %> + <%= f.button :submit %> +<% end %> diff --git a/app/views/forum_posts/index.html.erb b/app/views/forum_posts/index.html.erb new file mode 100644 index 000000000..3bdf20722 --- /dev/null +++ b/app/views/forum_posts/index.html.erb @@ -0,0 +1,26 @@ +<%= render "search" %> + + + + + + + + + + + + <% @forum_posts.each do |forum_post| %> + + + + + + + <% end %> + +
TopicExcerptCreatorDate
<%= forum_post.topic.title %><%= truncate forum_post.body, :length => 50 %><%= forum_post.creator.name %><%= forum_post.created_at %>
+ +
+ <%= will_paginate @forum_posts %> +
diff --git a/app/views/forum_posts/new.html.erb b/app/views/forum_posts/new.html.erb new file mode 100644 index 000000000..0a232e7a8 --- /dev/null +++ b/app/views/forum_posts/new.html.erb @@ -0,0 +1,7 @@ +

New Post

+ +<%= simple_form_for(@forum_post) do |f| %> + <%= f.input :topic_id, :as => :hidden %> + <%= f.input :body %> + <%= f.button :submit %> +<% end %> diff --git a/test/functional/comments_controller_test.rb b/test/functional/comments_controller_test.rb index dded781f5..56a533ad0 100644 --- a/test/functional/comments_controller_test.rb +++ b/test/functional/comments_controller_test.rb @@ -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 diff --git a/test/functional/forum_posts_controller_test.rb b/test/functional/forum_posts_controller_test.rb index d6858fb68..c9dffb7ca 100644 --- a/test/functional/forum_posts_controller_test.rb +++ b/test/functional/forum_posts_controller_test.rb @@ -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