commerce_conditions_plus-1.0.x-dev/commerce_conditions_plus.module

commerce_conditions_plus.module
<?php

/**
 * @file
 * Contains hooks for Commerce Conditions Plus.
 */

declare(strict_types=1);

use Drupal\commerce_conditions_plus\Entity\ShippingMethod;
use Drupal\commerce_conditions_plus\Entity\PaymentGateway;
use Drupal\commerce_conditions_plus\Plugin\Field\FieldWidget\ConditionsTable as ConditionsTableWidget;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_element_plugin_alter().
 */
function commerce_conditions_plus_element_plugin_alter(array &$definitions) {
  // @note cannot do this, as it breaks when embedded in promotion offers.
  // $definitions['commerce_conditions']['class'] =
  // ConditionsTableElement::class;
}

/**
 * Implements hook_field_widget_info_alter().
 */
function commerce_conditions_plus_field_widget_info_alter(array &$info) {
  $info['commerce_conditions']['class'] = ConditionsTableWidget::class;
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function commerce_conditions_plus_form_commerce_payment_gateway_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form['conditions']['#type'] = 'commerce_conditions_table';
  unset($form['conditionOperator']['#title_display']);
  $form['conditionOperator']['#title'] = 'Conditions table base logic';
  $form['conditionOperator']['#description'] = t('This sets the initial logic for the conditions table. Conditions that are nested under additional AND or OR operators will use the logic of their parent operator.');
  $form['conditionOperator']['#options']['AND'] = '<strong>AND</strong> (All conditions must pass)';
  $form['conditionOperator']['#options']['OR'] = '<strong>OR</strong> (Only one condition must pass)';

  $form['#after_build'][] = 'commerce_conditions_plus_adjust_conditions_weight';
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function commerce_conditions_plus_form_commerce_shipping_method_form_alter(&$form, FormStateInterface $form_state) {
  $form['condition_operator']['widget']['#title'] = 'Conditions table base logic';
  $form['condition_operator']['widget']['#description'] = t('This sets the initial logic for the conditions table. Conditions that are nested under additional AND or OR operators will use the logic of their parent operator.');
  $form['condition_operator']['widget']['#options']['AND'] = '<strong>AND</strong> (All conditions must pass)';
  $form['condition_operator']['widget']['#options']['OR'] = '<strong>OR</strong> (Only one condition must pass)';

  $form['#after_build'][] = 'commerce_conditions_plus_adjust_conditions_weight';
}

/**
 * Ensures condition operator is before conditions table.
 *
 * Swaps the #weight values between the two elements to prevent disrupting any
 * other form element weights.
 *
 * @param array $form
 *   The form.
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 *   The form state.
 *
 * @return array
 *   The form.
 */
function commerce_conditions_plus_adjust_conditions_weight(array $form, FormStateInterface $form_state) {
  $condition_operator_key = 'condition_operator';
  if (isset($form['conditionOperator'])) {
    $condition_operator_key = 'conditionOperator';
  }
  $conditions_weight = $form['conditions']['#weight'];
  $conditions_operator_weight = $form[$condition_operator_key]['#weight'];
  $form[$condition_operator_key]['#weight'] = $conditions_weight;
  $form['conditions']['#weight'] = $conditions_operator_weight;
  return $form;
}

/**
 * Implements hook_config_schema_info_alter().
 */
function commerce_conditions_plus_config_schema_info_alter(&$definitions) {
  $definitions['commerce_condition_configuration']['mapping'] = [
    'parent' => [
      'type' => 'string',
      'label' => 'Parent condition',
    ],
    'depth' => [
      'type' => 'integer',
      'label' => 'Depth',
    ],
    'weight' => [
      'type' => 'integer',
      'label' => 'Weight',
    ],
    // We name this `negate_condition` to handle plugins which also have
    // their own negate functionality to prevent conflicts.
    'negate_condition' => [
      'type' => 'boolean',
      'label' => 'Negate',
    ],
  ];
}

/**
 * Implements hook_entity_type_alter().
 */
function commerce_conditions_plus_entity_type_alter(array &$entity_types) {
  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
  if (isset($entity_types['commerce_shipping_method'])) {
    $entity_types['commerce_shipping_method']->setClass(ShippingMethod::class);
  }
  if (isset($entity_types['commerce_payment_gateway'])) {
    $entity_types['commerce_payment_gateway']->setClass(PaymentGateway::class);
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc