TranslationStatusForm::buildForm

public TranslationStatusForm::buildForm(array $form, FormStateInterface $form_state)

Form builder for displaying the current translation status.

Overrides FormInterface::buildForm

File

core/modules/locale/src/Form/TranslationStatusForm.php, line 65

Class

TranslationStatusForm
Provides a translation status form.

Namespace

Drupal\locale\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $languages = locale_translatable_language_list();
  $status = locale_translation_get_status();
  $options = array();
  $languages_update = array();
  $languages_not_found = array();
  $projects_update = array();
  // Prepare information about projects which have available translation
  // updates.
  if ($languages && $status) {
    $updates = $this->prepareUpdateData($status);

    // Build data options for the select table.
    foreach ($updates as $langcode => $update) {
      $title = $languages[$langcode]->getName();
      $locale_translation_update_info = array('#theme' => 'locale_translation_update_info');
      foreach (array('updates', 'not_found') as $update_status) {
        if (isset($update[$update_status])) {
          $locale_translation_update_info['#' . $update_status] = $update[$update_status];
        }
      }
      $options[$langcode] = array(
        'title' => array(
          'data' => array(
            '#title' => $title,
            '#plain_text' => $title,
          ),
        ),
        'status' => array(
          'class' => array('description', 'priority-low'),
          'data' => $locale_translation_update_info,
        ),
      );
      if (!empty($update['not_found'])) {
        $languages_not_found[$langcode] = $langcode;
      }
      if (!empty($update['updates'])) {
        $languages_update[$langcode] = $langcode;
      }
    }
    // Sort the table data on language name.
    uasort($options, function($a, $b) {
      return strcasecmp($a['title']['data']['#title'], $b['title']['data']['#title']);
    });
    $languages_not_found = array_diff($languages_not_found, $languages_update);
  }

  $last_checked = $this->state->get('locale.translation_last_checked');
  $form['last_checked'] = array(
    '#theme' => 'locale_translation_last_check',
    '#last' => $last_checked,
  );

  $header = array(
    'title' => array(
      'data' => $this->t('Language'),
      'class' => array('title'),
    ),
    'status' => array(
      'data' => $this->t('Status'),
      'class' => array('status', 'priority-low'),
    ),
  );

  if (!$languages) {
    $empty = $this->t('No translatable languages available. <a href=":add_language">Add a language</a> first.', array(
      ':add_language' => $this->url('entity.configurable_language.collection'),
    ));
  }
  elseif ($status) {
    $empty = $this->t('All translations up to date.');
  }
  else {
    $empty = $this->t('No translation status available. <a href=":check">Check manually</a>.', array(
      ':check' => $this->url('locale.check_translation'),
    ));
  }

  // The projects which require an update. Used by the _submit callback.
  $form['projects_update'] = array(
    '#type' => 'value',
    '#value' => $projects_update,
  );

  $form['langcodes'] = array(
    '#type' => 'tableselect',
    '#header' => $header,
    '#options' => $options,
    '#default_value' => $languages_update,
    '#empty' => $empty,
    '#js_select' => TRUE,
    '#multiple' => TRUE,
    '#required' => TRUE,
    '#not_found' => $languages_not_found,
    '#after_build' => array('locale_translation_language_table'),
  );

  $form['#attached']['library'][] = 'locale/drupal.locale.admin';

  $form['actions'] = array('#type' => 'actions');
  if ($languages_update) {
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => $this->t('Update translations'),
    );
  }

  return $form;
}
doc_Drupal
2016-10-29 09:49:22
Comments
Leave a Comment

Please login to continue.