interdiff impossible; taking evasive action reverted: --- b/src/Plugin/Field/FieldType/ViewsReferenceItem.php +++ a/src/Plugin/Field/FieldType/ViewsReferenceItem.php @@ -140,18 +140,6 @@ return $form; } - /** - * {@inheritdoc} - */ - public static function fieldSettingsFormValidate(array $form, FormStateInterface $form_state) { - // Remove unchecked values. so that we have only the checked values in the config. - $keys = ['plugin_types', 'preselect_views', 'enabled_settings']; - foreach ($keys as $key) { - $form_state->setValue(['settings', $key], array_filter($form_state->getValue(['settings', $key], []))); - } - parent::fieldSettingsFormValidate($form, $form_state); - } - /** * {@inheritdoc} */ unchanged: --- a/src/Plugin/Field/FieldType/ViewsReferenceItem.php +++ b/src/Plugin/Field/FieldType/ViewsReferenceItem.php @@ -148,6 +148,20 @@ class ViewsReferenceItem extends EntityReferenceItem { return $form; } + /** + * {@inheritdoc} + */ + public static function fieldSettingsFormValidate(array $form, FormStateInterface $form_state) { + // Remove unchecked values. so that we have only the checked values in the + // config. + $keys = ['plugin_types', 'preselect_views', 'enabled_settings']; + foreach ($keys as $key) { + $path = ['settings', $key]; + $form_state->setValue($path, array_filter($form_state->getValue($path, []))); + } + parent::fieldSettingsFormValidate($form, $form_state); + } + /** * {@inheritdoc} */ diff -u b/tests/src/Functional/Update/ViewsReferenceUpdateTest.php b/tests/src/Functional/Update/ViewsReferenceUpdateTest.php --- b/tests/src/Functional/Update/ViewsReferenceUpdateTest.php +++ b/tests/src/Functional/Update/ViewsReferenceUpdateTest.php @@ -1,5 +1,7 @@ -databaseDumpFiles = [ - __DIR__ . '/../../../fixtures/update/drupal-8.9.6.viewsreference-8.x-1.4.php.gz' + __DIR__ . '/../../../fixtures/update/drupal-8.9.6.viewsreference-8.x-1.4.php.gz', ]; } + /** + * Tests the update hook 8103. + */ public function testUpdateHook8103() { $columns = ['field_viewsreference_argument', 'field_viewsreference_title']; $connection = $this->container->get('database'); /** @var \Drupal\Core\Database\Schema $schema */ $schema = $connection->schema(); - foreach($columns as $column) { + foreach ($columns as $column) { self::assertTrue($schema->fieldExists('node__field_viewsreference', $column)); } $query = $connection->select('node__field_viewsreference', 'vr'); $query->addField('vr', 'field_viewsreference_data'); $result = $query->execute(); + // @phpcs:ignore $data = unserialize($result->fetchField(), ['allowed_class' => FALSE]); - self::assertTrue(array_key_exists('view_mode', $data) && $data['view_mode'] === 'preview_wide'); + self::assertTrue(array_key_exists('view_mode', $data) && 'preview_wide' === $data['view_mode']); self::assertArrayNotHasKey('title', $data); self::assertArrayNotHasKey('argument', $data); @@ -51,16 +57,17 @@ $this->runUpdates(); $this->assertEqual(drupal_get_installed_schema_version('viewsreference'), 8103); - foreach($columns as $column) { + foreach ($columns as $column) { self::assertFalse($schema->fieldExists('node__field_viewsreference', $column)); } $query = $connection->select('node__field_viewsreference', 'vr'); $query->addField('vr', 'field_viewsreference_data'); $result = $query->execute(); + // @phpcs:ignore $data = unserialize($result->fetchField(), ['allowed_class' => FALSE]); - self::assertTrue(array_key_exists('view_mode', $data) && $data['view_mode'] === 'preview_wide'); - self::assertTrue(array_key_exists('title', $data) && $data['title'] === '1'); - self::assertTrue(array_key_exists('argument', $data) && $data['argument'] === 'test'); + self::assertTrue(array_key_exists('view_mode', $data) && 'preview_wide' === $data['view_mode']); + self::assertTrue(array_key_exists('title', $data) && '1' === $data['title']); + self::assertTrue(array_key_exists('argument', $data) && 'test' === $data['argument']); } } diff -u b/viewsreference.install b/viewsreference.install --- b/viewsreference.install +++ b/viewsreference.install @@ -33,15 +33,15 @@ * Migrate title and argument columns to the new data field. */ function viewsreference_update_8103() { - $field_type = 'viewsreference'; - $entity_type_manager = \Drupal::entityTypeManager(); + $field_type = 'viewsreference'; + $entity_type_manager = \Drupal::entityTypeManager(); /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager */ $entity_field_manager = \Drupal::service('entity_field.manager'); - $entity_field_map = $entity_field_manager->getFieldMapByFieldType($field_type); - $database = \Drupal::database(); - $entity_def_manager = \Drupal::entityDefinitionUpdateManager(); + $entity_field_map = $entity_field_manager->getFieldMapByFieldType($field_type); + $database = \Drupal::database(); + $entity_def_manager = \Drupal::entityDefinitionUpdateManager(); /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_manager */ - $entity_display_manager = \Drupal::service('entity_display.repository'); + $entity_display_manager = \Drupal::service('entity_display.repository'); foreach ($entity_field_map as $entity_type_id => $field_map) { $entity_storage = $entity_type_manager->getStorage($entity_type_id); @@ -51,7 +51,7 @@ continue; } - $entity_type = $entity_type_manager->getDefinition($entity_type_id); + $entity_type = $entity_type_manager->getDefinition($entity_type_id); $field_storage_definitions = $entity_field_manager->getFieldStorageDefinitions($entity_type_id); /** @var Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */ $table_mapping = $entity_storage->getTableMapping($field_storage_definitions); @@ -62,7 +62,8 @@ try { $table = $table_mapping->getFieldTableName($field_name); - } catch (SqlContentEntityStorageException $e) { + } + catch (SqlContentEntityStorageException $e) { // Custom storage? Broken site? No matter what, if there is no table // or column, there's little we can do. continue; @@ -92,7 +93,7 @@ continue; } - // Wipe it + // Truncate the table. $database->truncate($_table)->execute(); } @@ -103,12 +104,13 @@ foreach (array_filter([$table, $revision_table]) as $_table) { if (!empty($existing_data[$_table])) { - // Build and execute the insert query + // Build and execute the insert query. $insert_query = $database->insert($_table); - $did_fields = FALSE; + $did_fields = FALSE; foreach (array_keys($existing_data[$_table]) as $k) { - $existing_data_row = unserialize($existing_data[$_table][$k]["${field_name}_data"], ['allowed_class' => false]); + // @phpcs:ignore + $existing_data_row = unserialize($existing_data[$_table][$k]["${field_name}_data"], ['allowed_class' => FALSE]); $existing_data_row['title'] = $existing_data[$_table][$k]["${field_name}_title"]; $existing_data_row['argument'] = $existing_data[$_table][$k]["${field_name}_argument"]; $existing_data[$_table][$k]["${field_name}_data"] = serialize(array_filter($existing_data_row)); @@ -126,7 +128,7 @@ $insert_query->execute(); } - // Drop existing argument and title fields + // Drop existing argument and title fields. $database->schema()->dropField($_table, "${field_name}_argument"); $database->schema()->dropField($_table, "${field_name}_title"); } @@ -135,26 +137,26 @@ foreach ((array) $field_map[$field_name]['bundles'] as $bundle) { $bundle_fields = $entity_field_manager->getFieldDefinitions($entity_type_id, $bundle); /** @var \Drupal\core\Field\FieldConfigInterface $field_definition */ - $field_definition = $bundle_fields[$field_name]; - $settings = $field_definition->getSettings(); + $field_definition = $bundle_fields[$field_name]; + $settings = $field_definition->getSettings(); $keys = ['plugin_types', 'preselect_views']; foreach ($keys as $key) { if (array_key_exists($key, $settings)) { - // Remove not enabled options for a valid schema. Unchecked option was a integer 0. - // Allows are only strings. + // Remove not enabled options for a valid schema. Unchecked option + // was a integer 0. Allows are only strings. $settings[$key] = is_array($settings[$key]) ? array_filter($settings[$key]) : []; } } $settings['enabled_settings'] = [ 'argument' => 'argument', - 'title' => 'title', + 'title' => 'title', ]; $field_definition->setSettings($settings); $field_definition->save(); - // Remove not enabled options for a valid schema. Unchecked option was a integer 0. - // Allows are only strings. + // Remove not enabled options for a valid schema. Unchecked option was + // an integer 0. Allows are only strings. $view_modes = $entity_display_manager->getViewModeOptionsByBundle($entity_type_id, $bundle); foreach (array_keys($view_modes) as $view_mode) { $viewDisplay = $entity_display_manager->getViewDisplay($entity_type_id, $bundle, $view_mode); @@ -181,18 +183,18 @@ * The names of the new fields to be added. */ function viewsreference_update_viewsreference_fields(array $columns_to_add = []) { - $field_type = 'viewsreference'; - $processed_fields = []; + $field_type = 'viewsreference'; + $processed_fields = []; $field_type_manager = \Drupal::service('plugin.manager.field.field_type'); - $field_definition = $field_type_manager->getDefinition($field_type); - $field_item_class = $field_definition['class']; + $field_definition = $field_type_manager->getDefinition($field_type); + $field_item_class = $field_definition['class']; - $schema = \Drupal::database()->schema(); - $entity_type_manager = \Drupal::entityTypeManager(); + $schema = \Drupal::database()->schema(); + $entity_type_manager = \Drupal::entityTypeManager(); $entity_field_manager = \Drupal::service('entity_field.manager'); - $entity_field_map = $entity_field_manager->getFieldMapByFieldType($field_type); + $entity_field_map = $entity_field_manager->getFieldMapByFieldType($field_type); // The key-value collection for tracking installed storage schema. - $entity_storage_schema_sql = \Drupal::keyValue('entity.storage_schema.sql'); + $entity_storage_schema_sql = \Drupal::keyValue('entity.storage_schema.sql'); $entity_definitions_installed = \Drupal::keyValue('entity.definitions.installed'); foreach ($entity_field_map as $entity_type_id => $field_map) { @@ -203,7 +205,7 @@ continue; } - $entity_type = $entity_type_manager->getDefinition($entity_type_id); + $entity_type = $entity_type_manager->getDefinition($entity_type_id); $field_storage_definitions = $entity_field_manager->getFieldStorageDefinitions($entity_type_id); /** @var Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */ $table_mapping = $entity_storage->getTableMapping($field_storage_definitions); @@ -213,7 +215,8 @@ $field_name = $field_storage_definition->getName(); try { $table = $table_mapping->getFieldTableName($field_name); - } catch (SqlContentEntityStorageException $e) { + } + catch (SqlContentEntityStorageException $e) { // Custom storage? Broken site? No matter what, if there is no table // or column, there's little we can do. continue; @@ -229,7 +232,7 @@ } } // Load the installed field schema so that it can be updated. - $schema_key = "$entity_type_id.field_schema_data.$field_name"; + $schema_key = "$entity_type_id.field_schema_data.$field_name"; $field_schema_data = $entity_storage_schema_sql->get($schema_key); $processed_fields[] = [$entity_type_id, $field_name]; @@ -239,7 +242,7 @@ // Add `initial_from_field` to the new spec, as this will copy over // the entire data. $field_schema = $field_item_class::schema($field_storage_definition); - $spec = $field_schema['columns'][$column_id]; + $spec = $field_schema['columns'][$column_id]; // Add the new column. $schema->addField($table, $column, $spec); @@ -249,10 +252,10 @@ // Add the new column to the installed field schema. if ($field_schema_data) { - $field_schema_data[$table]['fields'][$column] = $field_schema['columns'][$column_id]; + $field_schema_data[$table]['fields'][$column] = $field_schema['columns'][$column_id]; $field_schema_data[$table]['fields'][$column]['not null'] = FALSE; if ($revision_table) { - $field_schema_data[$revision_table]['fields'][$column] = $field_schema['columns'][$column_id]; + $field_schema_data[$revision_table]['fields'][$column] = $field_schema['columns'][$column_id]; $field_schema_data[$revision_table]['fields'][$column]['not null'] = FALSE; } }