contacts_events-8.x-1.x-dev/modules/teams/contacts_events_teams.install

modules/teams/contacts_events_teams.install
<?php

/**
 * @file
 * Install, update and uninstall functions for the Contacts Events Teams module.
 */

use Drupal\contacts_dbs\Entity\DBSWorkforce;
use Drupal\Core\Entity\Entity\EntityFormDisplay;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\entity\BundleFieldDefinition;
use Drupal\views\Entity\View;
use Symfony\Component\Yaml\Yaml;

/**
 * Implements hook_install().
 *
 * Update entity form display with correct field group.
 * Add dbs_workforce field to teams if contacts_dbs was already installed.
 */
function contacts_events_teams_install() {
  /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $display */
  $display = EntityFormDisplay::load('contacts_event.default.default');
  if ($display && $field_group = $display->getThirdPartySetting('field_group', 'group_booking_settings')) {
    $field_group['children'][] = 'has_teams';
    $display->setThirdPartySetting('field_group', 'group_booking_settings', $field_group);
    $display->save();
  }

  if (\Drupal::moduleHandler()->moduleExists('contacts_dbs')) {
    _contacts_events_teams_install_dbs_workforce_field();
  }

  _contacts_events_teams_install_team_email_override_fields();
}

/**
 * Implements hook_modules_installed().
 *
 * Add dbs_workforce field to teams if contacts_dbs is being installed.
 */
function contacts_events_teams_modules_installed($modules) {
  if (in_array('contacts_dbs', $modules)) {
    _contacts_events_teams_install_dbs_workforce_field();
  }
}

/**
 * Helper function to install field definition for dbs_contacts workforce field.
 */
function _contacts_events_teams_install_dbs_workforce_field() {
  $field = BaseFieldDefinition::create('list_string')
    ->setName('dbs_workforce')
    ->setTargetEntityTypeId('c_events_team')
    ->setLabel(new TranslatableMarkup('DBS Workforce'))
    ->setDefaultValue(NULL)
    ->setSetting('allowed_values_function', [DBSWorkforce::class, 'getOptions'])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayOptions('form', [
      'type' => 'options_select',
      'weight' => 9,
    ])
    ->setDisplayConfigurable('view', TRUE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ]);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('dbs_workforce', 'c_events_team', 'contacts_events_teams', $field);
}

/**
 * Helper function to install field definitions for team email override fields.
 */
