# added by fq class ForumsController < ApplicationController layout "users_base" include ApplicationHelper # 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] before_filter :require_login, :only => [:new, :create,:destroy,:update,:edit] helper :sort include SortHelper PageLimit = 20 def create_feedback if User.current.logged? #@memo = Memo.new(params[:memo]) #@memo.forum_id = "1" #@memo.author_id = User.current.id #@forum = @memo.forum cs = CommentService.new @memo,message = cs.create_feedback params,User.current respond_to do |format| if !@memo.new_record? 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 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 if params[:asset_id] ids = params[:asset_id].split(',') update_kindeditor_assets_owner ids ,@memo.id,OwnerTypeHelper::MEMO end #end 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 @memos 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 def index @offset, @limit = api_offset_and_limit({:limit => 10}) if(params[:reorder_complex]) @type="reorder_complex" @str=params[:reorder_complex] @forums_all = Forum.reorder("topic_count #{params[:reorder_complex]},updated_at #{params[:reorder_complex]}") elsif(params[:reorder_popu]) @type="reorder_popu" @str=params[:reorder_popu] @forums_all = Forum.reorder("topic_count #{params[:reorder_popu]}") elsif(params[:reorder_time]) @type="reorder_time" @str=params[:reorder_time] @forums_all = Forum.reorder("updated_at #{params[:reorder_time]}") else params[:reorder_complex] = "desc" @type="reorder_complex" @str=params[:reorder_complex] @forums_all = Forum.reorder("topic_count desc,updated_at desc") end @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 #@forums = Forum.all respond_to do |format| format.html # index.html.erb format.js format.json { render json: @forums } end end # GET /forums/1 # GET /forums/1.json def show # 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 = "" @order_str = "" if(params[:reorder_complex]) order = " last_replies_memos.created_at #{params[:reorder_complex]}, #{Memo.table_name}.created_at #{params[:reorder_complex]}" @order_str = "reorder_complex="+params[:reorder_complex] elsif(params[:reorder_popu]) order = "replies_count #{params[:reorder_popu]}" @order_str = "reorder_popu="+params[:reorder_popu] elsif(params[:reorder_time]) order = "#{Memo.table_name}.updated_at #{params[:reorder_time]}" @order_str = "reorder_time="+params[:reorder_time] else order = "#{Memo.table_name}.updated_at desc" @order_str = "reorder_time=desc" end @memo = Memo.new(:forum => @forum) @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). reorder(order). preload(:author, {:last_reply => :author}). all @memos @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 @errors = params[:errors] respond_to do |format| format.js 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 if @forum.save # Time 2015-03-24 17:07:05 # Author lizanle # Description after save后需要进行资源记录的更新 # owner_type = 2 对应的是 forum @save_flag=true if params[:asset_id] ids = params[:asset_id].split(',') update_kindeditor_assets_owner ids ,@forum.id,OwnerTypeHelper::FORUM end #end respond_to do |format| format.js format.html { redirect_to @forum, notice: l(:label_forum_create_succ) } format.json { render json: @forum, status: :created, location: @forum } end else @save_flag=false respond_to do |format| flash.now[:error] = "#{l :label_forum_create_fail}: #{@forum.errors.full_messages[0]}" format.js 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]) format.js {render :text=> true} 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]}" format.js { render :text=> false} 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'] @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 } end end #检查forum的名字 def check_forum_name 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 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 private def find_forum_if_available @forum = Forum.find(params[:id]) if params[:id] rescue ActiveRecord::RecordNotFound render_404 nil end 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 end