Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / chi-teck / drupal-code-generator / templates / d8 / hook / field_storage_config_update_forbid.twig
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/hook/field_storage_config_update_forbid.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/hook/field_storage_config_update_forbid.twig
new file mode 100644 (file)
index 0000000..77fd3c1
--- /dev/null
@@ -0,0 +1,14 @@
+/**
+ * Implements hook_field_storage_config_update_forbid().
+ */
+function {{ machine_name }}_field_storage_config_update_forbid(\Drupal\field\FieldStorageConfigInterface $field_storage, \Drupal\field\FieldStorageConfigInterface $prior_field_storage) {
+  if ($field_storage->module == 'options' && $field_storage->hasData()) {
+    // Forbid any update that removes allowed values with actual data.
+    $allowed_values = $field_storage->getSetting('allowed_values');
+    $prior_allowed_values = $prior_field_storage->getSetting('allowed_values');
+    $lost_keys = array_keys(array_diff_key($prior_allowed_values, $allowed_values));
+    if (_options_values_in_use($field_storage->getTargetEntityTypeId(), $field_storage->getName(), $lost_keys)) {
+      throw new \Drupal\Core\Entity\Exception\FieldStorageDefinitionUpdateForbiddenException(t('A list field (@field_name) with existing data cannot have its keys changed.', ['@field_name' => $field_storage->getName()]));
+    }
+  }
+}