package_dir = $_SERVER["DOCUMENT_ROOT"].$PACKAGE_DIR; //Dir exists? if (!is_dir($this->package_dir)) { $this->LAST_ERROR = GetMessage("LEARNING_BAD_PACKAGE")."
"; return; } //Manifest exists? if (!is_file($this->package_dir."/imsmanifest.xml")) { $this->LAST_ERROR = GetMessage("LEARNING_MANIFEST_NOT_FOUND")."
"; return; } //Sites check if (!is_array($arSITE_ID) || empty($arSITE_ID)) { $this->LAST_ERROR = GetMessage("LEARNING_BAD_SITE_ID")."
"; return; } $this->arSITE_ID = $arSITE_ID; require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/xml.php"); $this->objXML = new CDataXML(); if (!$this->objXML->Load($this->package_dir."/imsmanifest.xml")) { $this->LAST_ERROR = GetMessage("LEARNING_MANIFEST_NOT_FOUND")."
"; return; } } // 2012-04-19 Checked/modified for compatibility with new data model protected function CreateCourse() { global $APPLICATION; if ($this->LAST_ERROR <> '') return false; if (!$title = $this->objXML->SelectNodes("/manifest/organizations/organization/title")) { $this->LAST_ERROR = GetMessage("LEARNING_BAD_NAME"); return false; } $arFields = Array( "NAME" => $title->content, "SITE_ID" => $this->arSITE_ID, "SCORM" => "Y", ); $course = new CCourse; $this->COURSE_ID = $course->Add($arFields); if ($this->COURSE_ID === false) { if($err = $APPLICATION->GetException()) $this->LAST_ERROR = $err->GetString(); return false; } return true; } // 2012-04-19 Checked/modified for compatibility with new data model protected function CreateContent($arItems = array(), $PARENT_ID = 0) { if ($this->LAST_ERROR <> '') return false; if (empty($arItems)) { if ($items = $this->objXML->SelectNodes("/manifest/organizations/organization/")) { $arItems = $items->__toArray(); $arItems = $arItems["#"]["item"]; } } foreach ($arItems as $ar) { $title = $ar["#"]["title"][0]["#"]; $type = (!is_set($ar["#"], "item") && is_set($ar["@"], "identifierref")) ? "LES" : "CHA"; $launch = ""; if ($type == "LES") { foreach($this->arResources as $res) { if ($res["@"]["identifier"] == $ar["@"]["identifierref"]) { $launch = "/".(COption::GetOptionString("main", "upload_dir", "upload"))."/learning/scorm/".$this->COURSE_ID."/"; $launch .= $res["@"]["href"]; if(is_set($ar["@"]["parameters"])) { $launch .= $ar["@"]["parameters"]; } } } } $ID = $this->_MakeItems($title, $type, $launch, $PARENT_ID); if (is_set($ar["#"], "item")) $this->CreateContent($ar["#"]["item"], $ID); } } // 2012-04-20 Checked/modified for compatibility with new data model protected function _MakeItems($TITLE, $TYPE, $LAUNCH, $PARENT_ID) { global $APPLICATION; if ($PARENT_ID === 0) { $linkToParentLessonId = CCourse::CourseGetLinkedLesson ($this->COURSE_ID); } else { $linkToParentLessonId = (int) $PARENT_ID; } if ($TYPE == "LES") { $arFields = Array( 'NAME' => $TITLE, 'LAUNCH' => $LAUNCH, 'DETAIL_TEXT_TYPE' => "file" ); } elseif ($TYPE == "CHA") { $arFields = Array( 'NAME' => $TITLE ); } else { return $PARENT_ID; } // properties (in context of parent) by default $arProperties = array('SORT' => 500); $ID = CLearnLesson::Add ( $arFields, false, // is it course? - No, it isn't. $linkToParentLessonId, $arProperties); if ($ID > 0) return $ID; else { if($e = $APPLICATION->GetException()) $this->arWarnings[$TYPE][] = Array("TITLE" => $TITLE, "TEXT" =>$e->GetString()); } } // 2012-04-19 Checked/modified for compatibility with new data model public function ImportPackage() { $resources = $this->objXML->SelectNodes("/manifest/resources/"); $this->arResources = $resources->__toArray(); $this->arResources = $this->arResources["#"]["resource"]; if (!$this->CreateCourse()) return false; $this->CreateContent(); CLearnHelper::CopyDirFiles( $this->package_dir, $_SERVER["DOCUMENT_ROOT"]."/".(COption::GetOptionString("main", "upload_dir", "upload"))."/learning/scorm/".$this->COURSE_ID, true, true); return true; } }