monster_menus-9.0.x-dev/modules/mm_fields/mm_fields.module
modules/mm_fields/mm_fields.module
<?php
/**
* @file
* Field functions for Monster Menus
*/
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\mm_fields\Plugin\Field\FieldWidget\MMFieldWidgetBase;
/**
* Implements hook_form_FORM_ID_alter() for 'field_storage_config_edit_form'.
*
* Hide the cardinality form field, since this is handled differently in our
* widgets.
*/
function mm_fields_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state) {
// Verify that this is one of our widgets. If so, hide the cardinality fields.
// I wish there was an easier way of doing this!
if (isset($form['cardinality_container']) && in_array(\Drupal::service('plugin.manager.field.widget')->getInstance(['field_definition' => $form_state->getStorage()['field_config']->getItemDefinition()->getFieldDefinition()])->getPluginId(), MMFieldWidgetBase::widgetTypes())) {
$form['cardinality_container']['cardinality']['#default_value'] = FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED;
$form['cardinality_container']['#access'] = FALSE;
}
}
/**
* Implements hook_entity_bundle_field_info_alter().
*
* Look for instances of this module's fields and force the cardinality to
* "unlimited".
*/
function mm_fields_entity_bundle_field_info_alter(&$fields) {
/** @var FieldConfig $field_config */
foreach ($fields as $field_name => $field_config) {
$storage = $field_config->getFieldStorageDefinition();
if (in_array($storage->getType(), MMFieldWidgetBase::widgetTypes()) && $storage->getCardinality() != FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
$storage->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
$storage->save();
}
}
}
