Update to drupal 8.0.0-rc1. For more information, see https://www.drupal.org/node/2582663
This commit is contained in:
parent
eb34d130a8
commit
f32e58e4b1
8476 changed files with 211648 additions and 170042 deletions
|
@ -479,6 +479,13 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
|||
if (isset($form['actions']['delete'])) {
|
||||
$form['actions']['delete']['#submit'][] = array($this, 'entityFormDelete');
|
||||
}
|
||||
|
||||
// Handle entity form submission before the entity has been saved.
|
||||
foreach (Element::children($form['actions']) as $action) {
|
||||
if (isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] == 'submit') {
|
||||
array_unshift($form['actions'][$action]['#submit'], [$this, 'entityFormSubmit']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -579,7 +586,6 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
|||
$metadata->setAuthor(!empty($values['uid']) ? User::load($values['uid']) : User::load(0));
|
||||
$metadata->setPublished(!empty($values['status']));
|
||||
$metadata->setCreatedTime(!empty($values['created']) ? strtotime($values['created']) : REQUEST_TIME);
|
||||
$metadata->setChangedTime(REQUEST_TIME);
|
||||
|
||||
$source_langcode = $this->getSourceLangcode($form_state);
|
||||
if ($source_langcode) {
|
||||
|
@ -611,6 +617,30 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface, E
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Form submission handler for ContentTranslationHandler::entityFormAlter().
|
||||
*
|
||||
* Updates metadata fields, which should be updated only after the validation
|
||||
* has run and before the entity is saved.
|
||||
*/
|
||||
function entityFormSubmit($form, FormStateInterface $form_state) {
|
||||
/** @var \Drupal\Core\Entity\ContentEntityFormInterface $form_object */
|
||||
$form_object = $form_state->getFormObject();
|
||||
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
|
||||
$entity = $form_object->getEntity();
|
||||
|
||||
// ContentEntityForm::submit will update the changed timestamp on submit
|
||||
// after the entity has been validated, so that it does not break the
|
||||
// EntityChanged constraint validator. The content translation metadata
|
||||
// field for the changed timestamp does not have such a constraint defined
|
||||
// at the moment, but it is correct to update it's value in a submission
|
||||
// handler as well and have the same logic like in the Form API.
|
||||
if ($entity->hasField('content_translation_changed')) {
|
||||
$metadata = $this->manager->getTranslationMetadata($entity);
|
||||
$metadata->setChangedTime(REQUEST_TIME);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Form submission handler for ContentTranslationHandler::entityFormAlter().
|
||||
*
|
||||
|
|
|
@ -31,6 +31,7 @@ class ContentTestTranslationUITest extends ContentTranslationUITestBase {
|
|||
*/
|
||||
protected $defaultCacheContexts = [
|
||||
'languages:language_interface',
|
||||
'session',
|
||||
'theme',
|
||||
'url.path',
|
||||
'url.query_args',
|
||||
|
|
|
@ -39,11 +39,11 @@ class ContentTranslationConfigImportTest extends KernelTestBase {
|
|||
parent::setUp();
|
||||
|
||||
$this->installEntitySchema('entity_test_mul');
|
||||
$this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.staging'));
|
||||
$this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.sync'));
|
||||
|
||||
// Set up the ConfigImporter object for testing.
|
||||
$storage_comparer = new StorageComparer(
|
||||
$this->container->get('config.storage.staging'),
|
||||
$this->container->get('config.storage.sync'),
|
||||
$this->container->get('config.storage'),
|
||||
$this->container->get('config.manager')
|
||||
);
|
||||
|
@ -68,7 +68,7 @@ class ContentTranslationConfigImportTest extends KernelTestBase {
|
|||
$config_id = $entity_type_id . '.' . $entity_type_id;
|
||||
$config_name = 'language.content_settings.' . $config_id;
|
||||
$storage = $this->container->get('config.storage');
|
||||
$staging = $this->container->get('config.storage.staging');
|
||||
$sync = $this->container->get('config.storage.sync');
|
||||
|
||||
// Verify the configuration to create does not exist yet.
|
||||
$this->assertIdentical($storage->exists($config_name), FALSE, $config_name . ' not found.');
|
||||
|
@ -90,8 +90,8 @@ class ContentTranslationConfigImportTest extends KernelTestBase {
|
|||
'content_translation' => array('enabled' => TRUE),
|
||||
),
|
||||
);
|
||||
$staging->write($config_name, $data);
|
||||
$this->assertIdentical($staging->exists($config_name), TRUE, $config_name . ' found.');
|
||||
$sync->write($config_name, $data);
|
||||
$this->assertIdentical($sync->exists($config_name), TRUE, $config_name . ' found.');
|
||||
|
||||
// Import.
|
||||
$this->configImporter->reset()->import();
|
||||
|
|
|
@ -217,6 +217,11 @@ class ContentTranslationSettingsTest extends WebTestBase {
|
|||
$this->drupalPostForm('admin/config/people/accounts', $edit, t('Save configuration'));
|
||||
$this->drupalGet('admin/config/people/accounts');
|
||||
$this->assertFieldChecked('edit-language-content-translation');
|
||||
|
||||
// Make sure account settings can be saved.
|
||||
$this->drupalPostForm('admin/config/people/accounts', array('anonymous' => 'Save me please!'), 'Save configuration');
|
||||
$this->assertFieldByName('anonymous', 'Save me please!', 'Anonymous name has been changed.');
|
||||
$this->assertText('The configuration options have been saved.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -77,4 +77,13 @@ class ContentTranslationStandardFieldsTest extends WebTestBase {
|
|||
$this->assertFieldByXPath("//input[@id='edit-settings-user-user-fields-user-picture' and @checked='checked']");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that revision_log is not translatable.
|
||||
*/
|
||||
public function testRevisionLogNotTranslatable() {
|
||||
$path = 'admin/config/regional/content-language';
|
||||
$this->drupalGet($path);
|
||||
$this->assertNoFieldByXPath("//input[@id='edit-settings-node-article-fields-revision-log']");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -160,7 +160,7 @@ class ContentTranslationSyncImageTest extends ContentTranslationTestBase {
|
|||
// items will be one less than the original values to check that only the
|
||||
// translated ones will be preserved. In fact we want the same fids and
|
||||
// items order for both languages.
|
||||
$translation = $entity->getTranslation($langcode);
|
||||
$translation = $entity->addTranslation($langcode);
|
||||
for ($delta = 0; $delta < $this->cardinality - 1; $delta++) {
|
||||
// Simulate a field reordering: items are shifted of one position ahead.
|
||||
// The modulo operator ensures we start from the beginning after reaching
|
||||
|
|
|
@ -65,6 +65,7 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase {
|
|||
$this->doTestAuthoringInfo();
|
||||
$this->doTestTranslationEdit();
|
||||
$this->doTestTranslationChanged();
|
||||
$this->doTestChangedTimeAfterSaveWithoutChanges();
|
||||
$this->doTestTranslationDeletion();
|
||||
}
|
||||
|
||||
|
@ -316,7 +317,7 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase {
|
|||
'content_translation[created]' => '19/11/1978',
|
||||
);
|
||||
$this->drupalPostForm($entity->urlInfo('edit-form'), $edit, $this->getFormSubmitAction($entity, $langcode));
|
||||
$this->assertTrue($this->xpath('//div[contains(concat(" ", normalize-space(@class), " "), :class)]', array(':class' => ' messages--error ')), 'Invalid values generate a form error message.');
|
||||
$this->assertTrue($this->xpath('//div[contains(@class, "error")]//ul'), 'Invalid values generate a list of form errors.');
|
||||
$metadata = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
|
||||
$this->assertEqual($metadata->getAuthor()->id(), $values[$langcode]['uid'], 'Translation author correctly kept.');
|
||||
$this->assertEqual($metadata->getCreatedTime(), $values[$langcode]['created'], 'Translation date correctly kept.');
|
||||
|
@ -546,4 +547,30 @@ abstract class ContentTranslationUITestBase extends ContentTranslationTestBase {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the changed time after API and FORM save without changes.
|
||||
*/
|
||||
public function doTestChangedTimeAfterSaveWithoutChanges() {
|
||||
$entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
|
||||
// Test only entities, which implement the EntityChangedInterface.
|
||||
if ($entity->getEntityType()->isSubclassOf('Drupal\Core\Entity\EntityChangedInterface')) {
|
||||
$changed_timestamp = $entity->getChangedTime();
|
||||
|
||||
$entity->save();
|
||||
$entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
|
||||
$this->assertEqual($changed_timestamp, $entity->getChangedTime(), 'The entity\'s changed time wasn\'t updated after API save without changes.');
|
||||
|
||||
// Ensure different save timestamps.
|
||||
sleep(1);
|
||||
|
||||
// Save the entity on the regular edit form.
|
||||
$language = $entity->language();
|
||||
$edit_path = $entity->urlInfo('edit-form', array('language' => $language));
|
||||
$this->drupalPostForm($edit_path, [], $this->getFormSubmitAction($entity, $language->getId()));
|
||||
|
||||
$entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
|
||||
$this->assertNotEqual($changed_timestamp, $entity->getChangedTime(), 'The entity\'s changed time was updated after form save without changes.');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Reference in a new issue