You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

homework_attach_controller.rb 30 kB

​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
12 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
12 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. class HomeworkAttachController < ApplicationController
  2. layout "course_base"
  3. include CoursesHelper
  4. include HomeworkAttachHelper
  5. helper :words
  6. ###############################
  7. before_filter :can_show_course,except: []
  8. #判断当前角色权限时需先找到当前操作的project
  9. before_filter :logged_user_by_apptoken,:find_course_by_bid_id, :only => [:new]
  10. 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]
  11. before_filter :find_course_by_hoemwork_id, :only => [:edit,:update,:destroy,:show,:add_homework_users,:destory_homework_users, :praise_homework]
  12. #判断当前角色是否有操作权限
  13. #勿删 before_filter :authorize, :only => [:new,:edit,:update,:destroy]
  14. #@cur_type:
  15. #1.未批作业列表
  16. #2.已批作业列表
  17. #3.全部作业列表
  18. #4.匿评作业列表
  19. #根据此字段判断关闭homework_attach的show界面后是否要调用js刷新页面
  20. #获取未批作业列表
  21. def get_not_batch_homework
  22. @not_batch_homework = true
  23. @search_name = params[:name]
  24. sort, direction = params[:sort] || "s_socre", params[:direction] || "desc"
  25. get_not_batch_homework_list sort,direction, @bid.id
  26. @cur_page = params[:page] || 1
  27. @cur_type = 1
  28. @cur_sort,@cur_direction = params[:sort] || "s_socre", params[:direction] || "desc"
  29. @direction = direction == 'asc'? 'desc' : 'asc'
  30. respond_to do |format|
  31. format.js
  32. format.xls {
  33. send_data(homework_to_xls(@all_homework_list), :type => "text/excel;charset=utf-8; header=present",
  34. :filename => filename_for_content_disposition("#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}(#{l(:excel_not_rated)}).xls") )
  35. }
  36. end
  37. end
  38. #获取已评作业列表
  39. def get_batch_homeworks
  40. @search_name = params[:name]
  41. sort, direction = params[:sort] || "s_socre", params[:direction] || "desc"
  42. @is_batch_homeworks = true
  43. if sort == 't_socre'
  44. order_by = "t_score #{direction}"
  45. elsif sort == 's_socre'
  46. order_by = "s_score #{direction}"
  47. elsif sort == 'time'
  48. order_by = "created_at #{direction}"
  49. end
  50. all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*,
  51. (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,
  52. (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
  53. FROM homework_attaches WHERE bid_id = #{@bid.id}
  54. ORDER BY #{order_by}) AS table1
  55. WHERE table1.t_score IS NOT NULL")
  56. all_homework_list = search_homework_member(all_homework_list,@search_name.to_s.downcase) if @search_name
  57. @cur_page = params[:page] || 1
  58. @cur_type = 2
  59. # @homework_list = paginateHelper all_homework_list,10
  60. @homework_list = all_homework_list
  61. @direction = direction == 'asc'? 'desc' : 'asc'
  62. respond_to do |format|
  63. format.js
  64. format.xls {
  65. send_data(homework_to_xls(all_homework_list), :type => "text/excel;charset=utf-8; header=present",
  66. :filename => filename_for_content_disposition("#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}(#{l(:excel_been_rated)}).xls") )
  67. }
  68. end
  69. end
  70. #获取所有作业列表
  71. def get_homeworks
  72. @is_all_homeworks = true
  73. @search_name = params[:name]
  74. sort, direction = params[:sort] || "s_socre", params[:direction] || "desc"
  75. if sort == 't_socre'
  76. order_by = "t_score #{direction}"
  77. elsif sort == 's_socre'
  78. order_by = "s_score #{direction}"
  79. elsif sort == 'time'
  80. order_by = "created_at #{direction}"
  81. end
  82. all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*,
  83. (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,
  84. (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
  85. FROM homework_attaches WHERE bid_id = #{@bid.id}
  86. ORDER BY #{order_by}")
  87. all_homework_list = search_homework_member(all_homework_list,@search_name.to_s.downcase) if @search_name
  88. @cur_page = params[:page] || 1
  89. @cur_type = 3
  90. # @homework_list = paginateHelper all_homework_list,10
  91. @homework_list = all_homework_list
  92. @direction = direction == 'asc'? 'desc' : 'asc'
  93. respond_to do |format|
  94. format.js
  95. format.xls {
  96. send_data(homework_to_xls(all_homework_list), :type => "text/excel;charset=utf-8; header=present",
  97. :filename => filename_for_content_disposition("#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}.xls") )
  98. }
  99. end
  100. end
  101. #获取学生匿评列表
  102. def get_student_batch_homework
  103. @is_student_batch_homework = true
  104. all_homework_list = get_student_batch_homework_list @bid,User.current
  105. @cur_page = params[:page] || 1
  106. @cur_type = 4
  107. # @homework_list = paginateHelper all_homework_list,10
  108. @homework_list = all_homework_list
  109. respond_to do |format|
  110. format.js
  111. end
  112. end
  113. #获取我的作业
  114. def get_my_homework
  115. @is_my_homework = true
  116. all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
  117. (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,
  118. (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
  119. FROM homework_attaches
  120. WHERE homework_attaches.bid_id = #{@bid.id} AND homework_attaches.user_id = #{User.current.id}")
  121. #如果我没有创建过作业,就检索我是否参与了某个作业
  122. if all_homework_list.empty?
  123. all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
  124. (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,
  125. (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
  126. FROM homework_attaches
  127. INNER JOIN homework_users ON homework_users.homework_attach_id = homework_attaches.id
  128. WHERE homework_attaches.bid_id = #{@bid.id} AND homework_users.user_id = #{User.current.id}")
  129. end
  130. @cur_page = params[:page] || 1
  131. # @homework_list = paginateHelper all_homework_list,10
  132. @homework_list = all_homework_list
  133. respond_to do |format|
  134. format.js
  135. end
  136. end
  137. #获取作业的留言列表
  138. def get_homework_jours
  139. @user = @bid.author
  140. @jours = @bid.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
  141. @jour = paginateHelper @jours,10
  142. @state = false
  143. respond_to do |format|
  144. format.js
  145. end
  146. end
  147. #为作业点赞
  148. def praise_homework
  149. pt = PraiseTread.new
  150. pt.user_id = User.current.id
  151. pt.praise_tread_object_id = @homework.id
  152. pt.praise_tread_object_type = "HomeworkAttach"
  153. pt.praise_or_tread = 1
  154. if pt.save
  155. respond_to do |format|
  156. format.js
  157. end
  158. else
  159. render_404
  160. end
  161. end
  162. #获取作业的成员
  163. def get_homework_member homework
  164. @hoemwork_users = users_for_homework(@homework)
  165. @members = members_for_homework(@homework,@hoemwork_users,params[:q])
  166. @members = paginateHelper @members,10
  167. end
  168. def index
  169. @homeworks = HomeworkAttach.all
  170. respond_to do |format|
  171. format.html # index.html.erb
  172. format.json { render json: @homeworks }
  173. end
  174. end
  175. #作业添加成员(参与人员)
  176. def add_homework_users
  177. if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first)
  178. #@homework = HomeworkAttach.find(params[:id])
  179. if params[:membership]
  180. if params[:membership][:user_ids]
  181. attrs = params[:membership].dup
  182. user_ids = attrs.delete(:user_ids)
  183. user_ids.each do |user_id|
  184. @homework.homework_users.build(:user_id => user_id)
  185. end
  186. end
  187. end
  188. @homework.save
  189. get_homework_member @homework
  190. respond_to do |format|
  191. format.js
  192. end
  193. else
  194. render_403 :message => :notice_not_authorized
  195. end
  196. end
  197. #作业删除成员(参与人员)
  198. def destory_homework_users
  199. #@homework = HomeworkAttach.find(params[:id])
  200. if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first)
  201. homework_user = @homework.homework_users.where("user_id = #{params[:user_id]}").first
  202. homework_user.destroy
  203. get_homework_member @homework
  204. @homework_list = []
  205. @is_my_homework = true
  206. respond_to do |format|
  207. format.js
  208. end
  209. else
  210. render_403 :message => :notice_not_authorized
  211. end
  212. end
  213. def create
  214. bid = Bid.find params[:bid_id]
  215. if User.current.admin? || User.current.member_of_course?(bid.courses.first) # modify by nwb
  216. if bid.homeworks.where("user_id = ?",User.current).empty?
  217. user_id = params[:user_id]
  218. bid_id = params[:bid_id]
  219. if params[:homework_attach]
  220. if params[:homework_attach][:project_id]
  221. project_id = params[:homework_attach][:project_id]
  222. else
  223. project_id = 0
  224. end
  225. else
  226. project_id = 0
  227. end
  228. sta = 0
  229. name = params[:homework_attach][:name]
  230. description = params[:homework_attach][:description]
  231. options = {
  232. :user_id => user_id,
  233. :state => sta,
  234. :name => name,
  235. :description => description,
  236. :bid_id => bid_id,
  237. :project_id => project_id
  238. }
  239. @homework = HomeworkAttach.new(options)
  240. @homework.save_attachments(params[:attachments])
  241. render_attachment_warning_if_needed(@homework)
  242. if @homework.save
  243. respond_to do |format|
  244. format.html { redirect_to course_for_bid_url @homework.bid }
  245. format.json { head :no_content }
  246. end
  247. else
  248. render_403 :message => :notice_not_authorized
  249. end
  250. else
  251. render_403 :message => :notice_has_homework
  252. end
  253. else
  254. render_403 :message => :notice_not_authorized
  255. end
  256. end
  257. def new
  258. @bid = Bid.find(params[:id])
  259. if User.current.admin? || User.current.member_of_course?(@bid.courses.first)
  260. @homework = HomeworkAttach.new
  261. respond_to do |format|
  262. format.html # new.html.erb
  263. format.json { render json: @homework }
  264. end
  265. else
  266. render_403 :message => :notice_not_authorized
  267. end
  268. end
  269. #获取作业成员的集合
  270. def get_homework_member_list
  271. @homework = HomeworkAttach.find(params[:bid_id])
  272. course = @homework.bid.courses.first
  273. if User.current.admin? || User.current.member_of_course?(course)
  274. get_homework_member @homework
  275. else
  276. raise "error"
  277. end
  278. respond_to do |format|
  279. format.js
  280. end
  281. end
  282. #获取可选成员列表
  283. #homework:作业
  284. #users:该作业所有成员
  285. #q:模糊匹配的用户的昵称
  286. def members_for_homework homework,users,q
  287. unpartin_users = homework.bid.courses.first.members.where("user_id not in (:users)", {:users => users}).joins(:user).where("users.login like '%#{q}%'")
  288. canpartin_users = []
  289. unpartin_users.each do |m|
  290. if m.user.allowed_to?(:paret_in_homework,homework.bid.courses.first)
  291. canpartin_users << m
  292. end
  293. end
  294. canpartin_users
  295. end
  296. def edit
  297. bid = @homework.bid
  298. if (bid.comment_status == 0 || bid.open_anonymous_evaluation == 0 || bid.comment_status == 2) && (User.current.admin? || User.current.member_of_course?(bid.courses.first))
  299. get_homework_member @homework
  300. else
  301. render_403 :message => :notice_not_authorized
  302. end
  303. end
  304. def update
  305. #@homework = HomeworkAttach.find(params[:id])
  306. course = @homework.bid.courses.first
  307. if User.current.admin? || User.current.member_of_course?(course)
  308. name = params[:homework_name]
  309. description = params[:homework_description]
  310. @homework.name = name
  311. @homework.description = description
  312. @homework.project_id = params[:project_id] || 0
  313. @homework.save_attachments(params[:attachments])
  314. render_attachment_warning_if_needed(@homework)
  315. if @homework.save
  316. respond_to do |format|
  317. format.html { redirect_to course_for_bid_url @homework.bid }
  318. format.json { head :no_content }
  319. end
  320. else
  321. end
  322. else
  323. render_403 :message => :notice_not_authorized
  324. end
  325. end
  326. def destroy
  327. bid = @homework.bid
  328. if (bid.comment_status == 0 || bid.open_anonymous_evaluation == 0 || bid.comment_status == 0) && (User.current.admin? || User.current == @homework.user)
  329. if @homework.destroy
  330. #respond_to do |format|
  331. # format.html { redirect_to course_for_bid_url @homework.bid }
  332. # format.json { head :no_content }
  333. #end
  334. @homework_list = []
  335. @is_my_homework = true
  336. respond_to do |format|
  337. format.js
  338. end
  339. else
  340. end
  341. else
  342. render_403
  343. end
  344. end
  345. #显示作业信息
  346. def show
  347. if User.current.admin? || User.current.member_of_course?(@course)
  348. # 作业打分列表
  349. @stars_reates = @homework.rates(:quality)
  350. #我的评分
  351. @is_teacher = is_course_teacher User.current,@course
  352. @has_evaluation = @stars_reates.where("rater_id = #{User.current.id} and is_teacher_score=#{@is_teacher ? 1 : 0}").first
  353. @m_score = @has_evaluation.nil? ? 0 : @has_evaluation.stars
  354. @teacher_stars = @stars_reates.where("is_teacher_score = 1") #老师评分列表
  355. @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表
  356. @is_anonymous_comments = @bid.comment_status == 1 && !@homework.users.include?(User.current) && @homework.user != User.current && !@is_teacher #判断是不是匿评(开启匿评,当前用户不是作业的创建者或者参与者,不是老师)
  357. jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据
  358. @jour = paginateHelper jours,5 #留言
  359. @cur_page = params[:cur_page] || 1
  360. @cur_type = params[:cur_type] || 5
  361. respond_to do |format|
  362. format.html
  363. format.js
  364. end
  365. else
  366. render_403 :message => :notice_not_authorized
  367. end
  368. end
  369. #删除留言
  370. def destroy_jour
  371. @homework = HomeworkAttach.find(params[:homework_id])
  372. @journal_destroyed = JournalsForMessage.find(params[:object_id])
  373. if @journal_destroyed.is_comprehensive_evaluation == 3 && @journal_destroyed.destroy
  374. render_403 unless User.current == @journal_destroyed.user || User.current.admin?
  375. @stars_reates = @homework.rates(:quality)
  376. @teacher_stars = @stars_reates.where("is_teacher_score = 1)") #老师评分列表
  377. @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表
  378. jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据
  379. @jour = paginateHelper jours,5 #留言
  380. else
  381. render_404
  382. end
  383. #@course=@homework.bid.courses.first
  384. #@journal_destroyed = JournalsForMessage.find(params[:object_id])
  385. #@is_comprehensive_evaluation = @journal_destroyed.is_comprehensive_evaluation
  386. #@journal_destroyed.destroy
  387. #if @is_comprehensive_evaluation == 3
  388. # @jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")
  389. # @jour = paginateHelper @jours,5
  390. #elsif @is_comprehensive_evaluation == 2
  391. # annymous_users = @homework.homework_evaluations.map { |homework_evaluation| homework_evaluation.user.id}.join(',')
  392. # unless annymous_users.nil? || annymous_users.count == ""
  393. # @anonymous_comments = @homework.journals_for_messages.where("is_comprehensive_evaluation = 2 and user_id in (#{annymous_users})").order("created_on DESC")
  394. # end
  395. #elsif @is_comprehensive_evaluation == 1
  396. # teachers = searchTeacherAndAssistant @course
  397. # @comprehensive_evaluation = []
  398. # teachers.each do|teacher|
  399. # temp = @homework.journals_for_messages.where("is_comprehensive_evaluation = 1 and user_id = #{teacher.user_id}").order("created_on DESC").first
  400. # @comprehensive_evaluation << temp if temp
  401. # end
  402. #end
  403. respond_to do |format|
  404. format.js
  405. end
  406. end
  407. #添加留言
  408. def addjours
  409. @is_teacher,@is_anonymous_comments,@m_score = params[:is_teacher]=="true",params[:is_anonymous_comments]=="true",params[:stars_value]
  410. @cur_page,@cur_type = params[:page] || 1,params[:cur_type] || 5
  411. @homework = HomeworkAttach.find(params[:homework_id])
  412. @stars_reates = @homework.rates(:quality)
  413. homework = @homework
  414. is_teacher = @is_teacher ? 1 : 0
  415. #保存评分@homework.rate(@m_score.to_i,User.current.id,:quality, (@is_teacher ? 1 : 0))
  416. @is_comprehensive_evaluation = @is_teacher ? 1 : (@is_anonymous_comments ? 2 : 3) #判断当前评论是老师评论?匿评?留言
  417. if @is_teacher || @is_anonymous_comments
  418. @m_score ||= 0
  419. rate = @homework.rates(:quality).where(:rater_id => User.current.id, :is_teacher_score => is_teacher).first
  420. if rate
  421. rate.stars = @m_score
  422. else
  423. rate = @homework.rates(:quality).new(:stars => @m_score, :rater_id => User.current.id, :is_teacher_score => is_teacher)
  424. end
  425. rate.save!
  426. if homework.is_teacher_score == 0
  427. if is_teacher == 1
  428. homework.score = @m_score
  429. homework.is_teacher_score = 1
  430. else
  431. sql = "SELECT AVG(stars) as stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = #{homework.id}"
  432. score= HomeworkAttach.find_by_sql(sql).first.stars
  433. homework.score = score
  434. end
  435. else
  436. if is_teacher == 1
  437. homework.score = @m_score
  438. homework.is_teacher_score = 1
  439. end
  440. end
  441. homework.save!
  442. end
  443. #保存评论
  444. if params[:new_form] && params[:new_form][:user_message] #有没有留言
  445. jour = @homework.journals_for_messages.where("is_comprehensive_evaluation = 1 and user_id = #{User.current.id}").order("created_on DESC").first
  446. if params[:new_form][:user_message] == ""
  447. if @is_teacher
  448. unless jour
  449. jour = @homework.addjours User.current.id, "",0,@is_comprehensive_evaluation
  450. end
  451. end
  452. else
  453. jour = @homework.addjours User.current.id, params[:new_form][:user_message],0,@is_comprehensive_evaluation
  454. end
  455. end
  456. if jour
  457. jour.save_attachments(params[:attachments])
  458. render_attachment_warning_if_needed(jour)
  459. jour.save
  460. end
  461. @teacher_stars = @stars_reates.where("is_teacher_score = 1") #老师评分列表
  462. @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表
  463. jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据
  464. @jour = paginateHelper jours,5 #留言
  465. if @cur_type == "1" #如果当前是老师未批列表,需要刷新整个作业列表界面
  466. @bid = @homework.bid
  467. get_not_batch_homework_list params[:cur_sort] || "s_socre",params[:cur_direction] || "desc",@homework.bid_id
  468. elsif @cur_type == "2" #老师已批列表
  469. @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
  470. (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,
  471. (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
  472. FROM homework_attaches WHERE id = #{@homework.id}").first
  473. elsif @cur_type == "3" #全部作业列表
  474. @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
  475. (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,
  476. (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
  477. FROM homework_attaches WHERE id = #{@homework.id}").first
  478. elsif @cur_type == "4" #匿评作业列表
  479. @is_student_batch_homework = true
  480. @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*,
  481. (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,
  482. (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,
  483. (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}) AS m_score
  484. FROM homework_attaches
  485. WHERE homework_attaches.id = #{@homework.id}").first
  486. else #其他的不用管
  487. end
  488. respond_to do |format|
  489. format.js
  490. end
  491. end
  492. #教师综评
  493. def comprehensive_evaluation_jour
  494. @homework = HomeworkAttach.find(params[:jour_id])
  495. @add_jour = @homework.addjours User.current.id, params[:new_form][:user_message],0,params[:is_comprehensive_evaluation]
  496. respond_to do |format|
  497. format.html { redirect_to homework_attach_url @homework }
  498. format.json { head :no_content }
  499. end
  500. end
  501. #获取指定作业的平均得分
  502. def score
  503. end
  504. #添加回复
  505. def add_jour_reply
  506. parent_id = params[:reference_id]
  507. author_id = User.current.id
  508. reply_user_id = params[:reference_user_id]
  509. reply_id = params[:reference_message_id] # 暂时不实现
  510. content = params[:user_notes]
  511. options = {:user_id => author_id,
  512. :m_parent_id => parent_id,
  513. :m_reply_id => reply_id,
  514. :reply_id => reply_user_id,
  515. :notes => content,
  516. :is_readed => false}
  517. @jfm = JournalsForMessage.new(options)
  518. @jfm.save
  519. respond_to do |format|
  520. format.js{
  521. @save_succ = true if @jfm.errors.empty?
  522. }
  523. end
  524. end
  525. private
  526. #根据条件过滤作业结果
  527. def search_homework_member homeworks,name
  528. select_homework = homeworks.select{ |homework|
  529. homework.user[:login].to_s.downcase.include?(name) || homework.user.user_extensions[:student_id].to_s.downcase.include?(name) || (homework.user[:lastname].to_s.downcase + homework.user[:firstname].to_s.downcase).include?(name)
  530. }
  531. select_homework
  532. end
  533. #验证是否显示课程
  534. def can_show_course
  535. @first_page = FirstPage.find_by_page_type('project')
  536. if @first_page.show_course == 2
  537. render_404
  538. end
  539. end
  540. def find_bid_and_course
  541. @bid = Bid.find(params[:bid_id])
  542. @course = @bid.courses.first
  543. rescue ActiveRecord::RecordNotFound
  544. render_404
  545. end
  546. def find_course_by_bid_id
  547. @bid = Bid.find(params[:id])
  548. @course = @bid.courses.first
  549. rescue ActiveRecord::RecordNotFound
  550. render_404
  551. end
  552. def find_course_by_hoemwork_id
  553. @homework = HomeworkAttach.find(params[:id])
  554. @bid = @homework.bid
  555. @course = @bid.courses.first
  556. rescue ActiveRecord::RecordNotFound
  557. render_404
  558. end
  559. #获取课程的老师列表
  560. def find_course_teachers course
  561. searchTeacherAndAssistant(course).map{|teacher| teacher.user_id}.join(",")
  562. end
  563. #获取作业教师评分所占比例
  564. def get_teacher_proportion bid
  565. if bid.proportion
  566. teacher_proportion = bid.proportion * 1.0 / 100
  567. else
  568. teacher_proportion = 1.0
  569. end
  570. teacher_proportion
  571. end
  572. def get_not_batch_homework_list sort,direction,bid_id
  573. if sort == 't_socre'
  574. order_by = "t_score #{direction}"
  575. elsif sort == 's_socre'
  576. order_by = "s_score #{direction}"
  577. elsif sort == 'time'
  578. order_by = "created_at #{direction}"
  579. end
  580. @all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*,
  581. (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,
  582. (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
  583. FROM homework_attaches WHERE bid_id = #{bid_id}
  584. ORDER BY #{order_by}) AS table1
  585. WHERE table1.t_score IS NULL ")
  586. @all_homework_list = search_homework_member(@all_homework_list,@search_name.to_s.downcase) if @search_name
  587. # @homework_list = paginateHelper @all_homework_list,10
  588. @homework_list = @all_homework_list
  589. end
  590. #获取指定作业的所有成员
  591. def users_for_homework homework
  592. homework.nil? ? [] : (homework.users + [homework.user])
  593. end
  594. def homework_to_csv items
  595. encoding = l(:general_csv_encoding)
  596. columns = ["student_id","user_name","login","student_num","mail","work_name","teacher_score","ni_score","commit_time"]
  597. export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
  598. # csv header fields
  599. csv << columns.collect {|c| Redmine::CodesetUtil.from_utf8(c, encoding) }
  600. # csv lines
  601. items.each do |homework|
  602. csv << [homework.user.id,Redmine::CodesetUtil.from_utf8(homework.user.lastname.to_s + homework.user.firstname.to_s, encoding),Redmine::CodesetUtil.from_utf8(homework.user.login, encoding),
  603. Redmine::CodesetUtil.from_utf8(homework.user.user_extensions.student_id, encoding),Redmine::CodesetUtil.from_utf8(homework.user.mail, encoding),Redmine::CodesetUtil.from_utf8(homework.name, encoding),
  604. Redmine::CodesetUtil.from_utf8((homework.t_score.nil? || (homework.t_score && homework.t_score.to_i == 0)) ? l(:label_without_score) : format("%.2f",homework.t_score), encoding),
  605. Redmine::CodesetUtil.from_utf8( homework.s_score.nil? ? l(:label_without_score) : format("%.2f",homework.s_score), encoding),Redmine::CodesetUtil.from_utf8(format_time(homework.created_at), encoding)]
  606. end
  607. end
  608. export
  609. end
  610. def homework_to_xls items
  611. xls_report = StringIO.new
  612. book = Spreadsheet::Workbook.new
  613. sheet1 = book.create_worksheet :name => "homework"
  614. blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
  615. sheet1.row(0).default_format = blue
  616. sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),
  617. l(:excel_t_score),l(:excel_n_score),l(:excel_commit_time)])
  618. count_row = 1
  619. items.each do |homework|
  620. sheet1[count_row,0]=homework.user.id
  621. sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s
  622. sheet1[count_row,2] = homework.user.login
  623. sheet1[count_row,3] = homework.user.user_extensions.student_id
  624. sheet1[count_row,4] = homework.user.mail
  625. sheet1[count_row,5] = homework.name
  626. sheet1[count_row,6] =(homework.t_score.nil? || (homework.t_score && homework.t_score.to_i == 0)) ? l(:label_without_score) : format("%.2f",homework.t_score)
  627. sheet1[count_row,7] = homework.s_score.nil? ? l(:label_without_score) : format("%.2f",homework.s_score)
  628. sheet1[count_row,8] = format_time(homework.created_at)
  629. count_row += 1
  630. end
  631. book.write xls_report
  632. xls_report.string
  633. end
  634. end

软件技术创新是当今国家整体创新能力的重要基础和发展引擎。近年来,大众参与的软件创新与创业活动已经成为网络时代软件开发和应用的新形态,正在快速改变着全球软件创新模式和软件产业格局。 ...