ImportUrlencoded($lessonPath); $LESSON_ID = $oPath->GetBottom(); if ($LESSON_ID === false) { CAdminMessage::ShowMessage(GetMessage('LEARNING_BAD_LESSON')); require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php'); exit(); } $uriLessonPath = $oPath->ExportUrlencoded(); unset ($lessonPath); if (isset($from) && $from <> '') $str_from = "&from=".htmlspecialcharsbx($from); else $str_from = ""; $oAccess = CLearnAccess::GetInstance($USER->GetID()); $bAccessLessonModify = $oAccess->IsLessonAccessible ($LESSON_ID, CLearnAccess::OP_LESSON_WRITE); $lesson = CLearnLesson::GetList(Array(), Array('LESSON_ID' => $LESSON_ID)); $arLesson = $lesson->Fetch(); $oTree = CLearnLesson::GetTree($LESSON_ID, array('EDGE_SORT' => 'asc'), array(), false); $arSubLessons = $oTree->GetTreeAsList(); $arSubLessonsIDs = array(); foreach ($arSubLessons as $arSubLesson) $arSubLessonsIDs[] = (int) $arSubLesson['LESSON_ID']; $arSubLessonsIDs[] = (int) $LESSON_ID; if ( ! $bAccessLessonModify ) { $APPLICATION->SetTitle(GetMessage('LEARNING_QUESTION')); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $aContext = array( array( "ICON" => "btn_list", "TEXT" => GetMessage("LEARNING_BACK_TO_ADMIN"), "LINK" => "learn_unilesson_admin.php?lang=" . LANG . GetFilterParams("filter_") . '&LESSON_PATH=' . $uriLessonPath, "TITLE" => GetMessage("LEARNING_BACK_TO_ADMIN") ), ); $context = new CAdminContextMenu($aContext); $context->Show(); CAdminMessage::ShowMessage(GetMessage("LEARNING_BAD_LESSON")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $sTableID = "t_question_admin"; $oSort = new CAdminSorting($sTableID, "timestamp_x", "desc");// sort initializing $lAdmin = new CAdminList($sTableID, $oSort);// list initializing $arFilterFields = Array( "filter_title", "filter_self", "filter_active", "filter_required", ); $lAdmin->InitFilter($arFilterFields);// filter initializing $arFilter = Array( 'LESSON_ID' => $arSubLessonsIDs, "SELF" => $filter_self, "ACTIVE" => $filter_active, "CORRECT_REQUIRED" => $filter_required, "?NAME" => $filter_title, ); if ($lAdmin->EditAction()) // save from the list { foreach($FIELDS as $ID => $arFields) { $ID = intval($ID); if(!$lAdmin->IsUpdated($ID)) continue; // http://jabber.bx/view.php?id=39495 if (isset($arFields['FILE_ID'])) unset($arFields['FILE_ID']); $DB->StartTransaction(); $ob = new CLQuestion; if(!$ob->Update($ID, $arFields)) { if($e = $APPLICATION->GetException()) { $e = $APPLICATION->GetException(); $lAdmin->AddUpdateError(GetMessage("SAVE_ERROR").$ID.": ".$e->GetString(), $ID); $DB->Rollback(); } } $DB->Commit(); } } // group and single actions processing if($arID = $lAdmin->GroupAction()) { if($_REQUEST['action_target']=='selected') { $rsData = CLQuestion::GetList(Array($by=>$order), $arFilter); while($arRes = $rsData->Fetch()) $arID[] = $arRes['ID']; } foreach($arID as $ID) { if($ID == '') continue; $ID = intval($ID); switch($_REQUEST['action']) { case "delete": @set_time_limit(0); $DB->StartTransaction(); $cl = new CLQuestion; if(!$cl->Delete($ID)) { $DB->Rollback(); $lAdmin->AddGroupError(GetMessage("LEARNING_DELETE_ERROR"), $ID); } $DB->Commit(); break; case "self": case "deself": // We shouldn't do this for text lessons $rs = CLQuestion::GetByID($ID); $arQuestionData = $rs->Fetch(); if ($arQuestionData) { if ($arQuestionData['QUESTION_TYPE'] !== 'T') { $cl = new CLQuestion; $arFields = Array("SELF"=>($_REQUEST['action']=="self"?"Y":"N")); if(!$cl->Update($ID, $arFields)) if($e = $APPLICATION->GetException()) $lAdmin->AddGroupError(GetMessage("SAVE_ERROR").$ID.": ".$e->GetString(), $ID); } else $lAdmin->AddGroupError(GetMessage('LEARNING_QUESTION_OF_TEXT_TYPE_IGNORED'), $ID); } break; case "activate": case "deactivate": $cl = new CLQuestion; $arFields = Array("ACTIVE"=>($_REQUEST['action']=="activate"?"Y":"N")); if(!$cl->Update($ID, $arFields)) if($e = $APPLICATION->GetException()) $lAdmin->AddGroupError(GetMessage("SAVE_ERROR").$ID.": ".$e->GetString(), $ID); break; case "required": case "derequired": $cl = new CLQuestion; $arFields = Array("CORRECT_REQUIRED"=>($_REQUEST['action']=="required"?"Y":"N")); if(!$cl->Update($ID, $arFields)) if($e = $APPLICATION->GetException()) $lAdmin->AddGroupError(GetMessage("SAVE_ERROR").$ID.": ".$e->GetString(), $ID); break; } } } // fetch data if (isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "excel") $arNavParams = array(); else $arNavParams = array('nPageSize' => CAdminResult::GetNavSize($sTableID)); $rsData = CLQuestion::GetList(array($by=>$order), $arFilter, true, $arNavParams); $rsData = new CAdminResult($rsData, $sTableID); // navigation string setup $lAdmin->NavText($rsData->GetNavPrint(GetMessage("LEARNING_QUESTION"))); // list header $lAdmin->AddHeaders(array( array("id"=>"ID", "content"=>"ID", "sort"=>"id", "default"=>true), array("id"=>"ACTIVE", "content"=>GetMessage('LEARNING_COURSE_ADM_ACT'),"sort"=>"active", "default"=>true), array("id"=>"TIMESTAMP_X","content"=>GetMessage('LEARNING_COURSE_ADM_DATECH'), "sort"=>"timestamp_x", "default"=>true), array("id"=>"NAME", "content"=>GetMessage('LEARNING_NAME'), "sort"=>"name", "default"=>true), array("id"=>"SORT", "content"=>GetMessage('LEARNING_COURSE_ADM_SORT'),"sort"=>"sort", "default"=>true), array("id"=>"SELF", "content"=>GetMessage('LEARNING_QUESTION_ADM_SELF'),"sort"=>"self", "default"=>true), array("id"=>"CORRECT_REQUIRED", "content"=>GetMessage('LEARNING_QUESTION_ADM_REQUIRED'),"sort"=>"correct_required", "default"=>true), array("id"=>"QUESTION_TYPE", "content"=>GetMessage('LEARNING_QUESTION_ADM_TYPE'),"sort"=>"type", "default"=>true), array("id"=>"POINT", "content"=>GetMessage('LEARNING_QUESTION_ADM_POINT'),"sort"=>"point", "default"=>true), array("id"=>"ANSWERS_STATS", "content"=>GetMessage('LEARNING_QUESTION_ADM_STATS'), "default"=>true), )); $arQuestions = array(); $arQuestionsIds = array(); while($arRes = $rsData->Fetch()) { $arQuestionsIds[] = (int) $arRes['ID']; $arQuestions[] = $arRes; } $arMultiStats = CLAnswer::getMultiStats($arQuestionsIds); // building list foreach ($arQuestions as $arRes) { extract($arRes, EXTR_PREFIX_ALL , 'f'); $row =& $lAdmin->AddRow($f_ID, $arRes); $arStat = $arMultiStats[$f_ID]; $row->AddCheckField("SELF"); $row->AddCheckField("ACTIVE"); $row->AddCheckField("CORRECT_REQUIRED"); $row->AddInputField("NAME",Array("size"=>"35")); $row->AddInputField("SORT", Array("size"=>"3")); $row->AddInputField("POINT", Array("size"=>"3")); $row->AddViewField("QUESTION_TYPE", '
'); $index = '-'; if ($arStat["ALL_CNT"] > 0.1) { $index = 100 * ($arStat["CORRECT_CNT"] / $arStat["ALL_CNT"]); $index = round ($index, 1); $index = sprintf("%03.1f", $index) . '%'; } $row->AddViewField("ANSWERS_STATS", $index . ' (' . $arStat["CORRECT_CNT"] . ' / ' . $arStat["ALL_CNT"] . ')'); $arActions = Array(); $editUrl = "learn_question_edit.php?lang=".LANG.'&LESSON_PATH='.$uriLessonPath ."&ID=".$f_ID.GetFilterParams("filter_", false).$str_from; $row->AddViewField("NAME", ''.htmlspecialcharsbx($f_NAME).''); $arActions[] = array( "ICON" => "edit", "DEFAULT" => "Y", "TEXT" => GetMessage("MAIN_ADMIN_MENU_EDIT"), "ACTION" => $lAdmin->ActionRedirect($editUrl) ); /* $arActions[] = array( "ICON"=>"copy", "TEXT"=>GetMessage("MAIN_ADMIN_ADD_COPY"), "ACTION"=>$lAdmin->ActionRedirect("learn_course_edit.php?COPY_ID=".$f_ID)); */ $arActions[] = array("SEPARATOR"=>true); $arActions[] = array( "ICON" => "delete", "TEXT" => GetMessage("MAIN_ADMIN_MENU_DELETE"), "ACTION" => "if(confirm('" . GetMessageJS('LEARNING_CONFIRM_DEL_MESSAGE') . "')) " . $lAdmin->ActionDoGroup($f_ID, "delete", 'LESSON_PATH=' . $uriLessonPath)); $row->AddActions($arActions); } // list footer $lAdmin->AddFooter( array( array("title"=>GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value"=>$rsData->SelectedRowsCount()), array("counter"=>true, "title"=>GetMessage("MAIN_ADMIN_LIST_CHECKED"), "value"=>"0"), ) ); // group actions buttons $lAdmin->AddGroupActionTable(Array( "self"=>GetMessage("LEARNING_ACTION_SELF"), "deself"=>GetMessage("LEARNING_ACTION_DESELF"), "activate"=>GetMessage("MAIN_ADMIN_LIST_ACTIVATE"), "deactivate"=>GetMessage("MAIN_ADMIN_LIST_DEACTIVATE"), "required"=>GetMessage("MAIN_ADMIN_LIST_REQUIRED"), "derequired"=>GetMessage("MAIN_ADMIN_LIST_NOT_REQUIRED"), "delete"=>GetMessage("MAIN_ADMIN_LIST_DELETE"), ) ); $arContextPopup = Array( Array( "TEXT" => GetMessage('LEARNING_SINGLE_CHOICE'), //"ICON" => "learning-question-s", "LINK" => "learn_question_edit.php?lang=" . LANG . '&LESSON_PATH=' . $uriLessonPath . "&QUESTION_TYPE=S" . GetFilterParams("filter_", false) . $str_from //"window.location='learn_question_edit.php?lang=".LANG."&COURSE_ID=".$COURSE_ID."QUESTION_TYPE=S".GetFilterParams("filter_", false)."'", ), Array( "TEXT" => GetMessage('LEARNING_MULTIPLE_CHOICE'), //"ICON" => "learning-question-m", "LINK" => "learn_question_edit.php?lang=" . LANG . '&LESSON_PATH=' . $uriLessonPath . "&QUESTION_TYPE=M" . GetFilterParams("filter_", false) . $str_from //"window.location='learn_question_edit.php?lang=".LANG."&COURSE_ID=".$COURSE_ID."QUESTION_TYPE=M".GetFilterParams("filter_", false)."'", ), Array( "TEXT" => GetMessage('LEARNING_SORTING'), //"ICON" => "learning-question-s", "LINK" => "learn_question_edit.php?lang=" . LANG . '&LESSON_PATH=' . $uriLessonPath . "&QUESTION_TYPE=R" . GetFilterParams("filter_", false) . $str_from //"window.location='learn_question_edit.php?lang=".LANG."&COURSE_ID=".$COURSE_ID."QUESTION_TYPE=S".GetFilterParams("filter_", false)."'", ), Array( "TEXT" => GetMessage('LEARNING_TEXT_ANSWER'), //"ICON" => "learning-question-m", "LINK" => "learn_question_edit.php?lang=" . LANG . '&LESSON_PATH=' . $uriLessonPath . "&QUESTION_TYPE=T" . GetFilterParams("filter_", false) . $str_from //"window.location='learn_question_edit.php?lang=".LANG."&COURSE_ID=".$COURSE_ID."QUESTION_TYPE=M".GetFilterParams("filter_", false)."'", ), ); $aContext = array( array( "ICON" => "btn_new", "TEXT"=>GetMessage("LEARNING_ADD"), "TITLE"=>GetMessage("LEARNING_ADD_ALT"), "MENU" => $arContextPopup ), ); $lAdmin->AddAdminContextMenu($aContext); // list mode check (if AJAX then terminate the script) $lAdmin->CheckListMode(); $APPLICATION->SetTitle($arLesson['NAME'] . ': ' . GetMessage('LEARNING_QUESTION')); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $filter = new CAdminFilter( $sTableID . "_filter", array( GetMessage("LEARNING_NAME"), GetMessage("LEARNING_F_SELF"), GetMessage("LEARNING_F_ACTIVE2"), GetMessage("LEARNING_F_CORRECT_REQUIRED"), ) ); ?>