123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- /**
- * @file
- * Drush interface to l10n-update functionalities.
- */
- /**
- * Implements hook_drush_command().
- */
- function l10n_update_drush_command() {
- $commands = array();
- $commands['l10n-update-refresh'] = array(
- 'description' => 'Refresh available information.',
- );
- $commands['l10n-update-status'] = array(
- 'description' => 'Show translation status of available projects.',
- 'options' => array(
- 'languages' => 'Comma separated list of languages. Defaults to all available languages.',
- )
- );
- $commands['l10n-update'] = array(
- 'description' => 'Update translations.',
- 'options' => array(
- 'languages' => 'Comma separated list of languages. Defaults to all available languages.',
- 'mode' => 'Allowed values: overwrite, keep. Default value: keep.'
- ),
- );
- return $commands;
- }
- /**
- * Callback for command l10n-update-refresh.
- */
- function drush_l10n_update_refresh() {
- module_load_include('admin.inc', 'l10n_update');
- // Fake $form_state to leverage _submit function.
- $form_state = array(
- 'values' => array('op' => t('Refresh information'))
- );
- l10n_update_admin_import_form_submit(NULL, $form_state);
- }
- /**
- * Validate command l10n-update-status.
- */
- function drush_l10n_update_status_validate() {
- _drush_l10n_update_validate_languages();
- }
- /**
- * Callback for command l10n-update-status.
- */
- function drush_l10n_update_status() {
- $updates = _drush_l10n_update_get_updates();
- if (!is_null($updates)) {
- $languages = drush_get_option('languages');
- // Table header.
- $table = array();
- $header = array(dt('Project'));
- foreach ($languages as $lang => $language) {
- $header[] = $language . ' status';
- }
- $table[] = $header;
- // Iterate projects to obtain per language status.
- $projects = l10n_update_get_projects();
- $history = l10n_update_get_history();
- foreach ($projects as $name => $project) {
- $row = array();
- // Project.
- $title = isset($project->title) ? $project->title : $project->name;
- $row[] = $title . ' ' . $project->version;
- // Language status.
- foreach ($languages as $lang => $language) {
- $current = isset($history[$name][$lang]) ? $history[$name][$lang] : NULL;
- $update = isset($updates[$name][$lang]) ? $updates[$name][$lang] : NULL;
- if ($update) {
- $row[] = ($update->type == 'download') ? t('Remote update available'):t('Local update available');
- }
- elseif ($current) {
- $row[] = t('Up to date');
- }
- else {
- $row[] = t('No information');
- }
- }
- $table[] = $row;
- }
- drush_print_table($table, TRUE);
- }
- else {
- drush_log(dt('No projects or languages to update.'), 'ok');
- }
- }
- /**
- * Validate command l10n-update.
- */
- function drush_l10n_update_validate() {
- _drush_l10n_update_validate_languages();
- // Check provided update mode is valid.
- $mode = drush_get_option('mode', 'keep');
- if (!in_array($mode, array('keep', 'overwrite'))) {
- return drush_set_error('L10N_UPDATE_INVALID_MODE', dt('Invalid update mode. Valid options are keep, overwrite.'));
- }
- }
- /**
- * Callback for command l10n-update.
- */
- function drush_l10n_update() {
- $updates = _drush_l10n_update_get_updates();
- if (!is_null($updates)) {
- if (count($updates) > 0) {
- drush_log(dt('Found @count projects to update.', array('@count' => count($updates))), 'status');
- // Batch update all projects for selected languages.
- $mode = drush_get_option('mode', 'keep');
- $languages = drush_get_option('languages');
- module_load_include('batch.inc', 'l10n_update');
- $updates = _l10n_update_prepare_updates($updates, NULL, array_keys($languages));
- $batch = l10n_update_batch_multiple($updates, $mode);
- drush_log($batch['title'], 'status');
- drush_log($batch['init_message'], 'status');
- batch_set($batch);
- drush_backend_batch_process();
- }
- else {
- drush_log(dt('All translations up to date'), 'status');
- }
- }
- }
- /**
- * Helper function to validate languages.
- *
- * Used by _validate hooks.
- * 1. Check other languages than english are available.
- * 2. Check user provided languages are valid.
- */
- function _drush_l10n_update_validate_languages() {
- // Check there're installed other languages than english.
- $installed_languages = l10n_update_language_list();
- if (empty($installed_languages)) {
- return drush_set_error('L10N_UPDATE_NO_LANGUAGES', dt('No languages to update.'));
- }
- // Check provided languages are valid.
- $languages = drush_get_option('languages', '');
- $languages = array_map('trim', _convert_csv_to_array($languages));
- if (count($languages)) {
- foreach ($languages as $key => $lang) {
- if (!isset($installed_languages[$lang])) {
- drush_set_error('L10N_UPDATE_INVALID_LANGUAGE', dt('Language @lang is not installed.', array('@lang' => $lang)));
- }
- else {
- unset($languages[$key]);
- $languages[$lang] = $installed_languages[$lang];
- }
- }
- if (drush_get_error() != DRUSH_SUCCESS) {
- drush_print(dt('Available languages: @languages', array('@languages' => implode(', ', array_keys($installed_languages)))));
- }
- }
- else {
- $languages = $installed_languages;
- }
- drush_set_option('languages', $languages);
- }
- /**
- * Helper function to obtain $updates.
- *
- * @return $updates array or NULL.
- */
- function _drush_l10n_update_get_updates() {
- $projects = l10n_update_get_projects();
- if ($projects) {
- $history = l10n_update_get_history();
- drush_log(dt('Fetching update information for all projects / all languages.'), 'status');
- module_load_include('check.inc', 'l10n_update');
- $available = l10n_update_available_releases();
- $updates = l10n_update_build_updates($history, $available);
- return $updates;
- }
- else {
- drush_log(dt('No projects or languages to update.'), 'ok');
- }
- }
|