
| Current Path : /var/www/html/store/web/modules/contrib/inline_entity_form/src/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/store/web/modules/contrib/inline_entity_form/src/TranslationHelper.php |
<?php
namespace Drupal\inline_entity_form;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Form\FormStateInterface;
/**
* Provides content translation helpers.
*/
class TranslationHelper {
/**
* Prepares the inline entity for translation.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $entity
* The inline entity.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*
* @return \Drupal\Core\Entity\ContentEntityInterface
* The prepared entity.
*
* @see \Drupal\Core\Entity\ContentEntityForm::initFormLangcodes()
*/
public static function prepareEntity(ContentEntityInterface $entity, FormStateInterface $form_state) {
$form_langcode = $form_state->get('langcode');
if (empty($form_langcode) || !$entity->isTranslatable()) {
return $entity;
}
$entity_langcode = $entity->language()->getId();
if (self::isTranslating($form_state) && !$entity->hasTranslation($form_langcode)) {
// Create a translation from the source language values.
$source = $form_state->get(['content_translation', 'source']);
$source_langcode = $source ? $source->getId() : $entity_langcode;
if (!$entity->hasTranslation($source_langcode)) {
$entity->addTranslation($source_langcode, $entity->toArray());
}
$source_translation = $entity->getTranslation($source_langcode);
$entity->addTranslation($form_langcode, $source_translation->toArray());
$translation = $entity->getTranslation($form_langcode);
$translation->set('content_translation_source', $source_langcode);
// Make sure we do not inherit the affected status from the source values.
if ($entity->getEntityType()->isRevisionable()) {
$translation->setRevisionTranslationAffected(NULL);
}
}
if ($entity_langcode != $form_langcode && $entity->hasTranslation($form_langcode)) {
// Switch to the needed translation.
$entity = $entity->getTranslation($form_langcode);
}
return $entity;
}
/**
* Updates the entity langcode to match the form langcode.
*
* Called on submit to allow the user to select a different language through
* the langcode form element, which is then transferred to form state.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $entity
* The entity.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
*
* @return bool
* TRUE if the entity langcode was updated, FALSE otherwise.
*/
public static function updateEntityLangcode(ContentEntityInterface $entity, FormStateInterface $form_state) {
$changed = FALSE;
// This method is first called during form validation, at which point
// the 'langcode' form state flag hasn't been updated with the new value.
$form_langcode = $form_state->getValue(['langcode', 0, 'value'], $form_state->get('langcode'));
if (empty($form_langcode) || !$entity->isTranslatable()) {
return $changed;
}
$entity_langcode = $entity->language()->getId();
if ($entity_langcode != $form_langcode && !$entity->hasTranslation($form_langcode)) {
$langcode_key = $entity->getEntityType()->getKey('langcode');
$entity->set($langcode_key, $form_langcode);
$changed = TRUE;
}
return $changed;
}
/**
* Determines whether there's a translation in progress.
*
* If the root entity is being translated, then all of the inline entities
* are candidates for translating as well.
*
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*
* @return bool
* TRUE if translating is in progress, FALSE otherwise.
*
* @see \Drupal\Core\Entity\ContentEntityForm::initFormLangcodes()
*/
public static function isTranslating(FormStateInterface $form_state) {
$form_langcode = $form_state->get('langcode');
$default_langcode = $form_state->get('entity_default_langcode');
if (empty($form_langcode) && empty($default_langcode)) {
// The top-level form is not a content entity form.
return FALSE;
}
else {
return $form_langcode != $default_langcode;
}
}
}