• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/clearnrelationhelper.php
  • Класс: CLearnRelationHelper
  • Вызов: CLearnRelationHelper::ProccessPOST
static function ProccessPOST($oAccess, $LESSON_ID, $sort = false)
{
	$isAccessUseCache = true;

	if ($sort === false)
		$sort = 500;

	// Remove/add relations from/to parent
	if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_TO_PARENTS, $isAccessUseCache)
		|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_LINK_TO_PARENTS, $isAccessUseCache)
		|| $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS, $isAccessUseCache)
		|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS, $isAccessUseCache)
	)
	{
		$arCurParentsIds = array();
		$resParents = CLearnLesson::GetListOfImmediateParents($LESSON_ID);
		while ($arParent = $resParents->Fetch())
			$arCurParentsIds[] = (int) $arParent['LESSON_ID'];

		$arDestParentsIds = array();

		if (isset($_POST['RELATION_PARENT']) && is_array($_POST['RELATION_PARENT']))
			foreach ($_POST['RELATION_PARENT'] as $key => $relatedLessonId)
				$arDestParentsIds[] = (int) $relatedLessonId;

		// remove relations
		if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS, $isAccessUseCache)
			|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS, $isAccessUseCache)
		)
		{
			$arRemoveIds = array_diff ($arCurParentsIds, $arDestParentsIds);
			foreach ($arRemoveIds as $relatedLessonId)
			{
				if ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS, $isAccessUseCache)
					|| $oAccess->IsLessonAccessible ($relatedLessonId, CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS, $isAccessUseCache) 
				)
				{
					CLearnLesson::RelationRemove ($relatedLessonId, $LESSON_ID);
				}
			}
		}

		// add relations
		if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_TO_PARENTS, $isAccessUseCache)
			|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_LINK_TO_PARENTS, $isAccessUseCache)
		)
		{
			$arAddIds = array_diff ($arDestParentsIds, $arCurParentsIds);
			foreach ($arAddIds as $relatedLessonId)
			{
				if ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_DESCENDANTS, $isAccessUseCache)
					|| $oAccess->IsLessonAccessible ($relatedLessonId, CLearnAccess::OP_LESSON_LINK_DESCENDANTS, $isAccessUseCache) 
				)
				{
					CLearnLesson::RelationAdd ($relatedLessonId, $LESSON_ID, array('SORT' => $sort));
				}
			}
		}
	}

	// Remove/add relations from/to childs
	if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_DESCENDANTS, $isAccessUseCache)
		|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_LINK_DESCENDANTS, $isAccessUseCache)
		|| $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS, $isAccessUseCache)
		|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS, $isAccessUseCache)
	)
	{
		$arCurChildsIds = array();
		$resChilds = CLearnLesson::GetListOfImmediateChilds($LESSON_ID);
		while ($arChild = $resChilds->Fetch())
			$arCurChildsIds[] = (int) $arChild['LESSON_ID'];

		$arDestChildsIds  = array();

		if (isset($_POST['RELATION_CHILD']) && is_array($_POST['RELATION_CHILD']))
			foreach ($_POST['RELATION_CHILD'] as $key => $relatedLessonId)
				$arDestChildsIds[] = (int) $relatedLessonId;

		// remove relations
		if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS, $isAccessUseCache)
			|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS, $isAccessUseCache)
		)
		{
			$arRemoveIds = array_diff ($arCurChildsIds, $arDestChildsIds);
			foreach ($arRemoveIds as $relatedLessonId)
			{
				if ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS, $isAccessUseCache)
					|| $oAccess->IsLessonAccessible ($relatedLessonId, CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS, $isAccessUseCache) 
				)
				{
					CLearnLesson::RelationRemove ($LESSON_ID, $relatedLessonId);
				}
			}
		}

		// add relations
		if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_DESCENDANTS, $isAccessUseCache)
			|| $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_LINK_DESCENDANTS, $isAccessUseCache)
		)
		{
			$arAddIds = array_diff ($arDestChildsIds, $arCurChildsIds);
			foreach ($arAddIds as $relatedLessonId)
			{
				if ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_TO_PARENTS, $isAccessUseCache)
					|| $oAccess->IsLessonAccessible ($relatedLessonId, CLearnAccess::OP_LESSON_LINK_TO_PARENTS, $isAccessUseCache) 
				)
				{
					CLearnLesson::RelationAdd ($LESSON_ID, $relatedLessonId, array('SORT' => $sort));
				}
			}
		}
	}
}