55 $this->lpMode = $objLP->getCurrentMode();
62 # "handle statement:\n".json_encode($xapiStatement, JSON_PRETTY_PRINT) 66 $xapiStatement = json_decode(json_encode($xapiStatement));
71 $this->log->debug(
'update lp for object (' . $this->object->getId() .
')');
83 $this->object->getId(),
84 $xapiStatement->actor->account->name
88 $this->object->getId(),
89 str_replace(
'mailto:',
'', $xapiStatement->actor->mbox)
108 $oldResultStatus = $userResult->getStatus();
113 $this->log->debug(
"isResultStatusToBeReplaced: true");
114 $userResult->setStatus($newResultStatus);
119 $this->log->debug(
"Score: " . $xapiScore);
120 $userResult->setScore((
float) $xapiScore);
129 $cmixUser->setSatisfied(
true);
139 if ($progressedScore !==
false && (
float) $progressedScore > 0) {
140 $userResult->setScore((
float) ($progressedScore / 100));
149 if (!isset($xapiStatement->actor)) {
153 if (!isset($xapiStatement->verb) || !isset($xapiStatement->verb->id)) {
157 if (!isset($xapiStatement->object) || !isset($xapiStatement->object->id)) {
169 if ($xapiStatement->object->id != $this->object->getActivityId()) {
170 $this->log->debug($xapiStatement->object->id .
" != " . $this->object->getActivityId());
179 return $xapiStatement->verb->id;
184 return $this->resultStatusByXapiVerbMap[$xapiVerb];
189 return isset($this->resultStatusByXapiVerbMap[$xapiVerb]);
194 return $this->resultProgressByXapiVerbMap[$xapiVerb];
199 return isset($this->resultProgressByXapiVerbMap[$xapiVerb]);
204 if (!isset($xapiStatement->result)) {
208 if (!isset($xapiStatement->result->score)) {
212 if (!isset($xapiStatement->result->score->scaled)) {
221 return $xapiStatement->result->score->scaled;
226 if (!isset($xapiStatement->result)) {
230 if (!isset($xapiStatement->result->extensions)) {
234 if (!isset($xapiStatement->result->extensions->{
'https://w3id.org/xapi/cmi5/result/extensions/progress'})) {
237 return $xapiStatement->result->extensions->{
'https://w3id.org/xapi/cmi5/result/extensions/progress'};
246 $result->setObjId($this->object->getId());
256 $this->log->debug(
"isLpModeInterestedInResultStatus: false");
261 $this->log->debug(
"doesNewResultStatusDominateOldOne: false");
266 $this->log->debug(
"needsAvoidFailedEvaluation: false");
279 switch ($resultStatus) {
282 return in_array($this->lpMode, [
290 return in_array($this->lpMode, [
299 return in_array($this->lpMode, [
312 if ($oldResultStatus ==
'') {
316 if (in_array($newResultStatus, [
'passed',
'failed'])) {
320 if (!in_array($oldResultStatus, [
'passed',
'failed'])) {
329 if (!$this->object->isKeepLpStatusEnabled()) {
333 if ($newResultStatus !=
'failed') {
337 return $oldResultStatus ==
'completed' || $oldResultStatus ==
'passed';
344 $lrsType = $this->
object->getLrsType();
345 $defaultLrs = $lrsType->getLrsEndpoint();
347 $defaultBasicAuth = $lrsType->getBasicAuth();
350 'X-Experience-API-Version' =>
'1.0.3',
351 'Authorization' => $defaultBasicAuth,
352 'Content-Type' =>
'application/json;charset=utf-8',
353 'Cache-Control' =>
'no-cache, no-store, must-revalidate' 363 $satisfiedStatement = $this->
object->getSatisfiedStatement($cmixUser);
364 $satisfiedStatementParams = [];
365 $satisfiedStatementParams[
'statementId'] = $satisfiedStatement[
'id'];
366 $defaultStatementsUrl = $defaultLrs .
"/statements";
371 GuzzleHttp\RequestOptions::VERIFY =>
true,
372 GuzzleHttp\RequestOptions::CONNECT_TIMEOUT => 10,
373 GuzzleHttp\RequestOptions::HTTP_ERRORS =>
false 378 $defaultSatisfiedStatementUrl,
380 json_encode($satisfiedStatement)
383 $promises[
'defaultSatisfiedStatement'] =
$client->sendAsync($defaultSatisfiedStatementRequest, $req_opts);
385 $responses = GuzzleHttp\Promise\Utils::settle($promises)->wait();
389 $this->log->error(
'error:' . $e->getMessage());
isValidXapiStatement($xapiStatement)
$resultProgressByXapiVerbMap
const LP_MODE_CMIX_COMPLETED
isResultStatusToBeReplaced($oldResultStatus, $newResultStatus)
const LP_MODE_CMIX_COMPLETED_OR_PASSED
const LP_MODE_CMIX_PASSED_WITH_FAILED
hasXapiScore($xapiStatement)
const LP_MODE_CMIX_PASSED
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
if($_SERVER['argc']< 4) $client
getProgressedScore($xapiStatement)
$resultStatusByXapiVerbMap
getResultProgressForXapiVerb($xapiVerb)
getCmixUser($xapiStatement)
evaluateStatement($xapiStatement, $usrId)
const LP_MODE_CMIX_COMPL_WITH_FAILED
isLpModeInterestedInResultStatus($resultStatus, $deactivated=true)
static getEmptyInstance()
doesNewResultStatusDominateOldOne($oldResultStatus, $newResultStatus)
__construct(ilLogger $log, ilObjCmiXapi $object)
ilXapiStatementEvaluation constructor.
static getInstanceByObjIdAndUsrId($objId, $usrId)
getXapiVerb($xapiStatement)
sendSatisfiedStatement($cmixUser)
getResultStatusForXapiVerb($xapiVerb)
evaluateReport(ilCmiXapiStatementsReport $report)
const LP_MODE_DEACTIVATED
hasResultProgressRelevantXapiVerb($xapiVerb)
static getInstanceByObjectIdAndUsrIdent($objId, $usrIdent)
static checkResponse($response, &$body, $allowedStatus=[200, 204])
getXapiScore($xapiStatement)
const LP_MODE_CMIX_COMPL_OR_PASSED_WITH_FAILED
static buildQuery(array $params, $encoding=PHP_QUERY_RFC3986)
Component logger with individual log levels by component id.
needsAvoidFailedEvaluation($oldResultStatus, $newResultStatus)
static getInstance($a_obj_id)
hasResultStatusRelevantXapiVerb($xapiVerb)
isValidObject($xapiStatement)