PageRenderTime 37ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/basiclti/blti-cert/tool_consumer_outcome.php

https://github.com/jfederico/ims-dev
PHP | 133 lines | 113 code | 18 blank | 2 comment | 25 complexity | db8ea069faae1fa2e0bde635a885bd8b MD5 | raw file
Possible License(s): MIT
  1. <?php
  2. if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
  3. error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
  4. } else {
  5. error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
  6. }
  7. $old_error_handler = set_error_handler("myErrorHandler");
  8. function myErrorHandler($errno, $errstr, $errfile, $errline)
  9. {
  10. // echo("YO ". $errorno . $errstr . "\n");
  11. if ( strpos($errstr, 'deprecated') !== false ) return true;
  12. return false;
  13. }
  14. ini_set("display_errors", 1);
  15. if ( !isset ( $_REQUEST['b64'] ) ) {
  16. die("Missing b64 parameter");
  17. }
  18. $b64 = $_REQUEST['b64'];
  19. session_id(md5($b64));
  20. session_start();
  21. require_once("OAuth.php");
  22. require_once("OAuthBody.php");
  23. // For my application, We only allow application/xml
  24. $request_headers = OAuthUtil::get_headers();
  25. $hct = $request_headers['Content-Type'];
  26. if ( ! isset($hct) ) $hct = $request_headers['Content-type'];
  27. if ($hct != 'application/xml' ) {
  28. header('Content-Type: text/plain');
  29. print_r($request_headers);
  30. die("Must be content type xml, found ".$hct);
  31. }
  32. header('Content-Type: application/xml; charset=utf-8');
  33. $b64 = base64_decode($b64);
  34. $b64 = explode(":::", $b64);
  35. $oauth_consumer_key = $b64[0];
  36. $oauth_consumer_secret = $b64[1];
  37. $response = '<?xml version="1.0" encoding="UTF-8"?>
  38. <imsx_POXEnvelopeResponse xmlns="http://www.imsglobal.org/lis/oms1p0/pox">
  39. <imsx_POXHeader>
  40. <imsx_POXResponseHeaderInfo>
  41. <imsx_version>V1.0</imsx_version>
  42. <imsx_messageIdentifier>%s</imsx_messageIdentifier>
  43. <imsx_statusInfo>
  44. <imsx_codeMajor>%s</imsx_codeMajor>
  45. <imsx_severity>status</imsx_severity>
  46. <imsx_description>%s</imsx_description>
  47. <imsx_messageRefIdentifier>%s</imsx_messageRefIdentifier>
  48. </imsx_statusInfo>
  49. </imsx_POXResponseHeaderInfo>
  50. </imsx_POXHeader>
  51. <imsx_POXBody>%s
  52. </imsx_POXBody>
  53. </imsx_POXEnvelopeResponse>';
  54. try {
  55. $body = handleOAuthBodyPOST($oauth_consumer_key, $oauth_consumer_secret);
  56. $xml = new SimpleXMLElement($body);
  57. $imsx_header = $xml->imsx_POXHeader->children();
  58. $parms = $imsx_header->children();
  59. $message_ref = (string) $parms->imsx_messageIdentifier;
  60. $imsx_body = $xml->imsx_POXBody->children();
  61. $operation = $imsx_body->getName();
  62. $parms = $imsx_body->children();
  63. } catch (Exception $e) {
  64. echo(sprintf($response,uniqid(),'failure', $e->getMessage(),'zzz',""));
  65. exit();
  66. }
  67. $header_key = getOAuthKeyFromHeaders();
  68. if ( $header_key != $oauth_consumer_key ) {
  69. echo(sprintf($response,uniqid(),'failure', "B64=$oauth_consumer_key HDR=$header_key",$message_ref,""));
  70. exit();
  71. }
  72. $sourcedid = (string) $parms->resultRecord->sourcedGUID->sourcedId;
  73. if ( !isset($sourcedid) && strlen($coursedid) > 0 ) {
  74. echo(sprintf($response,uniqid(),'failure', "Missing required lis_result_sourcedid",$message_ref,""));
  75. exit();
  76. }
  77. $gradebook = $_SESSION['cert_gradebook'];
  78. if ( !isset($gradebook) ) $gradebook = Array();
  79. $top_tag = str_replace("Request","Response",$operation);
  80. if ( $operation == "replaceResultRequest" ) {
  81. $score = (string) $parms->resultRecord->result->resultScore->textString;
  82. $fscore = (float) $score;
  83. if ( ! is_numeric($score) ) {
  84. echo(sprintf($response,uniqid(),'failure', "Score must be numeric",$message_ref,""));
  85. exit();
  86. }
  87. $fscore = (float) $score;
  88. if ( $fscore < 0.0 || $fscore > 1.0 ) {
  89. echo(sprintf($response,uniqid(),'failure', "Score not between 0.0 and 1.0",$message_ref,""));
  90. exit();
  91. }
  92. echo(sprintf($response,uniqid(),'success', "Score for $sourcedid is now $score",$message_ref,"\n<".$top_tag."/>"));
  93. $gradebook[$sourcedid] = $score;
  94. } else if ( $operation == "readResultRequest" ) {
  95. $score = $gradebook[$sourcedid];
  96. $body = '
  97. <readResultResponse>
  98. <result>
  99. <resultScore>
  100. <language>en</language>
  101. <textString>%s</textString>
  102. </resultScore>
  103. </result>
  104. </readResultResponse>';
  105. $body = sprintf($body,$score);
  106. echo(sprintf($response,uniqid(),'success', "Score read successfully",$message_ref,$body));
  107. } else if ( $operation == "deleteResultRequest" ) {
  108. unset( $gradebook[$sourcedid]);
  109. echo(sprintf($response,uniqid(),'success', "Score deleted",'zzz',"\n<".$top_tag."/>"));
  110. } else {
  111. echo(sprintf($response,uniqid(),'unsupported', "Operation not supported - $operation",$message_ref,""));
  112. }
  113. $_SESSION['cert_gradebook'] = $gradebook;
  114. print_r($gradebook);
  115. ?>