You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							263 lines
						
					
					
						
							8.6 KiB
						
					
					
				
			
		
		
	
	
							263 lines
						
					
					
						
							8.6 KiB
						
					
					
				| class OpenSourceProjectsController < ApplicationController
 | |
| 
 | |
|   before_filter :find_osp, :only => [:master_apply, :accept_master_apply, :refuse_master_apply]
 | |
|   before_filter :require_master, :only => [:master_apply, :accept_master_apply, :refuse_master_apply]
 | |
| 
 | |
|   helper :sort
 | |
|   include SortHelper
 | |
|   helper :apply_project_masters
 | |
|   include ApplyProjectMastersHelper
 | |
|   helper :no_uses
 | |
|   include NoUsesHelper
 | |
|   # GET /open_source_projects
 | |
|   # GET /open_source_projects.json
 | |
|   def index
 | |
|     
 | |
|     @app_dir = params[:app_dir]
 | |
|     @language = params[:language]
 | |
|     @created_at = params[:created_at]
 | |
|     per_page_option = 10
 | |
| 
 | |
|     @open_source_projects = OpenSourceProject.filter(@app_dir, @language, @created_at)
 | |
|     @open_source_projects = @open_source_projects.like(params[:name]) if params[:name].present?
 | |
| 
 | |
|     @os_project_count = @open_source_projects.count
 | |
|     @os_project_pages = Paginator.new @os_project_count, per_page_option, params['page']
 | |
| 
 | |
|     @open_source_projects =  @open_source_projects.offset(@os_project_pages.offset).limit(@os_project_pages.per_page)
 | |
|     
 | |
|     @bugs = BugToOsp.order('created_at desc').limit(8)
 | |
| 
 | |
|     # @open_source_projects = OpenSourceProject.all
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.html # index.html.erb
 | |
|       format.json { render json: @open_source_projects }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def master_apply
 | |
|     @apply = @open_source_project.apply_tips
 | |
|     @applicants = @open_source_project.applicants
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.html {
 | |
|         render :layout => "base_opensource_p"
 | |
|       }
 | |
|       format.json { render json: @open_source_project }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   # GET /open_source_projects/1
 | |
|   # GET /open_source_projects/1.json
 | |
|   def show
 | |
|     @open_source_project = OpenSourceProject.find(params[:id])
 | |
| 
 | |
|     sort_init 'updated_at', 'desc'
 | |
|     sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at",
 | |
|                 'replies' => "#{RelativeMemo.table_name}.replies_count",
 | |
|                 'updated_at' => "COALESCE (last_replies_relative_memos.created_at, #{RelativeMemo.table_name}.created_at)"
 | |
| 
 | |
|     @memo = RelativeMemo.new(:open_source_project => @open_source_project)
 | |
|     @topic_count = @open_source_project.topics.count
 | |
|     @topic_pages = Paginator.new @topic_count, 10, params['page']
 | |
|     @memos = @open_source_project.topics.
 | |
|                     reorder("#{RelativeMemo.table_name}.sticky DESC").
 | |
|                     includes(:last_reply).
 | |
|                     limit(@topic_pages.per_page).
 | |
|                     offset(@topic_pages.offset).
 | |
|                     order(sort_clause).
 | |
|                     all
 | |
| 
 | |
|     @bugs = @open_source_project.bugs.limit(6)
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.html {
 | |
|         render :layout => "base_opensource_p"
 | |
|       }
 | |
|       format.json { render json: @open_source_project }
 | |
|     end
 | |
|   end
 | |
|   
 | |
|   def allbug
 | |
|     @bugs = BugToOsp.visible
 | |
|     
 | |
|     @bug_count = @bugs.count
 | |
|     @bug_pages = Paginator.new @bug_count, per_page_option, params['page']
 | |
|     @bugs = @bugs.includes(:bug).reorder("#{RelativeMemo.table_name}.created_at DESC").limit(@bug_pages.per_page).offset(@bug_pages.offset).all
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.html 
 | |
|       format.json { render json: @open_source_project }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def search
 | |
| 
 | |
|   end
 | |
| 
 | |
|   def showbug
 | |
|     @open_source_project = OpenSourceProject.find(params[:id])
 | |
| 
 | |
|     sort_init 'updated_at', 'desc'
 | |
|     sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at",
 | |
|               'replies' => "#{RelativeMemo.table_name}.replies_count",
 | |
|               'updated_at' => "COALESCE (last_replies_relative_memos.created_at, #{RelativeMemo.table_name}.created_at)"
 | |
| 
 | |
|     @memo = RelativeMemo.new(:open_source_project => @open_source_project)
 | |
