HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.2.34
System: Linux atalantini.com 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 15:46:38 UTC 2020 x86_64
User: root (0)
PHP: 7.2.34
Disabled: NONE
Upload Files
File: /var/www/html/drupal/20210422/public_html/modules/block_class/block_class.module
<?php

/**
 * @file
 * Adding classes to blocks.
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\block\Entity\Block;
use Drupal\Component\Utility\Html;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\block\BlockInterface;
use Drupal\Core\Url;

/**
 * Implements hook_help().
 */
function block_class_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the forms_to_email module.
    case 'help.page.block_class':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t("Block Class allows users to add classes to any block through the block's configuration interface. Hooray for more powerful block theming!") . '</p>';

      $output .= '<h3>' . t('Installation note') . '</h3>';
      $output .= '<dl>';
      $output .= '<dt>' . t('Enable the module on <a href=":extend_link">extend menu</a>.', [':extend_link' => Url::fromRoute('system.modules_list')->toString()]) . '</dt>';
      $output .= '</dl>';

      $output .= '<h3>' . t('Usage') . '</h3>';
      $output .= '<dl>';
      $output .= '<dt>' . t("To add a class to a block, simply visit that block's configuration page at Administration > Structure > Block Layout and click on Configure of the desired block.") . '</dt>';
      $output .= '</dl>';

      return $output;
  }
}

/**
 * Implements hook_ENTITY_TYPE_presave().
 */
function block_class_block_presave(BlockInterface $entity) {
  if (empty($entity->getThirdPartySetting('block_class', 'classes'))) {
    $entity->unsetThirdPartySetting('block_class', 'classes');
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function block_class_form_block_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if (\Drupal::currentUser()->hasPermission('administer block classes')) {

    /** @var \Drupal\block\BlockInterface $block */
    $block = $form_state->getFormObject()->getEntity();

    // This will automatically be saved in the third party settings.
    $form['third_party_settings']['#tree'] = TRUE;
    $form['third_party_settings']['block_class']['classes'] = [
      '#type' => 'textfield',
      '#title' => t('CSS class(es)'),
      '#description' => t('Customize the styling of this block by adding CSS classes. Separate multiple classes by spaces.'),
      '#default_value' => $block->getThirdPartySetting('block_class', 'classes'),
      '#maxlength' => 255,
    ];

  }
}

/**
 * Implements hook_preprocess_HOOK().
 */
function block_class_preprocess_block(&$variables) {
  // Blocks coming from page manager widget does not have id.
  if (!empty($variables['elements']['#id'])) {
    $block = Block::load($variables['elements']['#id']);
    if ($block && $classes = $block->getThirdPartySetting('block_class', 'classes')) {
      $classes_array = explode(' ', $classes);
      foreach ($classes_array as $class) {
        $variables['attributes']['class'][] = Html::cleanCssIdentifier($class, []);
      }
    }
  }
}