gcsfs-1.0.0-beta2/gcsfs.batch.inc

gcsfs.batch.inc
<?php

/**
 * @file
 * Batch functions for the Google Cloud Storage File System module.
 */

use Drupal\Core\StringTranslation\TranslatableMarkup;

/**
 * Refresh Metadata Batch: Get Metadata.
 *
 * @param mixed $context
 *   The batch context.
 */
function _gcsfs_metadata_refresh_batch_get_metadata(&$context) {
  $context['results']['objects'] = [];
  $context['message'] = new TranslatableMarkup('Fetching objects from Google Cloud Storage bucket.');

  $objects = \Drupal::service('gcsfs.bucket_manager')->getObjects();
  foreach ($objects as $object) {
    $info = $object->info();
    $context['results']['objects'][$info['name']] = [
      'path' => rtrim($info['name'], '/'),
      'file_size' => $info['size'],
      'directory' => (int) ($info['name'] != rtrim($info['name'], '/')),
      'created' => strtotime($info['timeCreated']),
    ];
  }
}

/**
 * Refresh Metadata Batch: Update Metadata.
 *
 * @param mixed $context
 *   The batch context.
 */
function _gcsfs_metadata_refresh_batch_update_metadata(&$context) {
  if (count($context['results']['objects'])) {

    // Handle the sandbox.
    if (!isset($context['sandbox']['progress'])) {
      $context['sandbox']['progress'] = 0;
      $context['sandbox']['max'] = count($context['results']['objects']);
    }

    $paths = array_keys($context['results']['objects']);
    $object = $context['results']['objects'][$paths[$context['sandbox']['progress']]];
    $context['message'] = new TranslatableMarkup('Creating/Updating metadata for %path.', ['%path' => $object['path']]);
    \Drupal::database()->upsert('gcsfs_object_metadata')
      ->fields(array_keys($object))
      ->key('path')
      ->values($object)
      ->execute();
    $context['sandbox']['progress']++;

    // Check for finished state, set the percentage done if not finished.
    if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
      $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
    }
  }
}

/**
 * Refresh Metadata Batch: Finished.
 *
 * @param bool $success
 *   Whether the batch completed successfully or not.
 * @param array $results
 *   The results of the batch.
 * @param array $operations
 *   The remaining operations if the batch was unsuccessful.
 * @param string $elapsed
 *   The time it took to run the batch.
 */
function _gcsfs_metadata_refresh_batch_finished(bool $success, array $results, array $operations, string $elapsed) {
  if ($success) {
    \Drupal::messenger()->addMessage(
      \Drupal::translation()->formatPlural(
        count($results['objects']),
        'Metadata refreshed for @count object.',
        'Metadata refreshed for @count objects.',
        [
          '@count' => count($results['objects']),
        ]
      )
    );
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc