|
|
|
|
@ -41,6 +41,19 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
|
|
|
|
|
protected $streamWrapperManager; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Media field mapping. |
|
|
|
|
* |
|
|
|
|
* @var array |
|
|
|
|
*/ |
|
|
|
|
protected $fileTypes = [ |
|
|
|
|
'audio' => 'field_media_audio_file', |
|
|
|
|
'document' => 'field_media_document', |
|
|
|
|
'file' => 'field_media_file', |
|
|
|
|
'image' => 'field_media_image', |
|
|
|
|
'video' => 'field_media_video_file', |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* {@inheritdoc} |
|
|
|
|
*/ |
|
|
|
|
@ -74,8 +87,8 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
public function buildForm(array $form, FormStateInterface $form_state): array { |
|
|
|
|
$server_software = $_SERVER['SERVER_SOFTWARE'] ?? ''; |
|
|
|
|
$default_ownership = match (TRUE) { |
|
|
|
|
stripos($server_software, 'apache') !== FALSE => 'www-data:www-data', |
|
|
|
|
stripos($server_software, 'nginx') !== FALSE => 'nginx:nginx', |
|
|
|
|
str_contains($server_software, 'apache') => 'www-data:www-data', |
|
|
|
|
str_contains($server_software, 'nginx') => 'nginx:nginx', |
|
|
|
|
default => 'unknown:unknown', |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
@ -89,8 +102,7 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
$term_default = $term->tid; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$wrappers = $this->streamWrapperManager->getWrappers(); |
|
|
|
|
$file_system_options = []; |
|
|
|
|
|
|
|
|
|
$wrappers = $this->streamWrapperManager->getWrappers(); |
|
|
|
|
$file_system_options = []; |
|
|
|
|
$file_system_options['default'] = $this->t("File system defined in media type"); |
|
|
|
|
@ -100,11 +112,9 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
if (in_array($scheme, $unwanted)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$class = $wrapper_info['class']; |
|
|
|
|
if ( |
|
|
|
|
is_a($class, StreamWrapperInterface::class, TRUE) && |
|
|
|
|
class_exists($class) |
|
|
|
|
) { |
|
|
|
|
if (is_a($class, StreamWrapperInterface::class, TRUE) && class_exists($class)) { |
|
|
|
|
$instance = new $class(); |
|
|
|
|
$instance->setUri($scheme . '://'); |
|
|
|
|
$file_system_options[$scheme] = $instance->getName() ?: $scheme; |
|
|
|
|
@ -161,6 +171,9 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
'#required' => TRUE, |
|
|
|
|
'#default_value' => 'default', |
|
|
|
|
]; |
|
|
|
|
if (count($file_system_options) <= 1) { |
|
|
|
|
$form['file_system']['#attributes']['style'] = 'display: none;'; |
|
|
|
|
} |
|
|
|
|
$form['field_wrapper'] = [ |
|
|
|
|
'#type' => 'container', |
|
|
|
|
'#attributes' => ['class' => ['media-fields-wrapper']], |
|
|
|
|
@ -212,17 +225,21 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
* {@inheritdoc} |
|
|
|
|
*/ |
|
|
|
|
public function validateForm(array &$form, FormStateInterface $form_state): void { |
|
|
|
|
$file_system = $form_state->getValue('file_system') . "://"; |
|
|
|
|
$source_directory = $form_state->getValue('in_place') ? $file_system . $form_state->getValue('destination') : $form_state->getValue('source'); |
|
|
|
|
$file_system = $this->getFilesystem($form_state); |
|
|
|
|
$source_directory = rtrim($form_state->getValue('in_place') ? $file_system . $form_state->getValue('destination') : $form_state->getValue('source'), '/'); |
|
|
|
|
|
|
|
|
|
if (!is_dir($source_directory)) { |
|
|
|
|
if (str_starts_with($file_system, 'fedora')) { |
|
|
|
|
$form_state->setErrorByName('source', $this->t('The fedora file system is not suitable for preloading files.')); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
$form_state->setErrorByName('source', $this->t('The specified directory does not exist.')); |
|
|
|
|
} |
|
|
|
|
if (is_dir($source_directory)) { |
|
|
|
|
$files = scandir($source_directory); |
|
|
|
|
$files = array_diff($files, ['.', '..']); |
|
|
|
|
if (!$files) { |
|
|
|
|
$form_state->setErrorByName('source', $this->t('The specified directory is empty.')); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (empty(array_diff(scandir($source_directory), ['.', '..']))) { |
|
|
|
|
$form_state->setErrorByName('source', $this->t('The specified directory is empty.')); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -230,35 +247,15 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
* {@inheritdoc} |
|
|
|
|
*/ |
|
|
|
|
public function submitForm(array &$form, FormStateInterface $form_state): void { |
|
|
|
|
$file_types = [ |
|
|
|
|
'audio' => 'field_media_audio_file', |
|
|
|
|
'document' => 'field_media_document', |
|
|
|
|
'file' => 'field_media_file', |
|
|
|
|
'image' => 'field_media_image', |
|
|
|
|
'video' => 'field_media_video_file', |
|
|
|
|
]; |
|
|
|
|
$file_system = $this->getFilesystem($form_state); |
|
|
|
|
$media_type = $form_state->getValue('media_type'); |
|
|
|
|
$file_type = $file_types[$media_type]; |
|
|
|
|
|
|
|
|
|
if ($form_state->getValue('file_system') == 'default') { |
|
|
|
|
$field_config = FieldConfig::loadByName('media', $media_type, $file_type); |
|
|
|
|
if ($field_config) { |
|
|
|
|
$settings = $field_config->getSettings(); |
|
|
|
|
$scheme = $settings['uri_scheme'] ?? 'public'; |
|
|
|
|
$file_system = $scheme . "://"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
$file_system = $form_state->getValue('file_system') . "://"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$destination = trim($form_state->getValue('destination'), '/'); |
|
|
|
|
|
|
|
|
|
$build_data = [ |
|
|
|
|
'source_dir' => $form_state->getValue('in_place') ? $file_system . $destination : $form_state->getValue('source'), |
|
|
|
|
'destination_path' => "{$file_system}{$destination}", |
|
|
|
|
'media_type' => $media_type, |
|
|
|
|
'file_type' => $file_type, |
|
|
|
|
'media_type' => $form_state->getValue('media_type'), |
|
|
|
|
'file_type' => $this->fileTypes[$media_type], |
|
|
|
|
'media_use' => $form_state->getValue('media_use'), |
|
|
|
|
'ownership' => $form_state->getValue('ownership'), |
|
|
|
|
]; |
|
|
|
|
@ -278,4 +275,26 @@ final class CreateMediaFromFileForm extends FormBase {
|
|
|
|
|
$form_state->setRedirect('<front>'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Gets default filesystem for media type. |
|
|
|
|
*/ |
|
|
|
|
protected function getFilesystem($form_state) { |
|
|
|
|
$media_type = $form_state->getValue('media_type'); |
|
|
|
|
$file_type = $this->fileTypes[$media_type]; |
|
|
|
|
|
|
|
|
|
if ($form_state->getValue('file_system') == 'default') { |
|
|
|
|
$field_config = FieldConfig::loadByName('media', $media_type, $file_type); |
|
|
|
|
if ($field_config) { |
|
|
|
|
$settings = $field_config->getSettings(); |
|
|
|
|
$scheme = $settings['uri_scheme'] ?? 'public'; |
|
|
|
|
$file_system = $scheme . "://"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
$file_system = $form_state->getValue('file_system') . "://"; |
|
|
|
|
} |
|
|
|
|
return $file_system; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|