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_url(: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_url(: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_url 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_url 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