read($exerciseId); if (empty($result)) { api_not_allowed(true); } $nameTools = get_lang('ExerciseManagement'); $interbreadcrumb[] = [ 'url' => 'exercise.php?'.api_get_cidreq(), 'name' => get_lang('Exercises'), ]; $interbreadcrumb[] = [ 'url' => 'admin.php?exerciseId='.$exercise->iid.'&'.api_get_cidreq(), 'name' => $exercise->selectTitle(true), ]; $interbreadcrumb[] = [ 'url' => 'exercise_report.php?'.api_get_cidreq().'&exerciseId='.$exercise->iid, 'name' => get_lang('StudentScore'), ]; $courseId = api_get_course_int_id(); $courseInfo = api_get_course_info(); $form = new FormValidator('search_form', 'GET', api_get_self().'?id='.$exerciseId.'&'.api_get_cidreq()); $form->addCourseHiddenParams(); $form->addHidden('id', $exerciseId); $courseGroups = GroupManager::get_group_list(null, $courseInfo); if (!empty($courseGroups)) { $courseGroups = array_column($courseGroups, 'name', 'iid'); $form->addSelect( 'groups', get_lang('Groups'), $courseGroups, [ 'multiple' => true, ] ); } $courseUsers = CourseManager::get_user_list_from_course_code($courseInfo['code']); if (!empty($courseUsers)) { array_walk( $courseUsers, function (&$data, $key) { $data = api_get_person_name($data['firstname'], $data['lastname']); } ); } $form->addSelect( 'users', get_lang('Users'), $courseUsers, [ 'multiple' => true, ] ); $form->addButtonSearch(get_lang('Search'), 'searchSubmit'); $formToString = $form->toHtml(); $table = new HTML_Table(['class' => 'table table-hover table-striped']); $row = 0; $column = 0; $headers = [ get_lang('Question'), get_lang('WrongAnswer').' / '.get_lang('Total'), '%', ]; foreach ($headers as $header) { $table->setHeaderContents($row, $column, $header); $column++; } if ($exportXls) { $tableXls[] = $headers; } $row++; $scoreDisplay = new ScoreDisplay(); $orderedData = []; if ($form->validate()) { $questions = ExerciseLib::getWrongQuestionResults($courseId, $exerciseId, $sessionId, $groups, $users); foreach ($questions as $data) { $questionId = (int) $data['question_id']; $total = ExerciseLib::getTotalQuestionAnswered( $courseId, $exerciseId, $questionId, $sessionId, $groups, $users ); $ordered = [ $data['question'], $data['count'].' / '.$total, $scoreDisplay->display_score([$data['count'], $total], SCORE_AVERAGE), ]; $orderedData[] = $ordered; if ($exportXls) { $tableXls[] = $ordered; } } } else { $questions = ExerciseLib::getWrongQuestionResults($courseId, $exerciseId, $sessionId); foreach ($questions as $data) { $questionId = (int) $data['question_id']; $total = ExerciseLib::getTotalQuestionAnswered($courseId, $exerciseId, $questionId, $sessionId); $ordered = [ $data['question'], $data['count'].' / '.$total, $scoreDisplay->display_score([$data['count'], $total], SCORE_AVERAGE), ]; $orderedData[] = $ordered; } } $table = new SortableTableFromArray( $orderedData, 0, 100, 'question_tracking' ); $table->hideNavigation = true; $table->column = 2; $column = 0; foreach ($headers as $header) { $table->set_header($column, $header, false); $column++; } if ($exportXls) { $fileName = get_lang('QuestionStats').'_'.api_get_course_id().'_'.$exerciseId.'_'.api_get_local_time(); Export::arrayToXls($tableXls, $fileName); exit; } $htmlHeadXtra[] = ''; Display::display_header($nameTools, get_lang('Exercise')); $actions = ''. Display::return_icon( 'back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM ) .''; $actions .= Display::url( Display::return_icon('excel.png', get_lang('ExportAsXLS'), [], ICON_SIZE_MEDIUM), '#', ['id' => 'export-xls'] ); $actions = Display::div($actions, ['class' => 'actions']); echo $actions; echo $formToString; echo $table->return_table(); Display::display_footer();