2014-10-23 11:30:34 +08:00
|
|
|
|
# added by fq
|
|
|
|
|
class ForumsController < ApplicationController
|
|
|
|
|
layout "users_base"
|
2015-03-26 16:08:31 +08:00
|
|
|
|
include ApplicationHelper
|
2014-10-23 11:30:34 +08:00
|
|
|
|
# GET /forums
|
|
|
|
|
# GET /forums.json
|
|
|
|
|
before_filter :find_forum_if_available
|
|
|
|
|
before_filter :authenticate_user_edit, :only => [:edit, :update]
|
|
|
|
|
before_filter :authenticate_user_destroy, :only => [:destroy]
|
2015-09-21 15:31:00 +08:00
|
|
|
|
before_filter :require_login, :only => [:new, :create,:destroy,:update,:edit]
|
2014-10-23 11:30:34 +08:00
|
|
|
|
|
|
|
|
|
helper :sort
|
|
|
|
|
include SortHelper
|
|
|
|
|
|
|
|
|
|
PageLimit = 20
|
2015-01-10 15:39:02 +08:00
|
|
|
|
def create_feedback
|
|
|
|
|
if User.current.logged?
|
2015-03-05 10:09:19 +08:00
|
|
|
|
#@memo = Memo.new(params[:memo])
|
|
|
|
|
#@memo.forum_id = "1"
|
|
|
|
|
#@memo.author_id = User.current.id
|
2015-01-10 15:39:02 +08:00
|
|
|
|
#@forum = @memo.forum
|
2015-03-05 10:09:19 +08:00
|
|
|
|
cs = CommentService.new
|
2015-03-19 14:41:31 +08:00
|
|
|
|
@memo,message = cs.create_feedback params,User.current
|
2015-01-10 15:39:02 +08:00
|
|
|
|
respond_to do |format|
|
2015-03-05 10:09:19 +08:00
|
|
|
|
if !@memo.new_record?
|
2015-01-10 15:39:02 +08:00
|
|
|
|
format.html { redirect_to forum_path(@memo.forum) }
|
|
|
|
|
else
|
|
|
|
|
sort_init 'updated_at', 'desc'
|
|
|
|
|
sort_update 'created_at' => "#{Memo.table_name}.created_at",
|
|
|
|
|
'replies' => "#{Memo.table_name}.replies_count",
|
|
|
|
|
'updated_at' => "COALESCE (last_replies_memos.created_at, #{Memo.table_name}.created_at)"
|
|
|
|
|
|
|
|
|
|
@topic_count = @forum.topics.count
|
|
|
|
|
@topic_pages = Paginator.new @topic_count, per_page_option, params['page']
|
|
|
|
|
@memos = @forum.topics.
|
|
|
|
|
reorder("#{Memo.table_name}.sticky DESC").
|
|
|
|
|
includes(:last_reply).
|
|
|
|
|
limit(@topic_pages.per_page).
|
|
|
|
|
offset(@topic_pages.offset).
|
|
|
|
|
order(sort_clause).
|
|
|
|
|
preload(:author, {:last_reply => :author}).
|
|
|
|
|
all
|
|
|
|
|
|
|
|
|
|
flash.now[:error] = "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}"
|
|
|
|
|
# back_error_page = @memo.parent_id.nil? ? forum_path(@forum) : forum_memo_path(@forum, @memo.parent_id)
|
|
|
|
|
format.html { render action: :show, layout: 'base_forums' }#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
|
|
|
|
|
format.json { render json: @memo.errors, status: :unprocessable_entity }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.html { redirect_to signin_path }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2014-10-23 11:30:34 +08:00
|
|
|
|
|
|
|
|
|
def create_memo
|
|
|
|
|
@memo = Memo.new(params[:memo])
|
|
|
|
|
@memo.forum_id = @forum.id
|
|
|
|
|
@memo.author_id = User.current.id
|
|
|
|
|
|
|
|
|
|
@memo.save_attachments(params[:attachments] || (params[:memo] && params[:memo][:uploads]))
|
|
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
if @memo.save
|
2015-04-03 16:35:46 +08:00
|
|
|
|
if params[:asset_id]
|
|
|
|
|
ids = params[:asset_id].split(',')
|
|
|
|
|
update_kindeditor_assets_owner ids ,@memo.id,OwnerTypeHelper::MEMO
|
|
|
|
|
end
|
2015-03-26 16:08:31 +08:00
|
|
|
|
#end
|
2014-10-23 11:30:34 +08:00
|
|
|
|
format.html { redirect_to (forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id))), notice: "#{l :label_memo_create_succ}" }
|
|
|
|
|
format.json { render json: @memo, status: :created, location: @memo }
|
|
|
|
|
else
|
|
|
|
|
sort_init 'updated_at', 'desc'
|
|
|
|
|
sort_update 'created_at' => "#{Memo.table_name}.created_at",
|
|
|
|
|
'replies' => "#{Memo.table_name}.replies_count",
|
|
|
|
|
'updated_at' => "COALESCE (last_replies_memos.created_at, #{Memo.table_name}.created_at)"
|
|
|
|
|
|
|
|
|
|
@topic_count = @forum.topics.count
|
|
|
|
|
@topic_pages = Paginator.new @topic_count, per_page_option, params['page']
|
|
|
|
|
@memos = @forum.topics.
|
|
|
|
|
reorder("#{Memo.table_name}.sticky DESC").
|
|
|
|
|
includes(:last_reply).
|
|
|
|
|
limit(@topic_pages.per_page).
|
|
|
|
|
offset(@topic_pages.offset).
|
|
|
|
|
order(sort_clause).
|
|
|
|
|
preload(:author, {:last_reply => :author}).
|
|
|
|
|
all
|
2015-07-09 11:35:57 +08:00
|
|
|
|
@memos
|
2014-10-23 11:30:34 +08:00
|
|
|
|
flash.now[:error] = "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}"
|
|
|
|
|
# back_error_page = @memo.parent_id.nil? ? forum_path(@forum) : forum_memo_path(@forum, @memo.parent_id)
|
|
|
|
|
format.html { render action: :show, layout: 'base_forums' }#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
|
|
|
|
|
format.json { render json: @memo.errors, status: :unprocessable_entity }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-01-10 15:39:02 +08:00
|
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
|
def index
|
|
|
|
|
@offset, @limit = api_offset_and_limit({:limit => 10})
|
2015-09-18 17:44:16 +08:00
|
|
|
|
if(params[:reorder_complex])
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@type="reorder_complex"
|
|
|
|
|
@str=params[:reorder_complex]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
@forums_all = Forum.reorder("topic_count #{params[:reorder_complex]},updated_at #{params[:reorder_complex]}")
|
|
|
|
|
elsif(params[:reorder_popu])
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@type="reorder_popu"
|
|
|
|
|
@str=params[:reorder_popu]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
@forums_all = Forum.reorder("topic_count #{params[:reorder_popu]}")
|
|
|
|
|
elsif(params[:reorder_time])
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@type="reorder_time"
|
|
|
|
|
@str=params[:reorder_time]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
@forums_all = Forum.reorder("updated_at #{params[:reorder_time]}")
|
|
|
|
|
else
|
2015-09-19 12:32:11 +08:00
|
|
|
|
params[:reorder_complex] = "desc"
|
|
|
|
|
@type="reorder_complex"
|
|
|
|
|
@str=params[:reorder_complex]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
@forums_all = Forum.reorder("topic_count desc,updated_at desc")
|
|
|
|
|
end
|
2014-10-23 11:30:34 +08:00
|
|
|
|
@forums_count = @forums_all.count
|
|
|
|
|
@forums_pages = Paginator.new @forums_count, @limit, params['page']
|
|
|
|
|
|
|
|
|
|
@offset ||= @forums_pages.offset
|
2015-01-10 15:39:02 +08:00
|
|
|
|
@forums = @forums_all.offset(@offset).limit(@limit).all
|
2014-10-23 11:30:34 +08:00
|
|
|
|
#@forums = Forum.all
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.html # index.html.erb
|
2015-09-18 17:44:16 +08:00
|
|
|
|
format.js
|
2014-10-23 11:30:34 +08:00
|
|
|
|
format.json { render json: @forums }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# GET /forums/1
|
|
|
|
|
# GET /forums/1.json
|
|
|
|
|
def show
|
2015-09-18 17:44:16 +08:00
|
|
|
|
# sort_init 'updated_at', 'desc'
|
|
|
|
|
# sort_update 'created_at' => "#{Memo.table_name}.created_at",
|
|
|
|
|
# 'replies' => "#{Memo.table_name}.replies_count",
|
|
|
|
|
# 'updated_at' => "COALESCE (last_replies_memos.created_at, #{Memo.table_name}.created_at)"
|
|
|
|
|
order = ""
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@order_str = ""
|
2015-09-18 17:44:16 +08:00
|
|
|
|
if(params[:reorder_complex])
|
|
|
|
|
order = " last_replies_memos.created_at #{params[:reorder_complex]}, #{Memo.table_name}.created_at #{params[:reorder_complex]}"
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@order_str = "reorder_complex="+params[:reorder_complex]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
elsif(params[:reorder_popu])
|
|
|
|
|
order = "replies_count #{params[:reorder_popu]}"
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@order_str = "reorder_popu="+params[:reorder_popu]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
elsif(params[:reorder_time])
|
|
|
|
|
order = "#{Memo.table_name}.updated_at #{params[:reorder_time]}"
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@order_str = "reorder_time="+params[:reorder_time]
|
2015-09-18 17:44:16 +08:00
|
|
|
|
else
|
|
|
|
|
order = "last_replies_memos.created_at desc, #{Memo.table_name}.created_at desc"
|
2015-09-19 12:32:11 +08:00
|
|
|
|
@order_str = "reorder_complex=desc"
|
2015-09-18 17:44:16 +08:00
|
|
|
|
end
|
2014-10-23 11:30:34 +08:00
|
|
|
|
@memo = Memo.new(:forum => @forum)
|
|
|
|
|
@topic_count = @forum.topics.count
|
|
|
|
|
@topic_pages = Paginator.new @topic_count, per_page_option, params['page']
|
|
|
|
|
@memos = @forum.topics.
|
2015-07-09 11:35:57 +08:00
|
|
|
|
# reorder("#{Memo.table_name}.sticky DESC").
|
2015-09-19 09:50:10 +08:00
|
|
|
|
includes(:last_reply).
|
2014-10-23 11:30:34 +08:00
|
|
|
|
limit(@topic_pages.per_page).
|
|
|
|
|
offset(@topic_pages.offset).
|
2015-09-18 17:44:16 +08:00
|
|
|
|
reorder(order).
|
2014-10-23 11:30:34 +08:00
|
|
|
|
preload(:author, {:last_reply => :author}).
|
|
|
|
|
all
|
2015-07-09 11:35:57 +08:00
|
|
|
|
@memos
|
2015-09-18 17:44:16 +08:00
|
|
|
|
@my_topic_count = Memo.where("forum_id = #{@forum.id} and author_id = #{User.current.id} and parent_id is null").count
|
|
|
|
|
@my_replies_count = Memo.where("forum_id = #{@forum.id} and author_id = #{User.current.id} and parent_id is not null").count
|
2015-09-21 15:31:00 +08:00
|
|
|
|
@errors = params[:errors]
|
2014-10-23 11:30:34 +08:00
|
|
|
|
respond_to do |format|
|
2015-09-18 17:44:16 +08:00
|
|
|
|
format.js
|
2014-10-23 11:30:34 +08:00
|
|
|
|
format.html {
|
|
|
|
|
render :layout => 'base_forums'
|
|
|
|
|
}# show.html.erb
|
|
|
|
|
format.json { render json: @forum }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# GET /forums/new
|
|
|
|
|
# GET /forums/new.json
|
|
|
|
|
def new
|
|
|
|
|
@forum = Forum.new
|
|
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.html # new.html.erb
|
|
|
|
|
format.json { render json: @forum }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# GET /forums/1/edit
|
|
|
|
|
def edit
|
|
|
|
|
@forum = Forum.find(params[:id])
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# POST /forums
|
|
|
|
|
# POST /forums.json
|
|
|
|
|
def create
|
|
|
|
|
@forum = Forum.new(params[:forum])
|
|
|
|
|
@forum.creator_id = User.current.id
|
2015-01-22 16:30:21 +08:00
|
|
|
|
if @forum.save
|
2015-03-26 16:08:31 +08:00
|
|
|
|
# Time 2015-03-24 17:07:05
|
|
|
|
|
# Author lizanle
|
|
|
|
|
# Description after save后需要进行资源记录的更新
|
|
|
|
|
# owner_type = 2 对应的是 forum
|
2015-09-19 13:47:00 +08:00
|
|
|
|
@save_flag=true
|
2015-04-03 16:35:46 +08:00
|
|
|
|
if params[:asset_id]
|
|
|
|
|
ids = params[:asset_id].split(',')
|
|
|
|
|
update_kindeditor_assets_owner ids ,@forum.id,OwnerTypeHelper::FORUM
|
|
|
|
|
end
|
2015-03-26 16:08:31 +08:00
|
|
|
|
#end
|
2015-01-22 16:30:21 +08:00
|
|
|
|
respond_to do |format|
|
2015-09-18 17:44:16 +08:00
|
|
|
|
format.js
|
2015-01-22 16:30:21 +08:00
|
|
|
|
format.html { redirect_to @forum, notice: l(:label_forum_create_succ) }
|
|
|
|
|
format.json { render json: @forum, status: :created, location: @forum }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
else
|
2015-09-19 13:47:00 +08:00
|
|
|
|
@save_flag=false
|
2015-01-22 16:30:21 +08:00
|
|
|
|
respond_to do |format|
|
2014-10-23 11:30:34 +08:00
|
|
|
|
flash.now[:error] = "#{l :label_forum_create_fail}: #{@forum.errors.full_messages[0]}"
|
2015-09-18 17:44:16 +08:00
|
|
|
|
format.js
|
2014-10-23 11:30:34 +08:00
|
|
|
|
format.html { render action: "new" }
|
|
|
|
|
format.json { render json: @forum.errors, status: :unprocessable_entity }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# PUT /forums/1
|
|
|
|
|
# PUT /forums/1.json
|
|
|
|
|
def update
|
|
|
|
|
@forum = Forum.find(params[:id])
|
|
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
if @forum.update_attributes(params[:forum])
|
2015-09-18 17:44:16 +08:00
|
|
|
|
format.js {render :text=> true}
|
2014-10-23 11:30:34 +08:00
|
|
|
|
format.html { redirect_to @forum, notice: l(:label_forum_update_succ) }
|
|
|
|
|
format.json { head :no_content }
|
|
|
|
|
else
|
|
|
|
|
flash.now[:error] = "#{l :label_forum_update_fail}: #{@forum.errors.full_messages[0]}"
|
2015-09-18 17:44:16 +08:00
|
|
|
|
format.js { render :text=> false}
|
2014-10-23 11:30:34 +08:00
|
|
|
|
format.html { render action: "edit" }
|
|
|
|
|
format.json { render json: @forum.errors, status: :unprocessable_entity }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# DELETE /forums/1
|
|
|
|
|
# DELETE /forums/1.json
|
|
|
|
|
def destroy
|
|
|
|
|
@forum = Forum.find(params[:id])
|
|
|
|
|
@forum.destroy
|
|
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.html { redirect_to forums_url }
|
|
|
|
|
format.json { head :no_content }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def search_forum
|
|
|
|
|
# @forums = paginateHelper Forum.where("name LIKE '%#{params[:name]}%'")
|
|
|
|
|
q = "%#{params[:name].strip}%"
|
|
|
|
|
(redirect_to forums_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
|
|
|
|
|
@offset, @limit = api_offset_and_limit({:limit => 10})
|
|
|
|
|
@forums_all = Forum.where("name LIKE ?", q)
|
|
|
|
|
@forums_count = @forums_all.count
|
|
|
|
|
@forums_pages = Paginator.new @forums_count, @limit, params['page']
|
|
|
|
|
|
|
|
|
|
@offset ||= @forums_pages.offset
|
|
|
|
|
@forums = @forums_all.offset(@offset).limit(@limit).all
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.html {
|
|
|
|
|
render 'index'
|
|
|
|
|
}
|
|
|
|
|
format.json { render json: @forums }
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def search_memo
|
|
|
|
|
q = "%#{params[:name].strip}%"
|
|
|
|
|
|
|
|
|
|
limit = PageLimit
|
|
|
|
|
@memo = Memo.new
|
|
|
|
|
@offset, @limit = api_offset_and_limit({:limit => limit})
|
|
|
|
|
@forum = Forum.find(params[:id])
|
|
|
|
|
@memos_all = @forum.topics.where("subject LIKE ?", q)
|
|
|
|
|
@topic_count = @memos_all.count
|
|
|
|
|
@topic_pages = Paginator.new @topic_count, @limit, params['page']
|
2015-01-10 15:39:02 +08:00
|
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
|
@offset ||= @topic_pages.offset
|
|
|
|
|
@memos = @memos_all.offset(@offset).limit(@limit).all
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.html {
|
|
|
|
|
render 'show', :layout => 'base_forums'
|
|
|
|
|
}
|
|
|
|
|
format.json { render json: @forum }
|
2015-01-10 15:39:02 +08:00
|
|
|
|
end
|
2014-10-23 11:30:34 +08:00
|
|
|
|
end
|
|
|
|
|
|
2015-09-18 17:44:16 +08:00
|
|
|
|
#检查forum的名字
|
|
|
|
|
def check_forum_name
|
2015-09-25 16:32:02 +08:00
|
|
|
|
forum_name_exist = true
|
|
|
|
|
if params[:forum_id]
|
|
|
|
|
forum_name_exist = Forum.where("name = '#{params[:forum_name]}' and id != #{params[:forum_id]}").count >= 1 ? true : false
|
|
|
|
|
else
|
|
|
|
|
forum_name_exist = Forum.where("name = '#{params[:forum_name]}' ").count >= 1 ? true : false
|
|
|
|
|
end
|
2015-09-18 17:44:16 +08:00
|
|
|
|
render :text => forum_name_exist
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#添加论坛tag
|
|
|
|
|
def add_forum_tag
|
|
|
|
|
@forum = Forum.find(params[:id])
|
|
|
|
|
unless @forum.nil?
|
|
|
|
|
@forum.tag_list.add(params[:tag_str].split(','))
|
|
|
|
|
@forum.save
|
|
|
|
|
end
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.js {render :delete_forum_tag}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#删除forum的tag
|
|
|
|
|
def delete_forum_tag
|
|
|
|
|
@tag_id = (ActsAsTaggableOn::Tag.find_by_name(params[:tag_name])).id
|
|
|
|
|
#forum的taggable_type = 5
|
|
|
|
|
@taggings = ActsAsTaggableOn::Tagging.find_by_tag_id_and_taggable_id_and_taggable_type(@tag_id,params[:id],'Forum')
|
|
|
|
|
|
|
|
|
|
unless @taggings.nil?
|
|
|
|
|
@taggings.delete
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# 是否还有其他记录 引用了 tag_id
|
|
|
|
|
@tagging = ActsAsTaggableOn::Tagging.find_by_tag_id(@tag_id)
|
|
|
|
|
# 如果taggings表中记录已经不存在 ,那么检查tags表 作删除动作
|
|
|
|
|
if @tagging.nil?
|
|
|
|
|
@tag = ActsAsTaggableOn::Tag.find_by_id(@tag_id)
|
|
|
|
|
@tag.delete unless @tag.nil?
|
|
|
|
|
end
|
|
|
|
|
@forum = Forum.find(params[:id])
|
|
|
|
|
respond_to do |format|
|
|
|
|
|
format.js
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2014-10-23 11:30:34 +08:00
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def find_forum_if_available
|
|
|
|
|
@forum = Forum.find(params[:id]) if params[:id]
|
|
|
|
|
rescue ActiveRecord::RecordNotFound
|
|
|
|
|
render_404
|
|
|
|
|
nil
|
2015-01-10 15:39:02 +08:00
|
|
|
|
end
|
2014-10-23 11:30:34 +08:00
|
|
|
|
|
|
|
|
|
def authenticate_user_edit
|
|
|
|
|
find_forum_if_available
|
|
|
|
|
render_403 unless @forum.editable_by? User.current
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def authenticate_user_destroy
|
|
|
|
|
find_forum_if_available
|
|
|
|
|
render_403 unless @forum.destroyable_by? User.current
|
|
|
|
|
end
|
2013-12-09 18:31:08 +08:00
|
|
|
|
end
|