Surveys: Fix export by class BT#18008

pull/3766/head^2
Julio Montoya 5 years ago
parent 820cecafb8
commit 7fbace986d
  1. 219
      main/survey/survey_list.php

@ -164,6 +164,10 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$usersWithAnswers[$row['user']] = $userInfo;
}
if (empty($usersWithAnswers)) {
continue;
}
$sql = "SELECT
survey_question.question_id,
survey_question.survey_id,
@ -267,7 +271,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
@$spreadsheet = new PHPExcel();
$counter = 0;
foreach ($classes as $class) {
$users = $userList = $userGroup->getUserListByUserGroup($class['id'], 'u.lastname ASC');
$users = $userGroup->getUserListByUserGroup($class['id'], 'u.lastname ASC');
$page = @$spreadsheet->createSheet($counter);
@$page->setTitle($class['name']);
$firstColumn = 3;
@ -279,17 +283,26 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$class['name']
);
$columnsWithData = [0, 1, 2];
$previousSurveyQuestionsCount = 0;
foreach ($surveyList as $survey) {
$questions = $survey['questions'];
$questionsOriginal = $survey['questions'];
$usersWithAnswers = $survey['user_with_answers'];
$rowStudent = 3;
$usersToShow = [];
$columnsWithData = [0, 1, 2];
// User in classes.
$questionsInSurvey = 0;
foreach ($users as $userData) {
$userId = $userData['id'];
$completeName = $userData['firstname'].' '.$userData['lastname'];
$userColumn = 3;
if (empty($previousSurveyQuestionsCount)) {
$userColumn = 3;
} else {
$userColumn = $previousSurveyQuestionsCount;
}
$questionsInSurvey = 0;
foreach ($questions as $question) {
$questionTitle = str_replace(
'{{student_full_name}}',
@ -297,6 +310,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$question['question']
);
if (strpos($question['question'], '{{')) {
$questionsInSurvey++;
foreach ($usersWithAnswers as $userAnswer) {
$userWithAnswerId = $userAnswer['user_id'];
foreach ($questions as $questionData) {
@ -309,7 +323,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$answerData = implode(', ', $answerData);
}
$answerData = trim($answerData);
if (!empty($answerData) && !in_array($userId, $usersToShow)) {
if ($answerData != '' && !in_array($userId, $usersToShow)) {
$usersToShow[] = $userId;
}
@ -320,26 +334,27 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
true
);
$colCode = $cell->getColumn();
error_log("$userColumn - $rowStudent - $answerData");
if (!empty($answerData) && !in_array($userColumn, $columnsWithData)) {
if ($answerData != '' && !in_array($userColumn, $columnsWithData)) {
$columnsWithData[] = $userColumn;
}
$userColumn++;
}
}
}
}
}
}
$userColumn++;
}
}
}
//if (in_array($userId, $usersToShow)) {
$rowStudent++;
//}
}
if (empty($previousSurveyQuestionsCount)) {
$previousSurveyQuestionsCount = 3;
}
$previousSurveyQuestionsCount += $questionsInSurvey;
foreach ($questions as $question) {
$questionTitle = $question['question'];
if (strpos($question['question'], '{{')) {
@ -347,7 +362,7 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$questionTitle = api_html_entity_decode(
trim(strip_tags(str_replace('{{student_full_name}}', '', $question['question'])))
);
// Add question title.
// Add question general title.
$cell = @$page->setCellValueByColumnAndRow(
$column,
1,
@ -384,162 +399,48 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
$coordinate = $page->getCellByColumnAndRow($lastColumn, 1)->getCoordinate();
$lastCoordinate = $coordinate;
if (!empty($lastCoordinate)) {
//$page->mergeCells($firstCoordinate.':'.$lastCoordinate);
}
}
}
}
// Remove cols with no data.
$originalColumns = [];
$counter = 0;
$less = 0;
$index = 0;
foreach ($page->getColumnIterator('A') as $col) {
if (!in_array($index, $columnsWithData)) {
$page->removeColumnByIndex($index - $less);
//$page->removeColumn($index - $less);
$less++;
}
$index++;
}
// Merge similar cols.
$counter = 3;
$oldValue = '';
$data = [];
foreach ($page->getColumnIterator('C') as $col) {
$index = $col->getColumnIndex();
$cell = $page->getCellByColumnAndRow($counter, 1);
$cell->getStyle()->getAlignment()->setHorizontal(
PHPExcel_Style_Alignment::HORIZONTAL_CENTER
);
$coordinate = $page->getCellByColumnAndRow($counter, 1)->getCoordinate();
$value = $cell->getValue();
if (!empty($value)) {
if (!isset($data[$value])) {
$data[$value]['start'] = $coordinate;
$data[$value]['end'] = $coordinate;
} else {
$data[$value]['end'] = $coordinate;
}
}
$counter++;
// Remove cols with no data.
$less = 0;
$index = 0;
foreach ($page->getColumnIterator() as $col) {
if (!in_array($index, $columnsWithData)) {
$page->removeColumnByIndex($index - $less);
$less++;
}
$index++;
}
if (!empty($data)) {
foreach ($data as $colInfo) {
$page->mergeCells($colInfo['start'].':'.$colInfo['end']);
// Merge similar cols.
$counterColumn = 3;
$oldValue = '';
$data = [];
foreach ($page->getColumnIterator('C') as $col) {
$index = $col->getColumnIndex();
$cell = $page->getCellByColumnAndRow($counterColumn, 1);
$cell->getStyle()->getAlignment()->setHorizontal(
PHPExcel_Style_Alignment::HORIZONTAL_CENTER
);
$coordinate = $page->getCellByColumnAndRow($counterColumn, 1)->getCoordinate();
$value = $cell->getValue();
if (!empty($value)) {
if (!isset($data[$value])) {
$data[$value]['start'] = $coordinate;
$data[$value]['end'] = $coordinate;
} else {
$data[$value]['end'] = $coordinate;
}
}
//exit;
/*foreach ($questionsOriginal as $questionData) {
if (strpos($questionData['question'], '{{') === false) {
if ($questionTitle === $questionData['question'] &&
isset($survey['user_answers'][$userId])
) {
//var_dump($questionData['question']);
foreach ($survey['user_answers'][$userId][$survey['survey_id']] as $questionId => $answerData) {
if ($questionData['question_id'] == $questionId) {
if (is_array($answerData)) {
$answerData = implode(', ', $answerData);
}
@$page->setCellValueByColumnAndRow(
$questionPosition,
$rowStudent,
$answerData,
true
);
break;
}
}
break;
}
}
}*/
/*
foreach ($usersWithAnswers as $userAnswer) {
$userId = $userAnswer['user_id'];
$cell = @$page->setCellValueByColumnAndRow(
$column,
1,
$survey['group_title'].' - '.$userAnswer['complete_name']
);
$coordinate = $page->getCellByColumnAndRow($column, 1)->getCoordinate();
$questionCounter = 0;
$firstCoordinate = $coordinate;
$lastCoordinate = '';
foreach ($questions as $question) {
$questionTitle = $question['question'];
if (strpos($question['question'], '{{')) {
$questionPosition = $column + $questionCounter;
$cell = @$page->setCellValueByColumnAndRow(
$questionPosition,
2,
strip_tags($questionTitle),
true
);
$coordinate = $page->getCellByColumnAndRow($questionPosition, 1)->getCoordinate();
$lastCoordinate = $coordinate;
$rowStudent = 3;
foreach ($users as $user) {
$completeName = $user['firstname'].' '.$user['lastname'];
$questionTitle = str_replace(
'{{student_full_name}}',
$completeName,
$question['question']
);
foreach ($questions as $questionData) {
if (strpos($questionData['question'], '{{') === false) {
if ($questionTitle === $questionData['question']) {
foreach ($survey['user_answers'][$userId][$survey['survey_id']] as $questionId => $answerData) {
if ($questionData['question_id'] == $questionId) {
if (is_array($answerData)) {
$answerData = implode(', ', $answerData);
}
@$page->setCellValueByColumnAndRow(
$questionPosition,
$rowStudent,
$answerData,
true
);
break;
}
}
break;
}
}
}
$rowStudent++;
}
$questionCounter++;
$columnQuestion++;
}
}
$column += $questionCounter;
$columnQuestion = $column;
$counterColumn++;
}
if (!empty($lastCoordinate)) {
$page->mergeCells($firstCoordinate.':'.$lastCoordinate);
}
if (!empty($data)) {
foreach ($data as $colInfo) {
$page->mergeCells($colInfo['start'].':'.$colInfo['end']);
}
*/
/*$questionPerUser = [];
foreach ($questions as $question) {
if (strpos($question['question'], '{{')) {
} else {
foreach ($users as $user) {
$completeName = $user['firstname'].' '.$user['lastname'];
if (strpos($question['question'], $completeName)) {
break;
}
$questionPerUser[$user['id']][] = $question['question_id'];
}
}
}*/
}
$row = 3;
@ -552,6 +453,8 @@ if (isset($_POST['action']) && $_POST['action'] && isset($_POST['id']) && is_arr
@$page->setCellValueByColumnAndRow($columnUser++, $row, $user['firstname']);
$row++;
}
// Count pages.
$counter++;
}

Loading…
Cancel
Save