diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php index 9162646..35e5f88 100644 --- a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php +++ b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php @@ -22,7 +22,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface; * id = "inline_entity_form_complex", * label = @Translation("Inline entity form - Complex"), * field_types = { - * "entity_reference" + * "entity_reference", + * "entity_reference_revisions", * }, * multiple_values = true * ) diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php index 9e9f2f5..2516097 100644 --- a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php +++ b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php @@ -18,7 +18,8 @@ use Drupal\inline_entity_form\TranslationHelper; * id = "inline_entity_form_simple", * label = @Translation("Inline entity form - Simple"), * field_types = { - * "entity_reference" + * "entity_reference", + * "entity_reference_revisions", * }, * multiple_values = false * ) diff --git a/src/WidgetSubmit.php b/src/WidgetSubmit.php index 98921a4..42f1c51 100644 --- a/src/WidgetSubmit.php +++ b/src/WidgetSubmit.php @@ -2,8 +2,11 @@ namespace Drupal\inline_entity_form; +use Drupal\Core\Entity\RevisionableInterface; +use Drupal\Core\Entity\RevisionLogInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\inline_entity_form\Element\InlineEntityForm; +use Drupal\node\NodeInterface; /** * Performs widget submission. @@ -46,6 +49,19 @@ class WidgetSubmit { /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ $entity = $entity_item['entity']; $handler = InlineEntityForm::getInlineFormHandler($entity->getEntityTypeId()); + if ($entity instanceof RevisionableInterface && $entity->getEntityType()->isRevisionable()) { + $entity->setNewRevision(); + if ($entity instanceof NodeInterface) { + $entity->setRevisionCreationTime(REQUEST_TIME); + // If a new revision is created, save the current user as revision author. + $entity->setRevisionAuthorId(\Drupal::currentUser()->id()); + } + elseif ($entity instanceof RevisionLogInterface) { + // If a new revision is created, save the current user as revision author. + $entity->setRevisionUserId(\Drupal::currentUser()->id()); + $entity->setRevisionCreationTime(REQUEST_TIME); + } + } $handler->save($entity); $widget_state['entities'][$delta]['needs_save'] = FALSE; } diff --git a/tests/modules/inline_entity_form_test/config/optional/core.entity_form_display.node.ief_test_revisions_complex.default.yml b/tests/modules/inline_entity_form_test/config/optional/core.entity_form_display.node.ief_test_revisions_complex.default.yml new file mode 100644 index 0000000..3eca1e9 --- /dev/null +++ b/tests/modules/inline_entity_form_test/config/optional/core.entity_form_display.node.ief_test_revisions_complex.default.yml @@ -0,0 +1,66 @@ +langcode: en +status: true +dependencies: + config: + - field.field.node.ief_test_revisions_complex.field_entity_ref_revision + - node.type.ief_test_revisions_complex + module: + - entity_reference_revisions + - inline_entity_form + - path + - text +id: node.ief_test_revisions_complex.default +targetEntityType: node +bundle: ief_test_revisions_complex +mode: default +content: + created: + type: datetime_timestamp + weight: 10 + settings: { } + third_party_settings: { } + field_entity_ref_revision: + weight: 32 + settings: + form_mode: default + label_singular: '' + label_plural: '' + allow_new: true + match_operator: CONTAINS + override_labels: false + allow_existing: false + third_party_settings: { } + type: inline_entity_form_complex + path: + type: path + weight: 30 + settings: { } + third_party_settings: { } + promote: + type: boolean_checkbox + settings: + display_label: true + weight: 15 + third_party_settings: { } + sticky: + type: boolean_checkbox + settings: + display_label: true + weight: 16 + third_party_settings: { } + title: + type: string_textfield + weight: -5 + settings: + size: 60 + placeholder: '' + third_party_settings: { } + uid: + type: entity_reference_autocomplete + weight: 5 + settings: + match_operator: CONTAINS + size: 60 + placeholder: '' + third_party_settings: { } +hidden: { } diff --git a/tests/modules/inline_entity_form_test/config/optional/core.entity_view_display.node.ief_test_revisions_complex.default.yml b/tests/modules/inline_entity_form_test/config/optional/core.entity_view_display.node.ief_test_revisions_complex.default.yml new file mode 100644 index 0000000..bfe78e3 --- /dev/null +++ b/tests/modules/inline_entity_form_test/config/optional/core.entity_view_display.node.ief_test_revisions_complex.default.yml @@ -0,0 +1,26 @@ +langcode: en +status: true +dependencies: + config: + - field.field.node.ief_test_revisions_complex.field_entity_ref_revision + - node.type.ief_test_revisions_complex + module: + - entity_reference_revisions + - text + - user +id: node.ief_test_revisions_complex.default +targetEntityType: node +bundle: ief_test_revisions_complex +mode: default +content: + field_entity_ref_revision: + weight: 102 + label: above + settings: + view_mode: default + link: '' + third_party_settings: { } + type: entity_reference_revisions_entity_view + links: + weight: 100 +hidden: { } diff --git a/tests/modules/inline_entity_form_test/config/optional/field.field.node.ief_test_revisions_complex.field_entity_ref_revision.yml b/tests/modules/inline_entity_form_test/config/optional/field.field.node.ief_test_revisions_complex.field_entity_ref_revision.yml new file mode 100644 index 0000000..ac005d2 --- /dev/null +++ b/tests/modules/inline_entity_form_test/config/optional/field.field.node.ief_test_revisions_complex.field_entity_ref_revision.yml @@ -0,0 +1,27 @@ +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_entity_ref_revision + - node.type.ief_test_revisions_complex + module: + - entity_reference_revisions +id: node.ief_test_revisions_complex.field_entity_ref_revision +field_name: field_entity_ref_revision +entity_type: node +bundle: ief_test_revisions_complex +label: 'entity ref revision' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + handler: 'default:node' + handler_settings: + target_bundles: + ief_test_custom: ief_test_custom + sort: + field: _none + auto_create: false +field_type: entity_reference_revisions diff --git a/tests/modules/inline_entity_form_test/config/optional/field.storage.node.field_entity_ref_revision.yml b/tests/modules/inline_entity_form_test/config/optional/field.storage.node.field_entity_ref_revision.yml new file mode 100644 index 0000000..88a0955 --- /dev/null +++ b/tests/modules/inline_entity_form_test/config/optional/field.storage.node.field_entity_ref_revision.yml @@ -0,0 +1,19 @@ +langcode: en +status: true +dependencies: + module: + - entity_reference_revisions + - node +id: node.field_entity_ref_revision +field_name: field_entity_ref_revision +entity_type: node +type: entity_reference_revisions +settings: + target_type: node +module: entity_reference_revisions +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/tests/modules/inline_entity_form_test/config/optional/node.type.ief_test_revisions_complex.yml b/tests/modules/inline_entity_form_test/config/optional/node.type.ief_test_revisions_complex.yml new file mode 100644 index 0000000..480e4ff --- /dev/null +++ b/tests/modules/inline_entity_form_test/config/optional/node.type.ief_test_revisions_complex.yml @@ -0,0 +1,12 @@ +langcode: en +status: true +dependencies: + module: + - entity_reference_revisions +name: 'IEF test revisions complex' +type: ief_test_revisions_complex +description: '' +help: '' +new_revision: true +preview_mode: 1 +display_submitted: true