Survey report: Fix variable names, skip empty surveys/no questions items

pull/3846/head
Julio Montoya 5 years ago
parent 18163fbf53
commit 8083b8bda4
  1. 72
      main/survey/survey_list.php

@ -141,6 +141,12 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
if (empty($surveyData)) { if (empty($surveyData)) {
continue; continue;
} }
$questions = SurveyManager::get_questions($surveyId);
if (empty($questions)) {
continue;
}
$surveyData['title'] = api_html_entity_decode(trim(strip_tags($surveyData['title']))); $surveyData['title'] = api_html_entity_decode(trim(strip_tags($surveyData['title'])));
$groupData = $extraFieldValue->get_values_by_handler_and_field_variable( $groupData = $extraFieldValue->get_values_by_handler_and_field_variable(
$surveyId, $surveyId,
@ -165,16 +171,17 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
survey_code = '".Database::escape_string($surveyData['code'])."' survey_code = '".Database::escape_string($surveyData['code'])."'
"; ";
$result = Database::query($sql); $result = Database::query($sql);
$usersWithAnswers = []; $usersWithInvitation = [];
while ($row = Database::fetch_array($result)) { while ($row = Database::fetch_array($result)) {
if (isset($usersWithAnswers[$row['user']])) { if (isset($usersWithInvitation[$row['user']])) {
continue; continue;
} }
$userInfo = api_get_user_info($row['user']); $userInfo = api_get_user_info($row['user']);
$usersWithAnswers[$row['user']] = $userInfo; $usersWithInvitation[$row['user']] = $userInfo;
} }
if (empty($usersWithAnswers)) { // No invitations.
if (empty($usersWithInvitation)) {
continue; continue;
} }
@ -213,6 +220,11 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
} }
} }
// No questions.
if (empty($questionsOptions)) {
continue;
}
$sql = "SELECT * FROM $table_survey_answer $sql = "SELECT * FROM $table_survey_answer
WHERE c_id = $course_id AND survey_id = $surveyId "; WHERE c_id = $course_id AND survey_id = $surveyId ";
$userAnswers = []; $userAnswers = [];
@ -223,10 +235,14 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$all_answers[$answers_of_user['user']][$answers_of_user['question_id']][] = $answers_of_user; $all_answers[$answers_of_user['user']][$answers_of_user['question_id']][] = $answers_of_user;
} }
if (empty($userAnswers)) {
continue;
}
foreach ($questionsOptions as $question) { foreach ($questionsOptions as $question) {
foreach ($usersWithAnswers as $userData) { foreach ($usersWithInvitation as $userData) {
$userIdItem = $userData['user_id']; $userIdItem = $userData['user_id'];
// If the question type is a scoring then we have to format the answers differently // If the question type is a scoring then we have to format the answers differently.
switch ($question['type']) { switch ($question['type']) {
/*case 'score': /*case 'score':
$finalAnswer = []; $finalAnswer = [];
@ -237,7 +253,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
} }
break;*/ break;*/
case 'multipleresponse': case 'multipleresponse':
$finalAnswer = isset($userAnswers[$userIdItem][$surveyId][$question['question_id']]) ? $userAnswers[$userIdItem][$surveyId][$question['question_id']] : ''; $finalAnswer = $userAnswers[$userIdItem][$surveyId][$question['question_id']] ?? '';
if (is_array($finalAnswer)) { if (is_array($finalAnswer)) {
$items = []; $items = [];
foreach ($finalAnswer as $option) { foreach ($finalAnswer as $option) {
@ -267,17 +283,17 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
} }
} }
$surveyData['user_with_answers'] = $usersWithAnswers; $surveyData['users_with_invitation'] = $usersWithInvitation;
$surveyData['user_answers'] = $userAnswers; $surveyData['user_answers'] = $userAnswers;
$surveyData['questions'] = SurveyManager::get_questions($surveyId); $surveyData['questions'] = $questions;
$surveyList[] = $surveyData; $surveyList[] = $surveyData;
} }
@$spreadsheet = new PHPExcel(); @$spreadsheet = new PHPExcel();
$counter = 0; $counter = 0;
foreach ($classes as $class) { foreach ($classes as $class) {
$users = $usersInClassFullList[$class['id']]; $usersInClass = $usersInClassFullList[$class['id']];
if (empty($users)) { if (empty($usersInClass)) {
continue; continue;
} }
@ -297,8 +313,8 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
foreach ($surveyList as $survey) { foreach ($surveyList as $survey) {
$questions = $survey['questions']; $questions = $survey['questions'];
$questionsOriginal = $survey['questions']; $questionsOriginal = $survey['questions'];
$usersWithAnswers = $survey['user_with_answers']; $usersWithInvitation = $survey['users_with_invitation'];
if (empty($usersWithAnswers)) { if (empty($usersWithInvitation)) {
continue; continue;
} }
$rowStudent = 3; $rowStudent = 3;
@ -306,9 +322,9 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$previousSurveyCount = 0; $previousSurveyCount = 0;
$questionsInSurvey = 0; $questionsInSurvey = 0;
$skipThisClass = true; $skipThisClass = true;
foreach ($users as $userData) { foreach ($usersInClass as $userInClass) {
$userId = $userData['id']; $userId = $userInClass['id'];
$completeName = $userData['firstname'].' '.$userData['lastname']; $completeName = $userInClass['firstname'].' '.$userInClass['lastname'];
if (empty($previousSurveyQuestionsCount)) { if (empty($previousSurveyQuestionsCount)) {
$userColumn = 3; $userColumn = 3;
} else { } else {
@ -323,26 +339,27 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
); );
if (strpos($question['question'], '{{')) { if (strpos($question['question'], '{{')) {
$questionsInSurvey++; $questionsInSurvey++;
foreach ($usersWithAnswers as $userAnswer) { foreach ($usersWithInvitation as $userAnswer) {
$userWithAnswerId = $userAnswer['user_id']; $userWithInvitationId = $userAnswer['user_id'];
foreach ($questions as $questionData) { foreach ($questions as $questionData) {
if (strpos($questionData['question'], '{{') === false) { if (strpos($questionData['question'], '{{') === false) {
if ($questionTitle === $questionData['question']) { if ($questionTitle === $questionData['question']) {
if (isset($survey['user_answers'][$userWithAnswerId][$survey['survey_id']])) { if (isset($survey['user_answers'][$userWithInvitationId][$survey['survey_id']])) {
foreach ($survey['user_answers'][$userWithAnswerId][$survey['survey_id']] as $questionId => $answerData) { foreach ($survey['user_answers'][$userWithInvitationId][$survey['survey_id']] as $questionId => $answerData) {
if ($questionData['question_id'] == $questionId) { if ($questionData['question_id'] == $questionId) {
if (is_array($answerData)) { if (is_array($answerData)) {
$answerData = implode(', ', $answerData); $answerData = implode(', ', $answerData);
} }
$answerData = trim($answerData); $answerData = trim($answerData);
if (!empty($answerData) && !in_array($userId, $usersToShow)) { if ($answerData != '' && !in_array($userId, $usersToShow)) {
$usersToShow[] = $userId; $usersToShow[] = $userId;
} }
$cell = @$page->setCellValueByColumnAndRow( $cell = @$page->setCellValueByColumnAndRow(
$userColumn, $userColumn,
$rowStudent, $rowStudent,
$answerData, //$answerData,
"$answerData s: $surveyId q: $questionId u inv: $userWithInvitationId user class: $userId",
true true
); );
$colCode = $cell->getColumn(); $colCode = $cell->getColumn();
@ -391,7 +408,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$coordinate = $page->getCellByColumnAndRow($column, 1)->getCoordinate(); $coordinate = $page->getCellByColumnAndRow($column, 1)->getCoordinate();
$firstCoordinate = $coordinate; $firstCoordinate = $coordinate;
$questionId = $question['question_id']; $questionId = $question['question_id'];
foreach ($usersWithAnswers as $userAnswer) { foreach ($usersWithInvitation as $userAnswer) {
// Add question title. // Add question title.
$cell = @$page->setCellValueByColumnAndRow( $cell = @$page->setCellValueByColumnAndRow(
$column, $column,
@ -403,8 +420,8 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$cell = @$page->setCellValueByColumnAndRow( $cell = @$page->setCellValueByColumnAndRow(
$column, $column,
2, 2,
// $survey['group_title'].' - '.$userAnswer['complete_name'],
$survey['group_title'].' - '.$userAnswer['complete_name'], $survey['group_title'].' - '.$userAnswer['complete_name'],
//$userAnswer['id'].' - '.$userAnswer['lastname'],
true true
); );
@ -506,7 +523,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
} }
$row = 3; $row = 3;
foreach ($users as $user) { foreach ($usersInClass as $user) {
$columnUser = 0; $columnUser = 0;
@$page->setCellValueByColumnAndRow($columnUser++, $row, $user['lastname']); @$page->setCellValueByColumnAndRow($columnUser++, $row, $user['lastname']);
@$page->setCellValueByColumnAndRow($columnUser++, $row, $user['firstname']); @$page->setCellValueByColumnAndRow($columnUser++, $row, $user['firstname']);
@ -521,7 +538,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
foreach ($surveyList as $survey) { foreach ($surveyList as $survey) {
$questions = $survey['questions']; $questions = $survey['questions'];
$questionsOriginal = $survey['questions']; $questionsOriginal = $survey['questions'];
$usersWithAnswers = $survey['user_with_answers']; $usersWithInvitation = $survey['users_with_invitation'];
$goodQuestionList = []; $goodQuestionList = [];
foreach ($questions as $question) { foreach ($questions as $question) {
if (false === strpos($question['question'], '{{')) { if (false === strpos($question['question'], '{{')) {
@ -530,8 +547,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$firstColumn = 3; $firstColumn = 3;
$column = 3; $column = 3;
$columnQuestion = 3; $columnQuestion = 3;
foreach ($usersWithAnswers as $userAnswer) { foreach ($usersWithInvitation as $userAnswer) {
$userWithAnswerId = $userAnswer['user_id'];
$myUserId = $userAnswer['id']; $myUserId = $userAnswer['id'];
$columnUser = 0; $columnUser = 0;
$cell = @$page->setCellValueByColumnAndRow($columnUser++, $row, $questionTitle, true); $cell = @$page->setCellValueByColumnAndRow($columnUser++, $row, $questionTitle, true);

Loading…
Cancel
Save