function _contacts_events_teams_install_team_email_override_fields() {
  // Note: this is the only base field, the others are bundle fields.
  $fields['team_email_override'] = BaseFieldDefinition::create('boolean')
    ->setName('team_email_override')
    ->setLabel(new TranslatableMarkup('Override team emails'))
    ->setDefaultValue(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_request_team_enabled'] = BundleFieldDefinition::create('boolean')
    ->setName('application_request_team_enabled')
    ->setLabel(new TranslatableMarkup('Enable application request (with team)?'))
    ->setDefaultValue(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_request_team_b_man'] = BundleFieldDefinition::create('boolean')
    ->setName('application_request_team_b_man')
    ->setLabel(new TranslatableMarkup('Do not send to the booking manager'))
    ->setDefaultValue(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_request_team_subject'] = BundleFieldDefinition::create('string')
    ->setName('application_request_team_subject')
    ->setLabel(new TranslatableMarkup('Application request subject (with team)'))
    ->setRequired(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'string_textfield',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_request_team_body'] = BundleFieldDefinition::create('text_long')
    ->setName('application_request_team_body')
    ->setLabel(new TranslatableMarkup('Application request email (with team)'))
    ->setRequired(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'text_textarea',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_accepted_enabled'] = BundleFieldDefinition::create('boolean')
    ->setName('application_accepted_enabled')
    ->setLabel(new TranslatableMarkup('Enable application accepted?'))
    ->setDefaultValue(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_accepted_subject'] = BundleFieldDefinition::create('string')
    ->setName('application_accepted_subject')
    ->setLabel(new TranslatableMarkup('Application accepted subject'))
    ->setRequired(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'string_textfield',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_accepted_body'] = BundleFieldDefinition::create('text_long')
    ->setName('application_accepted_body')
    ->setLabel(new TranslatableMarkup('Application accepted email'))
    ->setRequired(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'text_textarea',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_submitted_enabled'] = BundleFieldDefinition::create('boolean')
    ->setName('application_submitted_enabled')
    ->setLabel(new TranslatableMarkup('Enable application submitted?'))
    ->setDefaultValue(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_submitted_subject'] = BundleFieldDefinition::create('string')
    ->setName('application_submitted_subject')
    ->setLabel(new TranslatableMarkup('Application submitted subject'))
    ->setRequired(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'string_textfield',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  $fields['application_submitted_body'] = BundleFieldDefinition::create('text_long')
    ->setName('application_submitted_body')
    ->setLabel(new TranslatableMarkup('Application submitted email'))
    ->setRequired(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'text_textarea',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  foreach ($fields as $field_name => $field) {
    \Drupal::entityDefinitionUpdateManager()
      ->installFieldStorageDefinition($field_name, 'c_events_team', 'contacts_events_teams', $field);
  }
}

/**
 * Fix the Ticket::$team storage definition.
 */
function contacts_events_teams_update_8001() {
  /** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $repository */
  $repository = \Drupal::service('entity.last_installed_schema.repository');
  $definitions = $repository->getLastInstalledFieldStorageDefinitions('contacts_ticket');
  $definitions['team']->setSetting('target_type', 'c_events_team');
  $repository->setLastInstalledFieldStorageDefinitions('contacts_ticket', $definitions);
}

/**
 * Adds dbs_workforce field to teams if contacts_dbs was already installed.
 */
function contacts_events_teams_update_8002() {
  if (\Drupal::moduleHandler()->moduleExists('contacts_dbs')) {
    _contacts_events_teams_install_dbs_workforce_field();
  }
}

/**
 * Copy the has_teams field values to settings field.
 */
function contacts_events_teams_update_8003(&$sandbox) {
  /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
  $storage = \Drupal::service('entity_type.manager')->getStorage('contacts_event');

  // Set up the batch by retrieving all of the event IDs.
  if (!isset($sandbox['progress'])) {
    $sandbox['ids'] = $storage->getQuery()->accessCheck(FALSE)->execute();
    $sandbox['max'] = count($sandbox['ids']);
    $sandbox['progress'] = 0;
  }

  // Try to update 25 events entities at a time.
  $ids = array_slice($sandbox['ids'], $sandbox['progress'], 25);

  /** @var \Drupal\contacts_events\Entity\EventInterface $event */
  foreach ($storage->loadMultiple($ids) as $event) {
    if ($event->hasField('has_teams')) {
      $event->setSetting('teams.enabled', $event->get('has_teams')->value);
      $event->save();
    }

    $sandbox['progress']++;
  }

  // Try to update the percentage but avoid division by zero.
  $sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);

  // Show a status update for the current progress.
  return new TranslatableMarkup(
    'Updated the has_teams field for @progress out of @max events.',
    ['@progress' => $sandbox['progress'], '@max' => $sandbox['max']]
  );
}

/**
 * Remove the has_teams field storage definition.
 *
 * @see contacts_events_teams_entity_base_field_info()
 *
 * @todo Run this update after has_teams data has been moved.
 */
function _contacts_events_teams_update_0000() {
  /** @var \Drupal\Core\Entity\EntityFieldManager $entity_field_manager */
  $entity_field_manager = \Drupal::service('entity_field.manager');
  $fields = $entity_field_manager->getFieldStorageDefinitions('contacts_event');

  if (isset($fields['has_teams'])) {
    \Drupal::entityDefinitionUpdateManager()
      ->uninstallFieldStorageDefinition($fields['has_teams']);
  }
}

/**
 * Install team email override fields.
 */
function contacts_events_teams_update_8004(&$sandbox) {
  _contacts_events_teams_install_team_email_override_fields();
}

/**
 * Install user team application view.
 */
function contacts_events_teams_update_8005(&$sandbox) {
  $message = NULL;

  // Only create if the redirect view doesn't exist and views is enabled.
  if (\Drupal::moduleHandler()->moduleExists('views') && !View::load('contacts_events_teams_user_team_applications')) {
    $config_path = drupal_get_path('module', 'contacts_events_teams') . '/config/install/views.view.contacts_events_teams_user_team_applications.yml';
    $data = Yaml::parse(file_get_contents($config_path));
    \Drupal::configFactory()->getEditable('views.view.contacts_events_teams_user_team_applications')->setData($data)->save(TRUE);
    $message = 'The new User Team Applications view has been created.';
  }
  else {
    $message = 'Not creating a User Team Applications view since it already exists.';
  }
  return $message;
}

/**
 * Adds the disable_automatic_emails field to teams.
 */
function contacts_events_teams_update_8006() {
  $field = BaseFieldDefinition::create('boolean')
    ->setLabel(new TranslatableMarkup('Disable automatic emails for this team'))
    ->setDefaultValue(FALSE)
    ->setDisplayOptions('view', [
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'type' => 'boolean_checkbox',
    ])
    ->setDisplayConfigurable('form', TRUE)
    ->setDisplayConfigurable('view', FALSE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('disable_automatic_emails', 'c_events_team', 'contacts_events_teams', $field);
}

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

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