function media_directories_ui_preprocess_media_directories_add in Media Directories 2.x
Same name and namespace in other branches
- 8 modules/media_directories_ui/media_directories_ui.module \media_directories_ui_preprocess_media_directories_add()
Implements hook_preprocess_HOOK().
File
- modules/
media_directories_ui/ media_directories_ui.module, line 144 - Main module file.
Code
function media_directories_ui_preprocess_media_directories_add(&$variables) {
$ui_config = \Drupal::config('media_directories_ui.settings');
$combined_upload_enabled = $ui_config
->get('enable_combined_upload');
$combined_media_types = $ui_config
->get('combined_upload_media_types');
/** @var \Drupal\media\Entity\MediaType[] $types */
$types = \Drupal::entityTypeManager()
->getStorage('media_type')
->loadMultiple();
$variables['links'] = [
'#theme' => 'links',
'#links' => [],
'#attributes' => [
'class' => [
'media-library-menu',
'js-media-library-menu',
],
],
];
// Find the types combined upload should handle.
// If types are limited and these are not allowed in combined upload,
// then the tab is hidden.
$combined_media_types_diff = array_intersect($variables['target_bundles'], $combined_media_types);
if ($combined_upload_enabled && !empty($combined_media_types_diff)) {
$types_string = ' (';
foreach ($combined_media_types_diff as $type) {
if (isset($types[$type])) {
$types_string .= $types[$type]
->label() . ', ';
}
}
$types_string = substr($types_string, 0, -2);
if (strlen($types_string) > 0) {
$types_string .= ')';
}
$variables['links']['#links']['combined_upload'] = [
'title' => t('Combined upload @types_string', [
'@types_string' => $types_string,
]),
'url' => Url::fromRoute('media_directories_ui.media.add', [], [
'query' => [
'media_type' => 'combined_upload',
'active_directory' => $variables['active_directory'],
'target_bundles' => $variables['target_bundles'],
'cardinality' => $variables['cardinality'],
'selection_mode' => $variables['selection_mode'],
],
]),
'attributes' => [
'class' => [
'use-ajax',
'media-library-menu__link',
],
],
];
if ($variables['selected_type'] === 'combined_upload') {
$variables['links']['#links']['combined_upload']['attributes']['class'][] = 'active';
}
}
foreach ($types as $type) {
if (!is_array($variables['target_bundles']) || !in_array($type
->id(), $variables['target_bundles'], TRUE)) {
continue;
}
// If combined upload is enabled and the media type is included, we hide the tab.
if ($combined_upload_enabled && isset($combined_media_types[$type
->id()]) && $combined_media_types[$type
->id()] === $type
->id()) {
continue;
}
$variables['links']['#links'][$type
->id()] = [
'title' => $type
->label(),
'url' => Url::fromRoute('media_directories_ui.media.add', [], [
'query' => [
'media_type' => $type
->id(),
'active_directory' => $variables['active_directory'],
'target_bundles' => $variables['target_bundles'],
'cardinality' => $variables['cardinality'],
'selection_mode' => $variables['selection_mode'],
],
]),
'attributes' => [
'class' => [
'use-ajax',
'media-library-menu__link',
],
],
];
if ($variables['selected_type'] === $type
->id()) {
$variables['links']['#links'][$type
->id()]['attributes']['class'][] = 'active';
}
}
$form_state = new FormState();
$form_state
->set('active_directory', $variables['active_directory']);
$form_state
->set('target_bundles', $variables['target_bundles']);
$form_state
->set('cardinality', $variables['cardinality']);
$form_state
->set('selection_mode', $variables['selection_mode']);
if ($variables['media_library_form_rebuild']) {
$form_state
->setUserInput([]);
}
if ($variables['selected_type'] === 'combined_upload') {
$form_state
->set('media_type', $variables['selected_type']);
$variables['media_form'] = \Drupal::formBuilder()
->buildForm(MediaCombinedUploadForm::class, $form_state);
}
elseif (isset($types[$variables['selected_type']])) {
$type = $types[$variables['selected_type']];
$source_field = $type
->getSource()
->getConfiguration()['source_field'];
$field_config = \Drupal::entityTypeManager()
->getStorage('field_config')
->load('media.' . $type
->id() . '.' . $source_field);
$form_state
->set('media_type', $type);
if (in_array($field_config
->getType(), [
'file',
'image',
])) {
$variables['media_form'] = \Drupal::formBuilder()
->buildForm(FileUploadForm::class, $form_state);
}
else {
$variables['media_form'] = \Drupal::formBuilder()
->buildForm(OEmbedForm::class, $form_state);
}
}
}