XAPI: Allow override lrs settings in course tool - refs BT#16742

pull/3680/head
Angel Fernando Quiroz Campos 6 years ago
parent c833715815
commit a88812a06d
  1. 1
      plugin/xapi/lang/english.php
  2. 26
      plugin/xapi/launch/add.php
  3. 28
      plugin/xapi/launch/edit.php
  4. 4
      plugin/xapi/launch/tool.php
  5. 78
      plugin/xapi/src/Entity/ToolLaunch.php
  6. 1
      plugin/xapi/src/Parser/TinCanParser.php
  7. 21
      plugin/xapi/src/XApiPlugin.php

@ -29,3 +29,4 @@ $strings['ActivityLaunch'] = 'Launch';
$strings['ActivityFirstLaunch'] = 'First launch at';
$strings['ActivityLastLaunch'] = 'Last launch at';
$strings['LaunchNewAttempt'] = 'Launch new attempt';
$strings['LrsConfiguration'] = 'LRS Configuration';

@ -24,6 +24,25 @@ $frmActivity->addHtml('<div id="advanced_params_options" style="display:none">')
$frmActivity->addText('title', get_lang('Title'), false);
$frmActivity->addTextarea('description', get_lang('Description'));
$frmActivity->addHtml('</div>');
$frmActivity->addButtonAdvancedSettings('lrs_params', $plugin->get_lang('LrsConfiguration'));
$frmActivity->addHtml('<div id="lrs_params_options" style="display:none">');
$frmActivity->addText(
'lrs_url',
[
$plugin->get_lang('lrs_url'),
$plugin->get_lang('lrs_url_help'),
],
false
);
$frmActivity->addText(
'lrs_auth',
[
$plugin->get_lang('lrs_auth'),
$plugin->get_lang('lrs_auth_help'),
],
false
);
$frmActivity->addHtml('</div>');
$frmActivity->addButtonImport(get_lang('Import'));
$frmActivity->addRule('file', get_lang('ThisFileIsRequired'), 'required');
$frmActivity->addRule(
@ -34,6 +53,8 @@ $frmActivity->addRule(
);
$frmActivity->applyFilter('title', 'trim');
$frmActivity->applyFilter('description', 'trim');
$frmActivity->applyFilter('lrs_url', 'trim');
$frmActivity->applyFilter('lrs_auth', 'trim');
if ($frmActivity->validate()) {
$values = $frmActivity->exportValues();
@ -63,6 +84,11 @@ if ($frmActivity->validate()) {
$toolLaunch->setDescription($values['description']);
}
if (!empty($values['lrs_url']) && !empty($values['lrs_auth'])) {
$toolLaunch->setLrsUrl($values['lrs_url']);
$toolLaunch->setLrsAuth($values['lrs_auth']);
}
$em = Database::getManager();
$em->persist($toolLaunch);
$em->flush();

@ -43,9 +43,30 @@ $frmActivity->addUrl('launch_url', $plugin->get_lang('ActivityLaunchUrl'), true)
$frmActivity->addUrl('activity_id', $plugin->get_lang('ActivityId'), true);
$frmActivity->addUrl('activity_type', $plugin->get_lang('ActivityType'), true);
$frmActivity->addHtml('</div>');
$frmActivity->addButtonAdvancedSettings('lrs_params', $plugin->get_lang('LrsConfiguration'));
$frmActivity->addHtml('<div id="lrs_params_options" style="display:none">');
$frmActivity->addText(
'lrs_url',
[
$plugin->get_lang('lrs_url'),
$plugin->get_lang('lrs_url_help'),
],
false
);
$frmActivity->addText(
'lrs_auth',
[
$plugin->get_lang('lrs_auth'),
$plugin->get_lang('lrs_auth_help'),
],
false
);
$frmActivity->addHtml('</div>');
$frmActivity->addButtonUpdate(get_lang('Update'));
$frmActivity->applyFilter('title', 'trim');
$frmActivity->applyFilter('description', 'trim');
$frmActivity->applyFilter('lrs_url', 'trim');
$frmActivity->applyFilter('lrs_auth', 'trim');
if ($frmActivity->validate()) {
$values = $frmActivity->exportValues();
@ -60,6 +81,11 @@ if ($frmActivity->validate()) {
isset($values['allow_multiple_attempts'])
);
if (!empty($values['lrs_url']) && !empty($values['lrs_auth'])) {
$toolLaunch->setLrsUrl($values['lrs_url']);
$toolLaunch->setLrsAuth($values['lrs_auth']);
}
$courseTool = $plugin->getCourseToolFromLaunchTool($toolLaunch);
$courseTool->setName($values['title']);
@ -83,6 +109,8 @@ $frmActivity->setDefaults(
'activity_type' => $toolLaunch->getActivityType(),
'launch_url' => $toolLaunch->getLaunchUrl(),
'allow_multiple_attempts' => $toolLaunch->isAllowMultipleAttempts(),
'lrs_url' => $toolLaunch->getLrsUrl(),
'lrs_auth' => $toolLaunch->getLrsAuth(),
]
);

@ -53,7 +53,9 @@ $state = new State(
$cidReq = api_get_cidreq();
try {
$stateDocument = $plugin->getXApiStateClient()->getDocument($state);
$stateDocument = $plugin
->getXApiStateClient($toolLaunch->getLrsUrl(), $toolLaunch->getLrsAuth())
->getDocument($state);
} catch (NotFoundException $notFoundException) {
$stateDocument = null;
} catch (Exception $exception) {

@ -64,12 +64,6 @@ class ToolLaunch
* @ORM\Column(name="activity_id", type="string", nullable=true)
*/
private $activityId;
/**
* @var string|null
*
* @ORM\Column(name="activity_verb_id", type="string", nullable=true)
*/
private $activityVerbId;
/**
* @var string|null
*
@ -82,6 +76,18 @@ class ToolLaunch
* @ORM\Column(name="allow_multiple_attempts", type="boolean", options={"default": true})
*/
private $allowMultipleAttempts;
/**
* @var string|null
*
* @ORM\Column(name="lrs_url", type="string", nullable=true)
*/
private $lrsUrl;
/**
* @var string|null
*
* @ORM\Column(name="lrs_auth", type="string", nullable=true)
*/
private $lrsAuth;
/***
* @var \DateTime
*
@ -237,26 +243,6 @@ class ToolLaunch
return $this;
}
/**
* @return string|null
*/
public function getActivityVerbId(): ?string
{
return $this->activityVerbId;
}
/**
* @param string|null $activityVerbId
*
* @return ToolLaunch
*/
public function setActivityVerbId(?string $activityVerbId): ToolLaunch
{
$this->activityVerbId = $activityVerbId;
return $this;
}
/**
* @return \DateTime
*/
@ -316,4 +302,44 @@ class ToolLaunch
return $this;
}
/**
* @return string|null
*/
public function getLrsUrl(): ?string
{
return $this->lrsUrl;
}
/**
* @param string|null $lrsUrl
*
* @return ToolLaunch
*/
public function setLrsUrl(?string $lrsUrl): ToolLaunch
{
$this->lrsUrl = $lrsUrl;
return $this;
}
/**
* @return string|null
*/
public function getLrsAuth(): ?string
{
return $this->lrsAuth;
}
/**
* @param string|null $lrsAuth
*
* @return ToolLaunch
*/
public function setLrsAuth(?string $lrsAuth): ToolLaunch
{
$this->lrsAuth = $lrsAuth;
return $this;
}
}

@ -61,7 +61,6 @@ class TinCanParser
->setSession($this->session)
->setCreatedAt(api_get_utc_datetime(null, false, true))
->setActivityId($activityNode->attr('id'))
->setActivityVerbId($activityNode->attr('verbid'))
->setActivityType($activityNode->attr('type'))
->setLaunchUrl($this->parseLaunchUrl($nodeLaunch));

@ -193,11 +193,14 @@ class XApiPlugin extends Plugin implements HookPluginInterface
}
/**
* @param string|null $lrsUrl
* @param string|null $lrsAuth
*
* @return \Xabbuh\XApi\Client\Api\StateApiClientInterface
*/
public function getXApiStateClient()
public function getXApiStateClient($lrsUrl = null, $lrsAuth = null)
{
return $this->createXApiClient()->getStateApiClient();
return $this->createXApiClient($lrsUrl, $lrsAuth)->getStateApiClient();
}
/**
@ -209,11 +212,14 @@ class XApiPlugin extends Plugin implements HookPluginInterface
}
/**
* @param string|null $lrsUrl
* @param string|null $lrsAuth
*
* @return \Xabbuh\XApi\Client\XApiClientInterface
*/
public function createXApiClient()
public function createXApiClient($lrsUrl = null, $lrsAuth = null)
{
$baseUrl = trim($this->get(self::SETTING_LRS_URL), "/ \t\n\r\0\x0B");
$baseUrl = $lrsUrl ?: trim($this->get(self::SETTING_LRS_URL), "/ \t\n\r\0\x0B");
$clientBuilder = new XApiClientBuilder();
$clientBuilder
@ -222,18 +228,19 @@ class XApiPlugin extends Plugin implements HookPluginInterface
->setBaseUrl($baseUrl);
return $this
->setAuthMethodToClient($clientBuilder)
->setAuthMethodToClient($clientBuilder, $lrsAuth)
->build();
}
/**
* @param \Xabbuh\XApi\Client\XApiClientBuilderInterface $clientBuilder
* @param string|null $lrsAuth
*
* @return \Xabbuh\XApi\Client\XApiClientBuilderInterface
*/
private function setAuthMethodToClient(XApiClientBuilderInterface $clientBuilder)
private function setAuthMethodToClient(XApiClientBuilderInterface $clientBuilder, $lrsAuth = null)
{
$authString = $this->get(self::SETTING_LRS_AUTH);
$authString = $lrsAuth ?: $this->get(self::SETTING_LRS_AUTH);
$parts = explode(':', $authString);

Loading…
Cancel
Save