You are here

function locale_cron_fill_queue in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/locale/locale.translation.inc \locale_cron_fill_queue()

Populate a queue with project to check for translation updates.

1 call to locale_cron_fill_queue()
locale_cron in core/modules/locale/locale.module
Implements hook_cron().

File

core/modules/locale/locale.translation.inc, line 329
Common API for interface translation.

Code

function locale_cron_fill_queue() {
  $updates = [];
  $config = \Drupal::config('locale.settings');

  // Determine which project+language should be updated.
  $last = REQUEST_TIME - $config
    ->get('translation.update_interval_days') * 3600 * 24;
  $projects = \Drupal::service('locale.project')
    ->getAll();
  $projects = array_filter($projects, function ($project) {
    return $project['status'] == 1;
  });
  $connection = \Drupal::database();
  $files = $connection
    ->select('locale_file', 'f')
    ->condition('f.project', array_keys($projects), 'IN')
    ->condition('f.last_checked', $last, '<')
    ->fields('f', [
    'project',
    'langcode',
  ])
    ->execute()
    ->fetchAll();
  foreach ($files as $file) {
    $updates[$file->project][] = $file->langcode;

    // Update the last_checked timestamp of the project+language that will
    // be checked for updates.
    $connection
      ->update('locale_file')
      ->fields([
      'last_checked' => REQUEST_TIME,
    ])
      ->condition('project', $file->project)
      ->condition('langcode', $file->langcode)
      ->execute();
  }

  // For each project+language combination a number of tasks are added to
  // the queue.
  if ($updates) {
    module_load_include('fetch.inc', 'locale');
    $options = _locale_translation_default_update_options();
    $queue = \Drupal::queue('locale_translation', TRUE);
    foreach ($updates as $project => $languages) {
      $batch = locale_translation_batch_update_build([
        $project,
      ], $languages, $options);
      foreach ($batch['operations'] as $item) {
        $queue
          ->createItem($item);
      }
    }
  }
}