public function PhysicalFile::processEntity in Entity Share 8.3
Plugin annotation
@SuppressWarnings(PHPMD . ErrorControlOperator);
Overrides ImportProcessorPluginBase::processEntity
File
- modules/
entity_share_client/ src/ Plugin/ EntityShareClient/ Processor/ PhysicalFile.php, line 100
Class
- PhysicalFile
- Handle physical file import.
Namespace
Drupal\entity_share_client\Plugin\EntityShareClient\ProcessorCode
public function processEntity(RuntimeImportContext $runtime_import_context, ContentEntityInterface $processed_entity, array $entity_json_data) {
if ($processed_entity instanceof FileInterface) {
$field_mappings = $runtime_import_context
->getFieldMappings();
$entity_type_id = $processed_entity
->getEntityTypeId();
$entity_bundle = $processed_entity
->bundle();
$uri_public_name = FALSE;
if (isset($field_mappings[$entity_type_id][$entity_bundle]['uri'])) {
$uri_public_name = $field_mappings[$entity_type_id][$entity_bundle]['uri'];
}
if (!$uri_public_name || !isset($entity_json_data['attributes'][$uri_public_name])) {
$this->logger
->error('Impossible to get the URI of the file in JSON:API data. Please check that the server website is correctly exposing it.');
$this
->messenger()
->addError($this
->t('Impossible to get the URI of the file in JSON:API data. Please check that the server website is correctly exposing it.'));
return;
}
$remote_file_uri = $entity_json_data['attributes'][$uri_public_name]['value'];
$remote_file_url = $entity_json_data['attributes'][$uri_public_name]['url'];
$stream_wrapper = $this->streamWrapperManager
->getViaUri($remote_file_uri);
$directory_uri = $stream_wrapper
->dirname($remote_file_uri);
$log_variables = [
'%url' => $remote_file_url,
'%directory' => $directory_uri,
'%id' => $processed_entity
->id(),
'%uri' => $remote_file_uri,
];
$file_overwrite_mode = $this->configuration['rename'] ? FileSystemInterface::EXISTS_RENAME : FileSystemInterface::EXISTS_REPLACE;
$file_destination = $this->fileSystem
->getDestinationFilename($processed_entity
->getFileUri(), $file_overwrite_mode);
$processed_entity
->setFileUri($file_destination);
$processed_entity
->setFilename($this->fileSystem
->basename($file_destination));
// Create the destination folder.
if ($this->fileSystem
->prepareDirectory($directory_uri, FileSystemInterface::CREATE_DIRECTORY)) {
try {
$response = $this->remoteManager
->request($runtime_import_context
->getRemote(), 'GET', $remote_file_url);
$file_content = (string) $response
->getBody();
$result = @file_put_contents($file_destination, $file_content);
if (!$result) {
throw new \Exception('Error writing file to ' . $file_destination);
}
} catch (ClientException $e) {
$this->logger
->warning('Error importing file id %id. Missing file: %url', $log_variables);
$this
->messenger()
->addWarning($this
->t('Error importing file id %id. Missing file: %url', $log_variables));
} catch (\Throwable $e) {
$log_variables['@msg'] = $e
->getMessage();
$this->logger
->error('Caught exception trying to import the file %url to %uri. Error message was @msg', $log_variables);
$this
->messenger()
->addError($this
->t('Caught exception trying to import the file %url to %uri', $log_variables));
}
}
else {
$this->logger
->error('Impossible to write in the directory %directory', $log_variables);
$this
->messenger()
->addError($this
->t('Impossible to write in the directory %directory', $log_variables));
}
}
}