public 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)); } } } } }