local_translation-8.x-1.x-dev/modules/local_translation_interface/src/Form/TranslateEditForm.php

modules/local_translation_interface/src/Form/TranslateEditForm.php
<?php

namespace Drupal\local_translation_interface\Form;

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\local_translation_interface\LocalTranslationInterfaceLanguagesTrait;
use Drupal\locale\Form\TranslateEditForm as TranslateEditFormOrigin;

/**
 * Class TranslateEditForm.
 *
 * @package Drupal\local_translation_interface\Form
 */
class TranslateEditForm extends TranslateEditFormOrigin {
  use LocalTranslationInterfaceLanguagesTrait;

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'local_translation_interface_edit_form';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildForm($form, $form_state);
    $this->handleMiddleTranslation($form);
    return $form;
  }

  /**
   * Update table with a new column if needed.
   *
   * @param array &$form
   *   Form array.
   */
  protected function handleMiddleTranslation(array &$form) {
    $filter_values = $this->translateFilterValues();
    if ($this->middleColumnIsAllowed($filter_values)) {
      // Add an additional table header.
      $header = &$form['strings']['#header'];
      $last   = array_pop($header);
      if ($filter_values['langcode_from'] === 'en') {
        $language = 'English';
      }
      else {
        $language = $this->languageManager
          ->getLanguages()[$filter_values['langcode_from']]
          ->getName();
      }
      $header[] = $this->t('@language translation', ['@language' => $language]);
      $header[] = $last;
      // Add an additional table column.
      foreach (Element::children($form['strings']) as $id) {
        $translations = array_pop($form['strings'][$id]);
        $middle = $this->getMiddleTranslation($id, $filter_values['langcode_from']);
        $form['strings'][$id]['middle'] = [
          '#type'       => 'item',
          '#plain_text' => !empty($middle) ? $middle : "",
        ];
        $form['strings'][$id]['translations'] = $translations;
      }
    }
  }

  /**
   * Check if we do need to render middle column.
   *
   * @param array $filter_values
   *   Filter values array.
   *
   * @return bool
   *   Conditions checking result.
   */
  protected function middleColumnIsAllowed(array $filter_values) {
    $from    = $filter_values['langcode_from'];
    $default = $this->languageManager->getDefaultLanguage()->getId();
    return !empty($from) && $from
      && !$this->isDefaultToDefault($filter_values)
      && ($this->isTranslateToEnglishEnabled() || $from !== $default);
  }

  /**
   * Check whether both filters are equal and default languages are selected.
   *
   * @param array $values
   *   Filter values array.
   *
   * @return bool
   *   Checking result.
   */
  protected function isDefaultToDefault(array $values) {
    $default = $this->languageManager->getDefaultLanguage()->getId();
    return $values['langcode'] === $values['langcode_from']
      && $values['langcode'] === $default;
  }

  /**
   * Get middle translation.
   *
   * @param string|int $lid
   *   String ID.
   * @param string $language
   *   Language ID.
   *
   * @return mixed
   *   Middle translation value.
   */
  protected function getMiddleTranslation($lid, $language) {
    $select = \Drupal::database()->select('locales_source', 'ls');
    $select->leftJoin('locales_target', 'lt', 'lt.lid = ls.lid');
    $select->fields('lt', ['translation']);
    $select->condition('ls.lid', $lid);
    $select->condition('lt.language', $language);
    return $select->execute()->fetchField();
  }

}

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

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