diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index 000af2e8f..8e57f9f2b 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -491,24 +491,31 @@ class BidsController < ApplicationController if @bid.homework_type @homework = HomeworkAttach.new @is_teacher = is_course_teacher(User.current,@bid.courses.first) - #if @is_teacher - teachers = "(" - teacher_members = searchTeacherAndAssistant(@bid.courses.first) - teacher_members.each do |member| - if member == teacher_members.last - teachers += member.user_id.to_s + ")" - else - teachers += member.user_id.to_s + "," - end + teachers = "(" + teacher_members = searchTeacherAndAssistant(@bid.courses.first) + teacher_members.each do |member| + if member == teacher_members.last + teachers += member.user_id.to_s + ")" + else + teachers += member.user_id.to_s + "," end + end + if @is_teacher all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN #{teachers}) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) 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") - #else - # all_homework_list = HomeworkAttach.all - #end + else + all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM(SELECT homework_attaches.*, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN #{teachers}) AS t_score, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) AS s_score, + (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = 3123) 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}) AS table1 + WHERE table1.m_score IS NULL") + end @homework_list = paginateHelper all_homework_list,10 @jours_count = @bid.journals_for_messages.where('m_parent_id IS NULL').count diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb index db45f96e7..bb17a90b2 100644 --- a/app/controllers/homework_attach_controller.rb +++ b/app/controllers/homework_attach_controller.rb @@ -7,7 +7,7 @@ class HomeworkAttachController < ApplicationController before_filter :can_show_course,except: [] #判断当前角色权限时需先找到当前操作的project before_filter :find_course_by_bid_id, :only => [:new] - before_filter :find_bid_and_course,:only => [:get_not_batch_homework,:get_batch_homeworks,:get_homeworks,:get_homework_jours] + before_filter :find_bid_and_course,:only => [:get_not_batch_homework,:get_batch_homeworks,:get_homeworks,:get_homework_jours, :get_student_batch_homework, :get_my_homework] before_filter :find_course_by_hoemwork_id, :only => [:edit,:update,:destroy,:show,:add_homework_users,:destory_homework_users] #判断当前角色是否有操作权限 #勿删 before_filter :authorize, :only => [:new,:edit,:update,:destroy] @@ -68,6 +68,48 @@ class HomeworkAttachController < ApplicationController end end + #获取学生匿评列表 + def get_student_batch_homework + @is_student_batch_homework = true + teachers = find_course_teachers @course + all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM(SELECT homework_attaches.*, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN #{teachers}) AS t_score, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) AS s_score, + (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = 3123) 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}) AS table1 + WHERE table1.m_score IS NULL") + @homework_list = paginateHelper all_homework_list,10 + respond_to do |format| + format.js + end + end + + #获取我的作业 + def get_my_homework + @is_my_homework = true + teachers = find_course_teachers @course + all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN #{teachers}) AS t_score, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) AS s_score + FROM homework_attaches + WHERE homework_attaches.bid_id = #{@bid.id} AND homework_attaches.user_id = #{User.current.id}") + #如果我没有创建过作业,就检索我是否参与了某个作业 + if all_homework_list.empty? + all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN #{teachers}) AS t_score, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) AS s_score + FROM homework_attaches + INNER JOIN homework_users ON homework_users.homework_attach_id = homework_attaches.id + WHERE homework_attaches.bid_id = #{@bid.id} AND homework_users.user_id = #{User.current.id}") + end + @homework_list = paginateHelper all_homework_list,10 + respond_to do |format| + format.js + end + end + #获取作业的留言列表 def get_homework_jours #@user = @bid.author @@ -270,9 +312,14 @@ class HomeworkAttachController < ApplicationController def destroy if User.current.admin? || User.current == @homework.user if @homework.destroy + #respond_to do |format| + # format.html { redirect_to course_for_bid_url @homework.bid } + # format.json { head :no_content } + #end + @homework_list = [] + @is_my_homework = true respond_to do |format| - format.html { redirect_to course_for_bid_url @homework.bid } - format.json { head :no_content } + format.js end else end @@ -406,7 +453,10 @@ class HomeworkAttachController < ApplicationController def find_course_by_hoemwork_id @homework = HomeworkAttach.find(params[:id]) - @course = @homework.bid.courses[0] + @bid = @homework.bid + @course = @bid.courses.first + rescue ActiveRecord::RecordNotFound + render_404 end #获取课程的老师列表 diff --git a/app/models/bid.rb b/app/models/bid.rb index bc00a8460..88014477b 100644 --- a/app/models/bid.rb +++ b/app/models/bid.rb @@ -28,6 +28,7 @@ class Bid < ActiveRecord::Base has_many :homework_for_courses, :dependent => :destroy has_many :courses, :through => :homework_for_courses, :source => :course has_many :homeworks, :class_name => 'HomeworkAttach', :dependent => :destroy + has_many :homework_evaluations, :through => :homeworks has_many :join_in_contests, :dependent => :destroy has_many :praise_tread, as: :praise_tread_object, dependent: :destroy # has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}" diff --git a/app/models/homework_attach.rb b/app/models/homework_attach.rb index 99d540bd1..e18e254cb 100644 --- a/app/models/homework_attach.rb +++ b/app/models/homework_attach.rb @@ -10,6 +10,7 @@ class HomeworkAttach < ActiveRecord::Base has_many :users, :through => :homework_users seems_rateable :allow_update => true, :dimensions => :quality belongs_to :project + has_many :homework_evaluations, :dependent => :destroy safe_attributes "bid_id", "user_id" diff --git a/app/models/homework_evaluation.rb b/app/models/homework_evaluation.rb new file mode 100644 index 000000000..ccbd26f8c --- /dev/null +++ b/app/models/homework_evaluation.rb @@ -0,0 +1,6 @@ +class HomeworkEvaluation < ActiveRecord::Base + attr_accessible :homework_attach_id, :user_id + + belongs_to :homework_attach + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 0bb359812..bbee7f763 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -75,6 +75,7 @@ class User < Principal has_many :homework_users has_many :homework_attaches, :through => :homework_users + has_many :homework_evaluations has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)}, :after_remove => Proc.new {|user, group| group.user_removed(user)} diff --git a/app/views/bids/_bid_homework_show.html.erb b/app/views/bids/_bid_homework_show.html.erb index 5b7a638eb..7c6a9d494 100644 --- a/app/views/bids/_bid_homework_show.html.erb +++ b/app/views/bids/_bid_homework_show.html.erb @@ -5,94 +5,147 @@ <% else %> <% bids.each do |bid|%> - -
<%= link_to(image_tag(url_to_avatar(bid.author), :class => 'avatar'), user_path(bid.author), :class => "avatar") %> - - - - - - - - - - - - - - + + + +
<%= link_to(bid.author.lastname+bid.author.firstname, user_path(bid.author)) %> - <%= l(:label_user_create_project_homework) %> - <%= link_to(bid.name, course_for_bid_path(bid), :class => 'bid_path') %> - - <% if(User.current.logged? && (!Member.where('user_id = ? and course_id = ?', User.current.id, bid.courses.first.id).first.nil? && (Member.where('user_id = ? and course_id = ?', User.current.id, bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',5, 10, 7)).size >0)) %> - <%# 提交作业按钮 %> - - <% cur_user_homework = cur_user_homework_for_bid(bid) %> - <% if cur_user_homework!= nil && cur_user_homework.count == 0 %> - <%= link_to l(:label_commit_homework),new_homework_attach_path(bid) %> - <% else %> - <%= l(:lable_has_commit_homework)%> - <% end %> - <% end %> - <% if (User.current.admin?||User.current.id==bid.author_id) %> - <%= link_to( - l(:button_edit), - {:action => 'edit', :controller=>'bids', :course_id =>@course.id, :bid_id => bid.id}, - :class => 'icon icon-edit' - ) %> - <%= link_to( - l(:button_delete), - {:action => 'homework_destroy', :controller=>'bids', :course_id => bid.id}, - :method => :post, - :data => {:confirm => l(:text_are_you_sure)}, - :class => 'icon icon-del' - ) %> - <% end %> -
- <% bidding_project = bid.biding_projects.all - temp = [] - bidding_project.each do |pro| - if pro.project && pro.project.project_status - temp << pro - end - temp - end - %> - <% if bid.homework_type == 1%> - <%= l(:label_x_homework_project, :count => bid.homeworks.count) %>(<%= link_to bid.homeworks.count, course_for_bid_path(bid.id) %>) - <% else %> - <%= l(:label_x_homework_project, :count => temp.count) %>(<%= link_to temp.count, course_for_bid_path(bid.id) %>) - <% end %> - <%= l(:label_x_responses, :count => bid.commit) %>(<%= bid.commit %>) - - <% if betweentime(bid.deadline) < 0 %> - <%= l(:label_commit_limit)%> - <% else %> - <% if betweentime(bid.deadline) < 3 %> - <%= l(:label_commit_ar) %> - <% else %> - <% end %> - - - <% end %> -
<% if bid.reward_type.nil? or bid.reward_type == 1 %> <%= l(:label_bids_reward_method) %><%= l(:label_call_bonus) %> <%= l(:label_RMB_sign) %> - <%= bid.budget%> <% elsif bid.reward_type == 2 %> <%= l(:label_bids_reward_method) %><%= bid.budget%> - <% else %> - - <% end %>
- <%#= bid.description %> - <%= textilizable bid, :description %> -
+ <%= link_to(image_tag(url_to_avatar(bid.author), :class => 'avatar'), user_path(bid.author), :class => "avatar") %> + + + + + + + + + + + + + + + + <%= l(:label_create_time) %> + :  + <%=format_time bid.created_on %> + + + <%= l(:field_deadline) %> + :  + <%=bid.deadline %> + + -
+ + <%= link_to(bid.author.lastname+bid.author.firstname, user_path(bid.author)) %> + + + <%= l(:label_user_create_project_homework) %> + + + <%= link_to(bid.name, course_for_bid_path(bid), :class => 'bid_path') %> + + + <% if(User.current.logged? && (!Member.where('user_id = ? and course_id = ?', User.current.id, bid.courses.first.id).first.nil? && (Member.where('user_id = ? and course_id = ?', User.current.id, bid.courses.first.id).first.roles&Role.where('id = ? or id = ? or id =?',5, 10, 7)).size >0)) %> + <% cur_user_homework = cur_user_homework_for_bid(bid) %> + <% if cur_user_homework!= nil && cur_user_homework.count == 0 %> + <%= link_to l(:label_commit_homework),new_homework_attach_path(bid) %> + <% else %> + + <%= l(:lable_has_commit_homework)%> + + <% end %> + <% end %> + <% if (User.current.admin?||User.current.id==bid.author_id) %> + <%= link_to( + l(:button_edit), + {:action => 'edit', :controller=>'bids', :course_id =>@course.id, :bid_id => bid.id}, + :class => 'icon icon-edit' + ) %> + <%#= link_to( + l(:button_delete), + {:action => 'homework_destroy', :controller=>'bids', :course_id => bid.id}, + :method => :post, + :data => {:confirm => l(:text_are_you_sure)}, + :class => 'icon icon-del' + ) %> + <% end %> + +
+ + <% bidding_project = bid.biding_projects.all + temp = [] + bidding_project.each do |pro| + if pro.project && pro.project.project_status + temp << pro + end + temp + end + %> + <% if bid.homework_type == 1%> + <%= l(:label_x_homework_project, :count => bid.homeworks.count) %> + ( + + <%= link_to bid.homeworks.count, course_for_bid_path(bid.id) %> + ) + <% else %> + <%= l(:label_x_homework_project, :count => temp.count) %> + ( + + <%= link_to temp.count, course_for_bid_path(bid.id) %> + ) + <% end %> + + + <%= l(:label_x_responses, :count => bid.commit) %> + ( + + <%= bid.commit %> + + ) + + + <% if betweentime(bid.deadline) < 0 %> + + <%= l(:label_commit_limit)%> + + <% else %> + <% if betweentime(bid.deadline) < 3 %> + + <%= l(:label_commit_ar) %> + + <% end %> + <% end %> + +
+ <% if bid.reward_type.nil? or bid.reward_type == 1 %> + + <%= l(:label_bids_reward_method) %> + + <%= l(:label_call_bonus) %> +   + <%= l(:label_RMB_sign) %> + <%= bid.budget%> + + + <% elsif bid.reward_type == 2 %> + + <%= l(:label_bids_reward_method) %> + + <%= bid.budget%> + + + <% end %> +
+ + <%= textilizable bid, :description %> + +
- <%= l(:label_create_time) %> :  <%=format_time bid.created_on %> <%= l(:field_deadline) %> :  <%=bid.deadline %> -
- <% end %> <% end %> -<% if User.current.logged? && User.current.member_of_course?(@bid.courses.first) && cur_user_homework_for_bid(@bid).count == 0 && is_cur_course_student(@bid.courses.first) %> -
- <%= link_to l(:label_course_new_homework),new_homework_attach_path %> -   (每一个作业都可以是一个精美的作品) -
-<% end %> -
<%= render :partial => 'homework_list' %>
diff --git a/app/views/bids/_homework_list.html.erb b/app/views/bids/_homework_list.html.erb index 7fdc47d1f..db61bf93d 100644 --- a/app/views/bids/_homework_list.html.erb +++ b/app/views/bids/_homework_list.html.erb @@ -28,16 +28,16 @@ <% else %>