update
This commit is contained in:
@@ -321,37 +321,36 @@ class EntityTypeInfo implements ContainerInjectionInterface {
|
||||
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'];
|
||||
$this->entityTypeManager
|
||||
->getHandler($entity->getEntityTypeId(), 'moderation')
|
||||
->enforceRevisionsEntityFormAlter($form, $form_state, $form_id);
|
||||
|
||||
// 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';
|
||||
}
|
||||
// Submit handler to redirect to the latest version, if available.
|
||||
$form['actions']['submit']['#submit'][] = [EntityTypeInfo::class, 'bundleFormRedirect'];
|
||||
|
||||
// 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();
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,7 @@ class ModerationStateFieldItemList extends FieldItemList {
|
||||
// being reverted.
|
||||
->condition('content_entity_revision_id', $entity->isNewRevision() ? $entity->getLoadedRevisionId() : $entity->getRevisionId())
|
||||
->condition('workflow', $moderation_info->getWorkflowForEntity($entity)->id())
|
||||
->condition('langcode', $entity->language()->getId())
|
||||
->allRevisions()
|
||||
->sort('revision_id', 'DESC')
|
||||
->execute();
|
||||
|
||||
+6
-1
@@ -54,7 +54,12 @@ class ModeratedContentViewTest extends BrowserTestBase {
|
||||
$workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'article');
|
||||
$workflow->save();
|
||||
|
||||
$this->adminUser = $this->drupalCreateUser(['access administration pages', 'view any unpublished content', 'administer nodes', 'bypass node access']);
|
||||
$this->adminUser = $this->drupalCreateUser([
|
||||
'access administration pages',
|
||||
'view any unpublished content',
|
||||
'administer nodes',
|
||||
'bypass node access',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+9
@@ -67,9 +67,18 @@ class ModerationStateNodeTypeTest extends ModerationStateTestBase {
|
||||
], 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']);
|
||||
|
||||
@@ -112,10 +112,6 @@ abstract class ModerationStateTestBase extends BrowserTestBase {
|
||||
$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,
|
||||
|
||||
+4
-1
@@ -66,7 +66,10 @@ class ViewsModerationStateFilterTest extends ViewTestBase {
|
||||
$new_workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'example_c');
|
||||
$new_workflow->save();
|
||||
|
||||
$this->drupalLogin($this->drupalCreateUser(['administer workflows', 'administer views']));
|
||||
$this->drupalLogin($this->drupalCreateUser([
|
||||
'administer workflows',
|
||||
'administer views',
|
||||
]));
|
||||
|
||||
$this->container->get('module_installer')->install(['content_moderation_test_views']);
|
||||
|
||||
|
||||
+29
@@ -401,4 +401,33 @@ class ModerationStateFieldItemListTest extends KernelTestBase {
|
||||
$this->assertEquals('published', $translation->moderation_state->value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests field item list translation support with unmoderated content.
|
||||
*/
|
||||
public function testTranslationWithExistingUnmoderatedContent() {
|
||||
$node = Node::create([
|
||||
'title' => 'Published en',
|
||||
'langcode' => 'en',
|
||||
'type' => 'unmoderated',
|
||||
]);
|
||||
$node->setPublished();
|
||||
$node->save();
|
||||
|
||||
$workflow = Workflow::load('editorial');
|
||||
$workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'unmoderated');
|
||||
$workflow->save();
|
||||
|
||||
$translation = $node->addTranslation('de');
|
||||
$translation->moderation_state = 'draft';
|
||||
$translation->save();
|
||||
|
||||
$node_storage = $this->container->get('entity_type.manager')->getStorage('node');
|
||||
$node = $node_storage->loadRevision($node_storage->getLatestRevisionId($node->id()));
|
||||
|
||||
$this->assertEquals('published', $node->moderation_state->value);
|
||||
$this->assertEquals('draft', $translation->moderation_state->value);
|
||||
$this->assertTrue($node->isPublished());
|
||||
$this->assertFalse($translation->isPublished());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user