You are here

function CourseOutlineList::render in Course 3.x

Same name and namespace in other branches
  1. 8.3 src/Plugin/course/CourseOutline/CourseOutlineList.php \Drupal\course\Plugin\course\CourseOutline\CourseOutlineList::render()
  2. 8.2 src/Plugin/course/CourseOutline/CourseOutlineList.php \Drupal\course\Plugin\course\CourseOutline\CourseOutlineList::render()

Render a course outline.

Parameters

\Drupal\course\Plugin\Course $course:

\Drupal\course\Plugin\AccountInterface $account:

Return value

array Render array.

Overrides CourseOutlinePluginBase::render

File

src/Plugin/course/CourseOutline/CourseOutlineList.php, line 28

Class

CourseOutlineList
Plugin annotation @CourseOutline( id = "course", label = @Translation("Course"), description = @Translation("Displays course objects in an HTML list."), )

Namespace

Drupal\course\Plugin\course\CourseOutline

Code

function render(Course $course, AccountInterface $account) {

  // Iterate over objects.
  $workflow = array();
  $img = NULL;
  foreach ($course
    ->getObjects() as $key => $courseObject) {
    if ($courseObject
      ->access('see', $account)) {

      // The item will be in the list only if the user can see it. If they can
      // take it, entity_view() will output a link instead of text.
      $entity = CourseObject::load($courseObject
        ->id());
      $render_controller = \Drupal::entityTypeManager()
        ->getViewBuilder('course_object');
      $item = $render_controller
        ->view($entity);
      if ($courseObject
        ->access('take', $account)) {

        // User can take this course object.
        $item['#class'][] = 'accessible';

        // Step is complete.
        if ($courseObject
          ->getFulfillment($account)
          ->isComplete()) {
          $item['#class'][] = 'completed';
        }
        elseif ($courseObject
          ->getFulfillment($account)
          ->id()) {
          $item['#class'][] = 'in-progress';
        }
        if ($course
          ->getActive() === $courseObject) {
          $item['#class'][] = 'active';
        }
      }

      // Allow other modules to modify this list item.
      $courseObject
        ->overrideOutlineListItem($item);

      // Add this item to the list.
      $workflow[] = $item;
    }
  }
  if ($course
    ->getEnrollment($account)
    ->isComplete()) {
    $image = [
      '#uri' => 'core/misc/icons/73b355/check.svg',
      '#alt' => t('An icon'),
      '#theme' => 'image',
    ];
    $workflow[] = array(
      '#markup' => render($image) . Link::fromTextAndUrl(t('Complete'), Url::fromRoute('course.complete', [
        'course' => $course
          ->id(),
      ]))
        ->toString(),
      '#id' => 'complete',
    );
  }
  $output = [];
  if ($workflow) {
    $page = [];
    $page['course_outline']['#theme'] = 'item_list';
    $page['course_outline']['#attributes'] = [
      'class' => [
        'course-outline-list',
      ],
    ];
    $page['course_outline']['#items'] = $workflow;
    return $page;
  }
  return $output;
}