|  |  | #  fq
 | 
						
						
						
							|  |  | # class BidsController < ApplicationController
 | 
						
						
						
							|  |  | class ContestsController < ApplicationController
 | 
						
						
						
							|  |  |   layout "contest_base"
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   menu_item :respond                
 | 
						
						
						
							|  |  |   menu_item :project, :only => :show_project
 | 
						
						
						
							|  |  |   menu_item :application, :only => :show_softapplication
 | 
						
						
						
							|  |  |   menu_item :attendingcontests, :only => :show_attendingcontest
 | 
						
						
						
							|  |  |   menu_item :contestnotifications, :only => :index
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   before_filter :can_show_contest, :except => []    # modified by alan
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   # modified by longjun
 | 
						
						
						
							|  |  |   before_filter :find_contest, :only => [
 | 
						
						
						
							|  |  |                                       :show_contest, :show_project, :show_softapplication,
 | 
						
						
						
							|  |  |                                       :show_attendingcontest, :index, :set_reward_project, 
 | 
						
						
						
							|  |  |                                       :set_reward_softapplication, :create, :destroy, :more,
 | 
						
						
						
							|  |  |                                       :back, :add, :add_softapplication, :new,:show_results, 
 | 
						
						
						
							|  |  |                                       :set_reward, :show_contest_project, :show_contest_user, :watcherlist,
 | 
						
						
						
							|  |  |                                       :join_in_contest, :unjoin_in_contest, :new_join,  :settings
 | 
						
						
						
							|  |  |                                     ]
 | 
						
						
						
							|  |  |   # end longjun            
 | 
						
						
						
							|  |  |          
 | 
						
						
						
							|  |  |   # added by fq
 | 
						
						
						
							|  |  |   before_filter :require_login, :only => [:join_in_contest, :unjoin_in_contest]
 | 
						
						
						
							|  |  |   # end
 | 
						
						
						
							|  |  |   before_filter :require_login,:only => [:set_reward, :destroy, :add, :new ]
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   helper :watchers
 | 
						
						
						
							|  |  |   helper :attachments
 | 
						
						
						
							|  |  |   helper :projects
 | 
						
						
						
							|  |  |   helper :words
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   include AttachmentsHelper
 | 
						
						
						
							|  |  |   include ApplicationHelper
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def index
 | 
						
						
						
							|  |  |     render_404 unless params[:name]
 | 
						
						
						
							|  |  |     # @contests = Contest.visible
 | 
						
						
						
							|  |  |     # @contests ||= []
 | 
						
						
						
							|  |  |     @offset, @limit = api_offset_and_limit(:limit => 10)
 | 
						
						
						
							|  |  |     #@contests = Contest.visible
 | 
						
						
						
							|  |  |     #@contests = @contests.like(params[:name]) if params[:name].present?
 | 
						
						
						
							|  |  |     @is_search = params[:name] ? true:false
 | 
						
						
						
							|  |  |     @contests =  Contest.visible.where("name like '%#{params[:name]}%'")
 | 
						
						
						
							|  |  |     if params[:contests_search]
 | 
						
						
						
							|  |  |       (redirect_to contests_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @contest_count = @contests.count
 | 
						
						
						
							|  |  |     @contest_pages = Paginator.new @contest_count, @limit, params['page']
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @offset ||= @contest_pages.reverse_offset
 | 
						
						
						
							|  |  |     if params[:contest_sort_type].present?
 | 
						
						
						
							|  |  |     case params[:contest_sort_type]
 | 
						
						
						
							|  |  |     when '0'
 | 
						
						
						
							|  |  |        # modified by longjun
 | 
						
						
						
							|  |  |       # never use unless and else, 将下面重复操作模块化,放在private下
 | 
						
						
						
							|  |  |       # unless @offset == 0
 | 
						
						
						
							|  |  |       # if @offset != 0
 | 
						
						
						
							|  |  |       #   @contests = @contests.reorder('contests.commit').offset(@offset).limit(@limit).all.reverse
 | 
						
						
						
							|  |  |       # else
 | 
						
						
						
							|  |  |       #   limit = @contest_count % @limit
 | 
						
						
						
							|  |  |       #   limit = @limit  if limit == 0
 | 
						
						
						
							|  |  |       #   @contests = @contests.reorder('contests.commit').offset(@offset).limit(limit).all.reverse
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       @contests = index_page_sort(@offset, @limit, @contest_count, @contests, 'contests.commit')
 | 
						
						
						
							|  |  |       # end
 | 
						
						
						
							|  |  |       @s_state = 0
 | 
						
						
						
							|  |  |     when '1'
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       @contests = index_page_sort(@offset, @limit, @contest_count, @contests, 'contests.created_on')
 | 
						
						
						
							|  |  |       @s_state = 1
 | 
						
						
						
							|  |  |     # modified by longjun
 | 
						
						
						
							|  |  |     # 目前只有 0, 1 两个sort_type
 | 
						
						
						
							|  |  |     # when '2'
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |     # end longjun
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       @contests = index_page_sort(@offset, @limit, @contest_count, @contests, '')
 | 
						
						
						
							|  |  |       @s_state = 0
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       # modified by longjun
 | 
						
						
						
							|  |  |       # never use unless and else
 | 
						
						
						
							|  |  |       # unless @offset == 0
 | 
						
						
						
							|  |  |       if @offset != 0
 | 
						
						
						
							|  |  |         @contests = @contests.reorder('contests.created_on').offset(@offset).limit(@limit).all.reverse
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         limit = @contest_count % @limit
 | 
						
						
						
							|  |  |         limit = @limit  if limit == 0
 | 
						
						
						
							|  |  |         @contests = @contests.reorder('contests.created_on').offset(@offset).limit(limit).all.reverse
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       @s_state = 1
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def search
 | 
						
						
						
							|  |  |     redirect_to action: 'index',name:params[:name]
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def homework
 | 
						
						
						
							|  |  |     @offset, @limit = api_offset_and_limit({:limit => 10})
 | 
						
						
						
							|  |  |     @bids = @course.homeworks.order('deadline DESC')
 | 
						
						
						
							|  |  |     @bids = @bids.like(params[:name]) if params[:name].present?
 | 
						
						
						
							|  |  |     @bid_count = @bids.count
 | 
						
						
						
							|  |  |     @bid_pages = Paginator.new @bid_count, @limit, params['page']
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @offset ||= @bid_pages.reverse_offset
 | 
						
						
						
							|  |  |     # modified by longjun
 | 
						
						
						
							|  |  |     # never use unless and else
 | 
						
						
						
							|  |  |     # unless @offset == 0
 | 
						
						
						
							|  |  |     if @offset != 0
 | 
						
						
						
							|  |  |       @bids = @bids.offset(@offset).limit(@limit).all.reverse
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       limit = @bid_count % @limit
 | 
						
						
						
							|  |  |       @bids = @bids.offset(@offset).limit(limit).all.reverse
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     render :layout => 'base_courses'
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def show_contest
 | 
						
						
						
							|  |  |     @user = @contest.author
 | 
						
						
						
							|  |  |     @jours = @contest.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
 | 
						
						
						
							|  |  |     #@limit =  10
 | 
						
						
						
							|  |  |     #@feedback_count = @jours.count
 | 
						
						
						
							|  |  |     #@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
 | 
						
						
						
							|  |  |     #@offset ||= @feedback_pages.offset
 | 
						
						
						
							|  |  |     #@jour = @jours[@offset, @limit]
 | 
						
						
						
							|  |  |     @jour = paginateHelper @jours,10
 | 
						
						
						
							|  |  |     @state = false
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html {
 | 
						
						
						
							|  |  |         render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |       }
 | 
						
						
						
							|  |  |       format.api
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def join_in_contest
 | 
						
						
						
							|  |  |     if params[:contest_password] == @contest.password
 | 
						
						
						
							|  |  |       JoinInCompetition.create(:user_id => User.current.id, :competition_id => @contest.id)
 | 
						
						
						
							|  |  |       @state = 0
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       @state = 1
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js { render :partial => 'set_join', :locals => {:user => User.current, :object_id => params[:id]} }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def unjoin_in_contest
 | 
						
						
						
							|  |  |      
 | 
						
						
						
							|  |  |     joined = JoinInCompetition.where('competition_id = ? and user_id = ?', @contest.id, User.current.id)
 | 
						
						
						
							|  |  |             
 | 
						
						
						
							|  |  |     joined.each do |join|
 | 
						
						
						
							|  |  |       join.delete
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js { render :partial => 'set_join', :locals => {:user => User.current, :object_id => params[:id]} }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def show_participator
 | 
						
						
						
							|  |  |     render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def settings
 | 
						
						
						
							|  |  |      if @contest.author.id == User.current.id 
 | 
						
						
						
							|  |  |            @contest = Contest.find(params[:id])
 | 
						
						
						
							|  |  |            render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |      else
 | 
						
						
						
							|  |  |          render_403 :message => :notice_not_contest_setting_authorized
 | 
						
						
						
							|  |  |      end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # Added by Longjun
 | 
						
						
						
							|  |  |   def destroy_contest
 | 
						
						
						
							|  |  |     @contest = Contest.find(params[:id])
 | 
						
						
						
							|  |  |     if @contest.author_id == User.current.id || User.current.admin?
 | 
						
						
						
							|  |  |       
 | 
						
						
						
							|  |  |       @contest.destroy
 | 
						
						
						
							|  |  |       redirect_to  welcome_contest_url
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       render_403 :message => :notice_not_contest_delete_authorized
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   # end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def show_contest_project
 | 
						
						
						
							|  |  |     contests = Contest.where('parent_id = ?', @contest.id)
 | 
						
						
						
							|  |  |     @projects = []
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     # Modified by longjun
 | 
						
						
						
							|  |  |     # 用 arr.each 替换 for [ according to the style guide ]
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     # for contest in contests
 | 
						
						
						
							|  |  |       # @projects += contest.contesting_projects
 | 
						
						
						
							|  |  |     # end
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     contests.each do |contest|
 | 
						
						
						
							|  |  |         @projects += contest.contesting_projects
 | 
						
						
						
							|  |  |     end  
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     # end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |         format.html {
 | 
						
						
						
							|  |  |           render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         format.api
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def show_contest_softapplication
 | 
						
						
						
							|  |  |     contests = Contest.where('parent_id = ?', @contest.id)
 | 
						
						
						
							|  |  |     @softapplications = []
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     # Modified by Longjun
 | 
						
						
						
							|  |  |     # for contest in contests
 | 
						
						
						
							|  |  |       # @softapplications += contest.contesting_softapplications
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |     contests.each do |contest|
 | 
						
						
						
							|  |  |         @softapplications += contest.contesting_softapplications
 | 
						
						
						
							|  |  |      end
 | 
						
						
						
							|  |  |      
 | 
						
						
						
							|  |  |      # end
 | 
						
						
						
							|  |  |      
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |         format.html {
 | 
						
						
						
							|  |  |           render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         format.api
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   def show_contest_user
 | 
						
						
						
							|  |  |     contests = Contest.find(:all)
 | 
						
						
						
							|  |  |     @users = []
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |     # Modified by Longjun 
 | 
						
						
						
							|  |  |     # for contest in contests
 | 
						
						
						
							|  |  |       # for project in contest.projects
 | 
						
						
						
							|  |  |         # @users += project.users
 | 
						
						
						
							|  |  |       # end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     contests.each do |contest|
 | 
						
						
						
							|  |  |         contest.projects.each do |project|
 | 
						
						
						
							|  |  |           @users += project.users
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     # end 
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |         format.html {
 | 
						
						
						
							|  |  |           render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |         }
 | 
						
						
						
							|  |  |         format.api
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   #显示参赛的项目
 | 
						
						
						
							|  |  |   def show_project
 | 
						
						
						
							|  |  |     @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
 | 
						
						
						
							|  |  |     @option = []
 | 
						
						
						
							|  |  |     # @contesting_project_count = @contesting_project_all.count
 | 
						
						
						
							|  |  |     # @contesting_project_pages = Paginator.new @contesting_project_count, per_page_option, params['page']
 | 
						
						
						
							|  |  |     @membership.each do |membership|
 | 
						
						
						
							|  |  |       
 | 
						
						
						
							|  |  |       # Modified by Longjun 
 | 
						
						
						
							|  |  |       # 将两个判断语句合并
 | 
						
						
						
							|  |  |       # unless membership.project.project_type==1
 | 
						
						
						
							|  |  |         # if User.current.allowed_to?(:quote_project, membership.project)
 | 
						
						
						
							|  |  |             # @option << membership.project
 | 
						
						
						
							|  |  |         # end
 | 
						
						
						
							|  |  |       # end
 | 
						
						
						
							|  |  |       if membership.project.project_type != 1 && User.current.allowed_to?(:quote_project, membership.project)
 | 
						
						
						
							|  |  |             @option << membership.project
 | 
						
						
						
							|  |  |         
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       # end
 | 
						
						
						
							|  |  |       
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @user = @contest.author
 | 
						
						
						
							|  |  |     @contesting_project = @contest.contesting_projects.all
 | 
						
						
						
							|  |  |     if params[:student_id].present?
 | 
						
						
						
							|  |  |       @temp = []
 | 
						
						
						
							|  |  |       @contesting_project.each do |pro|
 | 
						
						
						
							|  |  |         if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |           if /#{params[:student_id]}/ =~  pro.user.user_extensions.student_id
 | 
						
						
						
							|  |  |             @temp << pro
 | 
						
						
						
							|  |  |           end
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |         @temp
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       @contesting_project = @temp
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |       @temp = []
 | 
						
						
						
							|  |  |       @contesting_project.each do |pro|
 | 
						
						
						
							|  |  |         # modified by longjun
 | 
						
						
						
							|  |  |         # if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |         #   @temp << pro
 | 
						
						
						
							|  |  |         # end
 | 
						
						
						
							|  |  |         @temp << pro if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |         # end longjun
 | 
						
						
						
							|  |  |         @temp
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       if @temp.size > 0
 | 
						
						
						
							|  |  |           @contesting_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @contesting_project = paginateHelper(@contesting_project)
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html {
 | 
						
						
						
							|  |  |         render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |       }     
 | 
						
						
						
							|  |  |       format.api
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end 
 | 
						
						
						
							|  |  |   ############
 | 
						
						
						
							|  |  |   ##显示参赛的应用
 | 
						
						
						
							|  |  |   def show_softapplication
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     # @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
 | 
						
						
						
							|  |  |     # @option = []  
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     # @user = @contest.user
 | 
						
						
						
							|  |  |     @softapplication = Softapplication.all 
 | 
						
						
						
							|  |  |     @contesting_softapplication = @contest.contesting_softapplications
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @contesting_softapplication = paginateHelper(@contesting_softapplication, 10) 
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     # @temp = []
 | 
						
						
						
							|  |  |     # @softapplicationt.each do |pro|
 | 
						
						
						
							|  |  |     #   if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |     #     @temp << pro
 | 
						
						
						
							|  |  |     #   end
 | 
						
						
						
							|  |  |     #   @temp
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |     # if @temp.size > 0
 | 
						
						
						
							|  |  |     #     @contesting_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade}
 | 
						
						
						
							|  |  |     # end
 | 
						
						
						
							|  |  |     # end
 | 
						
						
						
							|  |  |     # respond_to do |format|
 | 
						
						
						
							|  |  |     #   format.html {
 | 
						
						
						
							|  |  |     #     render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |     #   }     
 | 
						
						
						
							|  |  |     #   format.api
 | 
						
						
						
							|  |  |     # end  
 | 
						
						
						
							|  |  | ##########################
 | 
						
						
						
							|  |  |     @contest = Contest.find_by_id(params[:id])
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html {
 | 
						
						
						
							|  |  |         render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |       }     
 | 
						
						
						
							|  |  |       format.api
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |  ###我要参赛
 | 
						
						
						
							|  |  |  def show_attendingcontest
 | 
						
						
						
							|  |  | ##取出参赛项目--项目列表
 | 
						
						
						
							|  |  |     @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
 | 
						
						
						
							|  |  |     @option = []
 | 
						
						
						
							|  |  |     # @contesting_project_count = @contesting_project_all.count
 | 
						
						
						
							|  |  |     # @contesting_project_pages = Paginator.new @contesting_project_count, per_page_option, params['page']
 | 
						
						
						
							|  |  |     @membership.each do |membership|
 | 
						
						
						
							|  |  |       unless membership.project.project_type==1
 | 
						
						
						
							|  |  |         #拥有编辑项目权限的可将该项目参赛
 | 
						
						
						
							|  |  |         if User.current.allowed_to?(:quote_project, membership.project)
 | 
						
						
						
							|  |  |           @option << membership.project
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @user = @contest.author
 | 
						
						
						
							|  |  |     @contesting_project = @contest.contesting_projects.all
 | 
						
						
						
							|  |  |     if params[:student_id].present?
 | 
						
						
						
							|  |  |       @temp = []
 | 
						
						
						
							|  |  |       @contesting_project.each do |pro|
 | 
						
						
						
							|  |  |         if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |           if /#{params[:student_id]}/ =~  pro.user.user_extensions.student_id
 | 
						
						
						
							|  |  |             @temp << pro
 | 
						
						
						
							|  |  |           end
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |         @temp
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       @contesting_project = @temp
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |       @temp = []
 | 
						
						
						
							|  |  |       @contesting_project.each do |pro|
 | 
						
						
						
							|  |  |         # modified by longjun
 | 
						
						
						
							|  |  |         # if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |         #   @temp << pro
 | 
						
						
						
							|  |  |         # end
 | 
						
						
						
							|  |  |         @temp << pro if pro.project && pro.project.project_status
 | 
						
						
						
							|  |  |         # end longjun
 | 
						
						
						
							|  |  |         @temp
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       if @temp.size > 0
 | 
						
						
						
							|  |  |           @contesting_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     # 取出参赛应用   --应用列表
 | 
						
						
						
							|  |  |     @softapplication = Softapplication.all 
 | 
						
						
						
							|  |  |     @contesting_softapplication = @contest.contesting_softapplications.
 | 
						
						
						
							|  |  |       joins("LEFT JOIN softapplications ON contesting_softapplications.softapplication_id=softapplications.id").
 | 
						
						
						
							|  |  |       joins("LEFT JOIN (
 | 
						
						
						
							|  |  |               SELECT * FROM seems_rateable_cached_ratings
 | 
						
						
						
							|  |  |                   WHERE cacheable_type='Softapplication' AND DIMENSION = 'quality') AS cached
 | 
						
						
						
							|  |  |                   ON cached.cacheable_id=softapplications.id").
 | 
						
						
						
							|  |  |       order("cached.avg").reverse_order
 | 
						
						
						
							|  |  |     @contesting_softapplication = paginateHelper  @contesting_softapplication, 10
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     #引用base_newcontest整体样式
 | 
						
						
						
							|  |  |     @contest = Contest.find_by_id(params[:id])
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html {
 | 
						
						
						
							|  |  |         render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |       }     
 | 
						
						
						
							|  |  |       format.api
 | 
						
						
						
							|  |  |     end  
 | 
						
						
						
							|  |  |  end
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |  ###end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def show_notification
 | 
						
						
						
							|  |  |       @contest = Contest.find_by_id(params[:id])
 | 
						
						
						
							|  |  |       respond_to do |format|
 | 
						
						
						
							|  |  |         format.html {
 | 
						
						
						
							|  |  |           render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |         }     
 | 
						
						
						
							|  |  |         format.api
 | 
						
						
						
							|  |  |       end 
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |   def set_reward_project
 | 
						
						
						
							|  |  |     @c_p = nil
 | 
						
						
						
							|  |  |     @contesting_project_id = nil
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     if params[:set_reward_project][:reward]&&((User.current.id==@contest.author_id)||User.current.admin)
 | 
						
						
						
							|  |  |       # @bid_id = params[:id]
 | 
						
						
						
							|  |  |       @contesting_project_id = params[:set_reward_project][:c_id]
 | 
						
						
						
							|  |  |       @c_p = ContestingProject.find_by_id(@contesting_project_id)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       # 把字段存进表中
 | 
						
						
						
							|  |  |       @c_p.update_reward(params[:set_reward_project][:reward].to_s)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |   def set_reward_softapplication
 | 
						
						
						
							|  |  |     @c_sa = nil
 | 
						
						
						
							|  |  |     @contesting_softapplication_id = nil
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     if params[:set_reward_softapplication][:reward]&&((User.current.id==@contest.author_id)||User.current.admin)
 | 
						
						
						
							|  |  |       # @bid_id = params[:id]
 | 
						
						
						
							|  |  |       @contesting_softapplication_id = params[:set_reward_softapplication][:c_id]
 | 
						
						
						
							|  |  |       @c_sa = ContestingSoftapplication.find_by_id(@contesting_softapplication_id)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       # 把字段存进表中
 | 
						
						
						
							|  |  |       @c_sa.update_reward(params[:set_reward_softapplication][:reward].to_s)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end 
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |   ###添加已创建的参赛项目
 | 
						
						
						
							|  |  |   def add
 | 
						
						
						
							|  |  |     project = Project.find(params[:contest])
 | 
						
						
						
							|  |  |     contest_message = params[:contest_for_save][:contest_message]
 | 
						
						
						
							|  |  |     if ContestingProject.where("project_id = ? and contest_id = ?", project.id, @contest.id).size == 0
 | 
						
						
						
							|  |  |       # modified by longjun, create 写错了
 | 
						
						
						
							|  |  |       # if ContestingProject.cerate_contesting(@contest.id, project.id, contest_message)
 | 
						
						
						
							|  |  |       if ContestingProject.create_contesting(@contest.id, project.id, contest_message)
 | 
						
						
						
							|  |  |       # end longjun
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         flash.now[:notice] = l(:label_bidding_contest_succeed)
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       flash.now[:error] = l(:label_bidding_fail)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     @contesting_project = paginateHelper @contest.contesting_projects
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       format.html { redirect_to :back }
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   ###添加已发布的参赛应用
 | 
						
						
						
							|  |  |   def add_softapplication
 | 
						
						
						
							|  |  |     softapplication = Softapplication.find(params[:contest])
 | 
						
						
						
							|  |  |     contest_message = params[:contest_for_save][:contest_message]
 | 
						
						
						
							|  |  |     if ContestingSoftapplication.where("softapplication_id = ? and contest_id = ?", softapplication.id, @contest.id).size == 0
 | 
						
						
						
							|  |  |       if ContestingSoftapplication.create_softapplication_contesting(@contest.id, softapplication.id, contest_message)
 | 
						
						
						
							|  |  |         flash.now[:notice] = l(:label_release_add_contest_succeed)
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       flash.now[:error] = l(:label_add_contest_succeed_fail)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     @contesting_softapplication = paginateHelper @contest.contesting_softapplications
 | 
						
						
						
							|  |  |     
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       format.html { redirect_to :back }
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   ## 新建留言
 | 
						
						
						
							|  |  |   def create
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     if params[:contest_message][:message].size>0
 | 
						
						
						
							|  |  |       if params[:reference_content]
 | 
						
						
						
							|  |  |         message = params[:contest_message][:message] + "\n" + params[:reference_content]
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         message = params[:contest_message][:message]
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       refer_user_id = params[:contest_message][:reference_user_id].to_i
 | 
						
						
						
							|  |  |       @contest.add_jour(User.current, message, refer_user_id)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @user = @contest.author
 | 
						
						
						
							|  |  |     @jours = @contest.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
 | 
						
						
						
							|  |  |     @limit =  10
 | 
						
						
						
							|  |  |     @feedback_count = @jours.count
 | 
						
						
						
							|  |  |     @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
 | 
						
						
						
							|  |  |     @offset ||= @feedback_pages.offset
 | 
						
						
						
							|  |  |     @jour = @jours[@offset, @limit]
 | 
						
						
						
							|  |  |     @contest.set_commit(@feedback_count)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   ##删除留言
 | 
						
						
						
							|  |  |   def destroy
 | 
						
						
						
							|  |  |     @user = @contest.author
 | 
						
						
						
							|  |  |     if User.current.admin? || User.current.id == @user.id
 | 
						
						
						
							|  |  |       JournalsForMessage.delete_message(params[:object_id])
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @jours = @contest.journals_for_messages.reverse
 | 
						
						
						
							|  |  |     @limit =  10
 | 
						
						
						
							|  |  |     @feedback_count = @jours.count
 | 
						
						
						
							|  |  |     @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
 | 
						
						
						
							|  |  |     @offset ||= @feedback_pages.offset
 | 
						
						
						
							|  |  |     @jour = @jours[@offset, @limit]
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @contest.set_commit(@feedback_count)
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   ##引用留言
 | 
						
						
						
							|  |  |   def new
 | 
						
						
						
							|  |  |     @jour = JournalsForMessage.find(params[:journal_id]) if params[:journal_id]
 | 
						
						
						
							|  |  |     if @jour
 | 
						
						
						
							|  |  |       user = @jour.user
 | 
						
						
						
							|  |  |       text = @jour.notes
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       user = @contest.author
 | 
						
						
						
							|  |  |       text = @contest.description
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
 | 
						
						
						
							|  |  |     @content = "> #{ll(User.current.language, :text_user_wrote, user)}\n> "
 | 
						
						
						
							|  |  |     @content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
 | 
						
						
						
							|  |  |     @id = user.id
 | 
						
						
						
							|  |  |     rescue ActiveRecord::RecordNotFound
 | 
						
						
						
							|  |  |     render_404
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   ##新建竞赛
 | 
						
						
						
							|  |  |   def new_contest
 | 
						
						
						
							|  |  |     @contest = Contest.new
 | 
						
						
						
							|  |  |     @contest.safe_attributes = params[:contest]
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   
 | 
						
						
						
							|  |  |   ##提交创建的竞赛
 | 
						
						
						
							|  |  |   def create_contest
 | 
						
						
						
							|  |  |     @contest = Contest.new
 | 
						
						
						
							|  |  |     @contest.name = params[:contest][:name]
 | 
						
						
						
							|  |  |     @contest.description = params[:contest][:description]
 | 
						
						
						
							|  |  |     @contest.budget = params[:contest][:budget]
 | 
						
						
						
							|  |  |     @contest.deadline = params[:contest][:deadline]
 | 
						
						
						
							|  |  |     @contest.password = params[:contest][:password]     
 | 
						
						
						
							|  |  |     @contest.author_id = User.current.id
 | 
						
						
						
							|  |  |     @contest.commit = 0
 | 
						
						
						
							|  |  |     if @contest.save
 | 
						
						
						
							|  |  |       unless @contest.watched_by?(User.current)
 | 
						
						
						
							|  |  |         if @contest.add_watcher(User.current)
 | 
						
						
						
							|  |  |           flash[:notice] = l(:label_contesting_created_succeed)
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       redirect_to show_contest_contest_url(@contest)
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       @contest.safe_attributes = params[:contest]
 | 
						
						
						
							|  |  |       render :action => 'new_contest'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   ##更新竞赛配置信息
 | 
						
						
						
							|  |  |   def update_contest
 | 
						
						
						
							|  |  |     @contest = Contest.find(params[:id])
 | 
						
						
						
							|  |  |     @contest.name = params[:contest][:name]
 | 
						
						
						
							|  |  |     @contest.description = params[:contest][:description]
 | 
						
						
						
							|  |  |  
 | 
						
						
						
							|  |  |     @contest.budget = params[:contest][:budget]
 | 
						
						
						
							|  |  |     @contest.deadline = params[:contest][:deadline]
 | 
						
						
						
							|  |  |     @contest.password = params[:contest][:password]      
 | 
						
						
						
							|  |  |     @contest.author_id = User.current.id
 | 
						
						
						
							|  |  |     @contest.commit = 0
 | 
						
						
						
							|  |  |     if @contest.save
 | 
						
						
						
							|  |  |       unless @contest.watched_by?(User.current)
 | 
						
						
						
							|  |  |         if @contest.add_watcher(User.current)
 | 
						
						
						
							|  |  |           flash[:notice] = l(:label_contesting_updated_succeed)
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       redirect_to show_contest_contest_url(@contest)
 | 
						
						
						
							|  |  |       
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       @contest.safe_attributes = params[:contest]
 | 
						
						
						
							|  |  |       render :action => 'new_contest'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def more
 | 
						
						
						
							|  |  |     @jour = @contest.journals_for_messages
 | 
						
						
						
							|  |  |     @jour.each_with_index {|j,i| j.indice = i+1}
 | 
						
						
						
							|  |  |     @state = true
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html { redirect_to :back }
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     #format.api { render_api_ok }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def back
 | 
						
						
						
							|  |  |     @jour = @contest.journals_for_messages
 | 
						
						
						
							|  |  |     @jour.each_with_index {|j,i| j.indice = i+1}
 | 
						
						
						
							|  |  |     @state = false
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.html { redirect_to :back }
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     #format.api { render_api_ok }
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def set_reward
 | 
						
						
						
							|  |  |     @b_p = nil
 | 
						
						
						
							|  |  |     @contesting_project_id = nil
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     if params[:set_reward][:reward]&&((User.current.id==@contest.author_id)||User.current.admin)
 | 
						
						
						
							|  |  |       # @contest_id = params[:id]
 | 
						
						
						
							|  |  |       @contesting_project_id = params[:set_reward][:b_id]   #[:b_id]???
 | 
						
						
						
							|  |  |       @b_p = ContestingProject.find_by_id(@contesting_project_id)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       # 把字段存进表中
 | 
						
						
						
							|  |  |       @b_p.update_reward(params[:set_reward][:reward].to_s)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     respond_to do |format|
 | 
						
						
						
							|  |  |       format.js
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  |   def watcherlist
 | 
						
						
						
							|  |  |     render :layout => 'base_newcontest'
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   private
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def find_contest
 | 
						
						
						
							|  |  |     if params[:id]
 | 
						
						
						
							|  |  |       @contest = Contest.find(params[:id])
 | 
						
						
						
							|  |  |       @user = @contest.author
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     rescue
 | 
						
						
						
							|  |  |     render_404
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #验证是否显示竞赛
 | 
						
						
						
							|  |  |   def can_show_contest
 | 
						
						
						
							|  |  |     @first_page = FirstPage.find_by_page_type('project')
 | 
						
						
						
							|  |  |     if @first_page.show_contest == 2
 | 
						
						
						
							|  |  |       render_404
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # added by longjun
 | 
						
						
						
							|  |  |   # 将index页面中分页排序的方法抽离出来
 | 
						
						
						
							|  |  |   def index_page_sort(offset, limit, contest_count, contests, contest_sort_by)
 | 
						
						
						
							|  |  |     # modified by longjun
 | 
						
						
						
							|  |  |     # never use unless and else
 | 
						
						
						
							|  |  |     # unless @offset == 0
 | 
						
						
						
							|  |  |     if offset != 0
 | 
						
						
						
							|  |  |       contests = contests.reorder(contest_sort_by).offset(offset).limit(limit).all.reverse
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       limit = contest_count % limit
 | 
						
						
						
							|  |  |       limit = limit  if limit == 0
 | 
						
						
						
							|  |  |       contests = contests.reorder(contest_sort_by).offset(offset).limit(limit).all.reverse
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     contests
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | end
 | 
						
						
						
							|  |  | 
 |