mirrored from git://git.moodle.org/moodle.git
/
service.php
93 lines (64 loc) · 2.88 KB
/
service.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
require_once(dirname(__FILE__) . "/../../config.php");
require_once($CFG->dirroot.'/mod/lti/locallib.php');
require_once($CFG->dirroot.'/mod/lti/servicelib.php');
$rawbody = file_get_contents("php://input");
$xml = new SimpleXMLElement($rawbody);
$body = $xml->imsx_POXBody;
foreach($body->children() as $child){
$messagetype = $child->getName();
}
switch($messagetype){
case 'replaceResultRequest':
$parsed = lti_parse_grade_replace_message($xml);
$ltiinstance = $DB->get_record('lti', array('id' => $parsed->instanceid));
lti_verify_sourcedid($ltiinstance, $parsed);
lti_verify_message($ltiinstance, $rawbody);
$gradestatus = lti_update_grade($ltiinstance, $parsed->userid, $parsed->launchid, $parsed->gradeval);
$responsexml = lti_get_response_xml(
$gradestatus ? 'success' : 'error',
'Grade replace response',
$parsed->messageid,
'replaceResultResponse'
);
echo $responsexml->asXML();
break;
case 'readResultRequest':
$parsed = lti_parse_grade_read_message($xml);
$ltiinstance = $DB->get_record('lti', array('id' => $parsed->instanceid));
//Getting the grade requires the context is set
$context = get_context_instance(CONTEXT_COURSE, $ltiinstance->course);
$PAGE->set_context($context);
lti_verify_sourcedid($ltiinstance, $parsed);
lti_verify_message($ltiinstance, $rawbody);
$grade = lti_read_grade($ltiinstance, $parsed->userid);
$responsexml = lti_get_response_xml(
isset($grade) ? 'success' : 'error',
'Result read',
$parsed->messageid,
'readResultResponse'
);
$node = $responsexml->imsx_POXBody->readResultResponse;
$node->addChild('result')
->addChild('resultScore')
->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));
lti_verify_sourcedid($ltiinstance, $parsed);
lti_verify_message($ltiinstance, $rawbody);
$gradestatus = lti_delete_grade($ltiinstance, $parsed->userid);
$responsexml = lti_get_response_xml(
$gradestatus ? 'success' : 'error',
'Grade delete request',
$parsed->messageid,
'deleteResultResponse'
);
echo $responsexml->asXML();
break;
}
//echo print_r(apache_request_headers(), true);
//echo '<br />';
//echo file_get_contents("php://input");