You are here

public function CourseObjectViewBuilder::build in Course 8.3

Same name and namespace in other branches
  1. 8.2 src/View/CourseObjectViewBuilder.php \Drupal\course\View\CourseObjectViewBuilder::build()
  2. 3.x src/View/CourseObjectViewBuilder.php \Drupal\course\View\CourseObjectViewBuilder::build()

Builds an entity's view; augments entity defaults.

This function is assigned as a #pre_render callback in ::view().

It transforms the renderable array for a single entity to the same structure as if we were rendering multiple entities, and then calls the default ::buildMultiple() #pre_render callback.

Parameters

array $build: A renderable array containing build information and context for an entity view.

Return value

array The updated renderable array.

Overrides EntityViewBuilder::build

See also

\Drupal\Core\Render\RendererInterface::render()

File

src/View/CourseObjectViewBuilder.php, line 12

Class

CourseObjectViewBuilder

Namespace

Drupal\course\View

Code

public function build(array $build) {
  $build = parent::build($build);
  $courseObject = $build['#course_object'];

  // When viewing, we use the current user.
  $account = Drupal::currentUser();
  $step = array();
  $step['id'] = 'course-object-' . $courseObject
    ->getId();
  $step['image'] = '';
  $step['status'] = '';
  if ($courseObject
    ->access('see', $account)) {
    if ($courseObject
      ->access('take', $account)) {

      // User can take this course object.
      $step['link'] = $courseObject
        ->getUrl();
      $step['class'][] = 'accessible';
      $step['status'] = t('Not started');

      // Step is complete.
      if ($courseObject
        ->getFulfillment($account)
        ->isComplete()) {
        $step['class'][] = 'completed';
        $step['status'] = t('Complete');
        $step['image'] = 'core/misc/icons/73b355/check.svg';
      }
      elseif ($courseObject
        ->getFulfillment($account)
        ->getId()) {
        $step['status'] = t('In progress');
        $step['class'][] = 'in-progress';
        $step['image'] = '';
      }
      if ($courseObject
        ->getCourse()
        ->getActive() === $courseObject) {
        $step['class'][] = 'active';
      }
    }
    else {

      // User cannot access this step yet.
      $step['class'] = array(
        'not-accessible',
      );
      $step['status'] = implode('<br/>', $courseObject
        ->getAccessMessages());
    }
    if ($courseObject
      ->isRequired()) {
      $step['class'][] = 'required';
    }
    $step['class'][] = Html::cleanCssIdentifier($courseObject
      ->getComponent());
    $img = !empty($step['image']) ? [
      '#theme' => 'image',
      '#uri' => $step['image'],
      '#alt' => strip_tags($step['status']),
    ] : [];
    $build['course_outline_image'] = $img;
    $build['course_outline_link'] = array(
      '#markup' => $courseObject
        ->access('take', $account) ? Link::fromTextAndUrl($courseObject
        ->getTitle(), $courseObject
        ->getUrl())
        ->toString() : $courseObject
        ->getTitle(),
    );
    $build['course_outline_status'] = array(
      '#markup' => $step['status'],
      '#prefix' => '<div>',
      '#suffix' => '</div>',
    );

    // No cache as this list always changes.
    $build['#cache']['max-age'] = 0;
  }
  return $build;
}