Merge branch '1.11.x' of github.com:chamilo/chamilo-lms into 1.11.x

pull/2731/head
Angel Fernando Quiroz Campos 7 years ago
commit f23eed95c7
  1. 2
      main/attendance/attendance_controller.php
  2. 2
      main/attendance/attendance_sheet.php
  3. 1
      main/gradebook/index.php
  4. 8
      main/inc/lib/attendance.lib.php
  5. 50
      main/inc/lib/lp_item.lib.php
  6. 2
      main/inc/lib/template.lib.php
  7. 7
      main/inc/lib/tracking.lib.php
  8. 6
      main/lp/learnpath.class.php
  9. 12
      main/survey/reporting.php
  10. 257
      main/survey/surveyUtil.class.php
  11. 57
      main/tracking/courseLog.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) {

@ -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()) ||

@ -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')
) {

@ -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] = '<a href="index.php?'.api_get_cidreq().'&action=attendance_sheet_list&attendance_id='.$attendance[0].$student_param.'">'.$attendance[1].'</a>'.$session_star;

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

@ -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 = '')

@ -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');

@ -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'],

@ -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');

@ -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 '<select name="user" onchange="jumpMenu(\'parent\',this,0)">';
echo '<option value="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action='
.Security::remove_XSS($_GET['action']).'&survey_id='.intval($_GET['survey_id']).'">'
.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&'.api_get_cidreq().'">'
.get_lang('SelectUser').'</option>';
foreach ($people_filled as $key => &$person) {
@ -389,8 +391,8 @@ class SurveyUtil
$id = $person;
}
echo '<option value="'.api_get_path(WEB_CODE_PATH).'survey/reporting.php?action='
.Security::remove_XSS($_GET['action']).'&survey_id='.intval($_GET['survey_id']).'&user='
.Security::remove_XSS($id).'" ';
.Security::remove_XSS($_GET['action']).'&survey_id='.$surveyId.'&user='
.Security::remove_XSS($id).'&'.api_get_cidreq().'" ';
if (isset($_GET['user']) && $_GET['user'] == $id) {
echo 'selected="selected"';
}
@ -425,7 +427,8 @@ class SurveyUtil
survey_question.question_id = survey_question_option.question_id AND
survey_question_option.c_id = $course_id
WHERE
survey_question.survey_id = '".intval($_GET['survey_id'])."' AND
survey_question NOT LIKE '%{{%' AND
survey_question.survey_id = '".$surveyId."' AND
survey_question.c_id = $course_id
ORDER BY survey_question.sort, survey_question_option.sort ASC";
$result = Database::query($sql);
@ -445,7 +448,7 @@ class SurveyUtil
$sql = "SELECT * FROM $table_survey_answer
WHERE
c_id = $course_id AND
survey_id = '".intval($_GET['survey_id'])."' AND
survey_id = '".$surveyId."' AND
user = '".Database::escape_string($_GET['user'])."'";
$result = Database::query($sql);
while ($row = Database::fetch_array($result, 'ASSOC')) {
@ -577,6 +580,7 @@ class SurveyUtil
WHERE
c_id = $course_id AND
survey_id='".$surveyId."' AND
survey_question NOT LIKE '%{{%' AND
type <>'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 '<td align="center">';
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 '</td>';
} 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

@ -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').'&nbsp;'.
Display::return_icon('info3.gif', get_lang('CourseTimeInfo'), ['align' => 'absmiddle', 'hspace' => '3px']), false, ['style' => 'width:110px;']);
$table->set_header(
4,
get_lang('TrainingTime').'&nbsp;'.
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').'&nbsp;'.
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').'&nbsp;'.
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').'&nbsp;'.
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').'&nbsp;'.
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();

Loading…
Cancel
Save