|
164 | 164 | $usersWithAnswers[$row['user']] = $userInfo;
|
165 | 165 | }
|
166 | 166 |
|
| 167 | + if (empty($usersWithAnswers)) { |
| 168 | + continue; |
| 169 | + } |
| 170 | + |
167 | 171 | $sql = "SELECT
|
168 | 172 | survey_question.question_id,
|
169 | 173 | survey_question.survey_id,
|
|
267 | 271 | @$spreadsheet = new PHPExcel();
|
268 | 272 | $counter = 0;
|
269 | 273 | foreach ($classes as $class) {
|
270 |
| - $users = $userList = $userGroup->getUserListByUserGroup($class['id'], 'u.lastname ASC'); |
| 274 | + $users = $userGroup->getUserListByUserGroup($class['id'], 'u.lastname ASC'); |
271 | 275 | $page = @$spreadsheet->createSheet($counter);
|
272 | 276 | @$page->setTitle($class['name']);
|
273 | 277 | $firstColumn = 3;
|
|
279 | 283 | $class['name']
|
280 | 284 | );
|
281 | 285 |
|
| 286 | + $columnsWithData = [0, 1, 2]; |
| 287 | + $previousSurveyQuestionsCount = 0; |
282 | 288 | foreach ($surveyList as $survey) {
|
283 | 289 | $questions = $survey['questions'];
|
284 | 290 | $questionsOriginal = $survey['questions'];
|
285 | 291 | $usersWithAnswers = $survey['user_with_answers'];
|
286 | 292 | $rowStudent = 3;
|
287 | 293 | $usersToShow = [];
|
288 |
| - $columnsWithData = [0, 1, 2]; |
| 294 | + // User in classes. |
| 295 | + $questionsInSurvey = 0; |
289 | 296 | foreach ($users as $userData) {
|
290 | 297 | $userId = $userData['id'];
|
291 | 298 | $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; |
293 | 306 | foreach ($questions as $question) {
|
294 | 307 | $questionTitle = str_replace(
|
295 | 308 | '{{student_full_name}}',
|
296 | 309 | $completeName,
|
297 | 310 | $question['question']
|
298 | 311 | );
|
299 | 312 | if (strpos($question['question'], '{{')) {
|
| 313 | + $questionsInSurvey++; |
300 | 314 | foreach ($usersWithAnswers as $userAnswer) {
|
301 | 315 | $userWithAnswerId = $userAnswer['user_id'];
|
302 | 316 | foreach ($questions as $questionData) {
|
|
309 | 323 | $answerData = implode(', ', $answerData);
|
310 | 324 | }
|
311 | 325 | $answerData = trim($answerData);
|
312 |
| - if (!empty($answerData) && !in_array($userId, $usersToShow)) { |
| 326 | + if ($answerData != '' && !in_array($userId, $usersToShow)) { |
313 | 327 | $usersToShow[] = $userId;
|
314 | 328 | }
|
315 | 329 |
|
|
320 | 334 | true
|
321 | 335 | );
|
322 | 336 | $colCode = $cell->getColumn();
|
323 |
| - error_log("$userColumn - $rowStudent - $answerData"); |
324 |
| - if (!empty($answerData) && !in_array($userColumn, $columnsWithData)) { |
| 337 | + if ($answerData != '' && !in_array($userColumn, $columnsWithData)) { |
325 | 338 | $columnsWithData[] = $userColumn;
|
326 | 339 | }
|
327 |
| - $userColumn++; |
328 | 340 | }
|
329 | 341 | }
|
330 | 342 | }
|
331 | 343 | }
|
332 | 344 | }
|
333 | 345 | }
|
| 346 | + $userColumn++; |
334 | 347 | }
|
335 | 348 | }
|
336 | 349 | }
|
337 |
| - |
338 |
| - //if (in_array($userId, $usersToShow)) { |
339 | 350 | $rowStudent++;
|
340 |
| - //} |
341 | 351 | }
|
342 | 352 |
|
| 353 | + if (empty($previousSurveyQuestionsCount)) { |
| 354 | + $previousSurveyQuestionsCount = 3; |
| 355 | + } |
| 356 | + $previousSurveyQuestionsCount += $questionsInSurvey; |
| 357 | + |
343 | 358 | foreach ($questions as $question) {
|
344 | 359 | $questionTitle = $question['question'];
|
345 | 360 | if (strpos($question['question'], '{{')) {
|
346 | 361 | $firstColumn = $column;
|
347 | 362 | $questionTitle = api_html_entity_decode(
|
348 | 363 | trim(strip_tags(str_replace('{{student_full_name}}', '', $question['question'])))
|
349 | 364 | );
|
350 |
| - // Add question title. |
| 365 | + // Add question general title. |
351 | 366 | $cell = @$page->setCellValueByColumnAndRow(
|
352 | 367 | $column,
|
353 | 368 | 1,
|
|
384 | 399 |
|
385 | 400 | $coordinate = $page->getCellByColumnAndRow($lastColumn, 1)->getCoordinate();
|
386 | 401 | $lastCoordinate = $coordinate;
|
387 |
| - if (!empty($lastCoordinate)) { |
388 |
| - //$page->mergeCells($firstCoordinate.':'.$lastCoordinate); |
389 |
| - } |
390 | 402 | }
|
391 | 403 | }
|
| 404 | + } |
392 | 405 |
|
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++; |
428 | 413 | }
|
| 414 | + $index++; |
| 415 | + } |
429 | 416 |
|
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; |
433 | 435 | }
|
434 | 436 | }
|
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 | + } |
524 | 439 |
|
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']); |
528 | 443 | }
|
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 |
| - }*/ |
543 | 444 | }
|
544 | 445 |
|
545 | 446 | $row = 3;
|
|
552 | 453 | @$page->setCellValueByColumnAndRow($columnUser++, $row, $user['firstname']);
|
553 | 454 | $row++;
|
554 | 455 | }
|
| 456 | + |
| 457 | + // Count pages. |
555 | 458 | $counter++;
|
556 | 459 | }
|
557 | 460 |
|
|
0 commit comments