(ai_id, client, callback)
| 67 | * Internal function helper for updateScore, assumes sql-db client. |
| 68 | */ |
| 69 | var _updateScoreWithClient = function(ai_id, client, callback) { |
| 70 | |
| 71 | sqldb.queryWithClientZeroOrOneRow(client, sql.get_score, {ai_id: ai_id}, (err, result) => { |
| 72 | if (ERR(err, callback)) return; |
| 73 | if (result.rowCount == 0) { |
| 74 | return callback(null); |
| 75 | } |
| 76 | |
| 77 | var info = result.rows[0]; |
| 78 | |
| 79 | var score = info.score_perc / 100; |
| 80 | if (score > 1) { score = 1.0; } |
| 81 | if (score < 0) { score = 0.0; } |
| 82 | |
| 83 | var post_params = { |
| 84 | url: info.lis_outcome_service_url, |
| 85 | oauth: { |
| 86 | consumer_key: info.consumer_key, |
| 87 | consumer_secret: info.secret, |
| 88 | body_hash: true, |
| 89 | }, |
| 90 | body: xmlReplaceResult(info.lis_result_sourcedid, score, info.date), |
| 91 | }; |
| 92 | |
| 93 | request.post(post_params, function(err, httpResponse, body) { |
| 94 | if (ERR(err, callback)) return; |
| 95 | |
| 96 | // Inspect the XML result, log the action |
| 97 | parser.parseString(body, (err, result) => { |
| 98 | if (ERR(err, callback)) return; |
| 99 | const imsx_codeMajor = _.get(result, ['imsx_POXEnvelopeResponse', 'imsx_POXHeader', 'imsx_POXResponseHeaderInfo', 'imsx_statusInfo', 'imsx_codeMajor'], null); |
| 100 | if (imsx_codeMajor == 'success') { |
| 101 | logger.info(`ltiOutcomes.updateScore() ai_id=${ai_id} score=${score} returned ${result.imsx_POXEnvelopeResponse.imsx_POXHeader.imsx_POXResponseHeaderInfo.imsx_statusInfo.imsx_codeMajor}`); |
| 102 | } else { |
| 103 | logger.info(`ltiOutcomes.updateScore() ai_id=${ai_id} score=${score} did not return success, debugging follows:`); |
| 104 | logger.info(post_params); |
| 105 | logger.info(body); |
| 106 | } |
| 107 | callback(null); |
| 108 | }); |
| 109 | }); |
| 110 | }); |
| 111 | }; |
| 112 | |
| 113 | // Only run if called directly, for development |
| 114 | // e.g. node lib/ltiOutcomes <assessment_instance_id> |
no test coverage detected