social_course-8.x-2.11/src/Plugin/Block/CourseMaterialHeroBlock.php

src/Plugin/Block/CourseMaterialHeroBlock.php
<?php

namespace Drupal\social_course\Plugin\Block;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\Plugin\Block\PageTitleBlock;
use Drupal\Core\Routing\RouteObjectInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\group\Entity\GroupInterface;
use Drupal\node\NodeInterface;
use Drupal\taxonomy\Entity\Term;

/**
 * Provides a 'CourseMaterialHeroBlock' block.
 *
 * @Block(
 *   id = "course_material_hero",
 *   admin_label = @Translation("Course material hero block"),
 *   context_definitions = {
 *     "node" = @ContextDefinition("entity:node", required = FALSE)
 *   }
 * )
 */
class CourseMaterialHeroBlock extends PageTitleBlock {

  /**
   * {@inheritdoc}
   */
  public function build() {
    $parent_course_type = NULL;
    $node = $this->getContextValue('node');
    if ($node instanceof NodeInterface && $node->id()) {
      $translation = \Drupal::service('entity.repository')
        ->getTranslationFromContext($node);

      if (!empty($translation)) {
        $node->setTitle($translation->getTitle());
      }

      $title = $node->getTitle();

      /** @var \Drupal\social_course\CourseWrapperInterface $course_wrapper */
      $course_wrapper = \Drupal::service('social_course.course_wrapper');
      $course_wrapper->setCourseFromMaterial($node);
      $course = $course_wrapper->getCourse();
      if ($course instanceof GroupInterface && !$course->get('field_course_type')->isEmpty()) {
        $parent_course_type = Term::load($course->field_course_type->target_id)->getName();
      }
      return [
        '#theme' => 'course_material_hero',
        '#title' => $title,
        '#node' => $node,
        '#section_class' => 'page-title',
        '#parent_course_type' => $parent_course_type,
      ];
    }
    else {
      $request = \Drupal::request();

      if ($route = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)) {
        $title = \Drupal::service('title_resolver')->getTitle($request, $route);

        return [
          '#type' => 'page_title',
          '#title' => $title,
        ];
      }
      else {
        return [
          '#type' => 'page_title',
          '#title' => '',
        ];
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function blockAccess(AccountInterface $account) {
    $node = $this->getContextValue('node');
    if ($node instanceof NodeInterface && $node->id()) {
      $group = \Drupal::service('social_course.course_wrapper')
        ->setCourseFromMaterial($node)
        ->getCourse();

      return AccessResult::allowedIf($group instanceof GroupInterface);
    }
    else {
      return AccessResult::forbidden();
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc