warning('File does not exist: @file', ['@file' => $source_path]); return; } if ($source_path === $destination_path) { $path = $destination_path; } else { $path = $fileSystem->copy($source_path, $destination_path, FileExists::Rename); } $file = \Drupal::service('file.repository')->loadByUri($path); if (!$file) { $absolute_path = $fileSystem->realpath($destination_path); if ($absolute_path) { chown($absolute_path, $build_data['ownership']); } $file = File::create([ 'uri' => $path, 'status' => 1, ]); $file->save(); } $context['results'][$file->id()] = $path; if (preg_match('/^(\d+)_/', $file_name, $matches)) { $nid = $matches[1] ?? NULL; } $media = Media::create([ "bundle" => $media_type, "name" => $file_name, $file_type => [ "target_id" => $file->id(), ], 'field_media_use' => [ "target_id" => $build_data['media_use'], ], "field_media_of" => $nid, ]); $media->save(); } /** * Builds batch from input directory. */ public static function buildMediaBatch($build_data) { $source_dir = $build_data['source_dir']; if ($source_dir && !is_dir($source_dir)) { \Drupal::logger('islandora_inplace_media')->error('Source directory does not exist: @dir', ['@dir' => $source_dir]); return; } $destination = $build_data['destination_path']; $fileSystem = \Drupal::service('file_system'); $fileSystem->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY); chown($destination, $build_data['ownership']); $files = scandir($source_dir); $files = array_diff($files, ['.', '..']); $batch = [ 'title' => t('Processing media files...'), 'operations' => [], // Static method reference. 'finished' => [self::class, 'finishMediaBatch'], ]; foreach ($files as $file_name) { $batch['operations'][] = [ [self::class, 'processMediaBatch'], [$file_name, $build_data], ]; } batch_set($batch); } /** * Display results. */ public static function finishMediaBatch($success, $results, $operations) { if ($success) { \Drupal::logger('islandora_inplace_media')->notice('Successfully processed media files.'); } else { \Drupal::logger('islandora_inplace_media')->error('There were errors processing media files.'); } } }