Skip to content

Commit b62c292

Browse files
authored
Merge pull request #215 from OpenDSA/master
2 parents f1abcbd + c3a17e8 commit b62c292

File tree

2 files changed

+53
-29
lines changed

2 files changed

+53
-29
lines changed

app/models/odsa_module_progress.rb

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,30 +50,31 @@ def required_fields
5050
#~ Class methods ............................................................
5151

5252
def self.get_progress(user_id, inst_chapter_module_id, inst_book_id, lis_outcome_service_url = nil, lis_result_sourcedid = nil, lms_access_id = nil)
53-
module_progress = OdsaModuleProgress.find_or_create_by(user_id: user_id, inst_chapter_module_id: inst_chapter_module_id) do |mp|
54-
mp.inst_book_id = inst_book_id
55-
end
56-
if lis_outcome_service_url.present?
53+
module_progress = OdsaModuleProgress.find_or_initialize_by(user_id: user_id, inst_chapter_module_id: inst_chapter_module_id)
54+
if module_progress.new_record?
55+
module_progress.inst_book_id = inst_book_id
5756
module_progress.lis_outcome_service_url = lis_outcome_service_url
5857
module_progress.lis_result_sourcedid = lis_result_sourcedid
5958
module_progress.lms_access_id = lms_access_id
60-
save_result = module_progress.save!
59+
module_progress.save!
60+
elsif lis_outcome_service_url.present? && module_progress.lis_outcome_service_url != lis_outcome_service_url
61+
module_progress.lis_outcome_service_url = lis_outcome_service_url
62+
module_progress.lis_result_sourcedid = lis_result_sourcedid
63+
module_progress.lms_access_id = lms_access_id
64+
module_progress.save!
6165
end
6266

6367
module_progress
6468
end
6569

6670
def self.get_standalone_progress(user_id, inst_module_version_id, lis_outcome_service_url = nil, lis_result_sourcedid = nil, lms_access_id = nil)
67-
module_progress = OdsaModuleProgress.find_or_create_by(user_id: user_id, inst_module_version_id: inst_module_version_id)
68-
if module_progress == nil
69-
module_progress = OdsaModuleProgress.new(user_id: user_id, inst_module_version_id: inst_module_version_id)
70-
unless lis_outcome_service_url == nil or lis_result_sourcedid == nil
71-
module_progress.lis_outcome_service_url = lis_outcome_service_url
72-
module_progress.lis_result_sourcedid = lis_result_sourcedid
73-
module_progress.lms_access_id = lms_access_id
74-
end
71+
module_progress = OdsaModuleProgress.find_or_initialize_by(user_id: user_id, inst_module_version_id: inst_module_version_id)
72+
if module_progress.new_record?
73+
module_progress.lis_outcome_service_url = lis_outcome_service_url
74+
module_progress.lis_result_sourcedid = lis_result_sourcedid
75+
module_progress.lms_access_id = lms_access_id
7576
module_progress.save!
76-
elsif (lis_outcome_service_url != nil and module_progress.lis_outcome_service_url == nil) or (lis_result_sourcedid != nil and module_progress.lis_result_sourcedid == nil) or (lms_access_id != nil and module_progress.lms_access_id == nil)
77+
elsif lis_outcome_service_url.present? && module_progress.lis_outcome_service_url != lis_outcome_service_url
7778
module_progress.lis_outcome_service_url = lis_outcome_service_url
7879
module_progress.lis_result_sourcedid = lis_result_sourcedid
7980
module_progress.lms_access_id = lms_access_id
@@ -84,7 +85,6 @@ def self.get_standalone_progress(user_id, inst_module_version_id, lis_outcome_se
8485

8586
#~ Instance methods .........................................................
8687
def update_proficiency(inst_exercise, force_send = false)
87-
Rails.logger.info("--- ODSA_MODULE_PROGRESS: update_proficiency called for user #{self.user_id} ---")
8888
if self.inst_module_version_id
8989
# standalone module
9090
return update_standalone_proficiency(inst_exercise)
@@ -104,13 +104,14 @@ def update_proficiency(inst_exercise, force_send = false)
104104
# Comparing two floats.
105105
# Only send score to LMS if the score has increased, or previous
106106
# passback was not performed or unsuccessful
107-
if force_send or
108-
self.last_passback.nil? or
109-
(self.inst_book && self.inst_book.last_compiled.nil?) or
110-
(self.last_passback && self.inst_book && self.inst_book.last_compiled && (self.last_passback < self.inst_book.last_compiled)) or
111-
self.highest_score > old_score
112-
res = post_score_to_lms()
113-
end
107+
# if force_send or
108+
# self.last_passback.nil? or
109+
# (self.inst_book && self.inst_book.last_compiled.nil?) or
110+
# (self.last_passback && self.inst_book && self.inst_book.last_compiled && (self.last_passback < self.inst_book.last_compiled)) or
111+
# self.highest_score > old_score
112+
# res = post_score_to_lms()
113+
# end
114+
res = post_score_to_lms()
114115
self.save!
115116

116117
last_exercise = false

lib/lti/outcomes.rb

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,37 @@ def self.post_score_to_consumer(score, lis_outcome_service_url, lis_result_sourc
88

99
tp = IMS::LTI::ToolProvider.new(consumer_key, consumer_secret, lti_param)
1010
tp.extend IMS::LTI::Extensions::OutcomeData::ToolProvider
11-
res = tp.post_extended_replace_result!(score: score)
12-
unless res.success?
13-
error = Error.new(:class_name => 'post_replace_result_fail',
14-
:message => res.inspect,
15-
:params => self.as_json.to_json)
11+
score_res = tp.post_read_result!
12+
if score_res.success?
13+
current_score = score_res.score
14+
Rails.logger.info("LTI score read response: #{score_res.inspect}")
15+
Rails.logger.info("LTI current score: #{current_score}, new score: #{score}")
16+
if current_score.nil? || score > current_score.to_f
17+
res = tp.post_extended_replace_result!(score: score)
18+
unless res.success?
19+
error = Error.new(:class_name => 'post_replace_result_fail',
20+
:message => res.inspect,
21+
:params => {
22+
score: score,
23+
lis_outcome_service_url: lis_outcome_service_url,
24+
lis_result_sourcedid: lis_result_sourcedid
25+
}.to_json)
26+
error.save!
27+
end
28+
return res
29+
else
30+
return score_res
31+
end
32+
else
33+
error = Error.new(:class_name => 'post_read_result_fail',
34+
:message => score_res.inspect,
35+
:params => {
36+
score: score,
37+
lis_outcome_service_url: lis_outcome_service_url,
38+
lis_result_sourcedid: lis_result_sourcedid
39+
}.to_json)
1640
error.save!
41+
return score_res
1742
end
18-
return res
1943
end
20-
2144
end

0 commit comments

Comments
 (0)