Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/plugin/migrationmoodle/src/Loader/UserLearnPathLessonBranchLo...

106 lines
3.4 KiB

<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\CourseBundle\Entity\CLpItemView;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class UserLearnPathLessonBranchLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class UserLearnPathLessonBranchLoader implements LoaderInterface
{
/**
* @inheritDoc
*/
public function load(array $incomingData)
{
$em = \Database::getManager();
$item = $em->find('ChamiloCourseBundle:CLpItem', $incomingData['item_id']);
if (!$item) {
throw new \Exception("LP item ({$incomingData['item_id']}) not found.");
}
$itemView = $this->findViewOfItem($incomingData);
if ($item->getDisplayOrder() !== 1) {
$previuousItemView = $this->findViewOfPreviousItem($incomingData);
$itemView->setStartTime(
$previuousItemView->getStartTime() + $previuousItemView->getTotalTime()
);
}
$totalTime = $incomingData['end_time'] - $itemView->getStartTime();
$itemView
->setStatus('completed')
->setTotalTime($totalTime);
$em->persist($itemView);
$em->flush();
return $itemView->getId();
}
/**
* @param array $incomingData
*
* @throws \Doctrine\ORM\NonUniqueResultException
*
* @return CLpItemView
*/
private function findViewOfItem(array $incomingData)
{
/** @var CLpItemView $itemView */
$itemView = \Database::getManager()
->createQuery("SELECT lpiv
FROM ChamiloCourseBundle:CLpItemView lpiv
INNER JOIN ChamiloCourseBundle:CLpView lpv WITH (lpv.iid = lpiv.lpViewId AND lpv.cId = lpiv.cId)
WHERE lpiv.lpItemId = :item_id AND lpv.userId = :user_id")
->setMaxResults(1)
->setParameters(['item_id' => $incomingData['item_id'], 'user_id' => $incomingData['user_id']])
->getOneOrNullResult();
if (!$itemView) {
throw new \Exception("Item view not found for "
."item ({$incomingData['item_id']}) and user ({$incomingData['user_id']}).");
}
return $itemView;
}
/**
* @param array $incomingData
*
* @throws \Doctrine\ORM\NonUniqueResultException
*
* @return CLpItemView
*/
private function findViewOfPreviousItem(array $incomingData)
{
/** @var CLpItemView $previuousItemView */
$previuousItemView = \Database::getManager()
->createQuery("SELECT lpiv
FROM ChamiloCourseBundle:CLpItemView lpiv
INNER JOIN ChamiloCourseBundle:CLpView lpv WITH (lpv.iid = lpiv.lpViewId AND lpv.cId = lpiv.cId)
INNER JOIN ChamiloCourseBundle:CLpItem lpi WITH (lpi.iid = lpiv.lpItemId AND lpi.cId = lpiv.cId)
WHERE lpi.nextItemId = :item_id AND lpv.userId = :user_id")
->setMaxResults(1)
->setParameters(['item_id' => $incomingData['item_id'], 'user_id' => $incomingData['user_id']])
->getOneOrNullResult();
if (!$previuousItemView) {
throw new \Exception("Item view not found for "
."previous item ({$incomingData['item_id']}) and user ({$incomingData['user_id']}).");
}
return $previuousItemView;
}
}