Skip to content

Commit 7fbace9

Browse files
committed
Surveys: Fix export by class BT#18008
1 parent 820ceca commit 7fbace9

File tree

1 file changed

+61
-158
lines changed

1 file changed

+61
-158
lines changed

main/survey/survey_list.php

Lines changed: 61 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@
164164
$usersWithAnswers[$row['user']] = $userInfo;
165165
}
166166

167+
if (empty($usersWithAnswers)) {
168+
continue;
169+
}
170+
167171
$sql = "SELECT
168172
survey_question.question_id,
169173
survey_question.survey_id,
@@ -267,7 +271,7 @@
267271
@$spreadsheet = new PHPExcel();
268272
$counter = 0;
269273
foreach ($classes as $class) {
270-
$users = $userList = $userGroup->getUserListByUserGroup($class['id'], 'u.lastname ASC');
274+
$users = $userGroup->getUserListByUserGroup($class['id'], 'u.lastname ASC');
271275
$page = @$spreadsheet->createSheet($counter);
272276
@$page->setTitle($class['name']);
273277
$firstColumn = 3;
@@ -279,24 +283,34 @@
279283
$class['name']
280284
);
281285

286+
$columnsWithData = [0, 1, 2];
287+
$previousSurveyQuestionsCount = 0;
282288
foreach ($surveyList as $survey) {
283289
$questions = $survey['questions'];
284290
$questionsOriginal = $survey['questions'];
285291
$usersWithAnswers = $survey['user_with_answers'];
286292
$rowStudent = 3;
287293
$usersToShow = [];
288-
$columnsWithData = [0, 1, 2];
294+
// User in classes.
295+
$questionsInSurvey = 0;
289296
foreach ($users as $userData) {
290297
$userId = $userData['id'];
291298
$completeName = $userData['firstname'].' '.$userData['lastname'];
292-
$userColumn = 3;
299+
if (empty($previousSurveyQuestionsCount)) {
300+
$userColumn = 3;
301+
} else {
302+
$userColumn = $previousSurveyQuestionsCount;
303+
}
304+
305+
$questionsInSurvey = 0;
293306
foreach ($questions as $question) {
294307
$questionTitle = str_replace(
295308
'{{student_full_name}}',
296309
$completeName,
297310
$question['question']
298311
);
299312
if (strpos($question['question'], '{{')) {
313+
$questionsInSurvey++;
300314
foreach ($usersWithAnswers as $userAnswer) {
301315
$userWithAnswerId = $userAnswer['user_id'];
302316
foreach ($questions as $questionData) {
@@ -309,7 +323,7 @@
309323
$answerData = implode(', ', $answerData);
310324
}
311325
$answerData = trim($answerData);
312-
if (!empty($answerData) && !in_array($userId, $usersToShow)) {
326+
if ($answerData != '' && !in_array($userId, $usersToShow)) {
313327
$usersToShow[] = $userId;
314328
}
315329

@@ -320,34 +334,35 @@
320334
true
321335
);
322336
$colCode = $cell->getColumn();
323-
error_log("$userColumn - $rowStudent - $answerData");
324-
if (!empty($answerData) && !in_array($userColumn, $columnsWithData)) {
337+
if ($answerData != '' && !in_array($userColumn, $columnsWithData)) {
325338
$columnsWithData[] = $userColumn;
326339
}
327-
$userColumn++;
328340
}
329341
}
330342
}
331343
}
332344
}
333345
}
346+
$userColumn++;
334347
}
335348
}
336349
}
337-
338-
//if (in_array($userId, $usersToShow)) {
339350
$rowStudent++;
340-
//}
341351
}
342352

