field.translation_table.inc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. /**
  3. * @file
  4. * Translation table for fields
  5. */
  6. /**
  7. * Implementation of hook_translation_table_data().
  8. */
  9. function field_translation_table_data() {
  10. $items['field'] = array(
  11. 'title' => 'Field',
  12. 'description' => 'Edit field translations',
  13. 'form' => 'field_translation_table_form',
  14. 'file' => 'modules/field.translation_table.inc',
  15. );
  16. return $items;
  17. }
  18. /**
  19. * Menu callback; Admin form for field translation.
  20. */
  21. function field_translation_table_form($form, &$form_state) {
  22. $languages_selected = isset($_SESSION['translation_table']['languages_selected']) ? $_SESSION['translation_table']['languages_selected'] : locale_language_list('name', FALSE);
  23. $bundle = isset($_SESSION['translation_table']['bundle']) ? $_SESSION['translation_table']['bundle'] : 0;
  24. $form['filter'] = field_translation_table_filter($languages_selected, $bundle);
  25. $form['filtered_form'] = field_translation_table_filtered_form($languages_selected, $bundle);
  26. $form['#submit'][] = 'field_translation_table_form_submit';
  27. $form['#submit'][] = 'translation_table_submit_translations';
  28. return $form;
  29. }
  30. /**
  31. * Field filter.
  32. */
  33. function field_translation_table_filter($languages_selected, $bundle) {
  34. $form['languages_selected'] = array(
  35. '#type' => 'select',
  36. '#title' => t('Languages'),
  37. '#description' => t('Select the languages to display.'),
  38. '#options' => locale_language_list('name', TRUE),
  39. '#default_value' => array_keys($languages_selected),
  40. '#multiple' => TRUE,
  41. );
  42. $res = db_query("SELECT DISTINCT objectid FROM {i18n_string} WHERE textgroup = 'field'");
  43. $scope_options = array(0 => t('- All -'));
  44. while ($bundle_opt = $res->fetchField()) {
  45. $scope_options[$bundle_opt] = $bundle_opt;
  46. }
  47. $form['bundle'] = array(
  48. '#type' => 'select',
  49. '#title' => t('Attached to'),
  50. '#description' => t('Select the kind of strings to display.'),
  51. '#options' => $scope_options,
  52. '#default_value' => $bundle,
  53. );
  54. $form['filter'] = array(
  55. '#type' => 'submit',
  56. '#value' => t('Filter'),
  57. );
  58. $form['#theme'] = 'translation_table_filter';
  59. return $form;
  60. }
  61. /**
  62. * Form for field translation.
  63. *
  64. * @param $languages
  65. * languages to translate to
  66. * @param $bundle
  67. */
  68. function field_translation_table_filtered_form($languages, $bundle) {
  69. $header = _translation_table_get_header($languages);
  70. switch ($bundle) {
  71. case '0':
  72. $query = db_select('locales_source', 'ls');
  73. $query->fields('ls', array('lid', 'source', 'location'))
  74. ->extend('PagerDefault')
  75. ->extend('TableSort')
  76. ->condition('ls.textgroup', 'field')
  77. ->orderByHeader($header)
  78. ->limit(50);
  79. $result = $query->execute();
  80. break;
  81. default:
  82. $query = db_select('locales_source', 'ls');
  83. $query->join('i18n_string', 'i18ns', 'ls.lid = i18ns.lid');
  84. $query->fields('ls', array('lid', 'source', 'location'))
  85. ->extend('PagerDefault')
  86. ->extend('TableSort')
  87. ->condition('ls.textgroup', 'field')
  88. ->condition('i18ns.objectid', $bundle);
  89. // $query->orderByHeader($header);
  90. // $query->limit(50);
  91. $result = $query->execute();
  92. break;
  93. }
  94. $form['strings']['#tree'] = TRUE;
  95. $form['#cache'] = FALSE;
  96. $form['header'] = array(
  97. '#type' => 'value',
  98. '#value' => $header,
  99. );
  100. while ($source = $result->fetch()) {
  101. if (strlen(trim($source->source)) > 0) {
  102. $form['strings'][$source->lid] = _translation_table_row($source, $languages);
  103. }
  104. }
  105. $form['languages'] = array(
  106. '#type' => 'value',
  107. '#value' => $languages,
  108. );
  109. $form['submit'] = array(
  110. '#type' => 'submit',
  111. '#value' => t('Save'),
  112. );
  113. $form['pager'] = array('#markup' => theme('pager'));
  114. $form['#theme'] = 'translation_table';
  115. return $form;
  116. }
  117. /**
  118. * Submit handler for the field translation form.
  119. */
  120. function field_translation_table_form_submit($form, &$form_state) {
  121. switch ($form_state['clicked_button']['#id']) {
  122. case 'edit-filter--2':
  123. case 'edit-filter':
  124. case 'edit-submit':
  125. $_SESSION['translation_table']['bundle'] = $form_state['values']['bundle'];
  126. $_SESSION['translation_table']['languages_selected'] = array_intersect_key(locale_language_list('name', TRUE), $form_state['values']['languages_selected']);
  127. break;
  128. }
  129. }