• Модуль: 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);
}