@@ -37,35 +37,36 @@ def eligible_students
3737
3838 course = Course . find_by! ( name : "#{ params [ :organization_slug ] } -#{ params [ :course_name ] } " )
3939
40- authorize! :read , course
40+ authorize! :teach , course
4141
42- applied_students = UserAppDatum . where ( field_name : 'applies_for_study_right' , value : 't' , namespace : 'ohjelmoinnin-mooc-2019' ) . each { | datum | datum . user_id }
42+ applied_students = UserAppDatum . where ( field_name : 'applies_for_study_right' , value : 't' , namespace : 'ohjelmoinnin-mooc-2019' ) . pluck ( : user_id)
4343
44- authorize! :read , applied_students
44+ groups = course . exercise_groups [ 0 .. 6 ] + course . exercise_groups [ 8 .. 13 ]
4545
46- eligible_student_ids = [ ]
46+ cbu = course . exercise_group_completion_by_user
4747
48- applied_students . map do |user |
49- drop = false
50- course . exercise_group_completion_counts_for_user ( user ) . map do |group , info |
51- if info [ :progress ] < 0.9
52- drop = true
53- end
54- end
55- eligible_student_ids . push ( user ) unless drop
56- end
48+ user_ids = groups . flat_map { |group | ap = cbu [ group . name ] [ :available_points ] ; cbu [ group . name ] [ :points_by_user ] . map { |k , v | { k => ( v . to_f / ap ) } } } . group_by { |o | o . keys . first } . map { |k , v | { k => v . map { |o2 | o2 [ k ] } } } . inject ( :merge ) . select { |_k , v | v . length == groups . length } . select { |_k , v | v . all? { |o2 | o2 >= 0.8995 } } . map { |k , _v | k }
5749
58- eligible_students = [ ]
59-
60- eligible_student_ids . map do |user_id |
61- u = User . find ( user_id )
62- info = {
50+ eligble_ids = ( user_ids & applied_students )
51+ eligible_students = User . where ( id : eligble_ids ) . map do |u |
52+ d = {
6353 id : u . id ,
6454 username : u . login ,
6555 email : u . email ,
6656 administrator : u . administrator
6757 }
68- eligible_students . push ( info )
58+ if user_id_to_extra_fields
59+ extra_fields = user_id_to_extra_fields [ u . id ] || [ ]
60+ d [ :extra_fields ] = extra_fields . map { |o | [ o . field_name , o . value ] } . to_h
61+ end
62+ if params [ :user_fields ]
63+ user_fields = u . user_field_values . map { |o | [ o . field_name , o . value ] } . to_h
64+ d [ :user_fields ] = user_fields
65+ d [ :student_number ] = user_fields [ 'organizational_id' ]
66+ d [ :first_name ] = user_fields [ 'first_name' ]
67+ d [ :last_name ] = user_fields [ 'last_name' ]
68+ end
69+ d
6970 end
7071
7172 render json : {
0 commit comments