@@ -310,15 +310,15 @@ def is_publicly_available?
310310 end
311311 end
312312
313- def progsnap2_attempt_csv
314- denormalized = self . denormalized_attempt_data
315- main_events = progsnap2_main_events_csv ( denormalized )
316- code_states = progsnap2_code_states_csv ( denormalized )
313+ def self . progsnap2_attempt_csv ( exercise_id , course_offering_id = nil , workout_id = nil )
314+ denormalized = Exercise . denormalized_attempt_data ( exercise_id , course_offering_id , workout_id )
315+ main_events = Exercise . progsnap2_main_events_csv ( denormalized )
316+ code_states = Exercise . progsnap2_code_states_csv ( denormalized )
317317 return main_events , code_states
318318 end
319319
320- def denormalized_attempt_csv
321- denormalized_data = self . denormalized_attempt_data
320+ def self . denormalized_attempt_csv ( exercise_id )
321+ denormalized_data = Exercise . denormalized_attempt_data ( exercise_id )
322322 exercise_attributes = %w{ exercise_id exercise_name }
323323 attempt_attributes = %w{
324324 user_id
@@ -356,15 +356,23 @@ def denormalized_attempt_csv
356356 # All relationship fields are in the same table, so null values
357357 # are possible for workout_id, workout_offering_id, course_id,
358358 # course_offering_id, etc.
359- def denormalized_attempt_data ( workout_id = nil )
360- result = exercise_versions . joins { attempts . prompt_answers }
359+ def self . denormalized_attempt_data ( exercise_id , course_offering_id = nil , workout_id = nil )
360+ course_offering_filter = course_offering_id ?
361+ "AND course_offerings.id = #{ course_offering_id } " :
362+ ""
363+ workout_filter = workout_id ?
364+ "AND workouts.id = #{ workout_id } " :
365+ ""
366+
367+ result = Exercise . where ( :id , exercise_id )
368+ . joins ( exercise_versions : { attempts : :prompt_answers } )
361369 . joins ( 'LEFT JOIN workout_scores ON
362370 workout_scores.id = attempts.workout_score_id' )
363371 . joins ( 'LEFT JOIN workout_offerings ON
364372 workout_offerings.id = workout_scores.workout_offering_id' )
365- . joins ( ' LEFT JOIN workouts ON workouts.id = workout_scores.workout_id' )
366- . joins ( ' LEFT JOIN course_offerings ON
367- course_offerings.id = workout_offerings.course_offering_id' )
373+ . joins ( " LEFT JOIN workouts ON workouts.id = workout_scores.workout_id #{ workout_filter } " )
374+ . joins ( " LEFT JOIN course_offerings ON
375+ course_offerings.id = workout_offerings.course_offering_id #{ course_offering_filter } " )
368376 . joins ( 'LEFT JOIN terms ON terms.id = course_offerings.term_id' )
369377 . joins ( 'LEFT JOIN courses ON courses.id = course_offerings.course_id' )
370378 . joins ( 'LEFT JOIN coding_prompt_answers ON
@@ -389,9 +397,9 @@ def denormalized_attempt_data(workout_id = nil)
389397 courses.number as course_number,
390398 courses.name as course_name,
391399 terms.slug as term' )
392- if workout_id
393- result = result . where ( "workouts.id = #{ workout_id } " )
394- end
400+ # if workout_id
401+ # result = result.where("workouts.id = #{workout_id}")
402+ # end
395403
396404 return result
397405 end
@@ -412,7 +420,7 @@ def set_defaults
412420 self . experience ||= 10
413421 end
414422
415- def progsnap2_main_events_csv ( denormalized_data )
423+ def self . progsnap2_main_events_csv ( denormalized_data )
416424 # MainTable
417425 main_attributes = %w{
418426 SubjectID
@@ -520,7 +528,7 @@ def progsnap2_main_events_csv(denormalized_data)
520528 return data
521529 end
522530
523- def progsnap2_code_states_csv ( denormalized_data )
531+ def self . progsnap2_code_states_csv ( denormalized_data )
524532 code_state_attributes = %w{
525533 CodeStateID
526534 Code
0 commit comments