You are here

CourseReportController.php in Course 3.x

File

src/Controller/CourseReportController.php
View source
<?php

namespace Drupal\course\Controller;

use Drupal;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Entity\Controller\EntityController;
use Drupal\Core\Link;
use Drupal\course\Entity\Course;
use Drupal\course\Entity\CourseObject;
class CourseReportController extends EntityController {

  /**
   * Return a link to a report as HTML.
   *
   * @return Link
   */
  function course_object_single_report_link($courseObject, $report) {
    if (!empty($report['link'])) {
      if (!empty($report['modal'])) {
        $report['link']
          ->getURL()
          ->setOption('attributes', [
          'class' => 'use-ajax',
          'data-dialog-type' => 'modal',
          'data-dialog-options' => Json::encode([
            'width' => 800,
          ]),
        ]);
      }
      return $report['link'];
    }
    else {
      return Link::createFromRoute($report['title'], 'course.reports.objects.report', [
        'course' => $courseObject
          ->getCourse()
          ->id(),
        'course_object' => $courseObject
          ->id(),
        'report' => $report['key'],
      ]);
    }
  }

  /**
   * Page handler for course object reports.
   */
  function objectReport(Course $course, CourseObject $course_object, $report) {
    $render = $this
      ->objectReports($course);
    $info = $course_object
      ->getReport($report);
    $header = '<h2>' . $course_object
      ->getTitle() . ': ' . $info['title'] . '</h2>';
    $content = $course_object
      ->getReport($report);
    if (!$content) {
      $content = [
        '#plain_text' => t('Sorry, no report is available for this type.'),
      ];
    }
    $render[0]['report']['header'] = [
      '#markup' => $header,
    ];
    $render[0]['report']['content'] = $content['content'];
    return $render;
  }

  /**
   * Page handler for course object reports.
   */
  function objectReports(Course $course) {

    // Report navigation.
    $nav = [
      '#id' => 'course-object-reports-content',
      '#attributes' => [
        'valign' => 'top',
      ],
    ];

    // Report content.
    $content = [];

    // Render Array
    $render = array();
    foreach ($course
      ->getObjects() as $courseObject) {
      $items = array();
      if (method_exists($courseObject, 'getReports')) {
        foreach ($courseObject
          ->getReports() as $key => $report) {
          $report['key'] = $key;
          $items[$key] = $this
            ->course_object_single_report_link($courseObject, $report)
            ->toString();
        }
        $nav[$courseObject
          ->id()] = array(
          '#theme' => 'item_list',
          '#title' => $courseObject
            ->getTitle(),
          '#items' => $items,
        );
      }
    }
    if (is_array($content)) {
      $content = Drupal::service('renderer')
        ->render($content);
    }
    $render[0]['nav'] = $nav;
    $render['#type'] = 'table';
    $render['#attributes'] = array(
      'id' => 'course-object-reports',
    );
    return $render;
  }

}

Classes