diff --git a/app/controllers/memos_controller.rb b/app/controllers/memos_controller.rb index 965f78135..d9149378b 100644 --- a/app/controllers/memos_controller.rb +++ b/app/controllers/memos_controller.rb @@ -1,8 +1,9 @@ class MemosController < ApplicationController - before_action :set_memo, only: [:show, :edit, :update, :destroy] + before_action :require_login, except: [:show, :index] + before_action :set_memo, only: [:show, :edit, :update, :destroy, :sticky_or_cancel, :hidden] before_action :validate_memo_params, only: [:create, :update] before_action :owner_or_admin, only: [:edit, :update, :destroy] - before_action :is_admin, only: [] + before_action :is_admin, only: [:sticky_or_cancel, :hidden] include ApplicationHelper # GET /memos @@ -117,6 +118,54 @@ class MemosController < ApplicationController normal_status("删除成功") end + def sticky_or_cancel + tip_exception("只能对主贴进行置顶操作") unless @memo.parent_id.nil? + begin + @memo.update_attributes!(sticky: !@memo.sticky) + normal_status("更新成功") + rescue Exception => e + tip_exception("更新失败,原因:#{e}") + raise ActiveRecord::Rollback + end + end + + def hidden + tip_exception("不能对主贴进行隐藏操作") if @memo.parent_id.nil? + begin + @memo.update_attributes!(hidden: !@memo.hidden) + normal_status("更新成功") + rescue Exception => e + tip_exception("更新失败,原因:#{e}") + raise ActiveRecord::Rollback + end + end + + def reply + tip_exception("parent_id不能为空") if params[:parent_id].blank? + tip_exception("content不能为空") if params[:content].blank? + + ActiveRecord::Base.transaction do + begin + memo = Memo.find_by!(id: params[:parent_id]) + reply = Memo.new + reply.content = params[:content] + reply.author = current_user + reply.forum_id = memo.forum_id + reply.subject = memo.subject + reply.root_id = memo.root_id || memo.id + memo.children << reply + m = Memo.find_by!(id: reply.root_id) + m.increment!(:all_replies_count) + normal_status("回复成功") + rescue Exception => e + tip_exception("回复失败,原因:#{e}") + raise ActiveRecord::Rollback + end + end + end + + + private # Use callbacks to share common setup or constraints between actions. def set_memo diff --git a/app/views/discusses/reward_code.json.jbuilder b/app/views/discusses/reward_code.json.jbuilder index e5e0e9152..e2a98192b 100644 --- a/app/views/discusses/reward_code.json.jbuilder +++ b/app/views/discusses/reward_code.json.jbuilder @@ -1 +1,2 @@ +json.status 0 json.code @code \ No newline at end of file diff --git a/app/views/memos/_memo.json.jbuilder b/app/views/memos/_memo.json.jbuilder index 12de7beb5..bc3744d1f 100644 --- a/app/views/memos/_memo.json.jbuilder +++ b/app/views/memos/_memo.json.jbuilder @@ -1,7 +1,14 @@ -json.(memo, :id, :subject, :is_md, :content, :sticky, :reward, :viewed_count) - -json.tag memo.tag_repertoires.map(&:name) -json.time memo.created_at -json.replies_count memo.all_replies_count -json.user_praise memo.praise_treads.user_liker(@user.try(:id)) ? true : false -json.memo_praise_count memo.praise_treads.liker.count +json.memo do + json.id memo.id + json.subject memo.subject + json.is_md memo.is_md + json.content memo.content + json.sticky memo.sticky + json.reward memo.reward + json.viewed_count memo.viewed_count + json.tag memo.tag_repertoires.map(&:name) + json.time memo.created_at + json.replies_count memo.all_replies_count + json.user_praise memo.praise_treads.user_liker(@user.try(:id)) ? true : false + json.memo_praise_count memo.praise_treads.liker.count +end diff --git a/config/routes.rb b/config/routes.rb index 1a573a3c2..0465edc36 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -22,11 +22,12 @@ Rails.application.routes.draw do resources :memos do member do - + post :sticky_or_cancel + post :hidden end collection do - + post :reply end end