/** * Creates defined structure of SCOs. * * @param \DOMNode $source * @param \DOMNodeList $resources * * @return array of Scorm12Sco * * @throws InvalidScormArchiveException */ private function parseItemNodes(\DOMNode $source, \DOMNodeList $resources, Scorm12Sco $parentSco = null) { $item = $source->firstChild; $scos = array(); while (!is_null($item)) { if ($item->nodeName === 'item') { $sco = new Scorm12Sco(); $scos[] = $sco; $sco->setScoParent($parentSco); $this->findAttrParams($sco, $item, $resources); $this->findNodeParams($sco, $item->firstChild); if ($sco->getIsBlock()) { $scos[] = $this->parseItemNodes($item, $resources, $sco); } } $item = $item->nextSibling; } return $scos; }
/** * Copy given sco and its children. * * @param Scorm12Sco $sco * @param Scorm12Resource $resource * @param Scorm12Sco $scoParent */ private function copySco(Scorm12Sco $sco, Scorm12Resource $resource, Scorm12Sco $scoParent = null) { $scoCopy = new Scorm12Sco(); $scoCopy->setScormResource($resource); $scoCopy->setScoParent($scoParent); $scoCopy->setEntryUrl($sco->getEntryUrl()); $scoCopy->setIdentifier($sco->getIdentifier()); $scoCopy->setIsBlock($sco->getIsBlock()); $scoCopy->setLaunchData($sco->getLaunchData()); $scoCopy->setMasteryScore($sco->getMasteryScore()); $scoCopy->setMaxTimeAllowed($sco->getMaxTimeAllowed()); $scoCopy->setParameters($sco->getParameters()); $scoCopy->setPrerequisites($sco->getPrerequisites()); $scoCopy->setTimeLimitAction($sco->getTimeLimitAction()); $scoCopy->setTitle($sco->getTitle()); $scoCopy->setVisible($sco->isVisible()); $this->om->persist($scoCopy); foreach ($sco->getScoChildren() as $scoChild) { $this->copySco($scoChild, $resource, $scoCopy); } }