summaryrefslogtreecommitdiff
path: root/src/Entity
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entity')
-rw-r--r--src/Entity/Sco.php270
-rw-r--r--src/Entity/ScoTracking.php343
-rw-r--r--src/Entity/Scorm.php146
3 files changed, 759 insertions, 0 deletions
diff --git a/src/Entity/Sco.php b/src/Entity/Sco.php
new file mode 100644
index 0000000..75eec2b
--- /dev/null
+++ b/src/Entity/Sco.php
@@ -0,0 +1,270 @@
+<?php
+
+
+namespace Peopleaps\Scorm\Entity;
+
+
+class Sco
+{
+ public $id;
+ public $uuid;
+ public $scorm;
+ public $scoParent;
+ public $scoChildren;
+ public $entryUrl;
+ public $identifier;
+ public $title;
+ public $visible;
+ public $parameters;
+ public $launchData;
+ public $maxTimeAllowed;
+ public $timeLimitAction;
+ public $block;
+ public $scoreToPassInt;
+ public $scoreToPassDecimal;
+ public $completionThreshold;
+ public $prerequisites;
+
+ public function getData() {
+ return [
+ 'id' => $this->getId(),
+ 'scorm' => $this->getScorm(),
+ 'scoParent' => $this->getScoParent(),
+ 'entryUrl' => $this->getEntryUrl(),
+ 'identifier' => $this->getIdentifier(),
+
+ ];
+ }
+
+ public function getUuid()
+ {
+ return $this->uuid;
+ }
+
+ public function setUuid($uuid)
+ {
+ $this->uuid = $uuid;
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ public function getScorm()
+ {
+ return $this->scorm;
+ }
+
+ public function setScorm(Scorm $scorm = null)
+ {
+ $this->scorm = $scorm;
+ }
+
+ public function getScoParent()
+ {
+ return $this->scoParent;
+ }
+
+ public function setScoParent(Sco $scoParent = null)
+ {
+ $this->scoParent = $scoParent;
+ }
+
+ public function getScoChildren()
+ {
+ return $this->scoChildren;
+ }
+
+ public function setScoChildren($scoChildren)
+ {
+ $this->scoChildren = $scoChildren;
+ }
+
+ public function getEntryUrl()
+ {
+ return $this->entryUrl;
+ }
+
+ public function setEntryUrl($entryUrl)
+ {
+ $this->entryUrl = $entryUrl;
+ }
+
+ public function getIdentifier()
+ {
+ return $this->identifier;
+ }
+
+ public function setIdentifier($identifier)
+ {
+ $this->identifier = $identifier;
+ }
+
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ public function isVisible()
+ {
+ return $this->visible;
+ }
+
+ public function setVisible($visible)
+ {
+ $this->visible = $visible;
+ }
+
+ public function getParameters()
+ {
+ return $this->parameters;
+ }
+
+ public function setParameters($parameters)
+ {
+ $this->parameters = $parameters;
+ }
+
+ public function getLaunchData()
+ {
+ return $this->launchData;
+ }
+
+ public function setLaunchData($launchData)
+ {
+ $this->launchData = $launchData;
+ }
+
+ public function getMaxTimeAllowed()
+ {
+ return $this->maxTimeAllowed;
+ }
+
+ public function setMaxTimeAllowed($maxTimeAllowed)
+ {
+ $this->maxTimeAllowed = $maxTimeAllowed;
+ }
+
+ public function getTimeLimitAction()
+ {
+ return $this->timeLimitAction;
+ }
+
+ public function setTimeLimitAction($timeLimitAction)
+ {
+ $this->timeLimitAction = $timeLimitAction;
+ }
+
+ public function isBlock()
+ {
+ return $this->block;
+ }
+
+ public function setBlock($block)
+ {
+ $this->block = $block;
+ }
+
+ public function getScoreToPass()
+ {
+ if (Scorm::SCORM_2004 === $this->scorm->getVersion()) {
+ return $this->scoreToPassDecimal;
+ } else {
+ return $this->scoreToPassInt;
+ }
+ }
+
+ public function setScoreToPass($scoreToPass)
+ {
+ if (Scorm::SCORM_2004 === $this->scorm->getVersion()) {
+ $this->setScoreToPassDecimal($scoreToPass);
+ } else {
+ $this->setScoreToPassInt($scoreToPass);
+ }
+ }
+
+ public function getScoreToPassInt()
+ {
+ return $this->scoreToPassInt;
+ }
+
+ public function setScoreToPassInt($scoreToPassInt)
+ {
+ $this->scoreToPassInt = $scoreToPassInt;
+ }
+
+ public function getScoreToPassDecimal()
+ {
+ return $this->scoreToPassDecimal;
+ }
+
+ public function setScoreToPassDecimal($scoreToPassDecimal)
+ {
+ $this->scoreToPassDecimal = $scoreToPassDecimal;
+ }
+
+ public function getCompletionThreshold()
+ {
+ return $this->completionThreshold;
+ }
+
+ public function setCompletionThreshold($completionThreshold)
+ {
+ $this->completionThreshold = $completionThreshold;
+ }
+
+ public function getPrerequisites()
+ {
+ return $this->prerequisites;
+ }
+
+ public function setPrerequisites($prerequisites)
+ {
+ $this->prerequisites = $prerequisites;
+ }
+
+ /**
+ * @return array
+ */
+ public function serialize(Sco $sco)
+ {
+ $scorm = $sco->getScorm();
+ $parent = $sco->getScoParent();
+
+ return [
+ 'id' => $sco->getUuid(),
+ 'scorm' => !empty($scorm) ? ['id' => $scorm->getUuid()] : null,
+ 'data' => [
+ 'entryUrl' => $sco->getEntryUrl(),
+ 'identifier' => $sco->getIdentifier(),
+ 'title' => $sco->getTitle(),
+ 'visible' => $sco->isVisible(),
+ 'parameters' => $sco->getParameters(),
+ 'launchData' => $sco->getLaunchData(),
+ 'maxTimeAllowed' => $sco->getMaxTimeAllowed(),
+ 'timeLimitAction' => $sco->getTimeLimitAction(),
+ 'block' => $sco->isBlock(),
+ 'scoreToPassInt' => $sco->getScoreToPassInt(),
+ 'scoreToPassDecimal' => $sco->getScoreToPassDecimal(),
+ 'scoreToPass' => !empty($scorm) ? $sco->getScoreToPass() : null,
+ 'completionThreshold' => $sco->getCompletionThreshold(),
+ 'prerequisites' => $sco->getPrerequisites(),
+ ],
+ 'parent' => !empty($parent) ? ['id' => $parent->getUuid()] : null,
+ 'children' => array_map(function (Sco $scoChild) {
+ return $this->serialize($scoChild);
+ }, is_array($sco->getScoChildren()) ? $sco->getScoChildren() : $sco->getScoChildren()->toArray()),
+ ];
+ }
+}
diff --git a/src/Entity/ScoTracking.php b/src/Entity/ScoTracking.php
new file mode 100644
index 0000000..c0b001d
--- /dev/null
+++ b/src/Entity/ScoTracking.php
@@ -0,0 +1,343 @@
+<?php
+
+
+namespace Peopleaps\Scorm\Entity;
+
+
+class ScoTracking
+{
+ public $userId;
+ public $sco;
+ public $scoreRaw;
+ public $scoreMin;
+ public $scoreMax;
+ public $progression = 0;
+ public $scoreScaled;
+ public $lessonStatus;
+ public $completionStatus;
+ public $sessionTime;
+ public $totalTimeInt;
+ public $totalTimeString;
+ public $entry;
+ public $suspendData;
+ public $credit;
+ public $exitMode;
+ public $lessonLocation;
+ public $lessonMode;
+ public $isLocked;
+ public $details;
+ public $latestDate;
+
+ public function getUserId()
+ {
+ return $this->userId;
+ }
+
+ public function setUserId($userId)
+ {
+ $this->userId = $userId;
+ }
+
+ /**
+ * @return Sco
+ */
+ public function getSco()
+ {
+ return $this->sco;
+ }
+
+ public function setSco($sco)
+ {
+ $this->sco = $sco;
+ }
+
+ public function getScoreRaw()
+ {
+ return $this->scoreRaw;
+ }
+
+ public function setScoreRaw($scoreRaw)
+ {
+ $this->scoreRaw = $scoreRaw;
+ }
+
+ public function getScoreMin()
+ {
+ return $this->scoreMin;
+ }
+
+ public function setScoreMin($scoreMin)
+ {
+ $this->scoreMin = $scoreMin;
+ }
+
+ public function getScoreMax()
+ {
+ return $this->scoreMax;
+ }
+
+ public function setScoreMax($scoreMax)
+ {
+ $this->scoreMax = $scoreMax;
+ }
+
+ public function getScoreScaled()
+ {
+ return $this->scoreScaled;
+ }
+
+ public function setScoreScaled($scoreScaled)
+ {
+ $this->scoreScaled = $scoreScaled;
+ }
+
+ public function getLessonStatus()
+ {
+ return $this->lessonStatus;
+ }
+
+ public function setLessonStatus($lessonStatus)
+ {
+ $this->lessonStatus = $lessonStatus;
+ }
+
+ public function getCompletionStatus()
+ {
+ return $this->completionStatus;
+ }
+
+ public function setCompletionStatus($completionStatus)
+ {
+ $this->completionStatus = $completionStatus;
+ }
+
+ public function getSessionTime()
+ {
+ return $this->sessionTime;
+ }
+
+ public function setSessionTime($sessionTime)
+ {
+ $this->sessionTime = $sessionTime;
+ }
+
+ public function getTotalTime($scormVersion)
+ {
+ if (Scorm::SCORM_2004 === $scormVersion) {
+ return $this->totalTimeString;
+ } else {
+ return $this->totalTimeInt;
+ }
+ }
+
+ public function setTotalTime($totalTime, $scormVersion)
+ {
+ if (Scorm::SCORM_2004 === $scormVersion) {
+ $this->setTotalTimeString($totalTime);
+ } else {
+ $this->setTotalTimeInt($totalTime);
+ }
+ }
+
+ public function getTotalTimeInt()
+ {
+ return $this->totalTimeInt;
+ }
+
+ public function setTotalTimeInt($totalTimeInt)
+ {
+ $this->totalTimeInt = $totalTimeInt;
+ }
+
+ public function getTotalTimeString()
+ {
+ return $this->totalTimeString;
+ }
+
+ public function setTotalTimeString($totalTimeString)
+ {
+ $this->totalTimeString = $totalTimeString;
+ }
+
+ public function getEntry()
+ {
+ return $this->entry;
+ }
+
+ public function setEntry($entry)
+ {
+ $this->entry = $entry;
+ }
+
+ public function getSuspendData()
+ {
+ return $this->suspendData;
+ }
+
+ public function setSuspendData($suspendData)
+ {
+ $this->suspendData = $suspendData;
+ }
+
+ public function getCredit()
+ {
+ return $this->credit;
+ }
+
+ public function setCredit($credit)
+ {
+ $this->credit = $credit;
+ }
+
+ public function getExitMode()
+ {
+ return $this->exitMode;
+ }
+
+ public function setExitMode($exitMode)
+ {
+ $this->exitMode = $exitMode;
+ }
+
+ public function getLessonLocation()
+ {
+ return $this->lessonLocation;
+ }
+
+ public function setLessonLocation($lessonLocation)
+ {
+ $this->lessonLocation = $lessonLocation;
+ }
+
+ public function getLessonMode()
+ {
+ return $this->lessonMode;
+ }
+
+ public function setLessonMode($lessonMode)
+ {
+ $this->lessonMode = $lessonMode;
+ }
+
+ public function getIsLocked()
+ {
+ return $this->isLocked;
+ }
+
+ public function setIsLocked($isLocked)
+ {
+ $this->isLocked = $isLocked;
+ }
+
+ public function getDetails()
+ {
+ return $this->details;
+ }
+
+ public function setDetails($details)
+ {
+ $this->details = $details;
+ }
+
+ public function getLatestDate()
+ {
+ return $this->latestDate;
+ }
+
+ public function setLatestDate(\DateTime $latestDate = null)
+ {
+ $this->latestDate = $latestDate;
+ }
+
+ public function getProgression()
+ {
+ return $this->progression;
+ }
+
+ public function setProgression($progression)
+ {
+ $this->progression = $progression;
+ }
+
+ public function getFormattedTotalTime()
+ {
+ if (Scorm::SCORM_2004 === $this->sco->getScorm()->getVersion()) {
+ return $this->getFormattedTotalTimeString();
+ } else {
+ return $this->getFormattedTotalTimeInt();
+ }
+ }
+
+ public function getFormattedTotalTimeInt()
+ {
+ $remainingTime = $this->totalTimeInt;
+ $hours = intval($remainingTime / 360000);
+ $remainingTime %= 360000;
+ $minutes = intval($remainingTime / 6000);
+ $remainingTime %= 6000;
+ $seconds = intval($remainingTime / 100);
+ $remainingTime %= 100;
+
+ $formattedTime = '';
+
+ if ($hours < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $hours.':';
+
+ if ($minutes < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $minutes.':';
+
+ if ($seconds < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $seconds.'.';
+
+ if ($remainingTime < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $remainingTime;
+
+ return $formattedTime;
+ }
+
+ public function getFormattedTotalTimeString()
+ {
+ $pattern = '/^P([0-9]+Y)?([0-9]+M)?([0-9]+D)?T([0-9]+H)?([0-9]+M)?([0-9]+S)?$/';
+ $formattedTime = '';
+
+ if (!empty($this->totalTimeString) && 'PT' !== $this->totalTimeString && preg_match($pattern, $this->totalTimeString)) {
+ $interval = new \DateInterval($this->totalTimeString);
+ $time = new \DateTime();
+ $time->setTimestamp(0);
+ $time->add($interval);
+ $timeInSecond = $time->getTimestamp();
+
+ $hours = intval($timeInSecond / 3600);
+ $timeInSecond %= 3600;
+ $minutes = intval($timeInSecond / 60);
+ $timeInSecond %= 60;
+
+ if ($hours < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $hours.':';
+
+ if ($minutes < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $minutes.':';
+
+ if ($timeInSecond < 10) {
+ $formattedTime .= '0';
+ }
+ $formattedTime .= $timeInSecond;
+ } else {
+ $formattedTime .= '00:00:00';
+ }
+
+ return $formattedTime;
+ }
+}
diff --git a/src/Entity/Scorm.php b/src/Entity/Scorm.php
new file mode 100644
index 0000000..4095986
--- /dev/null
+++ b/src/Entity/Scorm.php
@@ -0,0 +1,146 @@
+<?php
+
+
+namespace Peopleaps\Scorm\Entity;
+
+
+use Doctrine\Common\Collections\ArrayCollection;
+
+class Scorm
+{
+ const SCORM_12 = 'scorm_12';
+ const SCORM_2004 = 'scorm_2004';
+
+ public $uuid;
+ public $id;
+ public $version;
+ public $hashName;
+ public $ratio = 56.25;
+ public $scos;
+ public $scoSerializer;
+
+ /**
+ * @return string
+ */
+ public function getUuid()
+ {
+ return $this->uuid;
+ }
+
+ /**
+ * @param int $id
+ */
+ public function setUuid($uuid)
+ {
+ $this->uuid = $uuid;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param int $id
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * @param string $version
+ */
+ public function setVersion($version)
+ {
+ $this->version = $version;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHashName()
+ {
+ return $this->hashName;
+ }
+
+ /**
+ * @param string $hashName
+ */
+ public function setHashName($hashName)
+ {
+ $this->hashName = $hashName;
+ }
+
+ /**
+ * @return float
+ */
+ public function getRatio()
+ {
+ return $this->ratio;
+ }
+
+ /**
+ * @param float $ratio
+ */
+ public function setRatio($ratio)
+ {
+ $this->ratio = $ratio;
+ }
+
+ /**
+ * @return Sco[]
+ */
+ public function getScos()
+ {
+ return $this->scos;
+ }
+
+ /**
+ * @return Sco[]
+ */
+ public function getRootScos()
+ {
+ $roots = [];
+
+ if (!empty($this->scos)) {
+ foreach ($this->scos as $sco) {
+ if (is_null($sco->getScoParent())) {
+ // Root sco found
+ $roots[] = $sco;
+ }
+ }
+ }
+
+ return $roots;
+ }
+
+ public function serialize(Scorm $scorm)
+ {
+ return [
+ 'id' => $scorm->getUuid(),
+ 'version' => $scorm->getVersion(),
+ 'hashName' => $scorm->getHashName(),
+ 'ratio' => $scorm->getRatio(),
+ 'scos' => $this->serializeScos($scorm),
+ ];
+ }
+
+ private function serializeScos(Scorm $scorm)
+ {
+ return array_map(function (Sco $sco) {
+ return $sco->serialize($sco);
+ }, $scorm->getRootScos());
+ }
+}