|  |  | class MemosController < ApplicationController
 | 
						
						
						
							|  |  |   default_search_scope :memos
 | 
						
						
						
							|  |  |   before_filter :find_forum, :only => [:new, :create, :preview]
 | 
						
						
						
							|  |  |   before_filter :find_attachments, :only => [:preview]
 | 
						
						
						
							|  |  |   before_filter :find_memo, :except => [:new, :create, :preview]
 | 
						
						
						
							|  |  |   before_filter :authenticate_user_edit, :only => [:edit, :update]
 | 
						
						
						
							|  |  |   before_filter :authenticate_user_destroy, :only => [:destroy]
 | 
						
						
						
							|  |  |   before_filter :require_login, :only => [:new, :create]
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   helper :attachments
 | 
						
						
						
							|  |  |   include AttachmentsHelper
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   layout 'base_memos'
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def quote
 | 
						
						
						
							|  |  |     @subject = @memo.subject
 | 
						
						
						
							|  |  |     @subject = "RE: #{@subject}" unless @subject.starts_with?('RE:')
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @content = "#{ll(Setting.default_language, :text_user_wrote, @memo.author)} <br/>   "
 | 
						
						
						
							|  |  |     @content << @memo.content.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub(/(\r?\n|\r\n?)/, "\n") + "</blockquote>\n\n<br/>"
 | 
						
						
						
							|  |  |     @content = "<blockquote>" << @content
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def new
 | 
						
						
						
							|  |  |     @memo = Memo.new
 | 
						
						
						
							|  |  |     @memo.forum_id = @forum.id
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html {
 | 
						
						
						
							|  |  |         render action: :new ,layout: 'base'
 | 
						
						
						
							|  |  |       }
 | 
						
						
						
							|  |  |       format.json { render json: @memo }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def create
 | 
						
						
						
							|  |  |     @memo = Memo.new(params[:memo])
 | 
						
						
						
							|  |  |     @memo.forum_id = params[: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
 | 
						
						
						
							|  |  |         format.html { redirect_to back_memo_url, notice: "#{l :label_memo_create_succ}" }
 | 
						
						
						
							|  |  |         format.json { render json: @memo, status: :created, location: @memo }
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         flash[: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 { redirect_to back_memo_or_forum_url}#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
 | 
						
						
						
							|  |  |         format.json { render json: @memo.errors, status: :unprocessable_entity }
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   REPLIES_PER_PAGE = 20 unless const_defined?(:REPLIES_PER_PAGE)
 | 
						
						
						
							|  |  |   def show
 | 
						
						
						
							|  |  |     pre_count = REPLIES_PER_PAGE
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @memo = @memo.root # 取出楼主,防止输入帖子id让回复作为主贴显示
 | 
						
						
						
							|  |  |     @memo.update_column(:viewed_count, (@memo.viewed_count.to_i + 1))
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     page = params[:page]
 | 
						
						
						
							|  |  |     if params[:r] && page.nil?
 | 
						
						
						
							|  |  |       offset = @memo.children.where("#{Memo.table_name}.id < ?", params[:r].to_i).count
 | 
						
						
						
							|  |  |       page = 1 + offset / pre_count
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @reply_count = @memo.children.count
 | 
						
						
						
							|  |  |     @reply_pages = Paginator.new @reply_count, pre_count, page
 | 
						
						
						
							|  |  |     @replies = @memo.children.
 | 
						
						
						
							|  |  |                 includes(:author, :attachments).
 | 
						
						
						
							|  |  |                 reorder("#{Memo.table_name}.created_at ASC").
 | 
						
						
						
							|  |  |                 limit(@reply_pages.per_page).
 | 
						
						
						
							|  |  |                 offset(@reply_pages.offset).
 | 
						
						
						
							|  |  |                 all
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @mome_new = Memo.new
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     # @memo = Memo.find_by_id(params[:id])
 | 
						
						
						
							|  |  |     # @forum = Forum.find(params[:forum_id])
 | 
						
						
						
							|  |  |     # @replies = @memo.replies
 | 
						
						
						
							|  |  |     # @mome_new = Memo.new
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html # show.html.erb
 | 
						
						
						
							|  |  |       format.json { render json: @memo }
 | 
						
						
						
							|  |  |       format.xml { render xml: @memo }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def edit
 | 
						
						
						
							|  |  |     @replying = false
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def update
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       if( @memo.update_column(:subject, params[:memo][:subject]) && 
 | 
						
						
						
							|  |  |            @memo.update_column(:content, params[:memo][:content]) &&
 | 
						
						
						
							|  |  |            @memo.update_column(:sticky, params[:memo][:sticky]) &&
 | 
						
						
						
							|  |  |            @memo.update_column(:lock, params[:memo][:lock])) 
 | 
						
						
						
							|  |  |         @memo.save_attachments(params[:attachments] || (params[:memo] && params[:memo][:uploads]))
 | 
						
						
						
							|  |  |         # @memo.root.update_attribute(:updated_at, @memo.updated_at)
 | 
						
						
						
							|  |  |         format.html {redirect_to back_memo_url, notice: "#{l :label_memo_create_succ}"}
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         format.html { render action: "edit" }
 | 
						
						
						
							|  |  |         format.json { render json: @person.errors, status: :unprocessable_entity }
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def destroy
 | 
						
						
						
							|  |  |     @memo.destroy
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       # format.html { redirect_to @back_url }
 | 
						
						
						
							|  |  |       format.html { redirect_to back_memo_or_forum_url }
 | 
						
						
						
							|  |  |       format.json { head :no_content }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   private
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def find_memo
 | 
						
						
						
							|  |  |     return unless find_forum
 | 
						
						
						
							|  |  |     @memo = @forum.memos.find(params[:id])
 | 
						
						
						
							|  |  |   rescue ActiveRecord::RecordNotFound
 | 
						
						
						
							|  |  |     render_404
 | 
						
						
						
							|  |  |     nil
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def find_forum
 | 
						
						
						
							|  |  |     @forum = Forum.find(params[:forum_id])
 | 
						
						
						
							|  |  |   rescue ActiveRecord::RecordNotFound
 | 
						
						
						
							|  |  |     render_404
 | 
						
						
						
							|  |  |     nil
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def authenticate_user_edit
 | 
						
						
						
							|  |  |     find_memo
 | 
						
						
						
							|  |  |     render_403 unless @memo.editable_by? User.current
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def authenticate_user_destroy
 | 
						
						
						
							|  |  |     find_memo
 | 
						
						
						
							|  |  |     render_403 unless @memo.destroyable_by? User.current
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def back_memo_url
 | 
						
						
						
							|  |  |     forum_memo_path(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id))
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def back_memo_or_forum_url
 | 
						
						
						
							|  |  |     @memo.parent_id.nil? ? forum_url(@forum) : forum_memo_url(@forum, @memo.parent_id)
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | end
 |