contest-8.x-1.0-alpha2/src/Plugin/Block/ContestRecentBlock.php

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

namespace Drupal\contest\Plugin\Block;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\contest\ContestHelper;
use Drupal\contest\ContestStorage;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Provides a 'Running Contests' block.
 *
 * @Block(
 *   id = "contest_recent_block",
 *   admin_label = @Translation("Running Contests"),
 *   category = @Translation("Contest")
 * )
 */
class ContestRecentBlock extends BlockBase implements ContainerFactoryPluginInterface {
  protected $request;

  /**
   * Constructs a new SwitchUserBlock object.
   *
   * @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 Symfony\Component\HttpFoundation\RequestStack $request
   *   The request dependency injection.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->request = $request;
  }

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

  /**
   * Build a contest list block.
   *
   * @return array
   *   A Drupal form array.
   */
  public function build() {
    $block = [];
    $contests = ContestStorage::getMostRecentContest();
    $format = ContestHelper::getDefaultFormat();
    $max = 100;

    if (empty($contests)) {
      return [];
    }
    foreach ($contests as $contest) {
      $page = $this->request->getCurrentRequest()->attributes->get('contest');

      if ($contest->id->value == $page->id->value && strpos(get_class($contest), 'Contest') !== FALSE) {
        continue;;
      }
      $block['#markup'] .= '<h3 class="contest-block-title">' . $contest->label() . '</h3>';
      $block['#markup'] .= text_summary($contest->body->value, $format, $max);
    }
    if (!empty($block)) {
      $block['#title'] = $this->t('Contests');
    }
    return $block;
  }

  /**
   * The cache tag string.
   *
   * @return string
   *   A cache tag string.
   */
  public function getCacheTags() {
    return ['contest_recent_block'];
  }

  /**
   * The user access to a contest block.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   A user account.
   *
   * @return bool
   *   True if the user has access to the block.
   */
  protected function blockAccess(AccountInterface $account) {
    return AccessResult::allowedIfHasPermission($account, 'access contests');
  }

}

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

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