bm-1.0.x-dev/bm.module

bm.module
<?php declare(strict_types = 1);

/**
 * @file
 * Provides a booking manager entity type.
 */

use Drupal\Core\Render\Element;
use Drupal\user\UserInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\views\ViewExecutable;
/**
 * Implements hook_theme().
 */
function bm_theme(): array {
  return [
    'bm' => ['render element' => 'elements'],
    'views_view__booking_list_date__page_2' => [
      'template' => 'views-view--booking-list-date--page-2',
      'base hook' => 'view'
    ]
  ];
}

function bm_form_alter(&$form, &$form_state, &$form_id) {
  if (str_contains($form_id, 'bm_') &&
    ( str_contains($form_id, '_edit_form') || str_contains($form_id, '_add_form'))) {
    $form['#attached']['library'][] = 'bm/select2';
  }
}

/**
 * Implements hook_entity_base_field_info().
 */
function bm_entity_base_field_info(EntityTypeInterface $entity_type) {
  if (in_array($entity_type->id(), ['taxonomy_term', 'node', 'bm'], TRUE)) {
    $fields['path'] = BaseFieldDefinition::create('path')
      ->setLabel(t('URL alias'))
      ->setTranslatable(TRUE)
      ->setDisplayOptions('form', [
        'type' => 'path',
        'weight' => 30,
      ])
      ->setDisplayConfigurable('form', TRUE)
      ->setComputed(TRUE);

    return $fields;
  }
}

/**
 * Prepares variables for booking manager templates.
 *
 * Default template: bm.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - elements: An associative array containing the booking manager information and any
 *     fields attached to the entity.
 *   - attributes: HTML attributes for the containing element.
 */
function template_preprocess_bm(array &$variables): void {
  $variables['view_mode'] = $variables['elements']['#view_mode'];
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
}

// function bm_preprocess_views_exposed_form(&$variables) {
//   if (str_contains($variables['form']['#id'], 'views-exposed-form-booking-list-date')) {
//     $variables['form']['#attached']['library'][] = 'bm/calendar';
//   }
// }

// function bm_views_pre_render(ViewExecutable $view) {
//   $start_date = \Drupal::request()->query->all();
//   if (!empty($start_date['start_date'])) {
//     // ksm($view->calendar_timestamp);
//     // ksm($start_date['start_date']);
//     $view->calendar_timestamp = 1690819200;//strtotime($start_date['start_date']);
//   }
//   // view->calendar_timestamp
// }

/**
 * Implements hook_user_cancel().
 */
function bm_user_cancel($edit, UserInterface $account, $method): void {
  switch ($method) {
    case 'user_cancel_block_unpublish':
      // Unpublish booking managers.
      $storage = \Drupal::entityTypeManager()->getStorage('bm');
      $bm_ids = $storage->getQuery()
        ->condition('uid', $account->id())
        ->condition('status', 1)
        ->accessCheck(FALSE)
        ->execute();
      foreach ($storage->loadMultiple($bm_ids) as $bm) {
        $bm->set('status', FALSE)->save();
      }
      break;

    case 'user_cancel_reassign':
      // Anonymize booking managers.
      $storage = \Drupal::entityTypeManager()->getStorage('bm');
      $bm_ids = $storage->getQuery()
        ->condition('uid', $account->id())
        ->accessCheck(FALSE)
        ->execute();
      foreach ($storage->loadMultiple($bm_ids) as $bm) {
        $bm->setOwnerId(0)->save();
      }
      break;
  }
}

/**
 * Implements hook_ENTITY_TYPE_predelete() for user entities.
 */
function bm_user_predelete(UserInterface $account): void {
  // Delete booking managers that belong to this account.
  $storage = \Drupal::entityTypeManager()->getStorage('bm');
  $bm_ids = $storage->getQuery()
    ->condition('uid', $account->id())
    ->accessCheck(FALSE)
    ->execute();
  $storage->delete(
    $storage->loadMultiple($bm_ids)
  );
  // Delete old revisions.
  $bm_ids = $storage->getQuery()
    ->allRevisions()
    ->condition('uid', $account->id())
    ->accessCheck(FALSE)
    ->execute();
  foreach (array_keys($bm_ids) as $revision_id) {
    $storage->deleteRevision($revision_id);
  }
}

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

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