| 
							
								 | 
							
							class RelativeMemosController < ApplicationController
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							  helper :sort
 | 
						
						
						
						
							 | 
							
								 | 
							
							  include SortHelper
 | 
						
						
						
						
							 | 
							
								 | 
							
							  helper :apply_project_masters
 | 
						
						
						
						
							 | 
							
								 | 
							
							  include ApplyProjectMastersHelper
 | 
						
						
						
						
							 | 
							
								 | 
							
							  helper :no_uses
 | 
						
						
						
						
							 | 
							
								 | 
							
							  include NoUsesHelper
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							  before_filter :find_memo, :except => [:new, :create]
 | 
						
						
						
						
							 | 
							
								 | 
							
							  before_filter :find_osp, :only => [:create]
 | 
						
						
						
						
							 | 
							
								 | 
							
							  before_filter :require_login, :only => [:new, :create]
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							  layout 'base_opensource_p'
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects.json
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def index
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # per_page_option = 10
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @open_source_projects = OpenSourceProject.all
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @os_project_count = @open_source_projects.count
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @os_project_pages = Paginator.new @os_project_count, per_page_option, params['page']
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @open_source_projects = OpenSourceProject.all
 | 
						
						
						
						
							 | 
							
								 | 
							
							# 
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # respond_to do |format|
 | 
						
						
						
						
							 | 
							
								 | 
							
							      # format.html # index.html.erb
 | 
						
						
						
						
							 | 
							
								 | 
							
							      # format.json { render json: @open_source_projects }
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects/1
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects/1.json
 | 
						
						
						
						
							 | 
							
								 | 
							
							  REPLIES_PER_PAGE = 10 unless const_defined?(:REPLIES_PER_PAGE)
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def show
 | 
						
						
						
						
							 | 
							
								 | 
							
							    pre_count = REPLIES_PER_PAGE
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @memo = @memo.root # 取出楼主,防止输入帖子id让回复作为主贴显示
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @memo.update_column(:viewed_count_local, (@memo.viewed_count_local.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("#{RelativeMemo.table_name}.created_at ASC").
 | 
						
						
						
						
							 | 
							
								 | 
							
							                limit(@reply_pages.per_page).
 | 
						
						
						
						
							 | 
							
								 | 
							
							                offset(@reply_pages.offset).
 | 
						
						
						
						
							 | 
							
								 | 
							
							                all
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @mome_new = RelativeMemo.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 }
 | 
						
						
						
						
							 | 
							
								 | 
							
							    end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects/new
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects/new.json
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def new
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @open_source_project = OpenSourceProject.new
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    respond_to do |format|
 | 
						
						
						
						
							 | 
							
								 | 
							
							      format.html # new.html.erb
 | 
						
						
						
						
							 | 
							
								 | 
							
							      format.json { render json: @open_source_project }
 | 
						
						
						
						
							 | 
							
								 | 
							
							    end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # GET /open_source_projects/1/edit
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def edit
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @open_source_project = OpenSourceProject.find(params[:id])
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # POST /open_source_projects
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # POST /open_source_projects.json
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def create
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @memo = RelativeMemo.new(params[:relative_memo])
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @memo.url = "http://forge.trustie.net/open_source_projects"
 | 
						
						
						
						
							 | 
							
								 | 
							
							    # @memo.osp_id = params[:open_source_project_id]
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @memo.author_id = User.current.id
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @memo.save_attachments(params[:attachments] || (params[:relative_memo] && params[:relative_memo][:uploads]))
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    respond_to do |format|
 | 
						
						
						
						
							 | 
							
								 | 
							
							      if @memo.save
 | 
						
						
						
						
							 | 
							
								 | 
							
							        RelativeMemoToOpenSourceProject.create(:osp_id => params[:open_source_project_id], :relative_memo_id => @memo.id)
 | 
						
						
						
						
							 | 
							
								 | 
							
							        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_url}#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
 | 
						
						
						
						
							 | 
							
								 | 
							
							        format.json { render json: @memo.errors, status: :unprocessable_entity }
 | 
						
						
						
						
							 | 
							
								 | 
							
							      end
 | 
						
						
						
						
							 | 
							
								 | 
							
							    end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # PUT /open_source_projects/1
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # PUT /open_source_projects/1.json
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def update
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @open_source_project = OpenSourceProject.find(params[:id])
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    respond_to do |format|
 | 
						
						
						
						
							 | 
							
								 | 
							
							      if @open_source_project.update_attributes(params[:open_source_project])
 | 
						
						
						
						
							 | 
							
								 | 
							
							        format.html { redirect_to @open_source_project, notice: 'Open source project was successfully updated.' }
 | 
						
						
						
						
							 | 
							
								 | 
							
							        format.json { head :no_content }
 | 
						
						
						
						
							 | 
							
								 | 
							
							      else
 | 
						
						
						
						
							 | 
							
								 | 
							
							        format.html { render action: "edit" }
 | 
						
						
						
						
							 | 
							
								 | 
							
							        format.json { render json: @open_source_project.errors, status: :unprocessable_entity }
 | 
						
						
						
						
							 | 
							
								 | 
							
							      end
 | 
						
						
						
						
							 | 
							
								 | 
							
							    end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # DELETE /open_source_projects/1
 | 
						
						
						
						
							 | 
							
								 | 
							
							  # DELETE /open_source_projects/1.json
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def destroy
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @open_source_project = OpenSourceProject.find(params[:id])
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @open_source_project.destroy
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							    respond_to do |format|
 | 
						
						
						
						
							 | 
							
								 | 
							
							      format.html { redirect_to open_source_projects_url }
 | 
						
						
						
						
							 | 
							
								 | 
							
							      format.json { head :no_content }
 | 
						
						
						
						
							 | 
							
								 | 
							
							    end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							  private
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def find_memo
 | 
						
						
						
						
							 | 
							
								 | 
							
							    return unless find_osp
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @memo = @open_source_project.topics.find(RelativeMemo.find(params[:id]).root.id)
 | 
						
						
						
						
							 | 
							
								 | 
							
							  rescue ActiveRecord::RecordNotFound
 | 
						
						
						
						
							 | 
							
								 | 
							
							    render_404
 | 
						
						
						
						
							 | 
							
								 | 
							
							    nil
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def find_osp
 | 
						
						
						
						
							 | 
							
								 | 
							
							    @open_source_project = OpenSourceProject.find(params[:open_source_project_id])
 | 
						
						
						
						
							 | 
							
								 | 
							
							  rescue ActiveRecord::RecordNotFound
 | 
						
						
						
						
							 | 
							
								 | 
							
							    render_404
 | 
						
						
						
						
							 | 
							
								 | 
							
							    nil
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							  
 | 
						
						
						
						
							 | 
							
								 | 
							
							  def back_memo_url
 | 
						
						
						
						
							 | 
							
								 | 
							
							    open_source_project_relative_memo_path(@open_source_project, (@memo.parent_id.nil? ? @memo : @memo.parent_id))
 | 
						
						
						
						
							 | 
							
								 | 
							
							  end
 | 
						
						
						
						
							 | 
							
								 | 
							
							end
 |