diff --git a/main/attendance/attendance_controller.php b/main/attendance/attendance_controller.php index 6d4d026fb3..f256ab7f4f 100755 --- a/main/attendance/attendance_controller.php +++ b/main/attendance/attendance_controller.php @@ -303,7 +303,7 @@ class AttendanceController $isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh( api_get_user_id(), api_get_course_info() - ); + ) || api_is_drh(); if ($edit == true) { if (api_is_allowed_to_edit(null, true) || $isDrhOfCourse) { diff --git a/main/attendance/attendance_sheet.php b/main/attendance/attendance_sheet.php index 7c6fdb4907..d0fe07f7de 100755 --- a/main/attendance/attendance_sheet.php +++ b/main/attendance/attendance_sheet.php @@ -16,7 +16,7 @@ api_protect_course_script(true); $isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh( api_get_user_id(), api_get_course_info() -); +) || api_is_drh(); if (api_is_allowed_to_edit(null, true) || api_is_coach(api_get_session_id(), api_get_course_int_id()) || diff --git a/main/gradebook/index.php b/main/gradebook/index.php index 04feeeb673..58a8b91914 100755 --- a/main/gradebook/index.php +++ b/main/gradebook/index.php @@ -786,7 +786,6 @@ if (isset($first_time) && $first_time == 1 && api_is_allowed_to_edit(null, true) } if (api_is_allowed_to_edit(null, true)) { - if (((empty($selectCat)) || (isset($_GET['cidReq']) && $_GET['cidReq'] !== '')) || (isset($_GET['isStudentView']) && $_GET['isStudentView'] == 'false') ) { diff --git a/main/inc/lib/attendance.lib.php b/main/inc/lib/attendance.lib.php index aaa437c451..719e9d8143 100755 --- a/main/inc/lib/attendance.lib.php +++ b/main/inc/lib/attendance.lib.php @@ -154,8 +154,9 @@ class Attendance while ($attendance = Database::fetch_row($res)) { $student_param = ''; - if (api_is_drh() && $_GET['student_id']) { - $student_param = '&student_id='.intval($_GET['student_id']); + $studentRequestId = isset($_GET['student_id']) ? (int) $_GET['student_id'] : 0; + if (api_is_drh() && !empty($studentRequestId)) { + $student_param = '&student_id='.$studentRequestId; } $session_star = ''; @@ -166,8 +167,7 @@ class Attendance $isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh( api_get_user_id(), api_get_course_info() - ); - + ) || api_is_drh(); if (api_is_allowed_to_edit(null, true) || $isDrhOfCourse) { // Link to edit $attendance[1] = ''.$attendance[1].''.$session_star; diff --git a/main/inc/lib/lp_item.lib.php b/main/inc/lib/lp_item.lib.php index d02ac2cf4f..90be7df51c 100755 --- a/main/inc/lib/lp_item.lib.php +++ b/main/inc/lib/lp_item.lib.php @@ -43,10 +43,10 @@ class LpItem { if ($in_c_id > 0 && $in_id > 0) { $item_view_table = Database::get_course_table(TABLE_LP_ITEM); - $sql = "SELECT * FROM $item_view_table - WHERE - c_id=".intval($in_c_id)." AND - id=".intval($in_id); + $sql = "SELECT * FROM $item_view_table + WHERE + c_id=".intval($in_c_id)." AND + iid=".intval($in_id); $res = Database::query($sql); $data = Database::fetch_array($res); @@ -84,27 +84,27 @@ class LpItem { $table = Database::get_course_table(TABLE_LP_ITEM); if ($this->c_id > 0 && $this->id > 0) { - $sql = "UPDATE $table SET - lp_id = '".intval($this->lp_id)."' , - item_type = '".Database::escape_string($this->item_type)."' , - ref = '".Database::escape_string($this->ref)."' , - title = '".Database::escape_string($this->title)."' , - description = '".Database::escape_string($this->description)."' , - path = '".Database::escape_string($this->path)."' , - min_score = '".Database::escape_string($this->min_score)."' , - max_score = '".Database::escape_string($this->max_score)."' , - mastery_score = '".Database::escape_string($this->mastery_score)."' , - parent_item_id = '".Database::escape_string($this->parent_item_id)."' , - previous_item_id = '".Database::escape_string($this->previous_item_id)."' , - next_item_id = '".Database::escape_string($this->next_item_id)."' , - display_order = '".Database::escape_string($this->display_order)."' , - prerequisite = '".Database::escape_string($this->prerequisite)."' , - parameters = '".Database::escape_string($this->parameters)."' , - launch_data = '".Database::escape_string($this->launch_data)."' , - max_time_allowed = '".Database::escape_string($this->max_time_allowed)."' , - terms = '".Database::escape_string($this->terms)."' , - search_did = '".Database::escape_string($this->search_did)."' , - audio = '".Database::escape_string($this->audio)."' + $sql = "UPDATE $table SET + lp_id = '".intval($this->lp_id)."' , + item_type = '".Database::escape_string($this->item_type)."' , + ref = '".Database::escape_string($this->ref)."' , + title = '".Database::escape_string($this->title)."' , + description = '".Database::escape_string($this->description)."' , + path = '".Database::escape_string($this->path)."' , + min_score = '".Database::escape_string($this->min_score)."' , + max_score = '".Database::escape_string($this->max_score)."' , + mastery_score = '".Database::escape_string($this->mastery_score)."' , + parent_item_id = '".Database::escape_string($this->parent_item_id)."' , + previous_item_id = '".Database::escape_string($this->previous_item_id)."' , + next_item_id = '".Database::escape_string($this->next_item_id)."' , + display_order = '".Database::escape_string($this->display_order)."' , + prerequisite = '".Database::escape_string($this->prerequisite)."' , + parameters = '".Database::escape_string($this->parameters)."' , + launch_data = '".Database::escape_string($this->launch_data)."' , + max_time_allowed = '".Database::escape_string($this->max_time_allowed)."' , + terms = '".Database::escape_string($this->terms)."' , + search_did = '".Database::escape_string($this->search_did)."' , + audio = '".Database::escape_string($this->audio)."' WHERE c_id=".$this->c_id." AND id=".$this->id; Database::query($sql); } diff --git a/main/inc/lib/template.lib.php b/main/inc/lib/template.lib.php index d2a87662b7..df822a4c77 100755 --- a/main/inc/lib/template.lib.php +++ b/main/inc/lib/template.lib.php @@ -1916,7 +1916,9 @@ class Template /** * Get platform meta image tag (check meta_image_path setting, then use the logo). + * * @param string $imageAlt The alt attribute for the image + * * @return string The meta image HTML tag, or empty */ private function getMetaPortalImagePath($imageAlt = '') diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index f0a788489a..dcac72ab05 100755 --- a/main/inc/lib/tracking.lib.php +++ b/main/inc/lib/tracking.lib.php @@ -7448,8 +7448,9 @@ class TrackingCourseLog $direction, $includeInvitedUsers = false ) { - global $user_ids, $course_code, $export_csv, $csv_content, $session_id; + global $user_ids, $course_code, $export_csv, $session_id; + $csv_content = []; $course_code = Database::escape_string($course_code); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); @@ -7696,6 +7697,10 @@ class TrackingCourseLog $users[] = array_values($user_row); } + if ($export_csv) { + Session::write('csv_content', $csv_content); + } + Session::erase('additional_user_profile_info'); Session::erase('extra_field_info'); diff --git a/main/lp/learnpath.class.php b/main/lp/learnpath.class.php index 2bd320c80d..3a03bf6f7b 100755 --- a/main/lp/learnpath.class.php +++ b/main/lp/learnpath.class.php @@ -10332,13 +10332,13 @@ class learnpath $selectedMinScore = []; $selectedMaxScore = []; $masteryScore = []; - while ($row = Database::fetch_array($result)) { - if ($row['id'] == $item_id) { + if ($row['iid'] == $item_id) { $selectedMinScore[$row['prerequisite']] = $row['prerequisite_min_score']; $selectedMaxScore[$row['prerequisite']] = $row['prerequisite_max_score']; - $masteryScore[$row['prerequisite']] = $row['mastery_score']; } + $masteryScore[$row['iid']] = $row['mastery_score']; + $arrLP[] = [ 'id' => $row['iid'], 'item_type' => $row['item_type'], diff --git a/main/survey/reporting.php b/main/survey/reporting.php index 8ce4b1fac0..b9eea6ca35 100755 --- a/main/survey/reporting.php +++ b/main/survey/reporting.php @@ -62,21 +62,13 @@ if (!empty($exportReport) && !empty($format)) { switch ($format) { case 'xls': $filename = 'survey_results_'.$survey_id.'.xlsx'; - $data = SurveyUtil::export_complete_report_xls( - $survey_data, - $filename, - $userId - ); + $data = SurveyUtil::export_complete_report_xls($survey_data, $filename, $userId); exit; break; case 'csv': default: - $data = SurveyUtil::export_complete_report( - $survey_data, - $userId - ); + $data = SurveyUtil::export_complete_report($survey_data, $userId); $filename = 'survey_results_'.$survey_id.'.csv'; - header('Content-type: application/octet-stream'); header('Content-Type: application/force-download'); diff --git a/main/survey/surveyUtil.class.php b/main/survey/surveyUtil.class.php index 7f340a2d88..4536cf02e7 100755 --- a/main/survey/surveyUtil.class.php +++ b/main/survey/surveyUtil.class.php @@ -225,7 +225,7 @@ class SurveyUtil */ public static function handle_reporting_actions($survey_data, $people_filled) { - $action = isset($_GET['action']) ? $_GET['action'] : null; + $action = isset($_GET['action']) ? $_GET['action'] : ''; // Getting the number of question $temp_questions_data = SurveyManager::get_questions($_GET['survey_id']); @@ -243,20 +243,22 @@ class SurveyUtil // Counting the number of questions that are relevant for the reporting $survey_data['number_of_questions'] = count($questions_data); - if ($action == 'questionreport') { - self::display_question_report($survey_data); - } - if ($action == 'userreport') { - self::display_user_report($people_filled, $survey_data); - } - if ($action == 'comparativereport') { - self::display_comparative_report(); - } - if ($action == 'completereport') { - self::display_complete_report($survey_data); - } - if ($action == 'deleteuserreport') { - self::delete_user_report($_GET['survey_id'], $_GET['user']); + switch ($action) { + case 'questionreport': + self::display_question_report($survey_data); + break; + case 'userreport': + self::display_user_report($people_filled, $survey_data); + break; + case 'comparativereport': + self::display_comparative_report(); + break; + case 'completereport': + self::display_complete_report($survey_data); + break; + case 'deleteuserreport': + self::delete_user_report($_GET['survey_id'], $_GET['user']); + break; } } @@ -373,7 +375,7 @@ class SurveyUtil echo ''; echo '' + .Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'">' .get_lang('SelectUser').''; foreach ($people_filled as $key => &$person) { @@ -389,8 +391,8 @@ class SurveyUtil $id = $person; } echo ''pagebreak' ORDER BY sort ASC $limitStatement"; @@ -957,8 +961,9 @@ class SurveyUtil LEFT JOIN $table_survey_question_option o ON q.question_id = o.question_id AND q.c_id = o.c_id WHERE + survey_question NOT LIKE '%{{%' AND q.survey_id = '".$surveyId."' AND - q.c_id = $course_id + q.c_id = $course_id GROUP BY q.question_id ORDER BY q.sort ASC"; $result = Database::query($sql); @@ -1016,6 +1021,7 @@ class SurveyUtil LEFT JOIN $table_survey_question_option sqo ON sq.question_id = sqo.question_id AND sq.c_id = sqo.c_id WHERE + survey_question NOT LIKE '%{{%' AND sq.survey_id = '".$surveyId."' AND sq.c_id = $course_id ORDER BY sq.sort ASC, sqo.sort ASC"; @@ -1169,7 +1175,9 @@ class SurveyUtil foreach ($possible_options as $question_id => &$possible_option) { if ($questions[$question_id]['type'] == 'open' || $questions[$question_id]['type'] == 'comment') { echo ''; - echo $answers_of_user[$question_id]['0']['option_id']; + if (isset($answers_of_user[$question_id]) && isset($answers_of_user[$question_id]['0'])) { + echo $answers_of_user[$question_id]['0']['option_id']; + } echo ''; } else { foreach ($possible_option as $option_id => &$value) { @@ -1210,17 +1218,16 @@ class SurveyUtil */ public static function export_complete_report($survey_data, $user_id = 0) { - // Database table definitions - $table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION); - $table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION); - $table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER); - $surveyId = isset($_GET['survey_id']) ? (int) $_GET['survey_id'] : 0; if (empty($surveyId)) { return false; } + $table_survey_question = Database::get_course_table(TABLE_SURVEY_QUESTION); + $table_survey_question_option = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION); + $table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER); + // The first column $return = ';'; @@ -1245,12 +1252,17 @@ class SurveyUtil count(options.question_option_id) as number_of_options FROM $table_survey_question questions LEFT JOIN $table_survey_question_option options - ON questions.question_id = options.question_id AND options.c_id = questions.c_id + ON + questions.question_id = options.question_id AND + options.c_id = questions.c_id WHERE - questions.survey_id = '".$surveyId."' AND + survey_question NOT LIKE '%{{%' AND + questions.type <> 'pagebreak' AND + questions.survey_id = $surveyId AND questions.c_id = $course_id GROUP BY questions.question_id ORDER BY questions.sort ASC"; + $result = Database::query($sql); while ($row = Database::fetch_array($result)) { // We show the questions if @@ -1261,24 +1273,21 @@ class SurveyUtil is_array($_POST['questions_filter']) && in_array($row['question_id'], $_POST['questions_filter'])) ) { - // We do not show comment and pagebreak question types - if ($row['type'] != 'pagebreak') { - if ($row['number_of_options'] == 0 && ($row['type'] == 'open' || $row['type'] == 'comment')) { + if ($row['number_of_options'] == 0) { + $return .= str_replace( + "\r\n", + ' ', + api_html_entity_decode(strip_tags($row['survey_question']), ENT_QUOTES) + ) + .';'; + } else { + for ($ii = 0; $ii < $row['number_of_options']; $ii++) { $return .= str_replace( "\r\n", ' ', api_html_entity_decode(strip_tags($row['survey_question']), ENT_QUOTES) ) .';'; - } else { - for ($ii = 0; $ii < $row['number_of_options']; $ii++) { - $return .= str_replace( - "\r\n", - ' ', - api_html_entity_decode(strip_tags($row['survey_question']), ENT_QUOTES) - ) - .';'; - } } } } @@ -1300,7 +1309,7 @@ class SurveyUtil } } - $sql = "SELECT + $sql = "SELECT DISTINCT survey_question.question_id, survey_question.survey_id, survey_question.survey_question, @@ -1312,11 +1321,13 @@ class SurveyUtil survey_question_option.sort as option_sort FROM $table_survey_question survey_question LEFT JOIN $table_survey_question_option survey_question_option - ON + ON survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = survey_question.c_id - WHERE - survey_question.survey_id = '".$surveyId."' AND + WHERE + survey_question NOT LIKE '%{{%' AND + survey_question.type <> 'pagebreak' AND + survey_question.survey_id = $surveyId AND survey_question.c_id = $course_id ORDER BY survey_question.sort ASC, survey_question_option.sort ASC"; $result = Database::query($sql); @@ -1331,30 +1342,35 @@ class SurveyUtil in_array($row['question_id'], $_POST['questions_filter']) ) ) { - // We do not show comment and pagebreak question types - if ($row['type'] != 'pagebreak') { - $row['option_text'] = str_replace(["\r", "\n"], ['', ''], $row['option_text']); - $return .= api_html_entity_decode(strip_tags($row['option_text']), ENT_QUOTES).';'; - $possible_answers[$row['question_id']][$row['question_option_id']] = $row['question_option_id']; - $possible_answers_type[$row['question_id']] = $row['type']; - } + $row['option_text'] = str_replace(["\r", "\n"], ['', ''], $row['option_text']); + $return .= api_html_entity_decode(strip_tags($row['option_text']), ENT_QUOTES).';'; + $possible_answers[$row['question_id']][$row['question_option_id']] = $row['question_option_id']; + $possible_answers_type[$row['question_id']] = $row['type']; } } + $return .= "\n"; // Getting all the answers of the users $old_user = ''; $answers_of_user = []; $sql = "SELECT * FROM $table_survey_answer - WHERE c_id = $course_id AND survey_id='".$surveyId."'"; + WHERE + c_id = $course_id AND + survey_id='".$surveyId."' + "; if ($user_id != 0) { $sql .= "AND user='".Database::escape_string($user_id)."' "; } - $sql .= "ORDER BY user ASC"; + $sql .= ' ORDER BY user ASC '; + $questionIdList = array_keys($possible_answers_type); $open_question_iterator = 1; $result = Database::query($sql); - while ($row = Database::fetch_array($result)) { + while ($row = Database::fetch_array($result, 'ASSOC')) { + if (!in_array($row['question_id'], $questionIdList)) { + continue; + } if ($old_user != $row['user'] && $old_user != '') { $return .= self::export_complete_report_row( $survey_data, @@ -1365,6 +1381,7 @@ class SurveyUtil ); $answers_of_user = []; } + if ($possible_answers_type[$row['question_id']] == 'open' || $possible_answers_type[$row['question_id']] == 'comment' ) { @@ -1376,6 +1393,7 @@ class SurveyUtil } $old_user = $row['user']; } + // This is to display the last user $return .= self::export_complete_report_row( $survey_data, @@ -1535,8 +1553,12 @@ class SurveyUtil count(options.question_option_id) as number_of_options FROM $table_survey_question questions LEFT JOIN $table_survey_question_option options - ON questions.question_id = options.question_id AND options.c_id = questions.c_id + ON + questions.question_id = options.question_id AND + options.c_id = questions.c_id WHERE + survey_question NOT LIKE '%{{%' AND + questions.type <> 'pagebreak' AND questions.survey_id = $surveyId AND questions.c_id = $course_id GROUP BY questions.question_id @@ -1550,9 +1572,20 @@ class SurveyUtil (isset($_POST['submit_question_filter']) && is_array($_POST['questions_filter']) && in_array($row['question_id'], $_POST['questions_filter'])) ) { - // We do not show comment and pagebreak question types - if ($row['type'] != 'pagebreak') { - if ($row['number_of_options'] == 0 && ($row['type'] == 'open' || $row['type'] == 'comment')) { + if ($row['number_of_options'] == 0 && + ($row['type'] == 'open' || $row['type'] == 'comment') + ) { + $worksheet->setCellValueByColumnAndRow( + $column, + $line, + api_html_entity_decode( + strip_tags($row['survey_question']), + ENT_QUOTES + ) + ); + $column++; + } else { + for ($ii = 0; $ii < $row['number_of_options']; $ii++) { $worksheet->setCellValueByColumnAndRow( $column, $line, @@ -1562,18 +1595,6 @@ class SurveyUtil ) ); $column++; - } else { - for ($ii = 0; $ii < $row['number_of_options']; $ii++) { - $worksheet->setCellValueByColumnAndRow( - $column, - $line, - api_html_entity_decode( - strip_tags($row['survey_question']), - ENT_QUOTES - ) - ); - $column++; - } } } } @@ -1596,21 +1617,23 @@ class SurveyUtil // Getting all the questions and options (second line) $sql = "SELECT - survey_question.question_id, - survey_question.survey_id, - survey_question.survey_question, - survey_question.display, - survey_question.sort, + survey_question.question_id, + survey_question.survey_id, + survey_question.survey_question, + survey_question.display, + survey_question.sort, survey_question.type, - survey_question_option.question_option_id, - survey_question_option.option_text, + survey_question_option.question_option_id, + survey_question_option.option_text, survey_question_option.sort as option_sort FROM $table_survey_question survey_question LEFT JOIN $table_survey_question_option survey_question_option - ON - survey_question.question_id = survey_question_option.question_id AND + ON + survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = survey_question.c_id - WHERE + WHERE + survey_question NOT LIKE '%{{%' AND + survey_question.type <> 'pagebreak' AND survey_question.survey_id = $surveyId AND survey_question.c_id = $course_id ORDER BY survey_question.sort ASC, survey_question_option.sort ASC"; @@ -1625,20 +1648,17 @@ class SurveyUtil (isset($_POST['questions_filter']) && is_array($_POST['questions_filter']) && in_array($row['question_id'], $_POST['questions_filter'])) ) { - // We do not show comment and pagebreak question types - if ($row['type'] != 'pagebreak') { - $worksheet->setCellValueByColumnAndRow( - $column, - $line, - api_html_entity_decode( - strip_tags($row['option_text']), - ENT_QUOTES - ) - ); - $possible_answers[$row['question_id']][$row['question_option_id']] = $row['question_option_id']; - $possible_answers_type[$row['question_id']] = $row['type']; - $column++; - } + $worksheet->setCellValueByColumnAndRow( + $column, + $line, + api_html_entity_decode( + strip_tags($row['option_text']), + ENT_QUOTES + ) + ); + $possible_answers[$row['question_id']][$row['question_option_id']] = $row['question_option_id']; + $possible_answers_type[$row['question_id']] = $row['type']; + $column++; } } @@ -1652,7 +1672,7 @@ class SurveyUtil if ($user_id != 0) { $sql .= " AND user='".intval($user_id)."' "; } - $sql .= " ORDER BY user ASC"; + $sql .= ' ORDER BY user ASC'; $open_question_iterator = 1; $result = Database::query($sql); @@ -1673,7 +1693,9 @@ class SurveyUtil $line++; $column = 0; } - if ($possible_answers_type[$row['question_id']] == 'open' || $possible_answers_type[$row['question_id']] == 'comment') { + if ($possible_answers_type[$row['question_id']] == 'open' || + $possible_answers_type[$row['question_id']] == 'comment' + ) { $temp_id = 'open'.$open_question_iterator; $answers_of_user[$row['question_id']][$temp_id] = $row; $open_question_iterator++; @@ -1843,6 +1865,13 @@ class SurveyUtil $optionsY = ['----']; $defaults = []; foreach ($questions as $key => &$question) { + // Ignored tagged questions + if ($question) { + if (strpos($question['question'], '{{') !== false) { + $question = null; + continue; + } + } if (is_array($allowed_question_types)) { if (in_array($question['type'], $allowed_question_types)) { if (isset($_GET['xaxis']) && $_GET['xaxis'] == $question['question_id']) { @@ -1853,8 +1882,8 @@ class SurveyUtil $defaults['yaxis'] = $question['question_id']; } - $optionsX[$question['question_id']] = api_substr(strip_tags($question['question']), 0, 50); - $optionsY[$question['question_id']] = api_substr(strip_tags($question['question']), 0, 50); + $optionsX[$question['question_id']] = api_substr(strip_tags($question['question']), 0, 90); + $optionsY[$question['question_id']] = api_substr(strip_tags($question['question']), 0, 90); } } } @@ -2053,9 +2082,9 @@ class SurveyUtil $table_survey_answer = Database::get_course_table(TABLE_SURVEY_ANSWER); $sql = "SELECT * FROM $table_survey_answer - WHERE - c_id = $course_id AND - survey_id='".intval($survey_id)."' AND + WHERE + c_id = $course_id AND + survey_id='".intval($survey_id)."' AND question_id='".intval($question_id)."' ORDER BY USER ASC"; $result = Database::query($sql); @@ -2308,7 +2337,7 @@ class SurveyUtil ) { $insertId = Database::insert($table, $params); if ($insertId) { - $sql = "UPDATE $table + $sql = "UPDATE $table SET survey_invitation_id = $insertId WHERE iid = $insertId"; Database::query($sql); @@ -2848,7 +2877,7 @@ class SurveyUtil ); $actions[] = Display::url( - Display::return_icon('multiplicate_survey.png', get_lang('MultiplicateSurvey')), + Display::return_icon('multiplicate_survey.png', get_lang('MultiplicateQuestions')), $codePath.'survey/survey_list.php?' .http_build_query($params + ['action' => 'multiplicate', 'survey_id' => $survey_id]) ); @@ -3095,9 +3124,9 @@ class SurveyUtil ON (survey.author = user.user_id) WHERE survey.c_id = $course_id $search_restriction - $condition_session + $condition_session GROUP BY survey.survey_id - ORDER BY col$column $direction + ORDER BY col$column $direction LIMIT $from,$number_of_items "; $res = Database::query($sql); @@ -3213,11 +3242,11 @@ class SurveyUtil $efv = new ExtraFieldValue('survey'); $sql = " - SELECT - survey.survey_id AS col0, - survey.title AS col1, - survey.code AS col2, - count(survey_question.question_id) AS col3, + SELECT + survey.survey_id AS col0, + survey.title AS col1, + survey.code AS col2, + count(survey_question.question_id) AS col3, " .(api_is_western_name_order() ? "CONCAT(user.firstname, ' ', user.lastname)" @@ -3304,16 +3333,16 @@ class SurveyUtil $filterDate = $allowSurveyAvailabilityDatetime ? $now->format('Y-m-d H:i') : $now->format('Y-m-d'); $sql = "SELECT * - FROM $table_survey survey + FROM $table_survey survey INNER JOIN $table_survey_invitation survey_invitation ON ( survey.code = survey_invitation.survey_code AND - survey.c_id = survey_invitation.c_id AND + survey.c_id = survey_invitation.c_id AND survey.session_id = survey_invitation.session_id ) WHERE - survey_invitation.user = $user_id AND + survey_invitation.user = $user_id AND survey.avail_from <= '$filterDate' AND survey.avail_till >= '$filterDate' AND survey.c_id = $course_id AND diff --git a/main/tracking/courseLog.php b/main/tracking/courseLog.php index 21ac2f68fd..5c3952b7e4 100755 --- a/main/tracking/courseLog.php +++ b/main/tracking/courseLog.php @@ -35,7 +35,6 @@ $is_allowedToTrack = Tracking::isAllowToTrack($session_id); if (!$is_allowedToTrack) { api_not_allowed(true); - exit; } // If the user is a HR director (drh) @@ -73,7 +72,6 @@ if (api_is_drh()) { $coursesFollowedList = array_keys($coursesFollowedList); if (!in_array($courseId, $coursesFollowedList)) { api_not_allowed(true); - exit; } } } @@ -342,7 +340,7 @@ if ($showReporting) { // Show the charts part only if there are students subscribed to this course/session if ($nbStudents > 0) { - $usersTracking = TrackingCourseLog::get_user_data(null, $nbStudents, null, 'DESC'); + $usersTracking = TrackingCourseLog::get_user_data(null, $nbStudents, null, 'DESC', false); $numberStudentsCompletedLP = 0; $averageStudentsTestScore = 0; $scoresDistribution = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; @@ -412,7 +410,7 @@ if ($nbStudents > 0) { $tpl->assign('number_students', $nbStudents); $tpl->assign('top_students', $userScoreList); - $trackingSummaryLayout = $tpl->get_template("tracking/tracking_course_log.tpl"); + $trackingSummaryLayout = $tpl->get_template('tracking/tracking_course_log.tpl'); $content = $tpl->fetch($trackingSummaryLayout); echo $content; @@ -508,21 +506,50 @@ if (count($a_students) > 0) { $table->set_header(3, get_lang('Login'), false); $headers['login'] = get_lang('Login'); - $table->set_header(4, get_lang('TrainingTime').' '. - Display::return_icon('info3.gif', get_lang('CourseTimeInfo'), ['align' => 'absmiddle', 'hspace' => '3px']), false, ['style' => 'width:110px;']); + $table->set_header( + 4, + get_lang('TrainingTime').' '. + Display::return_icon('info3.gif', get_lang('CourseTimeInfo'), ['align' => 'absmiddle', 'hspace' => '3px']), + false, + ['style' => 'width:110px;'] + ); $headers['training_time'] = get_lang('TrainingTime'); $table->set_header(5, get_lang('CourseProgress').' '. - Display::return_icon('info3.gif', get_lang('ScormAndLPProgressTotalAverage'), ['align' => 'absmiddle', 'hspace' => '3px']), false, ['style' => 'width:110px;']); + Display::return_icon( + 'info3.gif', + get_lang('ScormAndLPProgressTotalAverage'), + ['align' => 'absmiddle', 'hspace' => '3px'] + ), + false, + ['style' => 'width:110px;'] + ); $headers['course_progress'] = get_lang('CourseProgress'); $table->set_header(6, get_lang('ExerciseProgress').' '. - Display::return_icon('info3.gif', get_lang('ExerciseProgressInfo'), ['align' => 'absmiddle', 'hspace' => '3px']), false, ['style' => 'width:110px;']); + Display::return_icon( + 'info3.gif', + get_lang('ExerciseProgressInfo'), + ['align' => 'absmiddle', 'hspace' => '3px'] + ), + false, + ['style' => 'width:110px;'] + ); $headers['exercise_progress'] = get_lang('ExerciseProgress'); $table->set_header(7, get_lang('ExerciseAverage').' '. - Display::return_icon('info3.gif', get_lang('ExerciseAverageInfo'), ['align' => 'absmiddle', 'hspace' => '3px']), false, ['style' => 'width:110px;']); + Display::return_icon('info3.gif', get_lang('ExerciseAverageInfo'), ['align' => 'absmiddle', 'hspace' => '3px']), + false, + ['style' => 'width:110px;'] + ); $headers['exercise_average'] = get_lang('ExerciseAverage'); $table->set_header(8, get_lang('Score').' '. - Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), ['align' => 'absmiddle', 'hspace' => '3px']), false, ['style' => 'width:110px;']); + Display::return_icon( + 'info3.gif', + get_lang('ScormAndLPTestTotalAverage'), + ['align' => 'absmiddle', 'hspace' => '3px'] + ), + false, + ['style' => 'width:110px;'] + ); $headers['score'] = get_lang('Score'); $table->set_header(9, get_lang('Student_publication'), false); $headers['student_publication'] = get_lang('Student_publication'); @@ -633,19 +660,21 @@ if ($export_csv) { } ob_end_clean(); + $csvContentInSession = Session::read('csv_content'); + // Adding headers before the content. - array_unshift($csv_content, $csv_headers); + array_unshift($csvContentInSession, $csv_headers); if ($session_id) { $sessionData = []; $sessionInfo = api_get_session_info($session_id); $sessionDates = SessionManager::parseSessionDates($sessionInfo); - array_unshift($csv_content, [get_lang('Date'), $sessionDates['access']]); - array_unshift($csv_content, [get_lang('SessionName'), $sessionInfo['name']]); + array_unshift($csvContentInSession, [get_lang('Date'), $sessionDates['access']]); + array_unshift($csvContentInSession, [get_lang('SessionName'), $sessionInfo['name']]); } - Export::arrayToCsv($csv_content, 'reporting_student_list'); + Export::arrayToCsv($csvContentInSession, 'reporting_student_list'); exit; } Display::display_footer();