/** * <p>Метод изменяет параметры курса с идентификатором ID.</p> * * * * * @param int $ID Идентификатор изменяемого курса. * * * * @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 bool <p>Метод возвращает <i>true</i>, если изменение прошло успешно, при * возникновении ошибки функция вернет <i>false</i>. При возникновении * ошибки в исключениях будет содержаться текст ошибки.</p> * * * <h4>Example</h4> * <pre> * <? * if (CModule::IncludeModule("learning")) * { * $arFields = Array( * "ACTIVE" => "Y", * "NAME" => "New name", * "SITE_ID" => Array("en"), //Sites * ); * * $ID = 1;//Course ID * * $course = new CCourse; * $success = $course->Update($ID, $arFields); * * 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/fields.php#course">Поля курса</a> </li> <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/add.php">Add</a> </li> </ul> <a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/learning/classes/ccourse/update.php * @author Bitrix */ public function Update($ID, $arFields) { global $DB; $ID = intval($ID); if ($ID < 1) { return false; } if (is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") { $arFields["ACTIVE"] = "N"; } if (is_set($arFields, "DESCRIPTION_TYPE") && $arFields["DESCRIPTION_TYPE"] != "html") { $arFields["DESCRIPTION_TYPE"] = "text"; } 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, "RATING") && !in_array($arFields["RATING"], array("Y", "N"))) { $arFields["RATING"] = NULL; } if (is_set($arFields, "RATING_TYPE") && !in_array($arFields["RATING_TYPE"], array("like", "standart_text", "like_graphic", "standart"))) { $arFields["RATING_TYPE"] = NULL; } $lessonId = self::CourseGetLinkedLesson($ID); if ($this->CheckFields($arFields, $ID) && $lessonId !== false) { if (array_key_exists('ID', $arFields)) { unset($arFields["ID"]); } $arFieldsLesson = $arFields; $arFieldsToUnset = array('GROUP_ID', 'SITE_ID'); foreach ($arFieldsToUnset as $key => $value) { if (array_key_exists($value, $arFieldsLesson)) { unset($arFieldsLesson[$value]); } } //Sites if (is_set($arFields, "SITE_ID")) { $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__); } CLearnLesson::Update($lessonId, $arFieldsLesson); if ($ID && (is_set($arFields, "NAME") || is_set($arFields, "DESCRIPTION") || 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); CSearch::Index("learning", "C" . $ID, $arSearchIndex); } CSearch::ChangePermission("learning", $arGroupPermissions, false, "C" . $arCourse["ID"]); } } } global $CACHE_MANAGER; $CACHE_MANAGER->ClearByTag('LEARN_COURSE_' . $ID); return true; } return false; }
$arDETAIL_PICTURE["MODULE_ID"] = "learning"; $arDETAIL_PICTURE["description"] = ${"DETAIL_PICTURE_descr"}; // If we are in context of parent lesson => there is edge params if (isset($g_learn_parentLessonId)) { $arEdgeProperties = array('SORT' => $_POST['EDGE_SORT']); } $arFields = array("ACTIVE" => $ACTIVE !== 'Y' ? 'N' : 'Y', "NAME" => $NAME, "KEYWORDS" => $KEYWORDS, "CODE" => $CODE, "DETAIL_PICTURE" => $arDETAIL_PICTURE, "DETAIL_TEXT" => $DETAIL_TEXT, "DETAIL_TEXT_TYPE" => $DETAIL_TEXT_TYPE, "PREVIEW_PICTURE" => $arPREVIEW_PICTURE, "PREVIEW_TEXT" => $PREVIEW_TEXT, "PREVIEW_TEXT_TYPE" => $PREVIEW_TEXT_TYPE); if ($CONTENT_SOURCE == "file") { $arFields["DETAIL_TEXT_TYPE"] = "file"; $arFields["LAUNCH"] = $LAUNCH; } $USER_FIELD_MANAGER->EditFormAddFields('LEARNING_LESSONS', $arFields); $res = true; try { 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); }
public function SaveInlineEditedItems() { if (!$this->IsNeedSaveInlineEditedItems()) { return $this; } if (check_bitrix_sessid() !== true) { throw new CLearnRenderAdminUnilessonListException('', CLearnRenderAdminUnilessonListException::C_ACCESS_DENIED); } foreach ($_POST['FIELDS'] as $lessonId => $arFields) { $arEdgeProperties = array(); $wasError = false; try { // skip not changed items if (!$this->oList->IsUpdated($lessonId)) { continue; } // throws exception if access denied $this->EnsureLessonUpdateAccess($lessonId); $courseId = CLearnLesson::GetLinkedCourse($lessonId); // Depends on current list mode, we must update sort index // of element (only for course) or sort index of relation between // child and parent lessons. // So, we must rename SORT to COURSE_SORT or EDGE_SORT if (array_key_exists('SORT', $arFields)) { if ($this->IsListAnyCoursesMode() && $courseId !== false) { $arFields['COURSE_SORT'] = $arFields['SORT']; } elseif ($this->IsListChildLessonsMode()) { $arFields['EDGE_SORT'] = $arFields['SORT']; } else { throw new CLearnRenderAdminUnilessonListException('', CLearnRenderAdminUnilessonListException::C_LOGIC | CLearnRenderAdminUnilessonListException::C_ACTION_UPDATE_FAIL); } unset($arFields['SORT']); } if (isset($arFields['EDGE_SORT'])) { if (isset($_GET['PARENT_LESSON_ID'])) { $arEdgeProperties['SORT'] = $arFields['EDGE_SORT']; } unset($arFields['EDGE_SORT']); } // PUBLISH_PROHIBITED if (array_key_exists('PUBLISH_PROHIBITED', $arFields)) { // PUBLISH_PROHIBITED available in context of most parent course only if ($this->contextCourseLessonId !== false && in_array($arFields['PUBLISH_PROHIBITED'], array('N', 'Y'), true)) { $isProhibited = true; if ($arFields['PUBLISH_PROHIBITED'] === 'N') { $isProhibited = false; } CLearnLesson::PublishProhibitionSetTo($lessonId, $this->contextCourseLessonId, $isProhibited); } unset($arFields['PUBLISH_PROHIBITED']); } // Courses must be updated throws CCourse::Update(); if ($courseId === false) { CLearnLesson::Update($lessonId, $arFields); } else { $ob = new CCourse(); if (!$ob->Update($courseId, $arFields)) { throw new CLearnRenderAdminUnilessonListException('', CLearnRenderAdminUnilessonListException::C_ACTION_UPDATE_FAIL); } unset($ob); } if (isset($_GET['PARENT_LESSON_ID']) && count($arEdgeProperties) > 0) { CLearnLesson::RelationUpdate($_GET['PARENT_LESSON_ID'], $lessonId, $arEdgeProperties); } } catch (CLearnRenderAdminUnilessonListException $e) { $wasError = true; $errorText = $e->getMessage(); $errorCode = $e->getCode(); } catch (Exception $e) { $wasError = true; $errorText = $e->getMessage(); $errorCode = 0; // Because we checks below only CLearnRenderAdminUnilessonListException codes } if ($wasError) { if ($errorCode & CLearnRenderAdminUnilessonListException::C_ACCESS_DENIED) { // Access denied $errmsg = GetMessage('LEARNING_SAVE_ERROR') . ': ' . GetMessage('LEARNING_ACCESS_D'); if (strlen($errorText) > 0) { $errmsg .= ': ' . $errorText; } } else { // Some error occured during update operation $errmsg = GetMessage('LEARNING_SAVE_ERROR') . $lessonId; if (strlen($errorText) > 0) { $errmsg .= ' (' . $errorText . ')'; } } $this->oList->AddUpdateError($errmsg, $lessonId); } } return $this; }