Browse Source

WIP ims lti add outcomes services - refs BT#13469

Angel Fernando Quiroz Campos 6 years ago
parent
commit
ae35af14fd
3 changed files with 90 additions and 6 deletions
  1. 66 1
      plugin/ims_lti/ImsLtiPlugin.php
  2. 16 5
      plugin/ims_lti/form.php
  3. 8 0
      plugin/ims_lti/outcome_service.php

+ 66 - 1
plugin/ims_lti/ImsLtiPlugin.php

@@ -204,7 +204,7 @@ class ImsLtiPlugin extends Plugin
         $cTool = $toolRepo->findOneBy(
             [
                 'cId' => $course,
-                'link' => self::generateToolLink($ltiTool)
+                'link' => self::generateToolLink($ltiTool),
             ]
         );
 
@@ -393,4 +393,69 @@ class ImsLtiPlugin extends Plugin
 
         $this->addCourseTool($course, $newLtiTool);
     }
+
+    /**
+     * @return null|SimpleXMLElement
+     */
+    private function getRequestXmlElement()
+    {
+        $request = file_get_contents("php://input");
+
+        if (empty($request)) {
+            return null;
+        }
+
+        $xml = new SimpleXMLElement($request);
+
+        return $xml;
+    }
+
+    public function processServiceRequest()
+    {
+        $xml = $this->getRequestXmlElement();
+
+        if (empty($xml)) {
+            return;
+        }
+
+        $bodyChildren = $xml->imsx_POXBody->children();
+
+        if (empty($bodyChildren)) {
+            return;
+        }
+
+        /** @var SimpleXMLElement $resultRequest */
+        $resultRequest = $bodyChildren[0];
+
+        switch ($resultRequest->getName()) {
+            case 'replaceResultRequest':
+                $this->getReplaceRequest($resultRequest->resultRecord);
+                break;
+            case 'readResultRequest':
+            case 'deleteResultRequest':
+                $this->getReadOrDeleteRequest($resultRequest->resultRecord);
+                break;
+        }
+    }
+
+    /**
+     * @param SimpleXMLElement $resultRecord
+     */
+    private function getReplaceRequest(SimpleXMLElement $resultRecord)
+    {
+        $sourcedId = $resultRecord->sourcedGUID->sourcedId;
+        $resultScore = $resultRecord->result->resultScore->textString;
+
+        error_log("ReplaceRequest sourcedId: $sourcedId - score: $resultScore");
+    }
+
+    /**
+     * @param SimpleXMLElement $resultRecord
+     */
+    private function getReadOrDeleteRequest(SimpleXMLElement $resultRecord)
+    {
+        $sourcedId = $resultRecord->sourcedGUID->sourcedId;
+
+        error_log("ReadOrDeleteRequest sourcedId: $sourcedId");
+    }
 }

+ 16 - 5
plugin/ims_lti/form.php

@@ -30,8 +30,8 @@ $course = $em->find('ChamiloCoreBundle:Course', api_get_course_int_id());
 /** @var User $user */
 $user = $em->find('ChamiloUserBundle:User', api_get_user_id());
 
-$siteName = api_get_setting('siteName');
-$toolUserId = ImsLtiPlugin::generateToolUserId($user);
+$toolUserId = ImsLtiPlugin::generateToolUserId($user->getId());
+$platformDomain = str_replace(['https://', 'http://'], '', api_get_setting('InstitutionUrl'));
 
 $params = [];
 $params['lti_version'] = 'LTI-1p0';
@@ -53,9 +53,20 @@ if ($tool->isActiveDeepLinking()) {
     $params['resource_link_id'] = $tool->getId();
     $params['resource_link_title'] = $tool->getName();
     $params['resource_link_description'] = $tool->getDescription();
+
+    $params['lis_result_sourcedid'] = $tool->getId().':'.$toolUserId;
+    $params['lis_outcome_service_url'] = api_get_path(WEB_PLUGIN_PATH).'ims_lti/outcome_service.php';
+    $params['lis_person_sourcedid'] = $platformDomain.':'.$toolUserId;
+    $params['lis_course_offering_sourcedid'] = "$platformDomain:";
+
+    if ($session) {
+        $params['lis_course_offering_sourcedid'] .= $session->getId().'-'.$course->getCode();
+    } else {
+        $params['lis_course_offering_sourcedid'] .= $course->getCode();
+    }
 }
 
-$params['user_id'] = ImsLtiPlugin::generateToolUserId($user->getId());
+$params['user_id'] = $toolUserId;
 $params['user_image'] = UserManager::getUserPicture($user->getId());
 $params['roles'] = ImsLtiPlugin::getUserRoles($user);
 $params['lis_person_name_given'] = $user->getFirstname();
@@ -75,8 +86,8 @@ $params['launch_presentation_locale'] = api_get_language_isocode();
 $params['launch_presentation_document_target'] = 'iframe';
 $params['tool_consumer_info_product_family_code'] = 'Chamilo LMS';
 $params['tool_consumer_info_version'] = api_get_version();
-$params['tool_consumer_instance_guid'] = str_replace(['https://', 'http://'], '', api_get_setting('InstitutionUrl'));
-$params['tool_consumer_instance_name'] = $siteName;
+$params['tool_consumer_instance_guid'] = $platformDomain;
+$params['tool_consumer_instance_name'] = api_get_setting('siteName');
 $params['tool_consumer_instance_url'] = api_get_path(WEB_PATH);
 $params['tool_consumer_instance_contact_email'] = api_get_setting('emailAdministrator');
 

+ 8 - 0
plugin/ims_lti/outcome_service.php

@@ -0,0 +1,8 @@
+<?php
+/* For license terms, see /license.txt */
+
+require_once __DIR__.'/../../main/inc/global.inc.php';
+
+$plugin = ImsLtiPlugin::create();
+
+$plugin->processServiceRequest();