3 namespace Drupal\language\Form;
5 use Drupal\Core\Entity\ContentEntityTypeInterface;
6 use Drupal\Core\Entity\EntityManagerInterface;
7 use Drupal\Core\Form\FormBase;
8 use Drupal\Core\Form\FormStateInterface;
9 use Drupal\language\Entity\ContentLanguageSettings;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Configure the content language settings for this site.
15 class ContentLanguageSettingsForm extends FormBase {
20 * @var \Drupal\Core\Entity\EntityManagerInterface
22 protected $entityManager;
25 * Constructs a ContentLanguageSettingsForm object.
27 * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
30 public function __construct(EntityManagerInterface $entity_manager) {
31 $this->entityManager = $entity_manager;
37 public static function create(ContainerInterface $container) {
39 $container->get('entity.manager')
46 public function getFormId() {
47 return 'language_content_settings_form';
53 public function buildForm(array $form, FormStateInterface $form_state) {
54 $entity_types = $this->entityManager->getDefinitions();
58 $bundles = $this->entityManager->getAllBundleInfo();
59 $language_configuration = [];
60 foreach ($entity_types as $entity_type_id => $entity_type) {
61 if (!$entity_type instanceof ContentEntityTypeInterface || !$entity_type->hasKey('langcode') || !isset($bundles[$entity_type_id])) {
64 $labels[$entity_type_id] = $entity_type->getLabel() ?: $entity_type_id;
65 $default[$entity_type_id] = FALSE;
67 // Check whether we have any custom setting.
68 foreach ($bundles[$entity_type_id] as $bundle => $bundle_info) {
69 $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle);
70 if (!$config->isDefaultConfiguration()) {
71 $default[$entity_type_id] = $entity_type_id;
73 $language_configuration[$entity_type_id][$bundle] = $config;
83 'language/drupal.language.admin',
87 'class' => 'language-content-settings-form',
91 $form['entity_types'] = [
92 '#title' => $this->t('Custom language settings'),
93 '#type' => 'checkboxes',
94 '#options' => $labels,
95 '#default_value' => $default,
98 $form['settings'] = ['#tree' => TRUE];
100 foreach ($labels as $entity_type_id => $label) {
101 $entity_type = $entity_types[$entity_type_id];
103 $form['settings'][$entity_type_id] = [
105 '#type' => 'container',
106 '#entity_type' => $entity_type_id,
107 '#theme' => 'language_content_settings_table',
108 '#bundle_label' => $entity_type->getBundleLabel() ?: $label,
111 ':input[name="entity_types[' . $entity_type_id . ']"]' => ['checked' => TRUE],
116 foreach ($bundles[$entity_type_id] as $bundle => $bundle_info) {
117 $form['settings'][$entity_type_id][$bundle]['settings'] = [
119 '#label' => $bundle_info['label'],
121 '#type' => 'language_configuration',
122 '#entity_information' => [
123 'entity_type' => $entity_type_id,
126 '#default_value' => $language_configuration[$entity_type_id][$bundle],
132 $form['actions']['#type'] = 'actions';
133 $form['actions']['submit'] = [
135 '#value' => $this->t('Save configuration'),
136 '#button_type' => 'primary',
145 public function submitForm(array &$form, FormStateInterface $form_state) {
146 $entity_types = $form_state->getValue('entity_types');
147 foreach ($form_state->getValue('settings') as $entity_type => $entity_settings) {
148 foreach ($entity_settings as $bundle => $bundle_settings) {
149 $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle);
150 if (empty($entity_types[$entity_type])) {
151 $bundle_settings['settings']['language']['language_alterable'] = FALSE;
153 $config->setDefaultLangcode($bundle_settings['settings']['language']['langcode'])
154 ->setLanguageAlterable($bundle_settings['settings']['language']['language_alterable'])
158 drupal_set_message($this->t('Settings successfully updated.'));