Skip to content

Instantly share code, notes, and snippets.

@nonom
Created November 22, 2022 11:41
Show Gist options
  • Save nonom/8ae2f8a95c5b19a59610364430ad7157 to your computer and use it in GitHub Desktop.
Save nonom/8ae2f8a95c5b19a59610364430ad7157 to your computer and use it in GitHub Desktop.
<?php
/**
* @file
* mymodule module.
*/
use Drupal\Core\File\FileSystemInterface;
/**
* Implements hook_preprocess_page().
*/
function mymodule_file_preprocess_page(&$vars) {
if (\Drupal::routeMatch()->getRouteName() == 'entity.media.collection') {
_mymodule_file_recreate_media_folder();
};
}
/**
* Helper function to recreate the media-icons public directory.
*
* @see media.install
*/
function _mymodule_file_recreate_media_folder() {
$source = drupal_get_path('module', 'media') . '/images/icons';
$destination = \Drupal::config('media.settings')->get('icon_base_uri');
/** @var \Drupal\Core\File\FileSystemInterface $file_system */
$file_system = \Drupal::service('file_system');
$file_system->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
$files = $file_system->scanDirectory($source, '/.*\.(svg|png|jpg|jpeg|gif)$/');
foreach ($files as $file) {
// When reinstalling the media module we don't want to copy the icons when
// they already exist. The icons could be replaced (by a contrib module or
// manually), so we don't want to replace the existing files. Removing the
// files when we uninstall could also be a problem if the files are
// referenced somewhere else. Since showing an error that it was not
// possible to copy the files is also confusing, we silently do nothing.
if (!file_exists($destination . DIRECTORY_SEPARATOR . $file->filename)) {
try {
$file_system->copy($file->uri, $destination, FileSystemInterface::EXISTS_ERROR);
}
catch (FileException $e) {
// Ignore and continue.
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment