You are here

function _uc_file_gather_files in Ubercart 8.4

Same name and namespace in other branches
  1. 6.2 uc_file/uc_file.module \_uc_file_gather_files()
  2. 7.3 uc_file/uc_file.module \_uc_file_gather_files()

Retrieves an updated list of available downloads.

1 call to _uc_file_gather_files()
uc_file_refresh in uc_file/uc_file.module
Removes non-existent files and update the downloadable list.

File

uc_file/uc_file.module, line 428
Allows products to be associated with downloadable files.

Code

function _uc_file_gather_files() {
  $file_config = \Drupal::config('uc_file.settings');

  // Don't bother if the directory isn't set.
  if (!($dir = $file_config
    ->get('base_dir'))) {
    return;
  }

  // Grab files and prepare the base dir for appending.
  $files = file_scan_directory($dir, $file_config
    ->get('file_mask'));
  $dir = substr($dir, -1) != '/' || substr($dir, -1) != '\\' ? $dir . '/' : $dir;
  $connection = \Drupal::database();
  foreach ($files as $file) {

    // Cut the base directory out of the path.
    $filename = str_replace($dir, '', $file->uri);
    $file_dir = dirname($filename);
    $fid = NULL;

    // Insert new entries.
    if ($file_dir != '.' && !$connection
      ->query('SELECT fid FROM {uc_files} WHERE filename = :name', [
      ':name' => $file_dir . '/',
    ])
      ->fetchField()) {
      $fid = $connection
        ->insert('uc_files')
        ->fields([
        'filename' => $file_dir . '/',
      ])
        ->execute();
    }
    if (!$connection
      ->query('SELECT fid FROM {uc_files} WHERE filename = :name', [
      ':name' => $filename,
    ])
      ->fetchField()) {
      $fid = $connection
        ->insert('uc_files')
        ->fields([
        'filename' => $filename,
      ])
        ->execute();
    }

    // Invoke hook_uc_file_action().
    if (!is_null($fid)) {
      $file_object = uc_file_get_by_id($fid);
      \Drupal::moduleHandler()
        ->invokeAll('uc_file_action', [
        'insert',
        [
          'file_object' => $file_object,
        ],
      ]);
      unset($fid);
    }
  }
}