|
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