commerce-8.x-2.8/commerce.module
commerce.module
<?php /** * @file * Defines common functionality for all Commerce modules. */ use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; /** * Implements hook_toolbar_alter(). */ function commerce_toolbar_alter(&$items) { $items['administration']['#attached']['library'][] = 'commerce/toolbar'; } /** * Implements hook_field_widget_info_alter(). * * Exposes the commerce_plugin_item widgets for each of the field type's * derivatives, since core does not do it automatically. */ function commerce_field_widget_info_alter(array &$info) { foreach (['commerce_plugin_select', 'commerce_plugin_radios'] as $widget) { if (isset($info[$widget])) { $field_type_manager = \Drupal::service('plugin.manager.field.field_type'); foreach ($field_type_manager->getDefinitions() as $key => $definition) { if ($definition['id'] == 'commerce_plugin_item') { $info[$widget]['field_types'][] = $key; } } } } } /** * Implements hook_field_formatter_info_alter(). * * Exposes the commerce_plugin_item_default formatter for each of the field * type's derivatives, since core does not do it automatically. */ function commerce_field_formatter_info_alter(array &$info) { if (isset($info['commerce_plugin_item_default'])) { $field_type_manager = \Drupal::service('plugin.manager.field.field_type'); foreach ($field_type_manager->getDefinitions() as $key => $definition) { if ($definition['id'] == 'commerce_plugin_item') { $info['commerce_plugin_item_default']['field_types'][] = $key; } } } } /** * Implements hook_field_widget_form_alter(). * * Base fields have a description that's used for two very different purposes: * - To describe the field in the Views UI and other parts of the system. * - As user-facing help text shown on field widgets. * The text is rarely suitable for both, and in most cases feels redundant * as user-facing help text. Hence we remove it from that context, but only if * the definition didn't specify otherwise via our display_description setting. */ function commerce_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) { $field_definition = $context['items']->getFieldDefinition(); if (!($field_definition instanceof BaseFieldDefinition)) { // Not a base field. return; } if (strpos($field_definition->getTargetEntityTypeId(), 'commerce_') !== 0) { // Not a Commerce entity type. return; } if ($field_definition->getSetting('display_description')) { // The definition requested that the description stays untouched. return; } $element['#description'] = ''; // Many widgets are nested one level deeper. $children = Element::getVisibleChildren($element); if (count($children) == 1) { $child = reset($children); $element[$child]['#description'] = ''; } } /** * Gets the entity display for the given entity type and bundle. * * The entity display will be created if missing. * * @param string $entity_type * The entity type. * @param string $bundle * The bundle. * @param string $display_context * The display context ('view' or 'form'). * * @throws \InvalidArgumentException * Thrown when an invalid display context is provided. * * @return \Drupal\Core\Entity\Display\EntityDisplayInterface * The entity display. */ function commerce_get_entity_display($entity_type, $bundle, $display_context) { if (!in_array($display_context, ['view', 'form'])) { throw new \InvalidArgumentException(sprintf('Invalid display_context %s passed to _commerce_product_get_display().', $display_context)); } $storage = \Drupal::entityTypeManager()->getStorage('entity_' . $display_context . '_display'); $display = $storage->load($entity_type . '.' . $bundle . '.default'); if (!$display) { $display = $storage->create([ 'targetEntityType' => $entity_type, 'bundle' => $bundle, 'mode' => 'default', 'status' => TRUE, ]); } return $display; } /** * Helper for providing entity theme suggestions. * * @param string $entity_type_id * The entity type ID. * @param array $variables * An array of variables passed to the theme hook. * * @return array * An array of theme suggestions. */ function _commerce_entity_theme_suggestions($entity_type_id, array $variables) { $original = $variables['theme_hook_original']; $entity = $variables['elements']['#' . $entity_type_id]; $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); $suggestions = []; $suggestions[] = $original . '__' . $sanitized_view_mode; $suggestions[] = $original . '__' . $entity->bundle(); $suggestions[] = $original . '__' . $entity->bundle() . '__' . $sanitized_view_mode; $suggestions[] = $original . '__' . $entity->id(); $suggestions[] = $original . '__' . $entity->id() . '__' . $sanitized_view_mode; return $suggestions; }