degov-8.x-2.0/modules/degov_paragraph_media_reference/degov_paragraph_media_reference.module
modules/degov_paragraph_media_reference/degov_paragraph_media_reference.module
<?php
use Drupal\degov_common\Common;
/**
* Implements hook_preprocess().
*/
function degov_paragraph_media_reference_preprocess(&$variables, $hook, &$info) {
// Add template suggestions and libraries implemented in this module.
Common::addThemeSuggestions($variables, $hook, $info, [
'module_name' => 'degov_paragraph_media_reference',
'entity_type' => 'paragraph',
'entity_bundles' => ['media_reference'],
'entity_view_modes' => ['default', 'preview'],
]);
}
/**
* Implements hook_field_widget_form_alter().
*/
function degov_paragraph_media_reference_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) {
/** @var \Drupal\Core\Field\WidgetBase $widget */
$widget = $context['widget'];
// Add media_reference library on every media reference paragraph.
if ($widget->getPluginId() == 'entity_reference_paragraphs' && !empty($element['subform']['field_media_reference_media'])) {
$element['#attached']['library'][] = 'degov_paragraph_media_reference/media_reference';
}
if (in_array($widget->getPluginId(), ['entity_browser_entity_reference'])) {
$formObject = $form_state->getFormObject();
if ($formObject instanceof \Drupal\paragraphs_edit\Form\ParagraphEditForm) {
$paragraph = $formObject->getEntity();
if ($paragraph->bundle() == 'media_reference') {
$element['#attached']['library'][] = 'degov_paragraph_media_reference/media_reference';
}
}
}
}
/**
* Implements hook_modules_installed().
*
* @param $modules
* An array of the modules that were installed.
*/
function degov_paragraph_media_reference_modules_installed($modules) {
if (in_array('degov_paragraph_media_reference', $modules)) {
// Set target bundles.
/** @var \Drupal\Core\Config\ConfigInstallerInterface $config_installer */
$config_installer = \Drupal::service('config.installer');
if (!$config_installer->isSyncing()) {
// Set target bundles.
_degov_media_reference_bundle_list();
}
}
}
/**
* Update field reference target bundles.
*/
function _degov_media_reference_bundle_list() {
$enabled_bundles = [];
$media_types = \Drupal\media\Entity\MediaType::loadMultiple();
/** @var \Drupal\media\Entity\MediaType $media_type */
foreach ($media_types as $media_type) {
$enabled_bundles[$media_type->id()] = $media_type->id();
}
if (!empty($enabled_bundles)) {
// Load the configuration for node_reference field storage.
$config = \Drupal::configFactory()
->getEditable('field.field.paragraph.media_reference.field_media_reference_media');
$settings = $config->get('settings');
if (!empty($settings)) {
$settings['handler_settings']['target_bundles'] = $enabled_bundles;
$config->set('settings', $settings);
$config->save(TRUE);
}
} else {
drupal_set_message(t('There are no media bundles available'), 'warning');
}
}
