degov-8.x-2.0/modules/degov_paragraph_node_reference/degov_paragraph_node_reference.module
modules/degov_paragraph_node_reference/degov_paragraph_node_reference.module
<?php
use Drupal\degov_common\Common;
use Drupal\node\Entity\NodeType;
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_preprocess().
*/
function degov_paragraph_node_reference_preprocess(&$variables, $hook, &$info) {
// Add template suggestions and libraries implemented in this module.
Common::addThemeSuggestions($variables, $hook, $info, [
'module_name' => 'degov_paragraph_node_reference',
'entity_type' => 'paragraph',
'entity_bundles' => ['node_reference'],
'entity_view_modes' => ['default', 'preview'],
]);
}
/**
* Implements hook_modules_installed().
* @param $modules
*/
function degov_paragraph_node_reference_modules_installed($modules) {
if (in_array('degov_paragraph_node_reference', $modules)) {
// Set target bundles.
_degov_node_reference_bundle_list();
}
}
/**
* Update field reference target bundles.
*/
function _degov_node_reference_bundle_list() {
$enabled_bundles = [];
$node_types = NodeType::loadMultiple();
/** @var \Drupal\node\NodeTypeInterface $node_type */
foreach ($node_types as $node_type) {
$enabled_bundles[$node_type->id()] = $node_type->id();
}
if (!empty($enabled_bundles)) {
// Load the configuration for node_reference field storage.
$config = \Drupal::configFactory()
->getEditable('field.field.paragraph.node_reference.field_node_reference_nodes');
$settings = $config->get('settings');
$settings['handler_settings']['target_bundles'] = $enabled_bundles;
$config->set('settings', $settings);
$config->save(TRUE);
} else {
drupal_set_message(t('There are no content types available'), 'warning');
}
}
/**
* Implements hook_field_widget_form_alter().
*/
function degov_paragraph_node_reference_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
/** @var \Drupal\Core\Field\WidgetBase $widget */
$widget = $context['widget'];
// Only allow view modes whose machine names begin with "teaser".
if ($widget->getPluginId() === 'entity_reference_paragraphs' && !empty($element['subform']['field_node_reference_viewmode'])) {
$enabled_view_modes = \Drupal::config('degov_paragraph_node_reference.settings')
->get('enabled_view_modes');
$element['subform']['field_node_reference_viewmode']['widget']['#options'] = array_filter($element['subform']['field_node_reference_viewmode']['widget']['#options'], function ($key) use ($enabled_view_modes) {
return isset($enabled_view_modes[$key]) && $enabled_view_modes[$key] === $key;
}, ARRAY_FILTER_USE_KEY);
}
}
