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);
}
}
