Skip to content

Commit

Permalink
Issue #2946750 by Sam152, merauluka, timmillwood, catch: Node revisio…
Browse files Browse the repository at this point in the history
…ns forced even if bundle not under moderation workflow

(cherry picked from commit 30c286f45d607fdad29c48bc3436711b68e9497a)
  • Loading branch information
alexpott committed Jun 12, 2020
1 parent 4178bfe commit 66ed69f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 26 deletions.
43 changes: 21 additions & 22 deletions modules/content_moderation/src/EntityTypeInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -321,37 +321,36 @@ public function entityPrepareForm(EntityInterface $entity, $operation, FormState
public function formAlter(array &$form, FormStateInterface $form_state, $form_id) {
$form_object = $form_state->getFormObject();
if ($form_object instanceof BundleEntityFormBase) {
$config_entity_type = $form_object->getEntity()->getEntityType();
$bundle_of = $config_entity_type->getBundleOf();
$config_entity = $form_object->getEntity();
$bundle_of = $config_entity->getEntityType()->getBundleOf();
if ($bundle_of
&& ($bundle_of_entity_type = $this->entityTypeManager->getDefinition($bundle_of))
&& $this->moderationInfo->canModerateEntitiesOfEntityType($bundle_of_entity_type)) {
$this->entityTypeManager->getHandler($config_entity_type->getBundleOf(), 'moderation')->enforceRevisionsBundleFormAlter($form, $form_state, $form_id);
&& $this->moderationInfo->shouldModerateEntitiesOfBundle($bundle_of_entity_type, $config_entity->id())) {
$this->entityTypeManager->getHandler($bundle_of, 'moderation')->enforceRevisionsBundleFormAlter($form, $form_state, $form_id);
}
}
elseif ($this->isModeratedEntityEditForm($form_object)) {
/** @var \Drupal\Core\Entity\ContentEntityFormInterface $form_object */
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
$entity = $form_object->getEntity();
if ($this->moderationInfo->isModeratedEntity($entity)) {
$this->entityTypeManager
->getHandler($entity->getEntityTypeId(), 'moderation')
->enforceRevisionsEntityFormAlter($form, $form_state, $form_id);

// Submit handler to redirect to the latest version, if available.
$form['actions']['submit']['#submit'][] = [EntityTypeInfo::class, 'bundleFormRedirect'];

// Move the 'moderation_state' field widget to the footer region, if
// available.
if (isset($form['footer']) && in_array($form_object->getOperation(), ['edit', 'default'], TRUE)) {
$form['moderation_state']['#group'] = 'footer';
}

// If the publishing status exists in the meta region, replace it with
// the current state instead.
if (isset($form['meta']['published'])) {
$form['meta']['published']['#markup'] = $this->moderationInfo->getWorkflowForEntity($entity)->getTypePlugin()->getState($entity->moderation_state->value)->label();
}
$this->entityTypeManager
->getHandler($entity->getEntityTypeId(), 'moderation')
->enforceRevisionsEntityFormAlter($form, $form_state, $form_id);

// Submit handler to redirect to the latest version, if available.
$form['actions']['submit']['#submit'][] = [EntityTypeInfo::class, 'bundleFormRedirect'];

// Move the 'moderation_state' field widget to the footer region, if
// available.
if (isset($form['footer']) && in_array($form_object->getOperation(), ['edit', 'default'], TRUE)) {
$form['moderation_state']['#group'] = 'footer';
}

// If the publishing status exists in the meta region, replace it with
// the current state instead.
if (isset($form['meta']['published'])) {
$form['meta']['published']['#markup'] = $this->moderationInfo->getWorkflowForEntity($entity)->getTypePlugin()->getState($entity->moderation_state->value)->label();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,18 @@ public function testEnablingOnExistingContent() {
], t('Save'));
$this->assertText('Not moderated Test has been created.');

// Check that the 'Create new revision' is not disabled.
$this->drupalGet('/admin/structure/types/manage/not_moderated');
$this->assertNull($this->assertSession()->fieldExists('options[revision]')->getAttribute('disabled'));

// Now enable moderation state.
$this->enableModerationThroughUi('not_moderated');

// Check that the 'Create new revision' checkbox is checked and disabled.
$this->drupalGet('/admin/structure/types/manage/not_moderated');
$this->assertSession()->checkboxChecked('options[revision]');
$this->assertSession()->fieldDisabled('options[revision]');

// And make sure it works.
$nodes = \Drupal::entityTypeManager()->getStorage('node')
->loadByProperties(['title' => 'Test']);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,6 @@ protected function createContentTypeFromUi($content_type_name, $content_type_id,
$this->drupalGet('admin/structure/types');
$this->clickLink('Add content type');

// Check that the 'Create new revision' checkbox is checked and disabled.
$this->assertSession()->checkboxChecked('options[revision]');
$this->assertSession()->fieldDisabled('options[revision]');

$edit = [
'name' => $content_type_name,
'type' => $content_type_id,
Expand Down

0 comments on commit 66ed69f

Please sign in to comment.