|     @topic_count = @open_source_project.bugs.count
 | |
|     @topic_pages = Paginator.new @topic_count, per_page_option, params['page']
 | |
|     @memos = @open_source_project.bugs.
 | |
|       reorder("#{RelativeMemo.table_name}.sticky DESC").
 | |
|       includes(:last_reply).
 | |
|       limit(@topic_pages.per_page).
 | |
|       offset(@topic_pages.offset).
 | |
|       order(sort_clause).
 | |
|       all
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.html {
 | |
|         render :layout => "base_opensource_p"
 | |
|       }
 | |
|       format.json { render json: @open_source_project }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   # added by yiang  暴力添加,请绕道
 | |
|   def showmemo
 | |
|     @open_source_project = OpenSourceProject.find(params[:id])
 | |
| 
 | |
|     sort_init 'updated_at', 'desc'
 | |
|     sort_update 'created_at' => "#{RelativeMemo.table_name}.created_at",
 | |
|               'replies' => "#{RelativeMemo.table_name}.replies_count",
 | |
|               'updated_at' => "COALESCE (last_replies_relative_memos.created_at, #{RelativeMemo.table_name}.created_at)"
 | |
| 
 | |
|     @memo = RelativeMemo.new(:open_source_project => @open_source_project)
 | |
|     @topic_count = @open_source_project.topics.count
 | |
|     @topic_pages = Paginator.new @topic_count, per_page_option, params['page']
 | |
|     @memos = @open_source_project.topics.
 | |
|       reorder("#{RelativeMemo.table_name}.sticky DESC").
 | |
|       includes(:last_reply).
 | |
|       limit(@topic_pages.per_page).
 | |
|       offset(@topic_pages.offset).
 | |
|       order(sort_clause).
 | |
|       all
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.html {
 | |
|         render :layout => "base_opensource_p"
 | |
|       }
 | |
|       format.json { render json: @open_source_project }
 | |
|     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
 | |
|     @open_source_project = OpenSourceProject.new(params[:open_source_project])
 | |
| 
 | |
|     respond_to do |format|
 | |
|       if @open_source_project.save
 | |
|         format.html { redirect_to @open_source_project, notice: 'Open source project was successfully created.' }
 | |
|         format.json { render json: @open_source_project, status: :created, location: @open_source_project }
 | |
|       else
 | |
|         format.html { render action: "new" }
 | |
|         format.json { render json: @open_source_project.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
 | |
| 
 | |
|   def remove_condition
 | |
|     @app_dir = params[:app_dir]
 | |
|     @language = params[:language]
 | |
|     @created_at = params[:created_at]
 | |
|     redirect_to open_source_projects_path(:app_dir => @app_dir, :language => @language, :created_at => @created_at, :name => params[:name])
 | |
|   end
 | |
| 
 | |
|   def search
 | |
|     # per_page_option = 10
 | |
|     #
 | |
|     # @open_source_projects = OpenSourceProject.filter(@app_dir, @language, @created_at)
 | |
|     # @open_source_projects = @open_source_projects.like(params[:name]) if params[:name].present?
 | |
|     #
 | |
|     # @os_project_count = @open_source_projects.count
 | |
|     # @os_project_pages = Paginator.new @os_project_count, per_page_option, params['page']
 | |
|     #
 | |
|     # @open_source_projects =  @open_source_projects.offset(@os_project_pages.offset).limit(@os_project_pages.per_page)
 | |
| 
 | |
|     redirect_to open_source_projects_path(:name => params[:name])
 | |
| 
 | |
|   end
 | |
| 
 | |
|   def refuse_master_apply
 | |
|     @apply = ApplyProjectMaster.where("user_id = ? and apply_id = ? and apply_type = 'OpenSourceProject'", params[:user_id], @open_source_project.id)
 | |
|     @apply.first.destory
 | |
| 
 | |
|     redirect_to master_apply_open_source_project_path
 | |
|   end
 | |
| 
 | |
|   def accept_master_apply
 | |
|     @apply = ApplyProjectMaster.where("user_id = ? and apply_id = ? and apply_type = 'OpenSourceProject'", params[:user_id], @open_source_project.id)
 | |
|     if @apply.count == 1
 | |
|       @apply.first.update_attributes(:status => 2)
 | |
|     end
 | |
| 
 | |
|     redirect_to master_apply_open_source_project_path
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def require_master
 | |
|     render_403 unless @open_source_project.admin?(User.current)
 | |
|   end
 | |
| 
 | |
|   def find_osp
 | |
|     @open_source_project = OpenSourceProject.find(params[:id])
 | |
|     render_404 unless @open_source_project.present?
 | |
|   end
 | |
| end
 |