Example #1
0
     lti_verify_sourcedid($ltiinstance, $parsed);
     $grade = lti_read_grade($ltiinstance, $parsed->userid);
     $responsexml = lti_get_response_xml('success', 'Result read', $parsed->messageid, 'readResultResponse');
     $node = $responsexml->imsx_POXBody->readResultResponse;
     $node = $node->addChild('result')->addChild('resultScore');
     $node->addChild('language', 'en');
     $node->addChild('textString', isset($grade) ? $grade : '');
     echo $responsexml->asXML();
     break;
 case 'deleteResultRequest':
     $parsed = lti_parse_grade_delete_message($xml);
     $ltiinstance = $DB->get_record('lti', array('id' => $parsed->instanceid));
     if (!lti_accepts_grades($ltiinstance)) {
         throw new Exception('Tool does not accept grades');
     }
     lti_verify_sourcedid($ltiinstance, $parsed);
     lti_set_session_user($parsed->userid);
     $gradestatus = lti_delete_grade($ltiinstance, $parsed->userid);
     $responsexml = lti_get_response_xml($gradestatus ? 'success' : 'failure', 'Grade delete request', $parsed->messageid, 'deleteResultResponse');
     echo $responsexml->asXML();
     break;
 default:
     // Fire an event if we get a web service request which we don't support directly.
     // This will allow others to extend the LTI services, which I expect to be a common
     // use case, at least until the spec matures.
     $data = new stdClass();
     $data->body = $rawbody;
     $data->xml = $xml;
     $data->messageid = lti_parse_message_id($xml);
     $data->messagetype = $messagetype;
     $data->consumerkey = $consumerkey;
    /**
     * This test has been disabled because, since its creation,
     * the sourceId generation has changed and surely this is outdated.
     * Some day these should be replaced by proper tests, but until then
     * conformance tests say this is working. MDL-30347
     */
    public function disabled_test_parse_grade_replace_message()
    {
        $message = '
            <imsx_POXEnvelopeRequest xmlns = "http://www.imsglobal.org/services/ltiv1p1/xsd/imsoms_v1p0">
              <imsx_POXHeader>
                <imsx_POXRequestHeaderInfo>
                  <imsx_version>V1.0</imsx_version>
                  <imsx_messageIdentifier>999998123</imsx_messageIdentifier>
                </imsx_POXRequestHeaderInfo>
              </imsx_POXHeader>
              <imsx_POXBody>
                <replaceResultRequest>
                  <resultRecord>
                    <sourcedGUID>
                      <sourcedId>{&quot;data&quot;:{&quot;instanceid&quot;:&quot;2&quot;,&quot;userid&quot;:&quot;2&quot;},&quot;hash&quot;:&quot;0b5078feab59b9938c333ceaae21d8e003a7b295e43cdf55338445254421076b&quot;}</sourcedId>
                    </sourcedGUID>
                    <result>
                      <resultScore>
                        <language>en-us</language>
                        <textString>0.92</textString>
                      </resultScore>
                    </result>
                  </resultRecord>
                </replaceResultRequest>
              </imsx_POXBody>
            </imsx_POXEnvelopeRequest>
';
        $parsed = lti_parse_grade_replace_message(new SimpleXMLElement($message));
        $this->assertEquals($parsed->userid, '2');
        $this->assertEquals($parsed->instanceid, '2');
        $this->assertEquals($parsed->sourcedidhash, '0b5078feab59b9938c333ceaae21d8e003a7b295e43cdf55338445254421076b');
        $ltiinstance = (object) array('servicesalt' => '4e5fcc06de1d58.44963230');
        lti_verify_sourcedid($ltiinstance, $parsed);
    }