1094 lines
33 KiB
Ruby
1094 lines
33 KiB
Ruby
# fq
|
||
class BidsController < ApplicationController
|
||
#Added by young
|
||
menu_item l(:label_homework), :only => [:edit, :udpate]
|
||
menu_item :respond
|
||
menu_item :course, :only => :show_courseEx
|
||
menu_item :project, :only => [:show_project,:show_results, :new_submit_homework]
|
||
menu_item :homework_respond, :only => :homework_respond
|
||
menu_item :homework_statistics, :only => :homework_statistics
|
||
menu_item :edit, :only => :edit
|
||
|
||
before_filter :auth_login1, :only => [:show_courseEx]
|
||
|
||
before_filter :can_show_course,only: []
|
||
before_filter :can_show_contest,only: []
|
||
#Ended by young
|
||
before_filter :find_bid, :only => [:show, :show_project, :create,:destroy,:more,:back,:add,:delete,:new,:show_results,:set_reward, :add_homework, :fork, :create_fork,
|
||
:show_course, :show_courseEx,:show_bid_project, :show_bid_user, :join_in_contest, :unjoin_in_contest, :new_join,:show_participator, :settings]
|
||
# 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, ]
|
||
|
||
#before_filter :memberAccess, only: :show_project
|
||
|
||
helper :watchers
|
||
helper :attachments
|
||
include AttachmentsHelper
|
||
include ApplicationHelper
|
||
include BidsHelper
|
||
|
||
helper :projects
|
||
helper :words
|
||
helper :welcome
|
||
helper :project_score
|
||
|
||
def find_project_by_bid_id
|
||
@bid = Bid.find(params[:id])
|
||
@project = @bid.courses[0]
|
||
rescue ActiveRecord::RecordNotFound
|
||
render_404
|
||
end
|
||
|
||
def homework_ajax_modal
|
||
@bid = Bid.find_by_id(params[:id])
|
||
# find_bid
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
|
||
def index
|
||
@project_type = params[:project_type]
|
||
# Modified by nie
|
||
# @requirement_title = "4"
|
||
@offset, @limit = api_offset_and_limit({:limit => 10})
|
||
if @project_type == '1'
|
||
@bids = Bid.visible.where('reward_type = ?', 3)
|
||
# elsif
|
||
# @bids = Bid.visible.where('reward_type = ? or reward_type = ?', 4)
|
||
else
|
||
@bids = Bid.visible.where('reward_type = ?', 1)
|
||
end
|
||
|
||
@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
|
||
#added by nie
|
||
if params[:bid_sort_type].present?
|
||
case params[:bid_sort_type]
|
||
when '0'
|
||
unless @offset == 0
|
||
@bids = @bids.offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.offset(@offset).limit(limit).all.reverse
|
||
end
|
||
@s_state = 0
|
||
when '1'
|
||
unless @offset == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(limit).all.reverse
|
||
end
|
||
@s_state = 1
|
||
when '2'
|
||
unless @offset == 0
|
||
@bids = @bids.offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.offset(@offset).limit(@limit).all.reverse
|
||
end
|
||
@s_state = 0
|
||
end
|
||
else
|
||
unless @offset == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(limit).all.reverse
|
||
end
|
||
@s_state = 1
|
||
end
|
||
#end
|
||
end
|
||
#huang
|
||
def contest
|
||
|
||
# Modified by nie
|
||
# @requirement_title = "4"
|
||
@offset, @limit = api_offset_and_limit({:limit => 10})
|
||
|
||
@bids = Bid.visible.where('reward_type = ?', 2)
|
||
|
||
# elsif
|
||
# @bids = Bid.visible.where('reward_type = ? or reward_type = ?', 4)
|
||
@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
|
||
#added by nie
|
||
if params[:contest_sort_type].present?
|
||
case params[:contest_sort_type]
|
||
when '0'
|
||
unless @offset == 0
|
||
@bids = @bids.offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.offset(@offset).limit(limit).all.reverse
|
||
end
|
||
@s_state = 0
|
||
when '1'
|
||
unless @offset == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(limit).all.reverse
|
||
end
|
||
@s_state = 1
|
||
when '2'
|
||
unless @offset == 0
|
||
@bids = @bids.offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.offset(@offset).limit(@limit).all.reverse
|
||
end
|
||
@s_state = 0
|
||
end
|
||
else
|
||
unless @offset == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(@limit).all.reverse
|
||
else
|
||
limit = @bid_count % @limit
|
||
limit = @limit if limit == 0
|
||
@bids = @bids.reorder('bids.commit').offset(@offset).limit(limit).all.reverse
|
||
end
|
||
@s_state = 1
|
||
end
|
||
#end
|
||
end
|
||
|
||
def fork
|
||
@courses = []
|
||
@membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
|
||
@membership.each do |membership|
|
||
if membership.project.project_type == 1
|
||
@courses << membership.project
|
||
end
|
||
end
|
||
end
|
||
|
||
#将某个企业外包需求选为作业,目前此功能已放弃
|
||
def create_fork
|
||
@homework = Bid.new
|
||
@homework.name = params[:bid][:name]
|
||
@homework.description = params[:bid][:description]
|
||
@homework.reward_type = 3
|
||
# @bid.budget = params[:bid][:budget]
|
||
@homework.deadline = params[:bid][:deadline]
|
||
@homework.budget = 0
|
||
@homework.author_id = User.current.id
|
||
@homework.commit = 0
|
||
@homework.homework_type = 1
|
||
@homework.is_evaluation = params[:bid][:is_evaluation]
|
||
@homework.parent_id = @bid.id
|
||
@homework.save_attachments(params[:attachments] || (params[:bid] && params[:bid][:uploads]))
|
||
# @bid.
|
||
if @homework.save
|
||
HomeworkForCourse.create(:course_id => params[:course], :bid_id => @homework.id)
|
||
unless @bid.watched_by?(User.current)
|
||
if @bid.add_watcher(User.current)
|
||
flash[:notice] = l(:label_bid_succeed)
|
||
end
|
||
end
|
||
redirect_to course_for_bid_path(@homework)
|
||
else
|
||
@bid.safe_attributes = params[:bid]
|
||
@courses = []
|
||
@membership = User.current.coursememberships.all#(:conditions => Project.visible_condition(User.current))
|
||
@membership.each do |membership|
|
||
@courses << membership.course
|
||
end
|
||
render :action => 'fork'
|
||
end
|
||
end
|
||
|
||
#有两个路由链接到此方法:/bids/:id /calls/:id但是貌似这两个路由都不能访问。。方法作用有待确认
|
||
def show
|
||
@user = @bid.author
|
||
@jours = @bid.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]
|
||
@state = false
|
||
|
||
respond_to do |format|
|
||
layout_file = ''
|
||
case @bid.reward_type
|
||
when 3
|
||
html_title(l(:label_question_student))
|
||
layout_file = 'base_homework'
|
||
when 1
|
||
layout_file = 'base_bids'
|
||
else
|
||
layout_file = 'base_contest'
|
||
end
|
||
format.html {
|
||
render :layout => layout_file
|
||
}
|
||
format.api
|
||
end
|
||
end
|
||
|
||
def join_in_contest
|
||
if @bid.reward_type == 2 && params[:course_password] == @bid.password
|
||
JoinInContest.create(:user_id => User.current.id, :bid_id => @bid.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 = JoinInContest.where('bid_id = ? and user_id = ?', @bid.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 new_join
|
||
|
||
end
|
||
|
||
# added by bai 增加了参与者和竞赛设置
|
||
def show_participator
|
||
render :layout => 'base_contest'
|
||
end
|
||
|
||
#配置竞赛
|
||
def settings
|
||
if @bid.author.id == User.current.id
|
||
if @bid.reward_type == 2
|
||
@contest = Bid.find_by_reward_type(@bid.reward_type)
|
||
render :layout => 'base_contest'
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_contest_setting_authorized
|
||
end
|
||
end
|
||
#end
|
||
|
||
# 显示课程作业,但是好像已经废弃
|
||
def show_course
|
||
bids = Bid.where('parent_id = ?', @bid.id)
|
||
@courses = []
|
||
for bid in bids
|
||
@courses << bid.courses.first
|
||
end
|
||
|
||
respond_to do |format|
|
||
if @bid.reward_type == 3
|
||
format.html {
|
||
render :layout => 'base_homework'
|
||
}
|
||
elsif @bid.reward_type == 1
|
||
format.html {
|
||
render :layout => 'base_bids'
|
||
}
|
||
else
|
||
format.html {
|
||
render :layout => 'base_contest'
|
||
}
|
||
end
|
||
format.api
|
||
|
||
end
|
||
end
|
||
|
||
def show_bid_project
|
||
bids = Bid.where('parent_id = ?', @bid.id)
|
||
@projects = []
|
||
for bid in bids
|
||
@projects += bid.biding_projects
|
||
end
|
||
|
||
respond_to do |format|
|
||
if @bid.reward_type == 3
|
||
format.html {
|
||
render :layout => 'base_homework'
|
||
}
|
||
elsif @bid.reward_type == 1
|
||
format.html {
|
||
render :layout => 'base_bids'
|
||
}
|
||
else
|
||
format.html {
|
||
render :layout => 'base_contest'
|
||
}
|
||
end
|
||
format.api
|
||
|
||
end
|
||
end
|
||
|
||
def show_bid_user
|
||
bids = Bid.where('parent_id = ?', @bid.id)
|
||
@users = []
|
||
for bid in bids
|
||
for project in bid.projects
|
||
@users += project.users
|
||
end
|
||
end
|
||
|
||
respond_to do |format|
|
||
if @bid.reward_type == 3
|
||
format.html {
|
||
render :layout => 'base_homework'
|
||
}
|
||
elsif @bid.reward_type == 1
|
||
format.html {
|
||
render :layout => 'base_bids'
|
||
}
|
||
else
|
||
format.html {
|
||
render :layout => 'base_contest'
|
||
}
|
||
end
|
||
format.api
|
||
|
||
end
|
||
end
|
||
|
||
def show_project
|
||
# flash[:notice] = ""
|
||
@membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
|
||
@option = []
|
||
@membership.each do |membership|
|
||
unless(membership.project.project_type==1)
|
||
if membership.user.allowed_to?(:quote_project,membership.project)
|
||
@option << membership.project
|
||
end
|
||
end
|
||
end
|
||
|
||
# a = [1]
|
||
# @project = Project.where("id in []", a)
|
||
@user = @bid.author
|
||
@bidding_project = @bid.biding_projects.all
|
||
if params[:student_id].present?
|
||
@temp = []
|
||
@bidding_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
|
||
@bidding_project = @temp
|
||
else
|
||
#added by nie
|
||
@temp = []
|
||
@bidding_project.each do |pro|
|
||
if pro.project && pro.project.project_status
|
||
@temp << pro
|
||
end
|
||
@temp
|
||
end
|
||
if @temp.size > 0
|
||
@bidding_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade}
|
||
end
|
||
#ended
|
||
end
|
||
|
||
if @bid.homework_type == 1
|
||
@homework = HomeworkAttach.new
|
||
#@homework_list = @bid.homeworks
|
||
#增加作业按评分排序,
|
||
@homework_list = @bid.homeworks.eager_load(:rate_averages, :user, :attachments).order('seems_rateable_cached_ratings.avg DESC').order("#{HomeworkAttach.table_name}.created_at ASC")
|
||
if params[:student_id].present?
|
||
@temp = []
|
||
@homework_list.each do |pro|
|
||
if /#{params[:student_id]}/ =~ pro.user.user_extensions.student_id
|
||
@temp << pro
|
||
end
|
||
@temp
|
||
end
|
||
@homework_list = @temp
|
||
end
|
||
end
|
||
|
||
respond_to do |format|
|
||
if @bid.reward_type == 3
|
||
format.html {
|
||
render :layout => 'base_homework'
|
||
}
|
||
elsif @bid.reward_type == 1
|
||
format.html {
|
||
render :layout => 'base_bids'
|
||
}
|
||
else
|
||
format.html {
|
||
render :layout => 'base_contest'
|
||
}
|
||
end
|
||
format.api
|
||
end
|
||
end
|
||
|
||
# 显示作业课程
|
||
# add by nwb
|
||
def show_courseEx
|
||
|
||
if (User.current.logged? && (User.current.member_of_course?(@bid.courses.first) || User.current.admin?))
|
||
@membership = User.current.coursememberships.all(:conditions => Course.visible_condition(User.current))
|
||
@user = @bid.author
|
||
@bidding_project = @bid.biding_projects.all
|
||
|
||
if params[:student_id].present?
|
||
@temp = []
|
||
@bidding_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
|
||
@bidding_project = @temp
|
||
else
|
||
#added by nie
|
||
@temp = []
|
||
@bidding_project.each do |pro|
|
||
if pro.project && pro.project.project_status
|
||
@temp << pro
|
||
end
|
||
@temp
|
||
end
|
||
if @temp.size > 0
|
||
@bidding_project = @temp.sort {|a,b| b.project.project_status.grade <=> a.project.project_status.grade}
|
||
end
|
||
#ended
|
||
end
|
||
|
||
if @bid.homework_type
|
||
@homework = HomeworkAttach.new
|
||
@is_teacher = is_course_teacher(User.current,@bid.courses.first)
|
||
if @is_teacher
|
||
all_homework_list = HomeworkAttach.find_by_sql("SELECT * FROM (SELECT homework_attaches.*,
|
||
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score,
|
||
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score
|
||
FROM homework_attaches WHERE bid_id = #{@bid.id} ORDER BY s_score DESC,created_at ASC) AS table1
|
||
WHERE table1.t_score IS NULL")
|
||
@not_batch_homework = true
|
||
@cur_type = 1
|
||
else
|
||
all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
|
||
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score,
|
||
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score,
|
||
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = #{@is_teacher ? 1 : 0}) AS m_score
|
||
FROM homework_attaches
|
||
INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id
|
||
WHERE homework_attaches.bid_id = #{@bid.id} AND homework_evaluations.user_id = #{User.current.id} ORDER BY s_score DESC")
|
||
@is_student_batch_homework = true
|
||
@cur_type = 4
|
||
end
|
||
|
||
@cur_page = params[:page] || 1
|
||
@homework_list = paginateHelper all_homework_list,10
|
||
@jours_count = @bid.journals_for_messages.where('m_parent_id IS NULL').count
|
||
if params[:student_id].present?
|
||
@temp = []
|
||
@homework_list.each do |pro|
|
||
if /#{params[:student_id]}/ =~ pro.user.user_extensions.student_id
|
||
@temp << pro
|
||
end
|
||
@temp
|
||
end
|
||
@homework_list = @temp
|
||
end
|
||
end
|
||
|
||
respond_to do |format|
|
||
if @bid.reward_type == 3
|
||
format.html {
|
||
html_title(l(:label_homework_info))
|
||
render :layout => 'base_homework'
|
||
}
|
||
elsif @bid.reward_type == 1
|
||
format.html {
|
||
render :layout => 'base_bids'
|
||
}
|
||
else
|
||
format.html {
|
||
render :layout => 'base_contest'
|
||
}
|
||
end
|
||
format.api
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
##### by huang
|
||
def show_project_homework
|
||
# flash[:notice] = ""
|
||
@membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
|
||
@option = []
|
||
@membership.each do |membership|
|
||
end
|
||
# a = [1]
|
||
# @project = Project.where("id in []", a)
|
||
@user = @bid.author
|
||
@bidding_project = @bid.biding_projects
|
||
respond_to do |format|
|
||
if @bid.reward_type == 3
|
||
format.html {
|
||
render :layout => 'base_homework'
|
||
}
|
||
elsif @bid.reward_type == 1
|
||
format.html {
|
||
render :layout => 'base_bids'
|
||
}
|
||
else
|
||
format.html {
|
||
render :layout => 'base_contest'
|
||
}
|
||
end
|
||
format.api
|
||
end
|
||
end
|
||
|
||
###添加应标项目
|
||
def add
|
||
project = Project.find(params[:bid])
|
||
bid_message = params[:bid_for_save][:bid_message]
|
||
if BidingProject.where("project_id = ? and bid_id = ?", project.id, @bid.id).size == 0
|
||
if BidingProject.cerate_bidding(@bid.id, project.id, bid_message)
|
||
|
||
# added by bai type ==1 需求,type==2 竞赛, type==3 作业
|
||
if @bid.reward_type == 1
|
||
flash.now[:notice] = l(:label_bidding_succeed)
|
||
|
||
elsif @bid.reward_type == 2
|
||
flash.now[:notice] = l(:label_bidding_contest_succeed)
|
||
|
||
else @bid.reward_type == 3
|
||
flash.now[:notice] = l(:label_bidding_homework_succeed)
|
||
end
|
||
# end
|
||
|
||
end
|
||
else
|
||
if @bid.reward_type == 3
|
||
flash.now[:error] = l(:label_bidding_homework_fail)
|
||
else
|
||
flash.now[:error] = l(:label_bidding_fail)
|
||
end
|
||
end
|
||
@bidding_project = @bid.biding_projects
|
||
respond_to do |format|
|
||
# format.html { redirect_to_referer_or {render :text => 'Watcher added.', :layout => true}}
|
||
# format.html
|
||
format.html { redirect_to :back }
|
||
format.js
|
||
#format.api { render_api_ok }
|
||
end
|
||
end
|
||
|
||
#删除已提交的项目作业(不删项目)
|
||
def delete
|
||
binding_project = params[:binding_project]
|
||
if can_delete_project_homework(BidingProject.find(binding_project),User.current)
|
||
if BidingProject.delete(binding_project)
|
||
redirect_to project_for_bid_url
|
||
else
|
||
render_403;
|
||
end
|
||
end
|
||
end
|
||
## 新建留言
|
||
def create
|
||
|
||
if params[:bid_message][:message].size>0
|
||
if params[:reference_content]
|
||
message = params[:bid_message][:message] + "\n" + params[:reference_content]
|
||
else
|
||
message = params[:bid_message][:message]
|
||
@m = message
|
||
end
|
||
refer_user_id = params[:bid_message][:reference_user_id].to_i
|
||
@bid.add_jour(User.current, message, refer_user_id)
|
||
end
|
||
@user = @bid.author
|
||
@jours = @bid.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
|
||
@jour = paginateHelper @jours,10
|
||
@bid.set_commit(@feedback_count)
|
||
respond_to do |format|
|
||
format.js
|
||
#format.api { render_api_ok }
|
||
end
|
||
|
||
end
|
||
|
||
##删除留言
|
||
def destroy
|
||
@user = @bid.author
|
||
if User.current.admin? || User.current.id == @user.id
|
||
JournalsForMessage.delete_message(params[:object_id])
|
||
end
|
||
@jours = @bid.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]
|
||
|
||
@bid.set_commit(@feedback_count)
|
||
# if a_message.size > 5
|
||
# @message = a_message[-5, 5]
|
||
# else
|
||
# @message = a_message
|
||
# end
|
||
# @message_count = a_message.count
|
||
|
||
respond_to do |format|
|
||
# format.html
|
||
format.js
|
||
#format.api { render_api_ok }
|
||
end
|
||
end
|
||
|
||
#删除作业
|
||
#by xianbo
|
||
def homework_destroy
|
||
@bid_to_destroy = Bid.find params[:course_id]
|
||
(render_403; return false) unless User.current.admin?||User.current.id==@bid_to_destroy.author_id
|
||
@bid_to_destroy.destroy
|
||
respond_to do |format|
|
||
format.html { redirect_to :back }
|
||
format.js
|
||
#format.api { render_api_ok }
|
||
end
|
||
end
|
||
|
||
#end by xianbo
|
||
##引用
|
||
def new
|
||
@jour = JournalsForMessage.find(params[:journal_id]) if params[:journal_id]
|
||
if @jour
|
||
user = @jour.user
|
||
text = @jour.notes
|
||
else
|
||
user = @bid.author
|
||
text = @bid.description
|
||
end
|
||
# Replaces pre blocks with [...]
|
||
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_bid
|
||
@bid = Bid.new
|
||
@bid.safe_attributes = params[:bid]
|
||
end
|
||
|
||
#huang
|
||
def create_contest
|
||
@bid = Bid.new
|
||
@bid.name = params[:bid][:name]
|
||
@bid.description = params[:bid][:description]
|
||
@bid.reward_type = 2
|
||
@bid.budget = params[:bid][:budget]
|
||
@bid.deadline = params[:bid][:deadline]
|
||
@bid.password = params[:bid][:password] #added by bai
|
||
@bid.author_id = User.current.id
|
||
@bid.commit = 0
|
||
if @bid.save
|
||
unless @bid.watched_by?(User.current)
|
||
if @bid.add_watcher(User.current)
|
||
flash[:notice] = l(:label_bid_succeed)
|
||
end
|
||
end
|
||
redirect_to respond_url(@bid)
|
||
else
|
||
@bid.safe_attributes = params[:bid]
|
||
render :action => 'new_bid'
|
||
end
|
||
end
|
||
|
||
# added by bai
|
||
def update_contest
|
||
@bid = Bid.find(params[:id])
|
||
@bid.name = params[:bid][:name]
|
||
@bid.description = params[:bid][:description]
|
||
@bid.reward_type = 2
|
||
@bid.budget = params[:bid][:budget]
|
||
@bid.deadline = params[:bid][:deadline]
|
||
@bid.password = params[:bid][:password]
|
||
@bid.author_id = User.current.id
|
||
@bid.commit = 0
|
||
if @bid.save
|
||
unless @bid.watched_by?(User.current)
|
||
if @bid.add_watcher(User.current)
|
||
flash[:notice] = l(:label_bid_succeed)
|
||
end
|
||
end
|
||
redirect_to respond_url(@bid)
|
||
else
|
||
@bid.safe_attributes = params[:bid]
|
||
render :action => 'new_bid'
|
||
end
|
||
end
|
||
#huang
|
||
def new_contest
|
||
@bid = Bid.new
|
||
@bid.safe_attributes = params[:bid]
|
||
end
|
||
|
||
def create_bid
|
||
@bid = Bid.new
|
||
@bid.name = params[:bid][:name]
|
||
@bid.description = params[:bid][:description]
|
||
@bid.reward_type = 1
|
||
@bid.budget = params[:bid][:budget]
|
||
@bid.deadline = params[:bid][:deadline]
|
||
@bid.author_id = User.current.id
|
||
@bid.commit = 0
|
||
if @bid.save
|
||
unless @bid.watched_by?(User.current)
|
||
if @bid.add_watcher(User.current)
|
||
flash[:notice] = l(:label_bid_succeed)
|
||
end
|
||
end
|
||
redirect_to respond_url(@bid)
|
||
else
|
||
@bid.safe_attributes = params[:bid]
|
||
render :action => 'new_bid'
|
||
end
|
||
end
|
||
|
||
def create_homework
|
||
@bid = Bid.new
|
||
@bid.name = params[:bid][:name]
|
||
@bid.description = params[:bid][:description]
|
||
@bid.is_evaluation = params[:bid][:is_evaluation]
|
||
@bid.proportion = params[:bid][:proportion]
|
||
@bid.evaluation_num = params[:bid][:evaluation_num]
|
||
@bid.open_anonymous_evaluation = params[:bid][:open_anonymous_evaluation]
|
||
@bid.reward_type = 3
|
||
# @bid.budget = params[:bid][:budget]
|
||
@bid.deadline = params[:bid][:deadline]
|
||
@bid.budget = 0
|
||
@bid.author_id = User.current.id
|
||
@bid.commit = 0
|
||
@bid.homework_type = 1
|
||
@bid.save_attachments(params[:attachments] || (params[:bid] && params[:bid][:uploads]))
|
||
# @bid.
|
||
if @bid.save
|
||
HomeworkForCourse.create(:course_id => params[:course_id], :bid_id => @bid.id)
|
||
unless @bid.watched_by?(User.current)
|
||
if @bid.add_watcher(User.current)
|
||
flash[:notice] = l(:label_bid_succeed)
|
||
end
|
||
end
|
||
redirect_to course_homework_url(params[:course_id])
|
||
else
|
||
@bid.safe_attributes = params[:bid]
|
||
@homework = @bid
|
||
@course = Course.find_by_id(params[:course_id])
|
||
@course_id = @course.id
|
||
#respond_to do |format|
|
||
# format.html { redirect_to new_homework_course_path(params[:course_id]),:layout => 'base_courses'}
|
||
# format.api { render_validation_errors(@bid) }
|
||
#end
|
||
render file: 'courses/new_homework', layout: 'base_courses'
|
||
end
|
||
end
|
||
|
||
# modify by nwb\
|
||
# 编辑作业
|
||
def edit
|
||
@bid = Bid.find(params[:bid_id])
|
||
if (User.current.admin?||User.current.allowed_to?(:as_teacher,@bid.courses.first))
|
||
@course_id = params[:course_id]
|
||
respond_to do |format|
|
||
format.html {
|
||
@course = Course.find(params[:course_id])
|
||
@user= User.find(User.current.id)
|
||
render :layout => 'base_courses'
|
||
}
|
||
end
|
||
else
|
||
render_403
|
||
end
|
||
end
|
||
|
||
def update
|
||
@bid = Bid.find(params[:id])
|
||
@course = @bid.courses.first#Project.find(params[:course_id])
|
||
@bid.name = params[:bid][:name]
|
||
@bid.description = params[:bid][:description]
|
||
@bid.is_evaluation = params[:bid][:is_evaluation]
|
||
@bid.proportion = params[:bid][:proportion]
|
||
@bid.evaluation_num = params[:bid][:evaluation_num]
|
||
params[:bid][:open_anonymous_evaluation] ? @bid.open_anonymous_evaluation = 1 : @bid.open_anonymous_evaluation = 0
|
||
@bid.reward_type = 3
|
||
@bid.deadline = params[:bid][:deadline]
|
||
@bid.budget = 0
|
||
#@bid.author_id = User.current.id
|
||
@bid.commit = 0
|
||
@bid.homework_type = 1
|
||
@bid.save_attachments(params[:attachments] || (params[:bid] && params[:bid][:uploads]))
|
||
if @bid.save
|
||
flash[:notice] = l(:label_update_homework_succeed)
|
||
redirect_to course_homework_url(@course)
|
||
else
|
||
@bid.safe_attributes = params[:bid]
|
||
render :action => 'edit', :layout =>'base_courses'
|
||
end
|
||
end
|
||
|
||
def new_submit_homework
|
||
#render html to prepare create submit homework
|
||
find_bid
|
||
find_bid
|
||
render :layout => 'base_homework'
|
||
end
|
||
|
||
def add_homework
|
||
if User.current.logged? && (!Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.nil? && (Member.where('user_id = ? and project_id = ?', User.current.id, @bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',5, 10, 7)).size >0)
|
||
# homework = HomeworkAttach.create(:bid_id => @bid.id, :user_id => User.current.id)
|
||
# homework.save_attachments(params[:attachments] || (params[:bid] && params[:bid][:uploads]))
|
||
|
||
if hadcommittedhomework(User.current.id, @bid.id) == true
|
||
@homework_flag = l(:label_bidding_homework_committed)
|
||
else
|
||
@homework = HomeworkAttach.new
|
||
@homework.safe_attributes = params[:homeworkattach]
|
||
@homework.bid_id = @bid.id
|
||
@homework.user_id = User.current.id
|
||
@homework.save_attachments(params[:attachments])
|
||
|
||
render_attachment_warning_if_needed(@homework)
|
||
|
||
@homework_flag = if @homework.save
|
||
l(:label_bidding_homework_succeed)
|
||
else
|
||
l(:label_bidding_homework_failed)
|
||
end
|
||
|
||
if @homework.attachments.empty?
|
||
@homework.delete
|
||
#flash[:error] = l(:no_attachmens_allowed)
|
||
@homework_flag = l(:no_attachmens_allowed)
|
||
# else
|
||
end
|
||
end
|
||
end
|
||
|
||
@homework_list = @bid.homeworks
|
||
respond_to do |format|
|
||
format.html{
|
||
#redirect_to project_for_bid_path, notice: @homework_flag.to_s
|
||
flash[:notice] = @homework_flag.to_s
|
||
redirect_back_or_default(project_for_bid_path)
|
||
}
|
||
format.js
|
||
end
|
||
|
||
end
|
||
|
||
# 作业统计
|
||
def homework_statistics
|
||
@course = @bid.courses.first
|
||
@member = []
|
||
@course.memberships.each do |member|
|
||
unless (member.roles && Role.where('id = ? ', 3)).empty?
|
||
@member.push member
|
||
end
|
||
end
|
||
if @bid.homework_type = 1
|
||
@student = User.where("id in (select DISTINCT user_id from #{HomeworkAttach.table_name} where bid_id = ? )", @bid.id)
|
||
@homework_type = true
|
||
else
|
||
|
||
@homework_type = false
|
||
end
|
||
@user = @bid.author
|
||
render :layout => 'base_homework'
|
||
end
|
||
|
||
def homework_respond
|
||
@user = @bid.author
|
||
render :layout => 'base_homework'
|
||
end
|
||
|
||
def more
|
||
@jour = @bid.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 = @bid.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
|
||
|
||
#added by william
|
||
#used to set the bidding project reward
|
||
def set_reward
|
||
@b_p = nil
|
||
@biding_project_id = nil
|
||
|
||
if params[:set_reward][:reward]&&((User.current.id==@bid.author_id)||User.current.admin)
|
||
# @bid_id = params[:id]
|
||
@biding_project_id = params[:set_reward][:b_id]
|
||
@b_p = BidingProject.find_by_id(@biding_project_id)
|
||
|
||
# 把字段存进表中
|
||
@b_p.update_reward(params[:set_reward][:reward].to_s)
|
||
end
|
||
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
# added by william
|
||
# used to manage the bid and end the bid
|
||
def manage
|
||
|
||
end
|
||
|
||
# 启动匿评
|
||
def start_anonymous_comment
|
||
@bid = Bid.find(params[:id])
|
||
@course = @bid.courses.first
|
||
if(@bid.comment_status == 0)
|
||
homeworks = @bid.homeworks
|
||
if(homeworks && homeworks.size >= 2)
|
||
homeworks.each_with_index do |homework, index|
|
||
user = homework.user
|
||
n = @bid.evaluation_num
|
||
n = n < homeworks.size ? n : homeworks.size - 1
|
||
assigned_homeworks = get_assigned_homeworks(homeworks, n, index)
|
||
assigned_homeworks.each do |h|
|
||
@homework_evaluation = HomeworkEvaluation.new(user_id: user.id, homework_attach_id: h.id)
|
||
@homework_evaluation.save
|
||
end
|
||
end
|
||
@bid.update_column('comment_status', 1)
|
||
@statue = 1
|
||
else
|
||
@statue = 2
|
||
end
|
||
else
|
||
@statue = 3
|
||
end
|
||
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
def stop_anonymous_comment
|
||
@bid = Bid.find(params[:id])
|
||
|
||
@bid.update_column('comment_status', 2)
|
||
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
def alert_anonymous_comment
|
||
@bid = Bid.find params[:id]
|
||
@course = @bid.courses.first
|
||
if @bid.comment_status == 0
|
||
@totle_size = searchStudent(@course).size
|
||
@cur_size = @bid.homeworks.size
|
||
elsif @bid.comment_status == 1
|
||
@totle_size = 0
|
||
@bid.homeworks.map { |homework| @totle_size += homework.homework_evaluations.count}
|
||
@cur_size = 0
|
||
@bid.homeworks.map { |homework| @cur_size += homework.rates(:quality).where("seems_rateable_rates.is_teacher_score = 0").count}
|
||
end
|
||
@percent = format("%.2f",(@cur_size.to_f / ( @totle_size == 0 ? 1 : @totle_size)) * 100)
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
private
|
||
|
||
def get_assigned_homeworks(homeworks, n, index)
|
||
homeworks += homeworks
|
||
homeworks[index + 1 .. index + n]
|
||
end
|
||
|
||
def find_bid
|
||
if params[:id]
|
||
@bid = Bid.find(params[:id], :include => [{:homeworks => :user}])
|
||
@user = @bid.author
|
||
end
|
||
rescue
|
||
render_404
|
||
end
|
||
|
||
def memberAccess
|
||
# 是课程,则判断当前用户是否参加了课程
|
||
return true if current_user.admin?
|
||
#return 0 if @bid.courses.first.project_type == Project::ProjectType_project
|
||
currentUser = User.current
|
||
render_403 unless currentUser.member_of_course?(@bid.courses.first)
|
||
end
|
||
|
||
#验证是否显示课程
|
||
def can_show_course
|
||
@first_page = FirstPage.find_by_page_type('project')
|
||
if @first_page.show_course == 2
|
||
render_404
|
||
end
|
||
end
|
||
|
||
#验证是否显示竞赛
|
||
def can_show_contest
|
||
@first_page = FirstPage.find_by_page_type('project')
|
||
if @first_page.show_contest == 2
|
||
render_404
|
||
end
|
||
end
|
||
end
|
||
|