You are here

l10n_update.drush.inc in Localization update 6

Same filename and directory in other branches
  1. 7.2 l10n_update.drush.inc
  2. 7 l10n_update.drush.inc

Drush interface to l10n-update functionalities.

File

l10n_update.drush.inc
View source
<?php

/**
 * @file
 * Drush interface to l10n-update functionalities.
 */

/**
 * Implementation of 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('Cannot find any translation updates.'), 'ok');
    }
  }
}

/**
 * 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');
  }
}

Functions

Namesort descending Description
drush_l10n_update Callback for command l10n-update.
drush_l10n_update_refresh Callback for command l10n-update-refresh.
drush_l10n_update_status Callback for command l10n-update-status.
drush_l10n_update_status_validate Validate command l10n-update-status.
drush_l10n_update_validate Validate command l10n-update.
l10n_update_drush_command Implementation of hook_drush_command().
_drush_l10n_update_get_updates Helper function to obtain $updates.
_drush_l10n_update_validate_languages Helper function to validate languages.