You are here

public function TranslationStatusForm::buildForm in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/locale/src/Form/TranslationStatusForm.php \Drupal\locale\Form\TranslationStatusForm::buildForm()

Form builder for displaying the current translation status.

Overrides FormInterface::buildForm

File

core/modules/locale/src/Form/TranslationStatusForm.php, line 70
Contains \Drupal\locale\Form\TranslationStatusForm.

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;
}