arlo-1.x-dev/src/Plugin/Block/ArloUpcomingEventsBlock.php

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

namespace Drupal\arlo\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Config\ConfigBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Provides an 'Arlo Upcoming Events' block.
 *
 * @Block(
 *  id = "arlo_upcoming_events_block",
 *  admin_label = @Translation("Arlo Upcoming Events"),
 * )
 */
class ArloUpcomingEventsBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return [
      'platform_id' => NULL,
      'max_count' => 5,
      'slow_load_more' => 'true',
      'load_more_text' => $this->t('Show More'),
      'dev_mode' => 'false',
      'locations' => NULL,
      'tag' => NULL,
      'template_category_id' => NULL,
      'event_ids' => NULL,
      'template_id' => 1,
    ] + parent::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {
    // Retrieve existing configuration for this block.
    $config = $this->getConfiguration();

    $form['platform_id'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Arlo Platform ID'),
      '#default_value' => $config['platform_id'],
      '#required' => TRUE,
      '#maxlength' => 32,
      '#weight' => 1,
    ];
    
    /**
     * Pull in any templates configured in custom hooks.
     */
    $options = [];
    $hook = 'custom_event_templates';
    \Drupal::moduleHandler()->invokeAllWith($hook, function (callable $hook, string $module) use (&$options) {
      $options = $hook();
    });

    // Add our standard templates that come with this module.
    $options += [
      1 => 'Standard Upcoming Events Template 1',
      2 => 'Standard Upcoming Events Template 2',
      3 => 'Standard Upcoming Events Template 3',
      4 => 'Standard Upcoming Events Template 4',
      5 => 'Standard Upcoming Events Template 5',
      6 => 'Standard Upcoming Events Template 6',
    ];

    $form['template_id'] = [
      '#type' => 'select',
      '#title' => $this->t('Select Upcoming Event Template'),
      '#options' => $options,
      '#required' => TRUE,
      '#default_value' => $config['template_id'],
      '#weight' => 5,
    ];

    $form['max_count'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Maximum Number of Events to Display'),
      '#default_value' => $config['max_count'],
      '#required' => TRUE,
      '#maxlength' => 2,
      '#size' => 2,
      '#weight' => 10,
    ];
    $form['show_load_more'] = [
      '#type' => 'select',
      '#title' => $this->t('Show Load More Button'),
      '#description' => $this->t('Show the load more button if there are more than the maximum count.'),
      '#options' => [
        'true' => 'TRUE',
        'false' => 'FALSE',
      ],
      '#required' => TRUE,
      '#default_value' => $config['show_load_more'],
      '#size' => 1,
      '#weight' => 20,
    ];    
    $form['load_more_text'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Show More Button Text'),
      '#description' => $this->t('The text for the Show More button.'),
      '#default_value' => $config['load_more_text'],
      '#maxlength' => 32,
      '#weight' => 30,
    ];
    $form['dev_mode'] = [
      '#type' => 'select',
      '#title' => $this->t('Development Mode'),
      '#options' => [
        'true' => 'TRUE',
        'false' => 'FALSE',
      ],
      '#default_value' => $config['dev_mode'],
      '#required' => TRUE,
      '#size' => 1,
      '#weight' => 40,
    ]; 

    $form['filters'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('These are optional filters used to select events using different selectors. Use anyone or combinations of the selectors below.'),
      '#weight' => 50,
    ];
    $form['filters']['event_ids'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Event IDs'),
      '#description' => $this->t("Enter an Event ID or set of IDs. Separate event IDs with commas."),
      '#maxlength' => 255,
      '#default_value' => $config['event_ids'],
      '#required' => FALSE,
      '#weight' => 0,
    ];
    $form['filters']['locations'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Locations'),
      '#description' => $this->t("Enter an event location or set of locations. Separate locations with commas."),
      '#maxlength' => 255,
      '#default_value' => $config['locations'],
      '#required' => FALSE,
      '#weight' => 10,
    ];   
    $form['filters']['template_category_id'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Template Category ID'),
      '#description' => $this->t("The Template category ID specification for events."),
      '#maxlength' => 255,
      '#default_value' => $config['template_category_id'],
      '#required' => FALSE,
      '#weight' => 20,
    ];
    $form['filters']['tag'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Tag'),
      '#description' => $this->t("The Arlo tag used to categorize events. Not a Drupal taxonomy term."),
      '#maxlength' => 255,
      '#default_value' => $config['tag'],
      '#required' => FALSE,
      '#weight' => 30,
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function blockSubmit($form, FormStateInterface $form_state) { 
    // Because the filters are in a fieldset, they come in as an array. We need
    // to get those elements to assign to our configuration.
    $filters = $form_state->getValue('filters');
    $this->configuration['platform_id'] = $form_state->getValue('platform_id');
    $this->configuration['max_count'] = $form_state->getValue('max_count');
    $this->configuration['show_load_more'] = $form_state->getValue('show_load_more');
    $this->configuration['load_more_text'] = $form_state->getValue('load_more_text');
    $this->configuration['template_id'] = $form_state->getValue('template_id');
    $this->configuration['event_ids'] = $filters['event_ids'];
    $this->configuration['locations'] = $filters['locations'];
    $this->configuration['template_category_id'] = $filters['template_category_id'];
    $this->configuration['tag'] = $filters['tag'];
    $this->configuration['dev_mode'] = $form_state->getValue('dev_mode');
  }

  /**
   * {@inheritdoc}
   */
  public function build() {
    // Retrieve existing configuration for this block.
    $block_config = $this->getConfiguration();
    $locations = $event_ids = NULL;

    if (!empty($block_config['locations'])) {
      $locations = explode(',', $block_config['locations']);
    }
    if (!empty($block_config['event_ids'])) {
      $event_ids = explode(',', $block_config['event_ids']);
    }
    return [
      '#theme' => 'arlo_upcoming_events_' . $block_config['template_id'],
      '#platform_id' => $block_config['platform_id'],
      '#max_count' => $block_config['max_count'],
      '#show_load_more' => $block_config['show_load_more'],
      '#load_more_text' => $block_config['load_more_text'],
      '#event_ids' => $event_ids,
      '#locations' => $locations,
      '#template_category_id' => $block_config['template_category_id'],
      '#tag' => $block_config['tag'],
      '#dev_mode' => $block_config['dev_mode'],
    ];
  }
}

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

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