ip_login-4.x-dev/ip_login.install
ip_login.install
<?php
/**
* @file
* Database update routines for the IP login module.
*/
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
/**
* Adds the 'ip_login_data' field for storing multiple login addresses per-user.
*/
function ip_login_update_9001(): void {
$schema = Drupal::database()->schema();
$ent_def_manager = \Drupal::entityDefinitionUpdateManager();
if (!$schema->tableExists('user__ip_login_data') && !$ent_def_manager->getFieldStorageDefinition('user', 'ip_login_data')) {
$field_def = BaseFieldDefinition::create('ipaddress')
->setLabel(t('Login IP Address'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setSettings([
'allow_family' => 10,
'allow_range' => TRUE,
]);
$ent_def_manager->installFieldStorageDefinition('ip_login_data', 'user', 'ip_login', $field_def);
}
}
/**
* Migrate IP login address values to the new field.
*/
function ip_login_update_9002(): void {
$db = Drupal::database();
$schema = $db->schema();
// Proceed only if the required columns exist.
$ip_login_start_exists = $schema->fieldExists('users_field_data', 'ip_login__ip_start');
$ip_login_end_exists = $schema->fieldExists('users_field_data', 'ip_login__ip_end');
if ($ip_login_start_exists && $ip_login_end_exists) {
$data = $db->select('users_field_data', 'ufd')
->fields('ufd', ['uid', 'ip_login__ip_start', 'ip_login__ip_end'])
->isNotNull('ip_login__ip_start')
->execute()
->fetchAllAssoc('uid', \PDO::FETCH_ASSOC);
if (!empty($data)) {
$language = \Drupal::service('language.default')->get();
$insert = $db->insert('user__ip_login_data')
->fields([
'bundle',
'entity_id',
'revision_id',
'langcode',
'delta',
'ip_login_data_ip_start',
'ip_login_data_ip_end',
]);
foreach ($data as $row) {
$insert->values([
'user',
$row['uid'],
$row['uid'],
$language->getId(),
0,
$row['ip_login__ip_start'],
$row['ip_login__ip_end'],
]);
}
$insert->execute();
}
}
}
/**
* Remove the old single-valued 'ip_login' field.
*/
function ip_login_update_9003(): void {
$field_def = Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('ip_login', 'user');
if (!empty($field_def)) {
Drupal::entityDefinitionUpdateManager()->uninstallFieldStorageDefinition($field_def);
}
}
/**
* Add default values for new path-based configuration settings.
*/
function ip_login_update_9004(): void {
$config = \Drupal::configFactory()->getEditable('ip_login.settings');
// Set default value for check_mode if not already set.
if ($config->get('check_mode') === NULL) {
$config->set('check_mode', 0);
}
// Set default value for paths if not already set.
if ($config->get('paths') === NULL) {
$config->set('paths', '');
}
$config->save(TRUE);
}
