function locale_translation_status_form

Page callback: Display the current translation status.

See also

locale_menu()

1 string reference to 'locale_translation_status_form'
locale_menu in drupal/core/modules/locale/locale.module
Implements hook_menu().

File

drupal/core/modules/locale/locale.pages.inc, line 492
Interface translation summary, editing and deletion user interfaces.

Code

function locale_translation_status_form($form, &$form_state) {
  module_load_include('translation.inc', 'locale');
  module_load_include('compare.inc', 'locale');
  $updates = $options = array();
  $languages_update = $languages_not_found = array();

  // @todo Calling locale_translation_build_projects() is an expensive way to
  //   get a module name. In follow-up issue http://drupal.org/node/1842362
  //   the project name will be stored to display use, like here.
  $project_data = locale_translation_build_projects();
  $languages = locale_translatable_language_list();
  $projects = locale_translation_get_projects();
  $status = Drupal::state()
    ->get('locale.translation_status');

  // Prepare information about projects which have available translation
  // updates.
  if ($languages && $status) {
    foreach ($status as $project_id => $project) {
      foreach ($project as $langcode => $project_info) {

        // No translation file found for this project-language combination.
        if (!isset($project_info->type)) {
          $updates[$langcode]['not_found'][] = array(
            'name' => $project_info->name == 'drupal' ? t('Drupal core') : $project_data[$project_info->name]->info['name'],
            'version' => $project_info->version,
            'info' => _locale_translation_status_debug_info($project_info),
          );
          $languages_not_found[$langcode] = $langcode;
        }
        elseif ($project_info->type == LOCALE_TRANSLATION_LOCAL || $project_info->type == LOCALE_TRANSLATION_REMOTE) {
          $local = isset($project_info->files[LOCALE_TRANSLATION_LOCAL]) ? $project_info->files[LOCALE_TRANSLATION_LOCAL] : NULL;
          $remote = isset($project_info->files[LOCALE_TRANSLATION_REMOTE]) ? $project_info->files[LOCALE_TRANSLATION_REMOTE] : NULL;
          $recent = _locale_translation_source_compare($local, $remote) == LOCALE_TRANSLATION_SOURCE_COMPARE_LT ? $remote : $local;
          $updates[$langcode]['updates'][] = array(
            'name' => $project_data[$project_info->name]->info['name'],
            'version' => $project_info->version,
            'timestamp' => $recent->timestamp,
          );
          $languages_update[$langcode] = $langcode;
        }
      }
    }
    $languages_not_found = array_diff($languages_not_found, $languages_update);

    // Build data options for the select table.
    foreach ($updates as $langcode => $update) {
      $options[$langcode] = array(
        'title' => check_plain($languages[$langcode]->name),
        'status' => array(
          'class' => array(
            'description',
            'expand',
            'priority-low',
          ),
          'data' => theme('locale_translation_update_info', $update),
        ),
      );
    }

    // Sort the table data on language name.
    uasort($options, 'drupal_sort_title');
  }
  $last_checked = Drupal::state()
    ->get('locale.translation_last_checked');
  $form['last_checked'] = array(
    '#markup' => '<p>' . theme('locale_translation_last_check', array(
      'last' => $last_checked,
    )) . '</p>',
  );
  $header = array(
    'title' => array(
      'data' => t('Language'),
      'class' => array(
        'title',
      ),
    ),
    'status' => array(
      'data' => t('Status'),
      'class' => array(
        'status',
        'priority-low',
      ),
    ),
  );
  if (!$languages) {
    $empty = t('No translatable languages available. <a href="@add_language">Add a language</a> first.', array(
      '@add_language' => url('admin/config/regional/language'),
    ));
  }
  elseif ($status) {
    $empty = t('All translations up to date.');
  }
  else {
    $empty = t('No translation status available. <a href="@check">Check manually</a>.', array(
      '@check' => url('admin/reports/translations/check'),
    ));
  }
  $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'][] = array(
    'locale',
    'drupal.locale.admin',
  );
  $form['#attached']['css'] = array(
    drupal_get_path('module', 'locale') . '/css/locale.admin.css',
  );
  $form['actions'] = array(
    '#type' => 'actions',
  );
  if ($languages_update) {
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Update translations'),
    );
  }
  return $form;
}