diff --git a/modules/block.translation_table.inc b/modules/block.translation_table.inc new file mode 100644 index 0000000..1131b72 --- /dev/null +++ b/modules/block.translation_table.inc @@ -0,0 +1,111 @@ + 'Block', + 'description' => 'Edit block translations', + 'form' => 'block_translation_table_block_form', + 'file' => 'modules/block.translation_table.inc', + ); + + return $items; +} + +/** + * Menu callback; Admin form for block translation. + */ +function block_translation_table_block_form(&$form_state) { + $languages_selected = isset($_SESSION['translation_table']['languages_selected']) ? $_SESSION['translation_table']['languages_selected'] : locale_language_list('name', FALSE); + + $form['filter'] = block_translation_table_block_filter($languages_selected); + $form['filtered_form'] = block_translation_table_block_filtered_form($languages_selected); + $form['#submit'][] = 'block_translation_table_block_form_submit'; + $form['#submit'][] = 'translation_table_submit_translations'; + return $form; +} + +/** + * block filter. + */ +function block_translation_table_block_filter($languages_selected) { + $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, + ); + + $form['filter'] = array( + '#type' => 'submit', + '#value' => t('Filter'), + ); + + $form['#theme'] = 'translation_table_filter'; + return $form; +} + +/** + * Form for block translation. + * Note: If the block string is not in the locales_source table, then it won't be + * displayed. + * + * @param $languages + * languages to translate to + */ +function block_translation_table_block_filtered_form($languages) { + $header = _translation_table_get_header($languages); + + $sql = "SELECT ls.lid, ls.source, ls.location FROM {locales_source} ls WHERE ls.textgroup = 'blocks'"; + $sql .= tablesort_sql($header); + + $form['strings']['#tree'] = TRUE; + $form['#cache'] = TRUE; + + $form['header'] = array( + '#type' => 'value', + '#value' => $header, + ); + $result = pager_query($sql, 50, 0); + + while ($source = db_fetch_object($result)) { + if (strlen(trim($source->source)) > 0) { + $form['strings'][$source->lid] = _translation_table_row($source, $languages); + } + } + + $form['languages'] = array( + '#type' => 'value', + '#value' => $languages, + ); + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save'), + ); + + $form['pager'] = array('#value' => theme('pager', NULL, 50, 0)); + $form['#theme'] = 'translation_table'; + return $form; +} + +/** + * Submit handler for the block translation form. + */ +function block_translation_table_block_form_submit($form, &$form_state) { + switch ($form_state['clicked_button']['#id']) { + case 'edit-filter': + case 'edit-submit': + $_SESSION['translation_table']['languages_selected'] = array_intersect_key(locale_language_list('name', TRUE), $form_state['values']['languages_selected']); + break; + } +} +