translations_pack-1.0.0-beta3/translations_pack.module

translations_pack.module
<?php

use Drupal\Core\Entity\ContentEntityFormInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\translations_pack\Form\TranslationForm;
use Drupal\translations_pack\TranslationsPackHandler;
use Drupal\translations_pack\TranslationsPackNodeHandler;
use Drupal\language\Entity\ContentLanguageSettings;

// workaround for bug of empty entity id when ajax used on new content form
function translations_pack_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form_object = $form_state->getFormObject();

  if (isset($form['actions']['submit'])) {
    if ($form_object instanceof ContentEntityFormInterface) {
      $form['actions']['submit']['#submit'][] = 'translations_pack_save_newid';
      $entity = $form_object->getEntity();
      if (isset($entity->translations_pack_original)) {
        $form['actions']['submit']['#value'] = t('Save (all translations)');
      }
    }
    if ($form_object instanceof TranslationForm) {
      // override other module changes to retain submission callback
      $form['actions']['submit']['#value'] = 'save';
    }
  }
}

function translations_pack_save_newid(array $form, FormStateInterface $form_state) {
  $entity = $form_state->getFormObject()->getEntity();
  if ($entity->id()) {
    $form_state->setValue('translations_pack_newid', $entity->id());
    $form_state->setValue('translations_pack_entity', $entity);
  }
}

function translations_pack_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'form_alter' && isset($implementations['translations_pack'])) {
    $alter = $implementations['translations_pack'];
    unset($implementations['translations_pack']);
    $implementations['translations_pack'] = $alter;
  }
}

function translations_pack_entity_type_alter(array &$entity_types) {
  static $map = [
    'node' => 'NodeTranslationHandler',
    'term' => 'TermTranslationHandler',
    'default' => 'ContentTranslationHandler'
  ];
  $namespace = 'Drupal\translations_pack\handlers\\';
  foreach ($entity_types as $name => $entity_type) {
    if (!$entity_type->isTranslatable()) {
      continue;
    }
    $id = $entity_type->id();
    if (!isset($map[$id])) {
      $id = 'default';
    }
    $entity_type->setHandlerClass('translation', $namespace . $map[$id]);

    if ($entity_type->hasHandlerClass('translations_pack')) {
      continue;
    }
    if ($name == 'node') {
      $entity_type->setHandlerClass('translations_pack', TranslationsPackNodeHandler::class);
    }
    else {
      $entity_type->setHandlerClass('translations_pack', TranslationsPackHandler::class);
    }
  }
}

function translations_pack_form_language_content_settings_form_alter(&$form, FormStateInterface $form_state) {
  foreach (Element::children($form['settings']) as $entity_type) {
    foreach (Element::children($form['settings'][$entity_type]) as $bundle) {
      $bundle_settings = &$form['settings'][$entity_type][$bundle];
      if (!isset($bundle_settings['translatable'])) {
        continue;
      }
      $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle);
      if (!$config) {
        continue;
      }
      $enabled = $config->getThirdPartySetting('translations_pack', 'pack_enabled');
      $selector = 
        ":input[name=\"settings[{$entity_type}][{$bundle}][translatable]\"]";

      $bundle_settings['settings']['translations_pack'] = [
        '#type' => 'checkbox',
        '#title' => 'Translations pack',
        '#default_value' => $enabled,
        '#states' => [
          'visible' => [
            $selector => [
              'checked' => TRUE,
            ],
          ],
        ],
      ];
    }
  }
  $form['#submit'][] = 'translations_pack_language_content_settings_submit';
}

function translations_pack_language_content_settings_submit(array $form, FormStateInterface $form_state) {
  foreach ($form_state->getValue('settings') as $entity_type => $bundles) {
    foreach ($bundles as $bundle => $values) {
      $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle);
      if (!isset($values['translatable'])) {
        continue;
      }
      $enabled = $values['translatable'] && $values['settings']['translations_pack'];
      $config->setThirdPartySetting('translations_pack', 'pack_enabled', $enabled);
      $config->save();
    }
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc