110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * @file
 | 
						|
 * Contains hook implementations for the media_library module.
 | 
						|
 */
 | 
						|
 | 
						|
use Drupal\Core\Routing\RouteMatchInterface;
 | 
						|
use Drupal\views\Plugin\views\cache\CachePluginBase;
 | 
						|
use Drupal\views\ViewExecutable;
 | 
						|
use Drupal\Core\Template\Attribute;
 | 
						|
use Drupal\Core\Form\FormStateInterface;
 | 
						|
use Drupal\Core\Render\Element;
 | 
						|
 | 
						|
/**
 | 
						|
 * Implements hook_help().
 | 
						|
 *
 | 
						|
 * @todo Update in https://www.drupal.org/project/drupal/issues/2964789
 | 
						|
 */
 | 
						|
function media_library_help($route_name, RouteMatchInterface $route_match) {
 | 
						|
  switch ($route_name) {
 | 
						|
    case 'help.page.media_library':
 | 
						|
      $output = '<h3>' . t('About') . '</h3>';
 | 
						|
      $output .= '<p>' . t('The Media library module overrides the /admin/content/media view to provide a rich visual interface for performing administrative operations on media. For more information, see the <a href=":media">online documentation for the Media library module</a>.', [':media' => 'https://www.drupal.org/docs/8/core/modules/media']) . '</p>';
 | 
						|
      return $output;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Implements hook_theme().
 | 
						|
 */
 | 
						|
function media_library_theme() {
 | 
						|
  return [
 | 
						|
    'media__media_library' => [
 | 
						|
      'base hook' => 'media',
 | 
						|
    ],
 | 
						|
  ];
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Implements hook_views_post_render().
 | 
						|
 */
 | 
						|
function media_library_views_post_render(ViewExecutable $view, &$output, CachePluginBase $cache) {
 | 
						|
  if ($view->id() === 'media_library') {
 | 
						|
    $output['#attached']['library'][] = 'media_library/view';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Implements hook_preprocess_media().
 | 
						|
 */
 | 
						|
function media_library_preprocess_media(&$variables) {
 | 
						|
  if ($variables['view_mode'] === 'media_library') {
 | 
						|
    /** @var \Drupal\media\MediaInterface $media */
 | 
						|
    $media = $variables['media'];
 | 
						|
    $variables['#cache']['contexts'][] = 'user.permissions';
 | 
						|
    $rel = $media->access('edit') ? 'edit-form' : 'canonical';
 | 
						|
    $variables['url'] = $media->toUrl($rel, [
 | 
						|
      'language' => $media->language(),
 | 
						|
    ]);
 | 
						|
    $variables['preview_attributes'] = new Attribute();
 | 
						|
    $variables['preview_attributes']->addClass('media-library-item__preview', 'js-click-to-select__trigger');
 | 
						|
    $variables['metadata_attributes'] = new Attribute();
 | 
						|
    $variables['metadata_attributes']->addClass('media-library-item__attributes');
 | 
						|
    $variables['status'] = $media->isPublished();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Alter the bulk form to add a more accessible label.
 | 
						|
 *
 | 
						|
 * @param array $form
 | 
						|
 *   An associative array containing the structure of the form.
 | 
						|
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 | 
						|
 *   The current state of the form.
 | 
						|
 *
 | 
						|
 * @todo Remove in https://www.drupal.org/project/drupal/issues/2969660
 | 
						|
 */
 | 
						|
function media_library_form_views_form_media_library_page_alter(array &$form, FormStateInterface $form_state) {
 | 
						|
  if (isset($form['media_bulk_form']) && isset($form['output'])) {
 | 
						|
    $form['#attributes']['class'][] = 'media-library-page-form';
 | 
						|
    $form['header']['#attributes']['class'][] = 'media-library-page-form__header';
 | 
						|
    /** @var \Drupal\views\ViewExecutable $view */
 | 
						|
    $view = $form['output'][0]['#view'];
 | 
						|
    foreach (Element::getVisibleChildren($form['media_bulk_form']) as $key) {
 | 
						|
      if (isset($view->result[$key])) {
 | 
						|
        $media = $view->field['media_bulk_form']->getEntity($view->result[$key]);
 | 
						|
        $form['media_bulk_form'][$key]['#title'] = t('Select @label', [
 | 
						|
          '@label' => $media->label(),
 | 
						|
        ]);
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Implements hook_local_tasks_alter().
 | 
						|
 *
 | 
						|
 * Removes tasks for the Media library if the view display no longer exists.
 | 
						|
 */
 | 
						|
function media_library_local_tasks_alter(&$local_tasks) {
 | 
						|
  /** @var \Symfony\Component\Routing\RouteCollection $route_collection */
 | 
						|
  $route_collection = \Drupal::service('router')->getRouteCollection();
 | 
						|
  foreach (['media_library.grid', 'media_library.table'] as $key) {
 | 
						|
    if (isset($local_tasks[$key]) && !$route_collection->get($local_tasks[$key]['route_name'])) {
 | 
						|
      unset($local_tasks[$key]);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |