You are here

function media_directories_ui_preprocess_media_directories_add in Media Directories 2.x

Same name and namespace in other branches
  1. 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);
    }
  }
}