You are here

field.translation_table.inc in Translation table 7

Translation table for fields

File

modules/field.translation_table.inc
View source
<?php

/**
 * @file
 * Translation table for fields
 */

/**
 * Implements hook_translation_table_data().
 */
function field_translation_table_data() {
  $items['field'] = array(
    'title' => 'Field',
    'description' => 'Edit field translations',
    'form' => 'field_translation_table_form',
    'file' => 'modules/field.translation_table.inc',
  );
  return $items;
}

/**
 * Menu callback; Admin form for field translation.
 */
function field_translation_table_form($form, &$form_state) {
  $languages_selected = isset($_SESSION['translation_table']['languages_selected']) ? $_SESSION['translation_table']['languages_selected'] : locale_language_list('name', FALSE);
  $bundle = isset($_SESSION['translation_table']['bundle']) ? $_SESSION['translation_table']['bundle'] : 0;
  $form['filter'] = field_translation_table_filter($languages_selected, $bundle);
  $form['filtered_form'] = field_translation_table_filtered_form($languages_selected, $bundle);
  $form['#submit'][] = 'field_translation_table_form_submit';
  $form['#submit'][] = 'translation_table_submit_translations';
  return $form;
}

/**
 * Field filter.
 */
function field_translation_table_filter($languages_selected, $bundle) {
  $form['languages_selected'] = array(
    '#type' => 'select',
    '#title' => t('Languages'),
    '#description' => t('Select the languages to display.'),
    '#options' => locale_language_list('name', TRUE),
    '#default_value' => array_keys($languages_selected),
    '#multiple' => TRUE,
  );
  $res = db_query("SELECT DISTINCT objectid FROM {i18n_string} WHERE textgroup = 'field'");
  $scope_options = array(
    0 => t('- All -'),
  );
  while ($bundle_opt = $res
    ->fetchField()) {
    $scope_options[$bundle_opt] = $bundle_opt;
  }
  $form['bundle'] = array(
    '#type' => 'select',
    '#title' => t('Attached to'),
    '#description' => t('Select the kind of strings to display.'),
    '#options' => $scope_options,
    '#default_value' => $bundle,
  );
  $form['tt-filter'] = array(
    '#type' => 'submit',
    '#value' => t('Filter'),
  );
  $form['#theme'] = 'translation_table_filter';
  return $form;
}

/**
 * Form for field translation.
 *
 * @param $languages
 *   languages to translate to
 * @param $bundle
 */
function field_translation_table_filtered_form($languages, $bundle) {
  $header = _translation_table_get_header($languages);
  switch ($bundle) {
    case '0':
      $query = db_select('locales_source', 'ls');
      $query
        ->fields('ls', array(
        'lid',
        'source',
        'location',
      ))
        ->extend('PagerDefault')
        ->extend('TableSort')
        ->condition('ls.textgroup', 'field')
        ->orderByHeader($header)
        ->limit(50);
      $result = $query
        ->execute();
      break;
    default:
      $query = db_select('locales_source', 'ls');
      $query
        ->join('i18n_string', 'i18ns', 'ls.lid = i18ns.lid');
      $query
        ->fields('ls', array(
        'lid',
        'source',
        'location',
      ))
        ->extend('PagerDefault')
        ->extend('TableSort')
        ->condition('ls.textgroup', 'field')
        ->condition('i18ns.objectid', $bundle)
        ->orderByHeader($header)
        ->limit(50);
      $result = $query
        ->execute();
      break;
  }
  $form['strings']['#tree'] = TRUE;
  $form['header'] = array(
    '#type' => 'value',
    '#value' => $header,
  );
  while ($source = $result
    ->fetch()) {
    if (drupal_strlen(trim($source->source)) > 0) {
      $form['strings'][$source->lid] = _translation_table_row($source, $languages);
    }
  }
  $form['languages'] = array(
    '#type' => 'value',
    '#value' => $languages,
  );
  $form['tt-submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  $form['pager'] = array(
    '#markup' => theme('pager'),
  );
  $form['#theme'] = 'translation_table';
  return $form;
}

/**
 * Submit handler for the field translation form.
 */
function field_translation_table_form_submit($form, &$form_state) {
  switch ($form_state['clicked_button']['#id']) {
    case 'edit-tt-filter':
    case 'edit-tt-submit':
      $_SESSION['translation_table']['bundle'] = $form_state['values']['bundle'];
      $_SESSION['translation_table']['languages_selected'] = array_intersect_key(locale_language_list('name', TRUE), $form_state['values']['languages_selected']);
      break;
  }
}

Functions

Namesort descending Description
field_translation_table_data Implements hook_translation_table_data().
field_translation_table_filter Field filter.
field_translation_table_filtered_form Form for field translation.
field_translation_table_form Menu callback; Admin form for field translation.
field_translation_table_form_submit Submit handler for the field translation form.