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_common_controller.rb 24 kB

​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
10 years ago
11 years ago
11 years ago
​
10 years ago
​
​
​
​
​
​
11 years ago
​
​
​
11 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
10 years ago
​
​
​
​
​
​
​
​
10 years ago
10 years ago
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
10 years ago
10 years ago
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
11 years ago
​
​
11 years ago
​
​
​
​
​
​
11 years ago
​
​
​
10 years ago
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
10 years ago
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
11 years ago
​
​
​
​
​
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
10 years ago
​
​
​
​
​
​
​
​
10 years ago
10 years ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
11 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. class HomeworkCommonController < ApplicationController
  2. require 'net/http'
  3. require 'json'
  4. require "base64"
  5. layout "base_courses"
  6. include StudentWorkHelper
  7. before_filter :find_course, :only => [:index,:new,:create]
  8. before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy,:start_evaluation_set,:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,:open_student_works,:set_score_open,:alert_score_open_modal]
  9. before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment,:start_evaluation_set,:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,:open_student_works]
  10. before_filter :member_of_course, :only => [:index]
  11. def index
  12. #unless params[:page]
  13. # update_homework_time(@course.homework_commons)
  14. #end
  15. search_ex = params[:search].to_s.strip.downcase
  16. search = "%#{params[:search].to_s.strip.downcase}%"
  17. @new_homework = HomeworkCommon.new
  18. @new_homework.homework_detail_manual = HomeworkDetailManual.new
  19. @new_homework.course = @course
  20. @page = params[:page] ? params[:page].to_i + 1 : 0
  21. @is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course))
  22. if @is_teacher
  23. #@homeworks = @course.homework_commons.order("created_at desc").limit(10).offset(@page * 10)
  24. #缓存之前的
  25. #@homework_commons = @course.homework_commons.where("name like '%#{search}%'").order("created_at desc")
  26. @homework_commons = CourseCache.course_homeworks_cache(@course.id)
  27. @homework_commons = @homework_commons.select{|homework|
  28. if homework[:name].match(search_ex)
  29. homework
  30. end
  31. }
  32. else
  33. #@homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at desc").limit(10).offset(@page * 10)
  34. #缓存之前的
  35. #@homework_commons = @course.homework_commons.where("name like '%#{search}%' and publish_time <= '#{Date.today}'").order("created_at desc")
  36. @homework_commons = CourseCache.course_homeworks_cache(@course.id)
  37. @homework_commons = @homework_commons.select{|homework|
  38. if homework[:name].match(search_ex) && homework[:publish_time]
  39. if homework[:publish_time].class == String
  40. homework[:publish_time] = Date.parse(homework[:publish_time])
  41. end
  42. if homework[:publish_time] <= Date.today
  43. homework
  44. else
  45. end
  46. end
  47. }
  48. end
  49. #update_homework_time @homework_commons
  50. @is_student = User.current.logged? && (User.current.admin? || (User.current.member_of_course?(@course) && !@is_teacher))
  51. @is_new = params[:is_new]
  52. @homeworks = paginateHelper @homework_commons,10
  53. #设置at已读
  54. #这10个需要取数据库
  55. homework_ids = @homeworks.map{|h|h[:id]}
  56. # @homeworks = HomeworkCommon.find(homework_ids)
  57. # @homeworks = @homeworks.sort!{|a,b| b.created_at <=> a.created_at }
  58. @homeworks = []
  59. homework_ids.each do |id|
  60. @homeworks << HomeworkCommonCache.homework_common_cache(id)
  61. end
  62. @homeworks.each do |homework|
  63. # homework.journals_for_messages.each do |j|
  64. # User.current.at_messages.unviewed('JournalsForMessage', j.id).each {|x| x.viewed!}
  65. # end
  66. homework.delay.set_jour_viewed
  67. end
  68. @left_nav_type = 3
  69. respond_to do |format|
  70. format.js
  71. format.html
  72. end
  73. end
  74. #新建作业,在个人作业列表创建作业
  75. def new
  76. render_404
  77. end
  78. #新建作业,在个人作业列表创建作业
  79. def create
  80. redirect_to user_homeworks_user_path(User.current.id)
  81. end
  82. def edit
  83. @user = User.current
  84. @hw_status = params[:hw_status].to_i
  85. @is_manage = params[:is_manage]
  86. if @hw_status != 1
  87. @left_nav_type = 3
  88. respond_to do |format|
  89. format.html{render :layout => 'base_courses'}
  90. end
  91. else
  92. respond_to do |format|
  93. format.html{render :layout => 'new_base_user'}
  94. end
  95. end
  96. end
  97. def update
  98. if params[:homework_common]
  99. if @homework.name != params[:homework_common][:name]
  100. CourseCache.update_course_homeworks_cache(@homework.course.id,@homework.id,2,{:name=>params[:homework_common][:name]})
  101. end
  102. @homework.name = params[:homework_common][:name]
  103. @homework.description = params[:homework_common][:description]
  104. if params[:homework_common][:publish_time] == ""
  105. @homework.publish_time = Date.today
  106. CourseCache.update_course_homeworks_cache(@homework.course.id,@homework.id,2,{:publish_time=>@homework.publish_time})
  107. else
  108. if @homework.publish_time != params[:homework_common][:publish_time]
  109. CourseCache.update_course_homeworks_cache(@homework.course.id,@homework.id,2,{:publish_time=>params[:homework_common][:publish_time]})
  110. end
  111. @homework.publish_time = params[:homework_common][:publish_time]
  112. end
  113. homework_detail_manual = @homework.homework_detail_manual || HomeworkDetailManual.new
  114. param_end_time = Time.parse(params[:homework_common][:end_time]).strftime("%Y-%m-%d")
  115. homework_end_time = Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d")
  116. if homework_end_time != param_end_time
  117. if homework_end_time > param_end_time
  118. @homework.student_works.where("work_status = 1").each do |st|
  119. if param_end_time < Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d")
  120. st.late_penalty = @homework.late_penalty
  121. st.work_status = 2
  122. st.save
  123. end
  124. end
  125. else
  126. @homework.student_works.where("work_status = 2").each do |st|
  127. if param_end_time >= Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d")
  128. st.late_penalty = 0
  129. st.work_status = 1
  130. st.save
  131. end
  132. end
  133. end
  134. end
  135. @homework.end_time = params[:homework_common][:end_time] || Time.now
  136. @homework.course_id = params[:course_id]
  137. if params[:homework_type] && params[:homework_type].to_i != @homework.homework_type
  138. if @homework.homework_type == 2
  139. @homework.homework_detail_programing.destroy if @homework.homework_detail_programing
  140. @homework.homework_tests.destroy_all
  141. elsif @homework.homework_type == 3
  142. @homework.homework_detail_group.destroy if @homework.homework_detail_group
  143. create_works_list @homework
  144. end
  145. if params[:homework_type].to_i == 3
  146. @homework.student_works.destroy_all
  147. end
  148. end
  149. @homework.homework_type = params[:homework_type].to_i || @homework.homework_type
  150. anonymous = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1
  151. if anonymous != @homework.anonymous_comment
  152. if anonymous == 1
  153. homework_detail_manual.ta_proportion = @homework.homework_type == 2 ? 0.4 : 1.0
  154. else
  155. homework_detail_manual.ta_proportion = @homework.homework_type == 2 ? 0.3 : 0.6
  156. end
  157. end
  158. status = false
  159. if @homework.publish_time <= Date.today && homework_detail_manual.comment_status == 0
  160. homework_detail_manual.comment_status = 1
  161. status = true
  162. end
  163. eval_start = homework_detail_manual.evaluation_start
  164. if eval_start.nil? || (eval_start <= @homework.end_time && homework_detail_manual.comment_status <= 1)
  165. homework_detail_manual.evaluation_start = @homework.end_time + 7
  166. homework_detail_manual.evaluation_end = homework_detail_manual.evaluation_start + 7
  167. end
  168. @homework.save_attachments(params[:attachments])
  169. render_attachment_warning_if_needed(@homework)
  170. #编程作业相关属性
  171. if @homework.homework_type == 2
  172. @homework.homework_detail_programing ||= HomeworkDetailPrograming.new
  173. @homework_detail_programing = @homework.homework_detail_programing
  174. @homework_detail_programing.language = params[:language_type].to_i if params[:language_type]
  175. if anonymous != @homework.anonymous_comment
  176. if anonymous == 1
  177. @homework_detail_programing.ta_proportion = 0.6
  178. else
  179. @homework_detail_programing.ta_proportion = 0.5
  180. end
  181. end
  182. @homework.homework_tests.delete_all if params[:program]
  183. inputs = params[:program][:input] if params[:program]
  184. if Array === inputs
  185. inputs.each_with_index do |val, i|
  186. @homework.homework_tests << HomeworkTest.new(
  187. input: val,
  188. output: params[:program][:output][i]
  189. )
  190. end
  191. end
  192. end
  193. #分组作业
  194. if @homework.homework_type == 3
  195. @homework.homework_detail_group ||= HomeworkDetailGroup.new
  196. @homework_detail_group = @homework.homework_detail_group
  197. @homework_detail_group.min_num = params[:min_num].to_i if params[:min_num]
  198. @homework_detail_group.max_num = params[:max_num].to_i if params[:max_num]
  199. @homework_detail_group.base_on_project = params[:base_on_project] ? 1 : 0
  200. end
  201. @homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1
  202. if @homework.save
  203. homework_detail_manual.save if homework_detail_manual
  204. @homework_detail_programing.save if @homework_detail_programing
  205. @homework_detail_group.save if @homework_detail_group
  206. if @homework.homework_type != 3 && homework_detail_manual.comment_status == 1 && status
  207. create_works_list @homework
  208. end
  209. @hw_status = params[:hw_status].to_i
  210. if params[:is_manage] == "1"
  211. redirect_to manage_or_receive_homeworks_user_path(User.current.id)
  212. elsif params[:is_manage] == "2"
  213. redirect_to my_homeworks_user_path(User.current.id)
  214. elsif @hw_status == 1
  215. redirect_to user_path(User.current.id)
  216. elsif @hw_status == 2
  217. redirect_to course_path(@course.id)
  218. elsif @hw_status == 5
  219. redirect_to student_work_index_url(:homework => @homework.id)
  220. else
  221. redirect_to homework_common_index_path(:course => @course.id)
  222. end
  223. end
  224. end
  225. end
  226. def destroy
  227. if @homework.destroy
  228. respond_to do |format|
  229. format.html {
  230. @hw_status = params[:hw_status].to_i
  231. if @hw_status == 1
  232. redirect_to user_path(User.current.id)
  233. elsif @hw_status == 2
  234. redirect_to course_path(@course.id)
  235. else
  236. redirect_to homework_common_index_path(:course => @course.id)
  237. end
  238. }
  239. end
  240. end
  241. end
  242. # 成绩公开范围弹框
  243. def alert_score_open_modal
  244. if params[:user_activity_id]
  245. @user_activity_id = params[:user_activity_id]
  246. else
  247. @user_activity_id = -1
  248. end
  249. @hw_status = params[:hw_status].to_i
  250. end
  251. def set_score_open
  252. @homework.update_attribute('score_open', params[:score_open].to_i)
  253. @user_activity_id = params[:user_activity_id].to_i
  254. @hw_status = params[:hw_status].to_i
  255. @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course)
  256. end
  257. #开启匿评
  258. #statue 1:启动成功,2:启动失败,作业总数大于等于2份时才能启动匿评,3:已开启匿评,请务重复开启,4:没有开启匿评的权限
  259. def start_anonymous_comment
  260. @statue = 4 and return unless User.current.admin? || User.current.allowed_to?(:as_teacher,@course)
  261. @statue = 5 and return if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
  262. if @homework_detail_manual.comment_status == 1
  263. student_works = @homework.student_works.has_committed
  264. if student_works && student_works.size >= 2
  265. if @homework.homework_type == 3
  266. student_work_projects = @homework.student_work_projects.where("student_work_id is not null")
  267. student_work_projects.each_with_index do |pro_work, pro_index|
  268. n = @homework_detail_manual.evaluation_num
  269. n = (n < student_works.size && n != -1) ? n : student_works.size - 1
  270. work_index = -1
  271. student_works.each_with_index do |stu_work, stu_index|
  272. if stu_work.id.to_i == pro_work.student_work_id.to_i
  273. work_index = stu_index
  274. end
  275. end
  276. assigned_homeworks = get_assigned_homeworks(student_works, n, work_index)
  277. assigned_homeworks.each do |h|
  278. student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: pro_work.user_id, student_work_id: h.id)
  279. student_works_evaluation_distributions.save
  280. end
  281. end
  282. else
  283. student_works.each_with_index do |work, index|
  284. user = work.user
  285. n = @homework_detail_manual.evaluation_num
  286. n = (n < student_works.size && n != -1) ? n : student_works.size - 1
  287. assigned_homeworks = get_assigned_homeworks(student_works, n, index)
  288. assigned_homeworks.each do |h|
  289. student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
  290. student_works_evaluation_distributions.save
  291. end
  292. end
  293. end
  294. @homework_detail_manual.update_column('comment_status', 2)
  295. @homework_detail_manual.update_column('evaluation_start', Date.today)
  296. @statue = 1
  297. # 匿评开启消息邮件通知
  298. send_message_anonymous_comment(@homework, m_status = 2)
  299. Mailer.send_mail_anonymous_comment_open(@homework).deliver
  300. else
  301. @statue = 2
  302. end
  303. else
  304. @statue = 3
  305. end
  306. @user_activity_id = params[:user_activity_id].to_i
  307. @hw_status = params[:hw_status].to_i
  308. @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course)
  309. end
  310. #关闭匿评
  311. def stop_anonymous_comment
  312. @homework_detail_manual.update_column('comment_status', 3)
  313. @homework_detail_manual.update_column('evaluation_end', Date.today)
  314. # 计算缺评扣分
  315. work_ids = "(" + @homework.student_works.has_committed.map(&:id).join(",") + ")"
  316. # 参与匿评的缺评计算
  317. @homework.student_works.where("work_status != 0").each do |student_work|
  318. absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids} and reviewer_role = 3").count
  319. student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual.absence_penalty : 0
  320. student_work.save
  321. end
  322. # 未参与匿评的缺评计算
  323. if @homework_detail_manual.no_anon_penalty == 0
  324. all_dis_eva = StudentWorksEvaluationDistribution.where("student_work_id IN #{work_ids}")
  325. has_sw_count = all_dis_eva.select("distinct user_id").count
  326. anon_count = all_dis_eva.count / has_sw_count
  327. @homework.student_works.where("work_status != 0").each do |student_work|
  328. if student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count == 0
  329. student_work.absence_penalty = @homework_detail_manual.absence_penalty * anon_count
  330. student_work.save
  331. end
  332. end
  333. end
  334. # 匿评关闭消息邮件通知
  335. send_message_anonymous_comment(@homework, m_status = 3)
  336. Mailer.send_mail_anonymous_comment_close(@homework).deliver
  337. @user_activity_id = params[:user_activity_id].to_i
  338. @hw_status = params[:hw_status].to_i
  339. @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course)
  340. respond_to do |format|
  341. format.js
  342. end
  343. end
  344. # 开启/关闭匿评消息通知
  345. def send_message_anonymous_comment(homework, m_status )
  346. # status 标记匿评状态 1为关闭 0为开启
  347. course = homework.course
  348. course.members.each do |m|
  349. @homework.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => m_status)
  350. end
  351. end
  352. #提示
  353. def alert_anonymous_comment
  354. @cur_size = 0
  355. @totle_size = 0
  356. @work_size = 0
  357. if @homework_detail_manual.comment_status == 1
  358. @totle_size = @course.student.count
  359. @cur_size = @homework.student_works.where("work_status != 0").size
  360. @work_size = @homework.student_works.has_committed.size
  361. elsif @homework_detail_manual.comment_status == 2
  362. @homework.student_works.has_committed.map { |work| @totle_size += work.student_works_evaluation_distributions.count}
  363. @cur_size = 0
  364. @homework.student_works.has_committed.map { |work| @cur_size += work.student_works_scores.select("distinct user_id").where(:reviewer_role => 3).count}
  365. end
  366. @percent = format("%.2f",(@cur_size.to_f / ( @totle_size == 0 ? 1 : @totle_size)) * 100)
  367. @user_activity_id = params[:user_activity_id].to_i
  368. @hw_status = params[:hw_status].to_i
  369. respond_to do |format|
  370. format.js
  371. end
  372. end
  373. def alert_forbidden_anonymous_comment
  374. if params[:user_activity_id]
  375. @user_activity_id = params[:user_activity_id]
  376. else
  377. @user_activity_id = -1
  378. end
  379. @hw_status = params[:hw_status].to_i
  380. respond_to do |format|
  381. format.js
  382. end
  383. end
  384. def open_student_works
  385. if @homework.is_open == 0
  386. @homework.update_column('is_open', 1)
  387. else
  388. @homework.update_column('is_open', 0)
  389. end
  390. @user_activity_id = params[:user_activity_id]
  391. @hw_status = params[:hw_status].to_i
  392. @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher,@course)
  393. end
  394. def alert_open_student_works
  395. if params[:user_activity_id]
  396. @user_activity_id = params[:user_activity_id]
  397. else
  398. @user_activity_id = -1
  399. end
  400. @hw_status = params[:hw_status].to_i
  401. respond_to do |format|
  402. format.js
  403. end
  404. end
  405. def programing_test
  406. test = {language:params[:language],src:Base64.encode64(params[:src]),input:[params[:input]],output:[params[:output]]}
  407. @index = params[:index]
  408. uri = URI('http://192.168.80.21:8080/api/realtime.json')
  409. body = test.to_json
  410. res = Net::HTTP.new(uri.host, uri.port).start do |client|
  411. request = Net::HTTP::Post.new(uri.path)
  412. request.body = body
  413. request["Content-Type"] = "application/json"
  414. client.request(request)
  415. end
  416. result = JSON.parse(res.body)
  417. @err_msg = result["compile_error_msg"]
  418. result["results"].each do |re|
  419. @result = re["status"]
  420. end
  421. end
  422. #启动匿评参数设置
  423. def start_evaluation_set
  424. if params[:user_activity_id]
  425. @user_activity_id = params[:user_activity_id]
  426. else
  427. @user_activity_id = -1
  428. end
  429. @hw_status = params[:hw_status].to_i
  430. end
  431. #设置匿评参数
  432. def set_evaluation_attr
  433. if @homework_detail_manual
  434. unless params[:evaluation_start].to_s == @homework_detail_manual.evaluation_start.to_s
  435. @homework_detail_manual.evaluation_start = params[:evaluation_start]
  436. end
  437. unless @homework_detail_manual.evaluation_end.to_s == params[:evaluation_end].to_s
  438. @homework_detail_manual.evaluation_end = params[:evaluation_end]
  439. end
  440. evaluation_num = @homework_detail_manual.evaluation_num
  441. if params[:evaluation_limit].to_i == 1
  442. @homework_detail_manual.evaluation_num = params[:evaluation_num]
  443. @homework_detail_manual.absence_penalty = evaluation_num == -1 ? 5 : @homework_detail_manual.absence_penalty
  444. else
  445. @homework_detail_manual.evaluation_num = -1
  446. @homework_detail_manual.absence_penalty = 0
  447. end
  448. @homework_detail_manual.save
  449. @user_activity_id = params[:user_activity_id].to_i
  450. @hw_status = params[:hw_status].to_i
  451. @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher,@course)
  452. end
  453. end
  454. #评分设置
  455. def score_rule_set
  456. if params[:user_activity_id]
  457. @user_activity_id = params[:user_activity_id]
  458. else
  459. @user_activity_id = -1
  460. end
  461. @hw_status = params[:hw_status].to_i
  462. end
  463. private
  464. #获取课程
  465. def find_course
  466. @course = Course.find params[:course]
  467. rescue
  468. render_404
  469. end
  470. #获取作业
  471. def find_homework
  472. @homework = HomeworkCommon.find params[:id]
  473. @homework_detail_manual = @homework.homework_detail_manual
  474. @homework_detail_programing = @homework.homework_detail_programing
  475. @homework_detail_group = @homework.homework_detail_group
  476. @course = @homework.course
  477. rescue
  478. render_404
  479. end
  480. #是不是课程的老师
  481. def teacher_of_course
  482. render_403 unless User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
  483. end
  484. #当前用户是不是课程的成员
  485. def member_of_course
  486. render_403 unless @course.is_public==1 || User.current.member_of_course?(@course) || User.current.admin?
  487. end
  488. def get_assigned_homeworks(student_works, n, index)
  489. student_works += student_works
  490. student_works[index + 1 .. index + n]
  491. end
  492. def update_homework_time homeworks
  493. unless homeworks.nil?
  494. homeworks.each do |h|
  495. if h.homework_type == 3 && h.homework_detail_group.base_on_project == 1
  496. student_works = h.student_work_projects.where("is_leader = 1 && project_id != -1")
  497. time = h.updated_at
  498. unless student_works.nil?
  499. student_works.each do |s|
  500. project = Project.find s.project_id
  501. unless project.nil? && project.gpid.nil?
  502. project_time=project.updated_on
  503. project_time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last
  504. if time.strftime('%Y-%m-%d %H:%M:%S') < project_time.strftime('%Y-%m-%d %H:%M:%S')
  505. time = project_time
  506. end
  507. begin
  508. # gitlab端获取默认分支
  509. g = Gitlab.client
  510. default_branch = g.project(project.gpid).default_branch
  511. changesets = g.commits(project.gpid, :ref_name => default_branch)
  512. changesets_latest_coimmit = changesets[0]
  513. unless changesets[0].blank?
  514. if time.strftime('%Y-%m-%d %H:%M:%S') <changesets_latest_coimmit.created_at.strftime('%Y-%m-%d %H:%M:%S')
  515. time = changesets_latest_coimmit.created_at
  516. end
  517. end
  518. rescue
  519. end
  520. end
  521. end
  522. end
  523. s_time = time
  524. if time.strftime('%Y-%m-%d %H:%M:%S') > h.updated_at.strftime('%Y-%m-%d %H:%M:%S')
  525. h.update_column('updated_at', s_time)
  526. course_activity = CourseActivity.where("course_act_type=? and course_act_id =?", 'HomeworkCommon', h.id).first
  527. if course_activity && (time.strftime('%Y-%m-%d %H:%M:%S') > course_activity.updated_at.strftime('%Y-%m-%d %H:%M:%S'))
  528. course_activity.update_column('updated_at', s_time)
  529. end
  530. user_activity = UserActivity.where("act_type=? and act_id =?", 'HomeworkCommon', h.id).first
  531. if user_activity && (time.strftime('%Y-%m-%d %H:%M:%S') > user_activity.updated_at.strftime('%Y-%m-%d %H:%M:%S'))
  532. user_activity.update_column('updated_at', s_time)
  533. end
  534. org_activity = OrgActivity.where("org_act_type=? and org_act_id =?", 'HomeworkCommon', h.id).first
  535. if org_activity && (time.strftime('%Y-%m-%d %H:%M:%S') > org_activity.updated_at.strftime('%Y-%m-%d %H:%M:%S'))
  536. org_activity.update_column('updated_at', s_time)
  537. end
  538. end
  539. end
  540. end
  541. end
  542. end
  543. end

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