'value', '#value' => $updates); $form['lang'] = array( '#type' => 'fieldset', '#title' => t('Languages'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#description' => t('Select one or more languages to download and update. If you select none, all of them will be updated.'), ); $form['lang']['languages'] = array( '#type' => 'checkboxes', '#options' => $languages, ); $form['mode'] = array('#type' => 'radios', '#title' => t('Update mode'), '#default_value' => variable_get('l10n_update_import_mode', LOCALE_IMPORT_KEEP), '#options' => _l10n_update_admin_import_options(), ); $form['buttons']['download'] = array('#type' => 'submit', '#value' => t('Update translations')); $form['buttons']['refresh'] = array('#type' => 'submit', '#value' => t('Refresh information')); } else { $form['warning'] = array('#value' => t('No projects or languages to update.')); } return $form; } /** * Submit handler for Update form. * * Handles both submit buttons to update translations and to update the * form information. */ function l10n_update_admin_import_form_submit($form, $form_state) { $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $projects = l10n_update_get_projects(); if ($op == t('Update translations')) { $languages = array_filter($form_state['values']['languages']); $updates = $form_state['values']['updates']; $mode = $form_state['values']['mode']; if ($projects && $updates) { module_load_include('batch.inc', 'l10n_update'); // Filter out updates in other languages. If no languages, all of them will be updated $updates = _l10n_update_prepare_updates($updates, NULL, $languages); $batch = l10n_update_batch_multiple($updates, $mode); batch_set($batch); } else { drupal_set_message(t('Cannot find any translation updates.'), 'error'); } } elseif ($op == t('Refresh information')) { l10n_update_build_projects(); // Get available translation updates and update file history. if ($available = l10n_update_available_releases(TRUE)) { l10n_update_flag_history($available); drupal_set_message(t('Fetched information about available updates from the server')); } else { drupal_set_message(t('Failed to fetch information about available updates from the server'), 'error'); } } } /** * Page callback: Settings form. */ function l10n_update_admin_settings_form() { $form['l10n_update_check_mode'] = array('#type' => 'radios', '#title' => t('Update source'), '#default_value' => variable_get('l10n_update_check_mode', L10N_UPDATE_CHECK_ALL), '#options' => _l10n_update_admin_check_options(), ); $form['l10n_update_import_mode'] = array('#type' => 'radios', '#title' => t('Update mode'), '#default_value' => variable_get('l10n_update_import_mode', LOCALE_IMPORT_KEEP), '#options' => _l10n_update_admin_import_options(), ); $form['l10n_update_check_frequency'] = array( '#type' => 'radios', '#title' => t('Check for updates'), '#default_value' => variable_get('l10n_update_check_frequency', 0), '#options' => array( 0 => t('Never (manually)'), 1 => t('Daily'), 7 => t('Weekly'), ), '#description' => t('Select how frequently you want to automatically check for updated translations for installed modules and themes.'), ); $form['l10n_update_check_disabled'] = array( '#type' => 'checkbox', '#title' => t('Check for updates of disabled modules and themes'), '#default_value' => variable_get('l10n_update_check_disabled', 0), '#description' => t('Note that this comes with a performance penalty, so it is not recommended.'), ); $form['l10n_update_download_store'] = array( '#title' => t('Store downloaded files'), '#type' => 'textfield', '#default_value' => variable_get('l10n_update_download_store', ''), '#description' => t('A path relative to the Drupal installation directory where translation files will be stored, e.g. sites/all/translations. Saved translation files can be reused by other installations. If left empty the downloaded translation will not be saved.'), ); return system_settings_form($form); } /** * Additional validation handler for update settings. * * Check for existing files directory and creates one when required. */ function l10n_update_admin_settings_form_validate($form, &$form_state) { $form_values = $form_state['values']; if ( ! empty($form_values['l10n_update_download_store'])) { file_check_directory($form_values['l10n_update_download_store'], FILE_CREATE_DIRECTORY, 'l10n_update_download_store'); } } /** * Get array of import options. * * The import options of the Locale module are used but the UI text is altered * to suit the Localization update cases. * * @return * Keyed array of import options. */ function _l10n_update_admin_import_options() { return array( LOCALE_IMPORT_OVERWRITE => t('Translation updates replace existing ones, new ones are added'), LOCALE_UPDATE_OVERRIDE_DEFAULT => t('Edited translations are kept, only previously imported ones are overwritten and new translations are added'), LOCALE_IMPORT_KEEP => t('All existing translations are kept, only new translations are added.'), ); } /** * Get array of check options. * * @return * Keyed array of source download options. */ function _l10n_update_admin_check_options() { return array( L10N_UPDATE_CHECK_ALL => t('Local files and remote server.'), L10N_UPDATE_CHECK_LOCAL => t('Local files only.'), L10N_UPDATE_CHECK_REMOTE => t('Remote server only.'), ); } /** * Format project update status. * * @params array $projects * Projects listed. * @params array $languages * Languages listed. * @params array $history * Project translation history. * @params array $available * Available translation releases. * @params array $updates * Applicable translation updates. * * @return string * HTML output. */ function theme_l10n_update_project_status($projects, $languages, $history, $available, $updates) { // We use the core update module CSS drupal_add_css(drupal_get_path('module', 'update') .'/update.css'); $output = ''; //$header = array(t('Project'), t('Current version'), t('Available update'), ''); $header = $rows = array(); foreach ($projects as $name => $project) { $row = '