You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
72 lines
1.9 KiB
<?php |
|
|
|
namespace Drupal\islandora\Plugin\Action; |
|
|
|
use Drupal\islandora\EventGenerator\EmitEvent; |
|
|
|
use Drupal\Core\Entity\EntityInterface; |
|
use Drupal\Core\File\FileSystemInterface; |
|
use Drupal\Core\Site\Settings; |
|
use Symfony\Component\DependencyInjection\ContainerInterface; |
|
|
|
/** |
|
* Emits a File event. |
|
* |
|
* @Action( |
|
* id = "emit_file_event", |
|
* label = @Translation("Emit a file event to a queue/topic"), |
|
* type = "file" |
|
* ) |
|
*/ |
|
class EmitFileEvent extends EmitEvent { |
|
|
|
/** |
|
* File system service. |
|
* |
|
* @var \Drupal\Core\File\FileSystemInterface |
|
*/ |
|
protected $fileSystem; |
|
|
|
/** |
|
* Setter for the file system service. |
|
*/ |
|
public function setFileSystemService(FileSystemInterface $file_system) { |
|
$this->fileSystem = $file_system; |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { |
|
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition); |
|
|
|
$instance->setFileSystemService($container->get('file_system')); |
|
|
|
return $instance; |
|
} |
|
|
|
/** |
|
* {@inheritdoc} |
|
*/ |
|
protected function generateData(EntityInterface $entity) { |
|
$data = parent::generateData($entity); |
|
|
|
// This function is called on Media and File entity types. |
|
if (method_exists($entity, 'getFileUri')) { |
|
$uri = $entity->getFileUri(); |
|
$scheme = StreamWrapperManager::getScheme($uri); |
|
$flysystem_config = Settings::get('flysystem'); |
|
|
|
if (isset($flysystem_config[$scheme]) && $flysystem_config[$scheme]['driver'] == 'fedora') { |
|
// Fdora $uri for files may contain ':///' so we need to replace |
|
// the three / with two. |
|
if (strpos($uri, $scheme . ':///') !== FALSE) { |
|
$uri = str_replace($scheme . ':///', $scheme . '://', $uri); |
|
} |
|
$data['fedora_uri'] = str_replace("$scheme://", $flysystem_config[$scheme]['config']['root'], $uri); |
|
} |
|
} |
|
return $data; |
|
} |
|
|
|
}
|
|
|