You are here

public static function Utility::createFields in Basic cart 8.3

Same name and namespace in other branches
  1. 8.6 src/Utility.php \Drupal\basic_cart\Utility::createFields()
  2. 8 src/Utility.php \Drupal\basic_cart\Utility::createFields()
  3. 8.0 src/Utility.php \Drupal\basic_cart\Utility::createFields()
  4. 8.2 src/Utility.php \Drupal\basic_cart\Utility::createFields()
  5. 8.4 src/Utility.php \Drupal\basic_cart\Utility::createFields()
  6. 8.5 src/Utility.php \Drupal\basic_cart\Utility::createFields()

Create Fields for content type basic cart enabled.

Parameters

string $type: Type fields to be created.

2 calls to Utility::createFields()
CartSettingsForm::submitForm in src/Form/CartSettingsForm.php
Form submission handler.
Utility::orderConnectFields in src/Utility.php
Create Order connect Fields.

File

src/Utility.php, line 225

Class

Utility
Utilty functions for basic cart.

Namespace

Drupal\basic_cart

Code

public static function createFields($type = NULL) {
  $fields = $type == self::FIELD_ORDERCONNECT ? self::getFieldsConfig(self::FIELD_ORDERCONNECT) : self::getFieldsConfig();
  $view_modes = \Drupal::entityManager()
    ->getViewModes('node');
  $storage = \Drupal::entityTypeManager()
    ->getStorage('entity_view_display');
  foreach ($fields->fields as $field_name => $config) {
    $field_storage = FieldStorageConfig::loadByName($config['entity_type'], $field_name);
    if (empty($field_storage)) {
      FieldStorageConfig::create(array(
        'field_name' => $field_name,
        'entity_type' => $config['entity_type'],
        'type' => $config['type'],
        'cardinality' => $config['cardinality'],
      ))
        ->save();
    }
  }
  foreach ($fields->bundle_types as $bundle) {
    $view_display = $storage
      ->load($config['entity_type'] . '.' . $bundle . '.basic_cart_order');
    if ($view_display == NULL) {
      $storage
        ->create([
        'targetEntityType' => $config['entity_type'],
        'bundle' => $bundle,
        'mode' => 'basic_cart_order',
        'status' => TRUE,
      ])
        ->save();
    }
    foreach ($fields->fields as $field_name => $config) {
      $config_array = array(
        'field_name' => $field_name,
        'entity_type' => $config['entity_type'],
        'bundle' => $bundle,
        'label' => $config['label'],
        'required' => $config['required'],
        'cardinality' => $config['cardinality'],
      );
      if (isset($config['settings'])) {
        $config_array['settings'] = $config['settings'];
      }
      $field = FieldConfig::loadByName($config['entity_type'], $bundle, $field_name);
      if (empty($field) && $bundle !== "" && !empty($bundle)) {
        FieldConfig::create($config_array)
          ->save();
      }
      if ($bundle !== "" && !empty($bundle)) {
        if (!empty($field)) {
          $field
            ->setLabel($config['label'])
            ->save();
          $field
            ->setRequired($config['required'])
            ->save();
        }
        if ($config['widget']) {
          entity_get_form_display($config['entity_type'], $bundle, 'default')
            ->setComponent($field_name, $config['widget'])
            ->save();
        }
        if ($config['formatter']) {
          foreach ($config['formatter'] as $view => $formatter) {
            if (isset($view_modes[$view]) || $view == "default") {
              $formatter_view = entity_get_display($config['entity_type'], $bundle, $view);
              if ($view != 'basic_cart_order') {
                $formatter_view
                  ->setComponent($field_name, !is_array($formatter) ? $config['formatter']['default'] : $config['formatter']['default']);
              }
              elseif ($view == 'basic_cart_order' && $field_name == "add_to_cart_price") {
                $formatter_view
                  ->setComponent($field_name, !is_array($formatter) ? $config['formatter']['default'] : $config['formatter']['default']);
              }
              elseif ($view == 'basic_cart_order' && $field_name != "add_to_cart_price") {
                $formatter_view
                  ->removeComponent($field_name);
              }
              $formatter_view
                ->save();
            }
          }
        }
      }
    }

    // Display mode basic_cart_order add fields to title and
    // price feild in formatter and remove other fields.
    $view_display = $storage
      ->load($config['entity_type'] . '.' . $bundle . '.basic_cart_order');
    if ($view_display != NULL) {
      foreach (\Drupal::entityManager()
        ->getFieldDefinitions($config['entity_type'], $bundle) as $field_name => $field_definition) {
        if (!empty($field_definition
          ->getTargetBundle())) {
          if (!in_array($field_definition
            ->getName(), [
            'add_to_cart_price',
          ])) {
            $view_display
              ->removeComponent($field_definition
              ->getName());
          }
          else {
            $view_display
              ->setComponent($field_definition
              ->getName(), [
              'type' => 'number_decimal',
            ]);
          }
        }
      }
      if ($view_display != NULL) {
        $view_display
          ->removeComponent('links');
        $view_display
          ->save();
      }
    }
  }
}