View source
<?php
declare (strict_types=1);
use Drupal\Core\Field\BaseFieldDefinition;
function smart_date_recur_requirements($phase) {
$requirements = [];
if (!class_exists('\\Recurr\\Rule')) {
$requirements['smart_date_recur_dependencies'] = [
'title' => t('Smart date recur'),
'description' => \t('Smart Date Recur has unmet Composer dependencies. Read the <a href="@url">documentation</a> on how to install them.', [
'@url' => 'https://www.drupal.org/node/2627292',
]),
'severity' => \REQUIREMENT_ERROR,
];
}
return $requirements;
}
function smart_date_recur_update_8301() {
db_change_varchar_field('smart_date_rule', 'freq', 8);
}
function smart_date_recur_update_8302() {
$field_storage_definition = BaseFieldDefinition::create('uuid')
->setLabel(t('UUID'))
->setDescription(t('The UUID of the SmartDateRule entity.'))
->setReadOnly(TRUE);
\Drupal::entityDefinitionUpdateManager()
->installFieldStorageDefinition('uuid', 'smart_date_rule', 'smart_date_rule', $field_storage_definition);
}
function smart_date_recur_update_8303(&$sandbox) {
if (!isset($sandbox['progress'])) {
$sandbox['progress'] = 0;
$sandbox['last'] = 0;
$sandbox['max'] = \Drupal::database()
->query('SELECT COUNT(rid) FROM {smart_date_rule} WHERE uuid IS NULL')
->fetchField();
}
$uuid_service = \Drupal::service('uuid');
$rids = \Drupal::database()
->queryRange('SELECT rid FROM {smart_date_rule} WHERE rid > :rid AND uuid IS NULL ORDER BY rid ASC', 0, 10, array(
':rid' => $sandbox['last'],
))
->fetchCol();
foreach ($rids as $value) {
\Drupal::database()
->update('smart_date_rule')
->fields([
'uuid' => $uuid_service
->generate(),
])
->condition('rid', $value)
->isNull('uuid')
->execute();
$sandbox['progress']++;
$sandbox['last'] = $value;
}
$sandbox['#finished'] = empty($sandbox['max']) ? 1 : $sandbox['progress'] / $sandbox['max'];
}
if (!function_exists('db_change_varchar_field')) {
function db_change_varchar_field($entity_type_id, $field_name, $field_length) {
$schema_repository = \Drupal::service('entity.last_installed_schema.repository');
$entity_field_manager = \Drupal::service('entity_field.manager');
$base_field_definitions = $entity_field_manager
->getBaseFieldDefinitions($entity_type_id);
$schema_repository
->setLastInstalledFieldStorageDefinition($base_field_definitions[$field_name]);
$field_storage_definitions = $schema_repository
->getLastInstalledFieldStorageDefinitions($entity_type_id);
$field_storage_definitions[$field_name]
->setSetting('max_length', $field_length);
$schema_repository
->setLastInstalledFieldStorageDefinitions($entity_type_id, $field_storage_definitions);
$key_value = \Drupal::keyValue('entity.storage_schema.sql');
$key_name = $entity_type_id . '.field_schema_data.' . $field_name;
$storage_schema = $key_value
->get($key_name);
foreach ($storage_schema as &$table_schema) {
$table_schema['fields'][$field_name]['length'] = $field_length;
}
$key_value
->set($key_name, $storage_schema);
$db = Drupal::database();
foreach ($storage_schema as $table_name => $table_schema) {
$db
->schema()
->changeField($table_name, $field_name, $field_name, $table_schema['fields'][$field_name]);
}
}
}