auctions-1.0.x-dev/auctions.module

auctions.module
<?php

/**
 * @file
 * Provides installation and uninstallation functions for the Auctions module.
 */

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements of hook_help().
 */
function auctions_help($route_name, RouteMatchInterface $route_match) {

  switch ($route_name) {
    case 'help.page.auctions':
      $modPath = Drupal::service('extension.path.resolver')->getPath('module', 'auctions');
      $readmePath = $modPath . '/README.md';
      if (is_file($readmePath)) {
        $text = \file_get_contents($readmePath, false);
        if (!\Drupal::moduleHandler()->moduleExists('markdown')) {
          return '<pre>' . $text . '</pre>';
        }
        else {
          // Use the Markdown filter to render the README.
          $filter_manager = \Drupal::service('plugin.manager.filter');
          $settings = \Drupal::configFactory()->get('markdown.settings')->getRawData();
          $config = ['settings' => $settings];
          $filter = $filter_manager->createInstance('markdown', $config);
          return $filter->process($text, 'en');
        }
      }
      else {
        return t('Please see README in Auctions base module');
      }
      break;
  }
}

/**
 * Implements hook_inline_entity_form_entity_form_alter().
 */
function auctions_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface $form_state) {
  if ($entity_form['#entity_type'] == 'auction_item') {

    $entity_form['bids']['#access'] = FALSE;
    $entity_form['workflow']['#disabled'] = TRUE;
    $entity_form['revision_log_message']['#access'] = FALSE;
    $entity_form['status']['#access'] = FALSE;
    $entity_form['#after_build'][] = '_auctions_ife_alter_build';

    $entity_form['price_starting']['widget'][0]['value']['#min'] = 0;
    $entity_form['price_starting']['widget'][0]['value']['#field_prefix'] = '$';
    $entity_form['price_starting']['widget'][0]['value']['#states'] = [
      'invisible' => [
        ':input[name*="instant_only"]' => ['checked' => TRUE],
      ],
      'required' => [
        ':input[name*="instant_only"]' => ['checked' => FALSE],
      ],
    ];

    $entity_form['bid_step']['widget'][0]['value']['#field_prefix'] = '$';
    $entity_form['bid_step']['widget'][0]['value']['#states'] = [
      'invisible' => [
        ':input[name*="instant_only"]' => ['checked' => TRUE],
      ],
      'required' => [
        ':input[name*="instant_only"]' => ['checked' => FALSE],
      ],
    ];

    $entity_form['price_threshold']['widget'][0]['value']['#min'] = 0;
    $entity_form['price_threshold']['widget'][0]['value']['#step'] = '1';
    $entity_form['price_threshold']['widget'][0]['value']['#field_suffix'] = '%';
    $entity_form['price_threshold']['widget'][0]['value']['#size'] = '4';
    $entity_form['price_threshold']['widget'][0]['value']['#states'] = [
      'invisible' => [
        ':input[name*="instant_only"]' => ['checked' => TRUE],
      ],
      'required' => [
        ':input[name*="instant_only"]' => ['!value' => 0],
      ],
    ];

    $entity_form['price_buy_now']['widget'][0]['value']['#field_prefix'] = '$';
    $entity_form['price_buy_now']['widget'][0]['value']['#min'] = 0;
    $entity_form['price_buy_now']['widget'][0]['value']['#states'] = [
      'required' => [
        ':input[name*="instant_only"]' => ['checked' => TRUE],
      ],
    ];
  }
}

/**
 * Form element #after_build callback: Updates the entity with submitted data.
 */
function _auctions_ife_alter_build(array $element, FormStateInterface $form_state) {
  // Only let users select one year, change to radios.
  // Daterange has past years, remove them.
  $now = new DrupalDateTime('now');
  $years = \Drupal::config('auctions.item_settings')->get('years-ahead');
  $current = $now->format('Y');
  $then = $now->modify("$years year")->format('Y');
  $rawRange = \range($current, $then);
  $yearRange = \array_combine($rawRange, $rawRange);
  $element['date']['widget'][0]['value']['year']['#options'] = $yearRange;
  $element['date']['widget'][0]['end_value']['year']['#options'] = $yearRange;
  return $element;
}

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function auctions_node_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  if ($entity->getType() == 'auction') {
    $build['#attached']['library'][] = 'auctions/node';

    // Disable caching.
    $build['#cache']['max-age'] = 0;
    if (\Drupal::hasService('page_cache_kill_switch')) {
      \Drupal::service('page_cache_kill_switch')->trigger();
    }
    $auctionItem = $entity->hasField('field_auction_item') && !$entity->get('field_auction_item')->isEmpty() ? $entity->field_auction_item->referencedEntities() : FALSE;
    if ($auctionItem) {
      $build['auction-countdown'] = [
        '#weight' => -500,
        '#type' => 'container',
        '#prefix' => '<div class="auction-node-countdown">',
        '#suffix' => '</div>',
      ];
      $block_manager = \Drupal::service('plugin.manager.block');
      $block_config = [
        'font_size' => $view_mode == 'teaser' ? 12 : 16,
        'auction_item' => $auctionItem,
      ];
      $block_plugin = $block_manager->createInstance('auction_item_countdown', $block_config);
      $block_build = $block_plugin->build();
      $build['auction-countdown']['header'] = $block_build;

      // Display layout. If comments are enabled, ensure Bidders Form is above.
      $weight = 1000;
      if (isset($build['field_comments'])) {
        $weight = $build['field_comments']['#weight'] - 0.01;
      }
      $build['auction-bidder'] = [
        '#weight' => $weight,
        '#access' => $view_mode == 'full' ? TRUE : FALSE,
        '#type' => 'container',
        '#prefix' => '<div class="auction-node-bidders">',
        '#suffix' => '</div>',
      ];
      $build['auction-bidder']['bidder-form'] = \Drupal::formBuilder()->getForm('\Drupal\auctions_core\Form\BiddersForm', $auctionItem);
      if ($auctionItem[0]->hasBids()) {
        $build['auction-bidder']['current-bids'] = views_embed_view('bids_relist_group', 'embed_1', $auctionItem[0]->getRelistCount(), $auctionItem[0]->getID());
      }
    }
  }
}

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

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