View source
<?php
namespace Drupal\lingotek\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerTrait;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\lingotek\LingotekConfigurationServiceInterface;
class LingotekFieldConfigEditForm {
use StringTranslationTrait;
use MessengerTrait;
protected $lingotekConfig;
public function __construct(LingotekConfigurationServiceInterface $lingotek_config) {
$this->lingotekConfig = $lingotek_config;
}
public function form(array &$form, FormStateInterface $form_state) {
$field = $form_state
->getFormObject()
->getEntity();
$entity_id = $field
->getTargetEntityTypeId();
$bundle_id = $field
->getTargetBundle();
$field_id = $field
->getName();
if (!$form['translatable']['#disabled']) {
$form['translatable_for_lingotek'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use Lingotek to translate this field'),
'#default_value' => $this->lingotekConfig
->isFieldLingotekEnabled($entity_id, $bundle_id, $field_id),
'#weight' => -1,
'#states' => [
'visible' => [
':input[name="translatable"]' => [
'checked' => TRUE,
],
],
],
];
$form['actions']['submit']['#submit'][] = [
$this,
'submitForm',
];
}
if (isset($form['third_party_settings']['content_translation'])) {
if (isset($form['third_party_settings']['content_translation']['translation_sync'])) {
$content_translation_options = $form['third_party_settings']['content_translation']['translation_sync']['#options'];
$properties_checkbox_choice = $this->lingotekConfig
->getFieldPropertiesLingotekEnabled($entity_id, $bundle_id, $field_id);
$form['translatable_for_lingotek_properties'] = [
'#type' => 'item',
'#title' => $this
->t('Lingotek Translation'),
'#weight' => 15,
'#states' => [
'visible' => [
':input[name="translatable_for_lingotek"]' => [
'checked' => TRUE,
],
],
],
];
foreach ($content_translation_options as $content_translation_option_key => $content_translation_option) {
$form['translatable_for_lingotek_properties_' . $content_translation_option_key] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use Lingotek to translate the %content_translation_option element', [
'%content_translation_option' => $content_translation_option,
]),
'#default_value' => $properties_checkbox_choice ? $properties_checkbox_choice[$content_translation_option_key] : FALSE,
'#weight' => 15,
'#states' => [
'visible' => [
':input[name="translatable_for_lingotek"]' => [
'checked' => TRUE,
],
],
],
];
if ($properties_checkbox_choice && $properties_checkbox_choice[$content_translation_option_key]) {
$form['translatable_for_lingotek_properties_' . $content_translation_option_key]['#default_value'] = 1;
}
}
if (!$properties_checkbox_choice) {
$properties_checkbox_choice = [];
}
$field
->setThirdPartySetting('lingotek', 'translation_sync', $properties_checkbox_choice);
}
}
}
public function submitForm(array $form, FormStateInterface $form_state) {
$field = $form_state
->getFormObject()
->getEntity();
$entity_id = $field
->getTargetEntityTypeId();
$bundle_id = $field
->getTargetBundle();
$field_id = $field
->getName();
$value = $form_state
->getValue([
'third_party_settings',
'content_translation',
'translation_sync',
]);
if (isset($value)) {
$content_translation_field_properties = $form_state
->getValue('third_party_settings')['content_translation']['translation_sync'];
$filtered_field_properties = [];
foreach ($content_translation_field_properties as $content_translation_field_property_key => $content_translation_field_property) {
if ($content_translation_field_property && $form_state
->getValue('translatable_for_lingotek_properties_' . $content_translation_field_property_key)) {
$filtered_field_properties[$content_translation_field_property_key] = $content_translation_field_property;
}
else {
$filtered_field_properties[$content_translation_field_property_key] = 0;
if ($form_state
->getValue('translatable_for_lingotek_properties_' . $content_translation_field_property_key)) {
$this
->messenger()
->addWarning(t('To translate the image properties with Lingotek, you must enable them for translation first.'));
}
}
}
$this->lingotekConfig
->setFieldPropertiesLingotekEnabled($entity_id, $bundle_id, $field_id, $filtered_field_properties);
}
if ($form_state
->getValue('translatable_for_lingotek') && $form_state
->getValue('translatable')) {
if (!$this->lingotekConfig
->isFieldLingotekEnabled($entity_id, $bundle_id, $field_id)) {
$this->lingotekConfig
->setFieldLingotekEnabled($entity_id, $bundle_id, $field_id);
}
}
else {
if ($this->lingotekConfig
->isFieldLingotekEnabled($entity_id, $bundle_id, $field_id)) {
$this->lingotekConfig
->setFieldLingotekEnabled($entity_id, $bundle_id, $field_id, FALSE);
}
}
}
}