353+
if (empty($previousSurveyQuestionsCount)) {
354+
$previousSurveyQuestionsCount = 3;
355+
}
356+
$previousSurveyQuestionsCount += $questionsInSurvey;
357+
343358
foreach ($questions as $question) {
344359
$questionTitle = $question['question'];
345360
if (strpos($question['question'], '{{')) {
346361
$firstColumn = $column;
347362
$questionTitle = api_html_entity_decode(
348363
trim(strip_tags(str_replace('{{student_full_name}}', '', $question['question'])))
349364
);
350-
// Add question title.
365+
// Add question general title.
351366
$cell = @$page->setCellValueByColumnAndRow(
352367
$column,
353368
1,
@@ -384,162 +399,48 @@
384399

385400
$coordinate = $page->getCellByColumnAndRow($lastColumn, 1)->getCoordinate();
386401
$lastCoordinate = $coordinate;
387-
if (!empty($lastCoordinate)) {
388-
//$page->mergeCells($firstCoordinate.':'.$lastCoordinate);
389-
}
390402
}
391403
}
404+
}
392405

393-
// Remove cols with no data.
394-
$originalColumns = [];
395-
$counter = 0;
396-
$less = 0;
397-
$index = 0;
398-
foreach ($page->getColumnIterator('A') as $col) {
399-
if (!in_array($index, $columnsWithData)) {
400-
$page->removeColumnByIndex($index - $less);
401-
//$page->removeColumn($index - $less);
402-
$less++;
403-
}
404-
$index++;
405-
}
406-
407-
// Merge similar cols.
408-
$counter = 3;
409-
$oldValue = '';
410-
$data = [];
411-
foreach ($page->getColumnIterator('C') as $col) {
412-
$index = $col->getColumnIndex();
413-
$cell = $page->getCellByColumnAndRow($counter, 1);
414-
$cell->getStyle()->getAlignment()->setHorizontal(
415-
PHPExcel_Style_Alignment::HORIZONTAL_CENTER
416-
);
417-
$coordinate = $page->getCellByColumnAndRow($counter, 1)->getCoordinate();
418-
$value = $cell->getValue();
419-
if (!empty($value)) {
420-
if (!isset($data[$value])) {
421-
$data[$value]['start'] = $coordinate;
422-
$data[$value]['end'] = $coordinate;
423-
} else {
424-
$data[$value]['end'] = $coordinate;
425-
}
426-
}
427-
$counter++;
406+
// Remove cols with no data.
407+
$less = 0;
408+
$index = 0;
409+
foreach ($page->getColumnIterator() as $col) {
410+
if (!in_array($index, $columnsWithData)) {
411+
$page->removeColumnByIndex($index - $less);
412+
$less++;
428413
}
414+
$index++;
415+
}
429416

430-
if (!empty($data)) {
431-
foreach ($data as $colInfo) {
432-
$page->mergeCells($colInfo['start'].':'.$colInfo['end']);
417+
// Merge similar cols.
418+
$counterColumn = 3;
419+
$oldValue = '';
420+
$data = [];
421+
foreach ($page->getColumnIterator('C') as $col) {
422+
$index = $col->getColumnIndex();
423+
$cell = $page->getCellByColumnAndRow($counterColumn, 1);
424+
$cell->getStyle()->getAlignment()->setHorizontal(
425+
PHPExcel_Style_Alignment::HORIZONTAL_CENTER
426+
);
427+
$coordinate = $page->getCellByColumnAndRow($counterColumn, 1)->getCoordinate();
428+
$value = $cell->getValue();
429+
if (!empty($value)) {
430+
if (!isset($data[$value])) {
431+
$data[$value]['start'] = $coordinate;
432+
$data[$value]['end'] = $coordinate;
433+
} else {
434+
$data[$value]['end'] = $coordinate;
433435
}
434436
}
435-
//exit;
436-
/*foreach ($questionsOriginal as $questionData) {
437-
if (strpos($questionData['question'], '{{') === false) {
438-
if ($questionTitle === $questionData['question'] &&
439-
isset($survey['user_answers'][$userId])
440-
) {
441-
442-
//var_dump($questionData['question']);
443-
foreach ($survey['user_answers'][$userId][$survey['survey_id']] as $questionId => $answerData) {
444-
if ($questionData['question_id'] == $questionId) {
445-
if (is_array($answerData)) {
446-
$answerData = implode(', ', $answerData);
447-
}
448-
@$page->setCellValueByColumnAndRow(
449-
$questionPosition,
450-
$rowStudent,
451-
$answerData,
452-
true
453-
);
454-
break;
455-
}
456-
}
457-
break;
458-
}
459-
}
460-
}*/
461-
/*
462-
foreach ($usersWithAnswers as $userAnswer) {
463-
$userId = $userAnswer['user_id'];
464-
$cell = @$page->setCellValueByColumnAndRow(
465-
$column,
466-
1,
467-
$survey['group_title'].' - '.$userAnswer['complete_name']
468-
);
469-
$coordinate = $page->getCellByColumnAndRow($column, 1)->getCoordinate();
470-
$questionCounter = 0;
471-
$firstCoordinate = $coordinate;
472-
$lastCoordinate = '';
473-
foreach ($questions as $question) {
474-
$questionTitle = $question['question'];
475-
if (strpos($question['question'], '{{')) {
476-
$questionPosition = $column + $questionCounter;
477-
$cell = @$page->setCellValueByColumnAndRow(
478-
$questionPosition,
479-
2,
480-
strip_tags($questionTitle),
481-
true
482-
);
483-
484-
$coordinate = $page->getCellByColumnAndRow($questionPosition, 1)->getCoordinate();
485-
$lastCoordinate = $coordinate;
486-
$rowStudent = 3;
487-
foreach ($users as $user) {
488-
$completeName = $user['firstname'].' '.$user['lastname'];
489-
$questionTitle = str_replace(
490-
'{{student_full_name}}',
491-
$completeName,
492-
$question['question']
493-
);
494-
495-
foreach ($questions as $questionData) {
496-
if (strpos($questionData['question'], '{{') === false) {
497-
if ($questionTitle === $questionData['question']) {
498-
foreach ($survey['user_answers'][$userId][$survey['survey_id']] as $questionId => $answerData) {
499-
if ($questionData['question_id'] == $questionId) {
500-
if (is_array($answerData)) {
501-
$answerData = implode(', ', $answerData);
502-
}
503-
@$page->setCellValueByColumnAndRow(
504-
$questionPosition,
505-
$rowStudent,
506-
$answerData,
507-
true
508-
);
509-
break;
510-
}
511-
}
512-
break;
513-
}
514-
}
515-
}
516-
$rowStudent++;
517-
}
518-
$questionCounter++;
519-
$columnQuestion++;
520-
}
521-
}
522-
$column += $questionCounter;
523-
$columnQuestion = $column;
437+
$counterColumn++;
438+
}
524439

525-
if (!empty($lastCoordinate)) {
526-
$page->mergeCells($firstCoordinate.':'.$lastCoordinate);
527-
}
440+
if (!empty($data)) {
441+
foreach ($data as $colInfo) {
442+
$page->mergeCells($colInfo['start'].':'.$colInfo['end']);
528443
}
529-
*/
530-
/*$questionPerUser = [];
531-
foreach ($questions as $question) {
532-
if (strpos($question['question'], '{{')) {
533-
} else {
534-
foreach ($users as $user) {
535-
$completeName = $user['firstname'].' '.$user['lastname'];
536-
if (strpos($question['question'], $completeName)) {
537-
break;
538-
}
539-
$questionPerUser[$user['id']][] = $question['question_id'];
540-
}
541-
}
542-
}*/
543444
}
544445

545446
$row = 3;
@@ -552,6 +453,8 @@
552453
@$page->setCellValueByColumnAndRow($columnUser++, $row, $user['firstname']);
553454
$row++;
554455
}
456+
457+
// Count pages.
555458
$counter++;
556459
}
557460

0 commit comments

Comments
 (0)