contrib_todo_list-1.1.1/src/Plugin/Block/ContribTodoListBlock.php

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

namespace Drupal\contrib_todo_list\Plugin\Block;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\contrib_todo_list\Service\TodoManagerService;
use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountProxyInterface;

/**
 * Provides a todo list block.
 *
 * @Block(
 *   id = "contrib_todo_list_block",
 *   admin_label = @Translation("Contrib todo list block"),
 *   category = @Translation("Blocks"),
 *   context_definitions = {
 *     "node" = @ContextDefinition(
 *       "entity:node",
 *       label = @Translation("Current Node")
 *     )
 *   }
 * )
 */
class ContribTodoListBlock extends BlockBase implements ContainerFactoryPluginInterface {

  /**
   * Constructor.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param TodoManagerService $todoManagerService
   *   The service for todo gestion
   * @param AccountProxyInterface $currentUser
   *   The current user informations
   */
  public function __construct(
              array                 $configuration,
                                    $plugin_id,
                                    $plugin_definition,
    protected TodoManagerService    $todoManagerService,
    protected AccountProxyInterface $currentUser

  ) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition): static {
    return new static(
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('contrib_todo_list.todo_manager'),
      $container->get('current_user')
    );
  }

  /**
   * {@inheritdoc}
   */
  protected function blockAccess(AccountInterface $account) {
    return AccessResult::allowedIfHasPermission($account, 'manage todo list');
  }

  /**
   * {@inheritdoc}
   */
  public function build(): array {
    $node = $this->getContextValue('node');

    if (!$node instanceof NodeInterface) {
      return [];
    }

    $todos = $this->todoManagerService->getTodosByNode($node);
    return [
      '#theme' => 'contrib_todo_list',
      '#todos' => $todos,
      '#user_id' => (string) $this->currentUser->id(),
      '#attached' => [
        'library' => ['contrib_todo_list/contrib_todo_list'],
        'drupalSettings' => [
          'contrib_todo_list' => [
            'nodeId' => $node->id(),
            'todos' => array_map(function($todo) {
              return [
                'id' => $todo->id(),
                'pin' => $todo->get('pin')->value,
              ];
            }, $todos),
          ],
        ],
      ],
      '#cache' => [
        'contexts' => ['user.permissions'],
        'tags' => [
          'node:' . $node->id(),
          'todo_list:node:' . $node->id(),
        ],
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheMaxAge() {
    return 0;
  }

}

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

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