parent
e48dc568ac
commit
94529e9bc8
@ -0,0 +1,71 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
use Chamilo\PluginBundle\Entity\XApi\SharedStatement; |
||||||
|
use Xabbuh\XApi\Common\Exception\ConflictException; |
||||||
|
use Xabbuh\XApi\Common\Exception\XApiException; |
||||||
|
use Xabbuh\XApi\Serializer\Symfony\Serializer; |
||||||
|
use Xabbuh\XApi\Serializer\Symfony\StatementSerializer; |
||||||
|
|
||||||
|
require_once __DIR__.'/../../../main/inc/global.inc.php'; |
||||||
|
|
||||||
|
if (php_sapi_name() !== 'cli') { |
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
echo 'XAPI: Cron to send statements.'.PHP_EOL; |
||||||
|
|
||||||
|
$em = Database::getManager(); |
||||||
|
$serializer = Serializer::createSerializer(); |
||||||
|
$statementSerializer = new StatementSerializer($serializer); |
||||||
|
|
||||||
|
$notSentSharedStatements = $em |
||||||
|
->getRepository(SharedStatement::class) |
||||||
|
->findBy( |
||||||
|
['uuid' => null, 'sent' => false], |
||||||
|
null, |
||||||
|
100 |
||||||
|
); |
||||||
|
$countNotSent = count($notSentSharedStatements); |
||||||
|
|
||||||
|
if ($countNotSent > 0) { |
||||||
|
echo '['.time().'] Trying to send '.$countNotSent.' statements to LRS'.PHP_EOL; |
||||||
|
|
||||||
|
$client = XApiPlugin::create()->getXApiStatementClient(); |
||||||
|
|
||||||
|
/** @var SharedStatement $notSentSharedStatement */ |
||||||
|
foreach ($notSentSharedStatements as $notSentSharedStatement) { |
||||||
|
$notSentStatement = $statementSerializer->deserializeStatement( |
||||||
|
json_encode($notSentSharedStatement->getStatement()) |
||||||
|
); |
||||||
|
|
||||||
|
try { |
||||||
|
echo '['.time()."] Sending shared statement ({$notSentSharedStatement->getId()})"; |
||||||
|
|
||||||
|
$sentStatement = $client->storeStatement($notSentStatement); |
||||||
|
|
||||||
|
echo "\t\tStatement ID received: \"{$sentStatement->getId()->getValue()}\""; |
||||||
|
} catch (ConflictException $e) { |
||||||
|
echo $e->getMessage().PHP_EOL; |
||||||
|
|
||||||
|
continue; |
||||||
|
} catch (XApiException $e) { |
||||||
|
echo $e->getMessage().PHP_EOL; |
||||||
|
|
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
$notSentSharedStatement |
||||||
|
->setUuid($sentStatement->getId()->getValue()) |
||||||
|
->setSent(true); |
||||||
|
|
||||||
|
$em->persist($notSentSharedStatement); |
||||||
|
|
||||||
|
echo "\t\tShared statement updated".PHP_EOL; |
||||||
|
} |
||||||
|
|
||||||
|
$em->flush(); |
||||||
|
} else { |
||||||
|
echo 'No statements to process.'.PHP_EOL; |
||||||
|
} |
||||||
Loading…
Reference in new issue