You are here

function _stringoverrides_advanced_translate_seek in String Overrides Advanced 7

Perform a string search and display results in a table

1 call to _stringoverrides_advanced_translate_seek()
stringoverrides_advanced_translate_seek_screen in ./stringoverrides_advanced.admin.inc
String search screen.

File

./stringoverrides_advanced.admin.inc, line 97

Code

function _stringoverrides_advanced_translate_seek() {
  $output = '';

  // We have at least one criterion to match
  if (!($query = _stringoverrides_advanced_translate_seek_query())) {
    $query = array(
      'translation' => 'all',
      'group' => 'all',
      'language' => 'all',
      'string' => '',
    );
  }
  $sql_query = db_select('stringoverrides_advanced_source', 's');
  $sql_query
    ->leftJoin('stringoverrides_advanced_target', 't', 't.lid = s.lid');
  $sql_query
    ->fields('s', array(
    'source',
    'location',
    'context',
    'lid',
    'textgroup',
  ));
  $sql_query
    ->fields('t', array(
    'translation',
    'language',
  ));

  // Compute LIKE section.
  switch ($query['translation']) {
    case 'translated':
      $sql_query
        ->condition('t.translation', '%' . db_like($query['string']) . '%', 'LIKE');
      $sql_query
        ->orderBy('t.translation', 'DESC');
      break;
    case 'untranslated':
      $sql_query
        ->condition(db_and()
        ->condition('s.source', '%' . db_like($query['string']) . '%', 'LIKE')
        ->isNull('t.translation'));
      $sql_query
        ->orderBy('s.source');
      break;
    case 'all':
    default:
      $condition = db_or()
        ->condition('s.source', '%' . db_like($query['string']) . '%', 'LIKE');

      // Only search in translations if the language is not forced to English.
      $condition
        ->condition('t.translation', '%' . db_like($query['string']) . '%', 'LIKE');
      $sql_query
        ->condition($condition);
      break;
  }

  // Add a condition on the text group.
  $sql_query
    ->condition('s.textgroup', 'default');
  $sql_query = $sql_query
    ->extend('PagerDefault')
    ->limit(50);
  $locales = $sql_query
    ->execute();
  $header = array(
    t('String'),
    t('Context'),
    array(
      'data' => t('Operations'),
      'colspan' => '2',
    ),
  );
  $strings = array();
  foreach ($locales as $locale) {
    if (!isset($strings[$locale->lid])) {
      $strings[$locale->lid] = array(
        'group' => $locale->textgroup,
        'location' => $locale->location,
        'source' => $locale->source,
        'context' => $locale->context,
      );
    }
  }
  $rows = array();
  foreach ($strings as $lid => $string) {
    $rows[] = array(
      array(
        'data' => check_plain(truncate_utf8($string['source'], 150, FALSE, TRUE)) . '<br /><small>' . $string['location'] . '</small>',
      ),
      $string['context'],
      array(
        'data' => l(t('edit'), "admin/config/regional/stringoverrides_advanced/edit/{$lid}", array(
          'query' => drupal_get_destination(),
        )),
        'class' => array(
          'nowrap',
        ),
      ),
      array(
        'data' => l(t('delete'), "admin/config/regional/stringoverrides_advanced/delete/{$lid}", array(
          'query' => drupal_get_destination(),
        )),
        'class' => array(
          'nowrap',
        ),
      ),
    );
  }
  $output .= theme('table', array(
    'header' => $header,
    'rows' => $rows,
    'empty' => t('No strings available.'),
  ));
  $output .= theme('pager');
  return $output;
}