%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/learning/classes/general/ |
Current File : //home/bitrix/www/bitrix/modules/learning/classes/general/clearnrelationhelper.php |
<?php class CLearnRelationHelper { public static function RenderForm ($oAccess, $LESSON_ID, $arOPathes) { global $APPLICATION; $curDir = $APPLICATION->GetCurDir(); if (substr($curDir, -1) !== '/') $curDir .= '/'; ?> <script type="text/javascript"> function module_learning_js_admin_function_add_parent(lesson_id, name) { module_learning_js_admin_function_add_child_or_parent('LEARNING_LIST_OF_PARENTS', 'RELATION_PARENT[]', lesson_id, name); //alert ('called: module_learning_js_admin_function_add_parent(' + lesson_id + name + ')'); } function module_learning_js_admin_function_add_child(lesson_id, name) { module_learning_js_admin_function_add_child_or_parent('LEARNING_LIST_OF_DESCENDANTS', 'RELATION_CHILD[]', lesson_id, name); //alert ('called: module_learning_js_admin_function_add_child(' + lesson_id + ')'); } function module_learning_js_admin_function_add_child_or_parent(targetNode, fieldName, lesson_id, name) { var elemId = 'RELATION_PARENT_LID_' + lesson_id; var oDIV = BX.create('DIV', {'props': {'id': elemId}}); var oA = BX.create( 'SPAN', { 'props': { 'className': 'access-delete', }, 'style': { position: 'relative', top: '3px', marginRight: '1px' }, 'events': { 'click': function() { document.getElementById(elemId).parentNode.removeChild(document.getElementById(elemId)); } } } ); var oINPUT = BX.create( 'INPUT', { 'props': { 'type': 'hidden', 'name': fieldName, 'value': lesson_id } } ); var oSPAN = BX.create( 'SPAN', { 'text': '[' + lesson_id + '] ' + name } ); var oSPAN_space = BX.create( 'SPAN', { 'text': ' ' } ); oDIV.appendChild(oA); oDIV.appendChild(oSPAN_space); oDIV.appendChild(oINPUT); oDIV.appendChild(oSPAN); BX(targetNode).appendChild(oDIV); } </script> <?php $arChilds = array(); $key = 0; $isChapter = $isCourse = false; $resChilds = CLearnLesson::GetListOfImmediateChilds($LESSON_ID); while ($arChild = $resChilds->Fetch()) { $isChapter = true; // this lesson is chapter, because there is descendants $arChilds['RELATION_CHILD_' . $key++] = array( 'elemName' => 'RELATION_CHILD[]', 'lessonId' => $arChild['LESSON_ID'], 'Name' => '[<a href="' . htmlspecialcharsbx($curDir) . 'learn_unilesson_edit.php?lang=' . LANG . '&LESSON_ID=' . ($arChild['LESSON_ID'] + 0) . '&LESSON_PATH=' . (int) $arChild['LESSON_ID'] . '" target=_blank>' . (int) $arChild['LESSON_ID'] . '</a>] ' . htmlspecialcharsbx($arChild['NAME']) ); } // Is course? $isCourse = (CLearnLesson::GetLinkedCourse ($LESSON_ID) !== false); ?> <div style="padding:10px;"> <div id="LEARNING_LIST_OF_PARENTS" style="padding:10px 0;"> <h3><?php echo GetMessage('LEARNING_LIST_OF_PARENTS') . ':'; ?></h3> <?php $arParents = array(); $resParents = CLearnLesson::GetListOfImmediateParents($LESSON_ID); while ($arParent = $resParents->Fetch()) { $arParents['RELATION_PARENT_' . $key++] = array( 'elemName' => 'RELATION_PARENT[]', 'lessonId' => $arParent['LESSON_ID'], 'Name' => '[<a href="' . htmlspecialcharsbx($curDir) . 'learn_unilesson_edit.php?lang=' . LANG . '&LESSON_ID=' . ($arParent['LESSON_ID'] + 0) . '&LESSON_PATH=' . (int) $arParent['LESSON_ID'] . '" target=_blank>' . (int) $arParent['LESSON_ID'] . '</a>] ' . htmlspecialcharsbx($arParent['NAME']) ); } foreach ($arParents as $elemId => $arElem) { ?> <div id="<?php echo $elemId; ?>"> <?php if ( ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS) || $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS) ) && ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS) || $oAccess->IsLessonAccessible ($arElem['lessonId'], CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS) ) ) { ?> <span onclick="document.getElementById('<?php echo $elemId; ?>').parentNode.removeChild(document.getElementById('<?php echo $elemId; ?>'))" class="access-delete" style="position:relative; top:3px; margin-right:1px;" > </span> <?php } ?> <input type="hidden" name="<?php echo ($arElem['elemName']); ?>" value="<?php echo (int) $arElem['lessonId']; ?>"> <span style="font-style:italic;"><?php echo ($arElem['Name']); ?></span> </div> <? } ?> </div> <?php if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_TO_PARENTS) || $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_LINK_TO_PARENTS) ) { ?> <div style="padding:0px;"> <a href="javascript:void(0);" class="bx-action-href" onclick="window.open('<?php echo addslashes(htmlspecialcharsbx($curDir)); ?>learn_unilesson_admin.php?lang=<?php echo LANGUAGE_ID; ?>&search_retpoint=module_learning_js_admin_function_add_parent&search_mode_type=parents_candidates', 'module_learning_js_admin_window_select_lessons_for_relations', 'scrollbars=yes,resizable=yes,width=960,height=500,top='+Math.floor((screen.height - 560)/2-14)+',left='+Math.floor((screen.width - 960)/2-5));" ><?php echo GetMessage('LEARNING_ADD_ELEMENT'); ?></a> </div> <?php } ?> <div style="height:25px;"> </div> <div id="LEARNING_LIST_OF_DESCENDANTS" style="padding:10px 0;"> <h3><?php echo GetMessage('LEARNING_LIST_OF_DESCENDANTS') . ':'; ?></h3> <?php foreach ($arChilds as $elemId => $arElem) { ?> <div id="<?php echo $elemId; ?>"> <?php if ( ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS) || $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS) ) && ( $oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS) || $oAccess->IsLessonAccessible ($arElem['lessonId'], CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS) ) ) { ?> <a href="javascript:void(0);" onclick="document.getElementById('<?php echo $elemId; ?>').parentNode.removeChild(document.getElementById('<?php echo $elemId; ?>'))" class="access-delete"></a> <?php } ?> <input type="hidden" name="<?php echo ($arElem['elemName']); ?>" value="<?php echo (int) $arElem['lessonId']; ?>"> <span style="font-style:italic;"><?php echo ($arElem['Name']); ?></span> </div> <? } ?> </div> <?php if ($oAccess->IsBaseAccess(CLearnAccess::OP_LESSON_LINK_DESCENDANTS) || $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_LINK_DESCENDANTS) ) { ?> <div style="padding:0px;"> <a href="javascript:void(0);" class="bx-action-href" onclick="window.open('<?php echo addslashes(htmlspecialcharsbx($curDir)); ?>learn_unilesson_admin.php?lang=<?php echo LANGUAGE_ID; ?>&search_retpoint=module_learning_js_admin_function_add_child', 'module_learning_js_admin_window_select_lessons_for_relations', 'scrollbars=yes,resizable=yes,width=960,height=500,top='+Math.floor((screen.height - 560)/2-14)+',left='+Math.floor((screen.width - 960)/2-5));" ><?php echo GetMessage('LEARNING_ADD_ELEMENT'); ?></a> </div> <?php } ?> <div style="height:25px;"> </div> <hr> <div id="LEARNING_LIST_OF_ALL_PARENT_PATHES" style="padding:10px 0;"> <?php $cntParentPathes = count($arOPathes); $langPhraseBase = 'LEARNING_LIST_OF_ALL_PARENT_PATHES_FOR_'; $lessonType = 'LESSON'; if ($isCourse) $lessonType = 'COURSE'; elseif ($isChapter) $lessonType = 'CHAPTER'; $isEmpty = ''; if ($cntParentPathes === 0) $isEmpty = '_IS_EMPTY'; echo '<h3>' . GetMessage($langPhraseBase . $lessonType . $isEmpty) . '</h3>'; if ($cntParentPathes > 0) { $pattern = '[<a href="' . addslashes(htmlspecialcharsbx($curDir)) . 'learn_unilesson_edit.php?lang=' . LANG . '&LESSON_ID=#LESSON_ID#&LESSON_PATH=#LESSON_ID#" target="_blank">#LESSON_ID#</a>] #NAME#'; foreach ($arOPathes as $oPath) { echo $oPath->GetPathAsHumanReadableString(' / ', $pattern); if ($oPath->Count() >= 1) { if (CLearnLesson::IsPublishProhibited ($LESSON_ID, $oPath->GetTop())) echo ' <span style="color:grey;">(' . GetMessage('LEARNING_LESSON_IS_PUBLISH_PROHIBITED') . ')</span>'; } echo '<br>'; } } ?> </div> </div> <?php } 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)); } } } } } }