Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-66464

LTI Tool Provider Gradebook Export to Moodle Does Not Work When "Grade to Pass" is Utilized

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Open
    • Priority: Trivial
    • Resolution: Unresolved
    • Affects Version/s: 3.5.7, 3.7
    • Fix Version/s: None
    • Component/s: LTI provider
    • Labels:
      None
    • Affected Branches:
      MOODLE_35_STABLE, MOODLE_37_STABLE

      Description

      DESCRIPTION

      As I understand, The "Grade to Pass" feature is simply designed to change the gradebook column color red or green depending on how the student did on the assignment. For some reason, when the feature is used, our gradebook export feature is not able to populate the column with data. If the moodle-activity was created without using this feature, then the export works perfectly.

      Tested on 3.5 and 3.7 (most testing done on demo.moodle.net)

      REPLICATION STEPS
      Note: Steps assume Echo360 is configured as an external tool, with outcomes enabled, already.

      1. Login to Moodle as an Instructor
      2. click into a course
      3. click on "General" from the left-hand menu
      4. Click on the gear in the upper-right corner
      5. enable editing mode
      6. click on "Add an activity or resource"
      7. Add Echo360
      8. Set Maximum grade to 100
      9. Set Grade to Pass > 0
      10. Save and Launch the activity
      11. Link the course to an Echo360 section
      12. Login as a student enrolled in that course
        1. Click on the Echo360 Activity
        2. Click to watch content
      13. As the instructor
        1. click on the Echo360 LTI link
        2. click on "Analytics"
        3. click on "Export & Gradebook"
        4. Export the link from the bottom of the page

      Expected Results: Grades are exported and added to the moodle gradebook
      Observed Results: Grades are exported but not added to the moodle gradebook

      TROUBLESHOOTING

      • Client is using version 3.5 and the issue persists up to version 3.7. Testing completed on demo.moodle.net
      • Our system shows that the gradebook export is 100% successful. For example:

      [LtiInfo] Posting result 0.0 for metric Engagement for LmsResourceUser LmsResourceUser(79372238-d725-4769-a7b0-4ca51c641053,2,1,705ef751-b92d-4c28-be14-eb9edaff82e8,Some(171062be-5d4c-4082-ac83-ce025f6fe1fc),None,4a962bac-3d91-480b-989d-6d1b2cd3be01,{"data":{"instanceid":"1","userid":"2","typeid":"1","launchid":627807156},"hash":"17cc44e6b39416bebbc47a10dc1a56ab329556b9faad6c90aa9253a74ecd9c83"},None,Some(2019-08-14T11:30:30.784Z))
      

      And the values match the LTI launch from the student so I know it's going to the right spot

      • The LTI launches all contain correct lis_result_sourcedid data for postback

      Gradebook Export DOesn't populate Column:

      { json: { environment: "prod"
       ,  hostname: "alp-us-east-prod-ess19"
       ,  appname: "prod-us-east-1-alp"
       ,  level: "INFO"
       ,  port: 42186
       ,  service: "alp"
       ,  thread_name: "application-akka.actor.default-dispatcher-103"
       ,  appid: "alp"
       ,  logger_name: "controllers.lti.Lti"
       ,  message: "Lti.lmsEndpoint(79372238-d725-4769-a7b0-4ca51c641053): AnyContentAsFormUrlEncoded(Map(oauth_version -> ArrayBuffer(1.0)
       ,  oauth_nonce -> ArrayBuffer(fc//fc63cb643029ba5de16a23f143bc32)
       ,  oauth_timestamp -> ArrayBuffer(1565782738)
       ,  oauth_consumer_key -> ArrayBuffer(14329e66-3f0f-4162-85b2-4e77e30f11f9)
       ,  user_id -> ArrayBuffer(4)
       ,  lis_person_sourcedid -> ArrayBuffer()
       ,  roles -> ArrayBuffer(Learner)
       ,  context_id -> ArrayBuffer(2)
       ,  context_label -> ArrayBuffer(My first course)
       ,  context_title -> ArrayBuffer(My first course)
       ,  resource_link_title -> ArrayBuffer(Echo360)
       ,  resource_link_description -> ArrayBuffer()
       ,  resource_link_id -> ArrayBuffer(1)
       ,  context_type -> ArrayBuffer(CourseSection)
       ,  lis_course_section_sourcedid -> ArrayBuffer()
       ,  lis_result_sourcedid -> ArrayBuffer({"data":{"instanceid":"1" , "userid":"4" , "typeid":"1" , "launchid":1551168749} , "hash":"88ea24f3cb5c1a1c627754c283d81872f2c8d5b31791e27ab4807275c2028b92"})
       ,  lis_outcome_service_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/service.php)
       ,  lis_person_name_given -> ArrayBuffer(Sam)
       ,  lis_person_name_family -> ArrayBuffer(Student)
       ,  lis_person_name_full -> ArrayBuffer(Sam Student)
       ,  ext_user_username -> ArrayBuffer(student)
       ,  lis_person_contact_email_primary -> ArrayBuffer(student@moodle.a)
       ,  launch_presentation_locale -> ArrayBuffer(en)
       ,  ext_lms -> ArrayBuffer(moodle-2)
       ,  tool_consumer_info_product_family_code -> ArrayBuffer(moodle)
       ,  tool_consumer_info_version -> ArrayBuffer(2019052001)
       ,  oauth_callback -> ArrayBuffer(about:blank)
       ,  lti_version -> ArrayBuffer(LTI-1p0)
       ,  lti_message_type -> ArrayBuffer(basic-lti-launch-request)
       ,  tool_consumer_instance_guid -> ArrayBuffer(demo.moodle.net)
       ,  tool_consumer_instance_name -> ArrayBuffer(Sandbox)
       ,  tool_consumer_instance_description -> ArrayBuffer(Moodle sandbox demo)
       ,  launch_presentation_document_target -> ArrayBuffer(iframe)
       ,  launch_presentation_return_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/return.php?course=2&launch_container=3&instanceid=1&sesskey=e5IWRwyMiL)
       ,  custom_gradebookservices_scope -> ArrayBuffer(https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly , https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly , https://purl.imsglobal.org/spec/lti-ags/scope/score , https://purl.imsglobal.org/spec/lti-ags/scope/lineitem)
       ,  custom_lineitems_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/2/lineitems?type_id=1)
       ,  custom_lineitem_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/2/lineitems/2/lineitem?type_id=1)
       ,  custom_context_memberships_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/CourseSection/2/bindings/1/memberships)
       ,  custom_context_memberships_versions -> ArrayBuffer(1.0 , 2.0)
       ,  custom_system_setting_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/tool/1/custom)
       ,  custom_context_setting_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/CourseSection/2/bindings/tool/1/custom)
       ,  custom_link_setting_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/links/1/custom)
       ,  oauth_signature_method -> ArrayBuffer(HMAC-SHA1)
       ,  oauth_signature -> ArrayBuffer(Q6vaimt+AoprDVKciz4XIUrW0do=)))"
       ,  region: "us-east-1"
       ,  timestamp: "2019-08-14T11:38:58.816Z" }
       ,  http: { clientHost: "52.2.241.115" } }
      

      Gradebook Export Works Flawlessly:

      { json: { environment: "prod"
       ,  hostname: "alp-us-east-prod-ess10"
       ,  appname: "prod-us-east-1-alp"
       ,  level: "INFO"
       ,  port: 40780
       ,  thread_name: "application-akka.actor.default-dispatcher-16771"
       ,  service: "alp"
       ,  appid: "alp"
       ,  logger_name: "controllers.lti.Lti"
       ,  message: "Lti.lmsEndpoint(79372238-d725-4769-a7b0-4ca51c641053): AnyContentAsFormUrlEncoded(Map(oauth_version -> ArrayBuffer(1.0)
       ,  oauth_nonce -> ArrayBuffer(c0ad8fb79f9ab74194c075b0326a2667)
       ,  oauth_timestamp -> ArrayBuffer(1565782974)
       ,  oauth_consumer_key -> ArrayBuffer(14329e66-3f0f-4162-85b2-4e77e30f11f9)
       ,  user_id -> ArrayBuffer(4)
       ,  lis_person_sourcedid -> ArrayBuffer()
       ,  roles -> ArrayBuffer(Learner)
       ,  context_id -> ArrayBuffer(2)
       ,  context_label -> ArrayBuffer(My first course)
       ,  context_title -> ArrayBuffer(My first course)
       ,  resource_link_title -> ArrayBuffer(echo360-no-grade-to-pass)
       ,  resource_link_description -> ArrayBuffer()
       ,  resource_link_id -> ArrayBuffer(2)
       ,  context_type -> ArrayBuffer(CourseSection)
       ,  lis_course_section_sourcedid -> ArrayBuffer()
       ,  lis_result_sourcedid -> ArrayBuffer({"data":{"instanceid":"2" , "userid":"4" , "typeid":"1" , "launchid":746290856} , "hash":"41140e0c608de7c6f5cc2629853104f70815efe75f72b4034430981351dfaebb"})
       ,  lis_outcome_service_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/service.php)
       ,  lis_person_name_given -> ArrayBuffer(Sam)
       ,  lis_person_name_family -> ArrayBuffer(Student)
       ,  lis_person_name_full -> ArrayBuffer(Sam Student)
       ,  ext_user_username -> ArrayBuffer(student)
       ,  lis_person_contact_email_primary -> ArrayBuffer(student@moodle.a)
       ,  launch_presentation_locale -> ArrayBuffer(en)
       ,  ext_lms -> ArrayBuffer(moodle-2)
       ,  tool_consumer_info_product_family_code -> ArrayBuffer(moodle)
       ,  tool_consumer_info_version -> ArrayBuffer(2019052001)
       ,  oauth_callback -> ArrayBuffer(about:blank)
       ,  lti_version -> ArrayBuffer(LTI-1p0)
       ,  lti_message_type -> ArrayBuffer(basic-lti-launch-request)
       ,  tool_consumer_instance_guid -> ArrayBuffer(demo.moodle.net)
       ,  tool_consumer_instance_name -> ArrayBuffer(Sandbox)
       ,  tool_consumer_instance_description -> ArrayBuffer(Moodle sandbox demo)
       ,  launch_presentation_document_target -> ArrayBuffer(iframe)
       ,  launch_presentation_return_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/return.php?course=2&launch_container=3&instanceid=2&sesskey=e5IWRwyMiL)
       ,  custom_gradebookservices_scope -> ArrayBuffer(https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly
       , https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly
       , https://purl.imsglobal.org/spec/lti-ags/scope/score
       , https://purl.imsglobal.org/spec/lti-ags/scope/lineitem)
       ,  custom_lineitems_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/2/lineitems?type_id=1)
       ,  custom_lineitem_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/2/lineitems/3/lineitem?type_id=1)
       ,  custom_context_memberships_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/CourseSection/2/bindings/1/memberships)
       ,  custom_context_memberships_versions -> ArrayBuffer(1.0 , 2.0)
       ,  custom_system_setting_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/tool/1/custom)
       ,  custom_context_setting_url -> ArrayBuffer/(https://demo.moodle.net/mod/lti/services.php/CourseSection/2/bindings/tool/1/custom)
       ,  custom_link_setting_url -> ArrayBuffer(https://demo.moodle.net/mod/lti/services.php/links/2/custom)
       ,  oauth_signature_method -> ArrayBuffer(HMAC-SHA1)
       ,  oauth_signature -> ArrayBuffer(gEq1r+4ewhyMcqAwtcWzASz7ttM=)))"
       ,  region: "us-east-1"
       ,  timestamp: "2019-08-14T11:42:55.109Z" }
       ,  http: { clientHost: "18.235.146.211" } }
      

      - I couldn't find any issue with the "Grade to Pass" feature on Moodle's bug site

      • Data above is from testing on demo.moodle.net. I have a lot of client-site data (moodle 3.5) but its essentially the same.
      • The student LTI launch contains valid gradebook data
      • grades exist
      • I have not found any errors in our logging to indicate an ssl exception, or similar, when sending the grades back to moodle.
      • We're following the LTI spec from https://www.imsglobal.org/specs/ltiv1p1/implementation-guide

      RELEVANT INFORMATION

      • Moodle LTI Tool allows for outcomes
        :
      • Assignment also configured for outcomes -

      RECENT CHANGES
      N/A

      ANALYSIS/RECOMMENDATION
      This doesn't appear to be a bug per say, however, it appears that we might need to do something different when the "Grade to Pass" feature is utilized within the Moodle-Activity. Something about the "Grade to Pass" feature impacts the POX we send back for the gradebook.

      Being more familiar with Moodle's expectations, is there anything that we could do differently when this setting is in-use? Instructors like to use it to help ensure their students are on track and the same users really like our export feature.

      Just trying to figure out what I'm missing so we can get this working correctly for our tool consumer

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            turbett Patrick Turbett
            Participants:
            Component watchers:
            Adrian Greeve, Jake Dallimore, Mathew May, Mihail Geshoski, Peter Dias, Sujith Haridasan
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

              Dates

              Created:
              Updated: