- Модуль: learning
- Путь к файлу: ~/bitrix/modules/learning/classes/general/clearnlesson.php
- Класс: CLearnLesson
- Вызов: CLearnLesson::Add
static function Add ($arFields,
$isCourse = false,
$parentLessonId = true,
$arProperties = array('SORT' => 500),
$isCheckPermissions = true,
$checkPermissionsForUserId = -1 // -1 means - for current logged user
)
{
global $USER_FIELD_MANAGER;
$isAccessGranted = false;
if ($isCheckPermissions)
{
if (CLearnAccessMacroses::CanUserAddLessonWithoutParentLesson(
array('user_id' => $checkPermissionsForUserId)
)
)
{
if ($parentLessonId === true)
{
// we don't need to link lesson to parent,
// so permissions check is complete
$isAccessGranted = true;
}
else
{
// We must check, is user have access to link lesson to some parent
if (CLearnAccessMacroses::CanUserAddLessonToParentLesson (
array(
'parent_lesson_id' => $parentLessonId,
'user_id' => $checkPermissionsForUserId
)
)
)
{
$isAccessGranted = true;
}
}
}
}
else
$isAccessGranted = true; // don't check permissions
if ( ! $isAccessGranted )
{
throw new LearnException(
'EA_ACCESS_DENIED',
LearnException::EXC_ERR_ALL_ACCESS_DENIED);
}
// If lesson is course, there is can be additional params, which must be extracted
if ($isCourse)
{
// Additional fields will be removed from $arFields by this method
$arCourseFields = self::_ExtractAdditionalCourseFields ($arFields);
}
if ( ! $USER_FIELD_MANAGER->CheckFields('LEARNING_LESSONS', 0, $arFields) )
return (false);
foreach(GetModuleEvents('learning', 'OnBeforeLessonAdd', true) as $arEvent)
ExecuteModuleEventEx($arEvent, array(&$arFields));
if (
( ! isset($arFields['NAME']) )
|| ($arFields['NAME'] == '')
)
{
$lessonId = false;
$arMsg = array(array("id"=>"NAME", "text"=> GetMessage("LEARNING_BAD_NAME")));
$e = new CAdminException($arMsg);
$GLOBALS["APPLICATION"]->ThrowException($e);
}
else
$lessonId = CLearnGraphNode::Create ($arFields);
if ($lessonId)
{
$USER_FIELD_MANAGER->Update('LEARNING_LESSONS', $lessonId, $arFields);
if ($isCourse)
{
// Convert lesson to course
self::BecomeCourse ($lessonId, $arCourseFields);
}
else
{
// Link to parent lesson, if need
if ($parentLessonId !== true)
self::RelationAdd ($parentLessonId, $lessonId, $arProperties);
}
CLearnCacheOfLessonTreeComponent::MarkAsDirty();
}
$arFields['LESSON_ID'] = $lessonId;
foreach(GetModuleEvents('learning', 'OnAfterLessonAdd', true) as $arEvent)
ExecuteModuleEventEx($arEvent, array(&$arFields));
if (!$isCourse)
{
BitrixLearningIntegrationSearch::indexLesson($lessonId);
}
return ($lessonId);
}