You are here

function commerce_coupon_install_helper in Commerce Coupon 7.2

Field setup.

4 calls to commerce_coupon_install_helper()
commerce_coupon_flush_caches in ./commerce_coupon.module
Implements hook_flush_caches().
commerce_coupon_install in ./commerce_coupon.install
Implements hook_install().
commerce_coupon_update_7200 in ./commerce_coupon.install
Upgrade a Coupons 1.x site to 2.x. MAKE A BACKUP BEFORE DOING THIS.
commerce_coupon_update_7203 in ./commerce_coupon.install
Add new configuration field to support different coupon handling strategies.

File

./commerce_coupon.install, line 11
Installation hooks and procedures for Commerce Coupon.

Code

function commerce_coupon_install_helper() {
  field_info_cache_clear();
  $fields = field_info_fields();
  $instances = field_info_instances();
  $field_types = field_info_field_types();

  /*
   * Discount coupon reference field
   */
  if (empty($fields['commerce_discount_reference']) && isset($field_types['entityreference'])) {

    // Create entity reference field.
    $field = array(
      'entity_types' => array(
        'commerce_coupon',
      ),
      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
      'settings' => array(
        'handler' => 'base',
        'target_type' => 'commerce_discount',
        'handler_setting' => array(),
      ),
      'field_name' => 'commerce_discount_reference',
      'type' => 'entityreference',
      'locked' => TRUE,
    );
    field_create_field($field);
  }

  // Add discount reference to discount coupon.
  if (empty($instances['commerce_coupon']['discount_coupon']['commerce_discount_reference'])) {
    $instance = array(
      'field_name' => 'commerce_discount_reference',
      'entity_type' => 'commerce_coupon',
      'bundle' => 'discount_coupon',
      'label' => t('Discount reference'),
      'required' => TRUE,
      'widget' => array(
        'type' => 'entityreference_autocomplete',
        'module' => 'entityreference',
      ),
    );
    field_create_instance($instance);
  }

  /*
   * Order coupon reference field
   */
  if (empty($fields['commerce_coupons']) && isset($field_types['entityreference'])) {

    // Create entity reference field.
    $field = array(
      'entity_types' => array(
        'commerce_order',
      ),
      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
      'settings' => array(
        'handler' => 'base',
        'target_type' => 'commerce_coupon',
      ),
      'field_name' => 'commerce_coupons',
      'type' => 'entityreference',
      'locked' => TRUE,
    );
    field_create_field($field);
  }

  // Add coupons fields to all order bundles.
  $order_entity_info = entity_get_info('commerce_order');
  foreach (array_keys($order_entity_info['bundles']) as $bundle) {
    if (empty($instances['commerce_order'][$bundle]['commerce_coupons'])) {
      $instance = array(
        'field_name' => 'commerce_coupons',
        'entity_type' => 'commerce_order',
        'bundle' => $bundle,
        'label' => t('Coupons'),
        'required' => FALSE,
        'widget' => array(
          'type' => 'entityreference_autocomplete',
          'module' => 'entityreference',
        ),
      );
      field_create_instance($instance);
    }
  }

  // Discount coupon handling strategy.
  if (empty($fields['commerce_coupon_strategy'])) {

    // Create coupon handling strategy field.
    $field = array(
      'type' => 'list_text',
      'field_name' => 'commerce_coupon_strategy',
      'locked' => TRUE,
      'settings' => array(
        'allowed_values' => array(),
        'allowed_values_function' => 'commerce_coupon_handling_strategies',
      ),
    );
    field_create_field($field);
  }
  foreach (commerce_discount_types() as $type => $value) {
    if (empty($instances['commerce_discount'][$type]['commerce_coupon_strategy'])) {
      $instance = array(
        'field_name' => 'commerce_coupon_strategy',
        'bundle' => $type,
        'entity_type' => 'commerce_discount',
        'label' => t('Coupon strategy'),
        'description' => t('Using "multi" strategy might cause problems with some offer types.'),
        'required' => TRUE,
        'widget' => array(
          'weight' => -10,
          'type' => 'options_buttons',
          'module' => 'options',
        ),
        'default_value' => array(
          0 => array(
            'value' => 'once',
          ),
        ),
      );
      field_create_instance($instance);
    }
  }
}