protected function _MakeItems($TITLE, $TYPE, $RES_ID, $PARENT_ID) { global $APPLICATION; if ($PARENT_ID === 0) { $linkToParentLessonId = CCourse::CourseGetLinkedLesson($this->COURSE_ID); } else { $linkToParentLessonId = (int) $PARENT_ID; } $createUnilesson = false; if ($TYPE == "LES") { $arFields = array('NAME' => $TITLE); $createUnilesson = true; } elseif ($TYPE == "CHA") { $arFields = array('NAME' => $TITLE); $createUnilesson = true; } elseif ($TYPE == "QUE") { $arFields = array("NAME" => $TITLE, "LESSON_ID" => $linkToParentLessonId); $cl = new CLQuestion(); } elseif ($TYPE == "TES") { $arFields = array("NAME" => $TITLE, "COURSE_ID" => $this->COURSE_ID); $cl = new CTest(); } elseif ($TYPE === 'TMK') { $arFields = array(); $cl = new CLTestMark(); } else { return $PARENT_ID; } $r = new CDataXML(); if (!$r->Load($this->package_dir . "/" . strtolower($RES_ID) . ".xml")) { $r = false; } if ($r !== false) { if ($TYPE == "QUE") { if (($data = $r->SelectNodes("/questestinterop/item/presentation/")) && ($resp = $r->SelectNodes("/questestinterop/item/resprocessing/"))) { $arQ = array(); $arData = $data->__toArray(); $arResp = $resp->__toArray(); if (is_set($arData["#"]["material"][0]["#"], "mattext")) { $arQ["NAME"] = $arData["#"]["material"][0]["#"]["mattext"][0]["#"]; } if (is_set($arData["#"]["material"][0]["#"], "matimage")) { $imageDescription = ''; if (is_set($arData["#"]["material"][0]["#"], 'image_description')) { $imageDescription = $arData["#"]["material"][0]["#"]['image_description'][0]['#']; } $arQ["FILE_ID"] = array("MODULE_ID" => "learning", "name" => basename($arData["#"]["material"][0]["#"]["matimage"][0]["@"]["uri"]), "tmp_name" => $this->package_dir . "/" . $arData["#"]["material"][0]["#"]["matimage"][0]["@"]["uri"], "size" => @filesize($this->package_dir . "/" . $arData["#"]["material"][0]["#"]["matimage"][0]["@"]["uri"]), "type" => $arData["#"]["material"][0]["#"]["matimage"][0]["@"]["imagtype"], 'description' => $imageDescription); } if (is_set($arData["#"]["response_lid"][0]["@"], "rcardinality")) { switch ($arData["#"]["response_lid"][0]["@"]["rcardinality"]) { case "Multiple": $arQ["QUESTION_TYPE"] = 'M'; break; case "Text": $arQ["QUESTION_TYPE"] = 'T'; break; case "Sort": $arQ["QUESTION_TYPE"] = 'R'; break; default: $arQ["QUESTION_TYPE"] = 'S'; break; } } if (is_set($arResp["#"]["respcondition"][0]["#"], "setvar")) { $arQ["POINT"] = $arResp["#"]["respcondition"][0]["#"]["setvar"][0]['#']; } //Additional if ($bx = $r->SelectNodes("/questestinterop/item/bitrix/")) { $arQ = array_merge($arQ, $this->_MakeFields($bx->__toArray(), $TYPE)); unset($bx); } $arFields = array_merge($arFields, $arQ); $cl = new CLQuestion(); $ID = $cl->Add($arFields); if ($ID > 0) { $PARENT_ID = $ID; $arCorrect = array(); if (is_set($arResp["#"]["respcondition"][0]["#"], "conditionvar") && is_set($arResp["#"]["respcondition"][0]["#"]["conditionvar"][0]["#"], "varequal")) { foreach ($arResp["#"]["respcondition"][0]["#"]["conditionvar"][0]["#"]["varequal"] as $ar) { $arCorrect[] = $ar["#"]; } } if (is_set($arData["#"]["response_lid"][0]["#"], "render_choice") && is_set($arData["#"]["response_lid"][0]["#"]["render_choice"][0]["#"], "response_label")) { $i = 0; foreach ($arData["#"]["response_lid"][0]["#"]["render_choice"][0]["#"]["response_label"] as $ar) { $i += 10; $cl = new CLAnswer(); $arFields = array("QUESTION_ID" => $PARENT_ID, "SORT" => $i, "CORRECT" => in_array($ar["@"]["ident"], $arCorrect) ? "Y" : "N", "ANSWER" => $ar["#"]["material"][0]["#"]["mattext"][0]["#"]); $AswerID = $cl->Add($arFields); $res = $AswerID > 0; if (!$res) { if ($e = $APPLICATION->GetException()) { $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString()); } } } } } else { if ($e = $APPLICATION->GetException()) { $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString()); } } unset($cl); unset($data); unset($arQ); unset($resp); unset($arData); unset($arResp); return $PARENT_ID; } } else { if ($data = $r->SelectNodes("/content/")) { $ar = $data->__toArray(); $arFields = array_merge($arFields, $this->_MakeFields($ar, $TYPE)); if ($TYPE === 'TMK') { $arFields['TEST_ID'] = (int) $PARENT_ID; } if (is_set($arFields, "COMPLETED_SCORE") && intval($arFields["COMPLETED_SCORE"]) <= 0) { unset($arFields["COMPLETED_SCORE"]); } if (is_set($arFields, "PREVIOUS_TEST_ID") && intval($arFields["PREVIOUS_TEST_ID"]) <= 0 || !CTest::GetByID($arFields["PREVIOUS_TEST_ID"])->Fetch()) { unset($arFields["PREVIOUS_TEST_ID"], $arFields["PREVIOUS_TEST_SCORE"]); } } } } if ($createUnilesson === false) { $ID = $cl->Add($arFields); unset($cl); } else { $bProhibitPublish = false; // properties (in context of parent) by default $arProperties = array('SORT' => 500); // Lesson's sort order in context of parent if (isset($arFields['EDGE_SORT'])) { $arFields['SORT'] = (int) $arFields['EDGE_SORT']; unset($arFields['EDGE_SORT']); } if (isset($arFields['SORT'])) { $arProperties['SORT'] = (int) $arFields['SORT']; // Lessons doesn't have more SORT field unset($arFields['SORT']); } if (isset($arFields['META_PUBLISH_PROHIBITED'])) { if ($arFields['META_PUBLISH_PROHIBITED'] === 'Y') { $bProhibitPublish = true; } unset($arFields['META_PUBLISH_PROHIBITED']); } // unset fields, that are absent in unilesson $arUnilessonFields = $arFields; $arFieldsNames = array_keys($arUnilessonFields); foreach ($arFieldsNames as $fieldName) { if (!in_array(strtoupper($fieldName), $this->arLessonWritableFields)) { unset($arUnilessonFields[$fieldName]); } } $ID = CLearnLesson::Add($arUnilessonFields, false, $linkToParentLessonId, $arProperties); if ($bProhibitPublish && $ID > 0) { CLearnLesson::PublishProhibitionSetTo($ID, $linkToParentLessonId, $bProhibitPublish); } } if ($ID > 0) { return $ID; } else { if ($e = $APPLICATION->GetException()) { $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString()); } } }
/** * <p>Метод добавляет новый курс.</p> * * * * * @param array $arFields Массив Array("поле"=>"значение", ...). Содержит значения <a * href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#course">всех полей</a> курса. * Обязательные поля должны быть заполнены. <br> Дополнительно в поле * SITE_ID должен находиться массив идентификаторов сайтов, к которым * привязан добавляемый курс. <br> Кроме того, с помощью поля "GROUP_ID", * значением которого должен быть массив соответствий кодов групп * правам доступа, можно установить права для разных групп на доступ * к курсу (см. <a href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/index.php">CCourse</a>::<a * href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/setpermission.php">SetPermission</a>). * * * * @return int <p>Метод возвращает идентификатор добавленного курса, если * добавление прошло успешно. При возникновении ошибки метод вернет * <i>false</i>, а в исключениях будут содержаться ошибки.</p> * * * <h4>Example</h4> * <pre> * <? * * if (CModule::IncludeModule("learning")) * { * $arFields = Array( * "ACTIVE" => "Y", * "NAME" => "My First Course", * "SITE_ID" => Array("ru", "en"), //Sites * "GROUP_ID" => Array("2" => "R"), //Permissions: Everyone can read my course * "SORT" => "100", * "DESCRIPTION" => "It's my first e-Learning course", * "DESCRIPTION_TYPE" => "text", * ); * * $course = new CCourse; * $ID = $course->Add($arFields); * $success = ($ID>0); * * if($success) * { * echo "Ok!"; * } * else * { * if($e = $APPLICATION->GetException()) * echo "Error: ".$e->GetString(); * * } * * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/index.php">CCourse</a>::<a * href="http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/update.php">Update</a> </li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/learning/fields.php#course">Поля курса</a> </li> </ul> <a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/add.php * @author Bitrix */ public function Add($arFields) { global $DB; if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") { $arFields["ACTIVE"] = "N"; } if (is_set($arFields, "DETAIL_TEXT_TYPE") && $arFields["DETAIL_TEXT_TYPE"] != "html") { $arFields["DETAIL_TEXT_TYPE"] = "text"; } if (is_set($arFields, "PREVIEW_TEXT_TYPE") && $arFields["PREVIEW_TEXT_TYPE"] != "html") { $arFields["PREVIEW_TEXT_TYPE"] = "text"; } if (is_set($arFields, "PREVIEW_PICTURE") && strlen($arFields["PREVIEW_PICTURE"]["name"]) <= 0 && strlen($arFields["PREVIEW_PICTURE"]["del"]) <= 0) { unset($arFields["PREVIEW_PICTURE"]); } if (is_set($arFields, "RATING") && !in_array($arFields["RATING"], array("Y", "N"))) { $arFields["RATING"] = "N"; } if (is_set($arFields, "RATING_TYPE") && !in_array($arFields["RATING_TYPE"], array("like", "standart_text", "like_graphic", "standart"))) { $arFields["RATING_TYPE"] = NULL; } if ($this->CheckFields($arFields)) { unset($arFields["ID"]); $arFieldsLesson = $arFields; $arFieldsToUnset = array('GROUP_ID', 'SITE_ID'); // Some fields mustn't be in unilesson foreach ($arFieldsToUnset as $key => $value) { if (array_key_exists($value, $arFieldsLesson)) { unset($arFieldsLesson[$value]); } } $lessonId = CLearnLesson::Add($arFieldsLesson, $isCourse = true); $ID = CLearnLesson::GetLinkedCourse($lessonId); if ($ID === false) { return false; } //Sites $str_LID = "''"; foreach ($arFields["SITE_ID"] as $lang) { $str_LID .= ", '" . $DB->ForSql($lang) . "'"; } $strSql = "DELETE FROM b_learn_course_site WHERE COURSE_ID=" . $ID; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $strSql = "INSERT INTO b_learn_course_site(COURSE_ID, SITE_ID) " . "SELECT " . $ID . ", LID " . "FROM b_lang " . "WHERE LID IN (" . $str_LID . ") "; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); CLearnCacheOfLessonTreeComponent::MarkAsDirty(); if ($ID && (is_set($arFields, "NAME") || is_set($arFields, "DETAIL_TEXT"))) { if (CModule::IncludeModule("search")) { $rsCourse = CCourse::GetByID($ID); if ($arCourse = $rsCourse->Fetch()) { $arGroupPermissions = CCourse::GetGroupPermissions($arCourse["ID"]); if (is_set($arFields, "SITE_ID")) { $arSiteIds = array(); foreach ($arFields["SITE_ID"] as $lang) { $rsSitePaths = CSitePath::GetList(array(), array("SITE_ID" => $lang, "TYPE" => "C")); if ($arSitePaths = $rsSitePaths->Fetch()) { $strPath = $arSitePaths["PATH"]; } else { $strPath = ""; } $arSiteIds[$lang] = str_replace("#COURSE_ID#", $ID, $strPath); } $detailText = ''; if ($arCourse["DETAIL_TEXT_TYPE"] !== 'text') { $detailText = CSearch::KillTags($arCourse['DETAIL_TEXT']); } else { $detailText = strip_tags($arCourse['DETAIL_TEXT']); } $dataBody = ''; if (strlen($detailText) > 0) { $dataBody = $detailText; } else { $dataBody = $arCourse['NAME']; } $arSearchIndex = array("LAST_MODIFIED" => $arCourse["TIMESTAMP_X"], "TITLE" => $arCourse["NAME"], "BODY" => $dataBody, "SITE_ID" => $arSiteIds, "PERMISSIONS" => $arGroupPermissions, "PARAM1" => "C" . $ID); CSearch::Index("learning", "C" . $ID, $arSearchIndex); } } } } return $ID; } return false; }
if ($LESSON_ID > 0) { CLearnLesson::Update($LESSON_ID, $arFields); // If we are in context of parent lesson => update edges properties if (isset($g_learn_parentLessonId) && $g_learn_parentLessonId > 0) { CLearnLesson::RelationUpdate($g_learn_parentLessonId, $LESSON_ID, $arEdgeProperties); } } else { // If we are in context of parent lesson => create linked lesson if (isset($g_learn_parentLessonId) && $g_learn_parentLessonId > 0) { $arNewEdgeProperties = array('SORT' => 500); if (isset($arEdgeProperties['SORT'])) { $arNewEdgeProperties['SORT'] = $arEdgeProperties['SORT']; } $LESSON_ID = CLearnLesson::Add($arFields, false, $g_learn_parentLessonId, $arNewEdgeProperties); } else { $LESSON_ID = CLearnLesson::Add($arFields); } $res = $LESSON_ID > 0; } // PUBLISH_PROHIBITED available in context of most parent course only if ($LESSON_ID > 0 && $topCourseLessonId !== false) { $isProhibited = false; if ($_POST['PUBLISH_PROHIBITED'] === 'Y') { $isProhibited = true; } CLearnLesson::PublishProhibitionSetTo($LESSON_ID, $topCourseLessonId, $isProhibited); } } catch (Exception $e) { $res = false; } if (!$res) {
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, $linkToParentLessonId, $arProperties); if ($ID > 0) { return $ID; } else { if ($e = $APPLICATION->GetException()) { $this->arWarnings[$TYPE][] = array("TITLE" => $TITLE, "TEXT" => $e->GetString()); } } }