@@ -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