care-8.x-1.x-dev/care_fields/includes/memberships.inc

care_fields/includes/memberships.inc
<?php

/**
 * @file
 * Functions to define a CARE memberships field.
 */

/**
 * Form definition.
 *
 * Display read-only memberships data in Edit forms.
 */
function _care_fields_memberships_form(&$element, $form_state, $field, $instance, $items, $delta) {
  if (count($items)) {
    $element['membership'] = [
      '#title' => t('Membership details'),
      '#type' => 'fieldset',
    ];
    $element['membership']['contact_number_ro'] = [
      '#title' => 'Membership number',
      '#type' => 'item',
      '#markup' => $items[$delta]['membership_number'],
    ];
    // Convert membership code into description.
    $membership_terms = taxonomy_get_term_by_name($items[$delta]['membership_type'], 'care_taxonomy_membership_code');
    $membership_term = array_shift($membership_terms);
    if ($membership_term) {
      $type = $membership_term->description;
    }
    else {
      $type = $items[$delta]['membership_type'];
    }
    $element['membership']['membership_type_ro'] = [
      '#title' => 'Membership type',
      '#type' => 'item',
      '#markup' => check_plain($type),
    ];
    $date = new DateTime($items[$delta]['renewal_date']);
    $element['membership']['renewal_date_ro'] = [
      '#title' => 'Renewal due',
      '#type' => 'item',
      '#markup' => format_date($date->getTimestamp(), 'custom', 'j M Y'),
    ];
    $element['membership_type'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['membership_type'],
    ];
    $element['renewal_date'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['renewal_date'],
    ];
    $element['membership_number'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['membership_number'],
    ];
    $element['payment_plan_number'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['payment_plan_number'],
    ];
    $element['payment_method'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['payment_method'],
    ];
    $element['balance'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['balance'],
    ];
    $element['refreshed'] = [
      '#type' => 'value',
      '#value' => $items[$delta]['refreshed'],
    ];
  }
  else {
    $element['no_memberships'] = [
      '#markup' => '<p>You do not have a current membership of Cycling UK, join today to enjoy the benefits of membership and to support our campaigning work</p>',
    ];
  }
}

/**
 * Field-is-empty test.
 */
function _care_fields_memberships_field_is_empty($item, $field) {
  return $item['membership_number'] == '';
}

/**
 * Field display formatter.
 */
function _care_memberships_formatter($item, $entity, $field) {
  $user_wrapper = entity_metadata_wrapper('user', $entity);
  if ($user_wrapper) {
    // Get user's contact number.
    $field_name = variable_get('care_user_membership_number_field', '');
    if ($field_name) {
      $contact_number = $user_wrapper->{$field_name}->number->value();
    }
  }
  else {
    $contact_number = 0;
  }
  $date = DateTime::createFromFormat('Y-m-d H:i:s', $item['renewal_date']);
  $type = $item['membership_type'];
  $membership_terms = taxonomy_get_term_by_name($type, 'care_taxonomy_membership_code');
  $membership_term = array_shift($membership_terms);
  if ($membership_term) {
    $type = $membership_term->description;
  }
  $renewal = format_date($date->getTimestamp(), 'custom', 'j M Y');
  $markup = t("%type, renewal due: %renewal", [
    '%type' => $type,
    '%renewal' => $renewal,
  ]);

  // Renewal link, if needed.
  if ($item['balance'] > 0) {
    if ($item['payment_method'] == 'DD') {
      $markup .= ' - ' . t('Payment by Direct Debit.');
    }
    elseif ($item['membership_type'] != 'Q') {
      if ($contact_number) {
        $markup .= '<div>' . l(t('Renew Now'), 'https://shop.cyclinguk.org/membership/renew/' . $contact_number . '/' . $item['membership_number'], array('attributes' => array('class' => array('btn btn-purple form-submit btn-margin')))) . '</div>';
      }
    }
  }

  // Allow other modules (e.g. care_user) to modify the membership display.
  drupal_alter('care_fields_membership_display', $markup, $item, $contact_number);

  return $markup;
}

/**
 * Field display formatter.
 */
function _care_memberships_simple_formatter($item) {
  $date = DateTime::createFromFormat('Y-m-d H:i:s', $item['renewal_date']);
  $type = $item['membership_type'];
  $membership_terms = taxonomy_get_term_by_name($type, 'care_taxonomy_membership_code');
  $membership_term = array_shift($membership_terms);
  if ($membership_term) {
    $type = $membership_term->description;
  }
  $renewal = format_date($date->getTimestamp(), 'custom', 'j M Y');
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'commerce_product');
  $query->entityCondition('bundle', 'membership');
  $query->fieldCondition('field_membership_code', 'value', $type, '=');
  $result = $query->execute();
  if ($result) {
    $product_data = reset($result['commerce_product']);
    $product = commerce_product_load($product_data->product_id);
    $type = $product->title;
  }
  $markup = t("%type, renewal due %renewal", [
    '%type' => $type,
    '%renewal' => $renewal,
  ]);
  return $markup;
}

/**
 * Database schema.
 */
function _care_fields_care_memberships_schema() {
  $schema['columns']['membership_type'] = [
    'type' => 'varchar',
    'length' => 50,
    'default' => '',
    'not null' => TRUE,
  ];
  $schema['columns']['renewal_date'] = [
    'type' => 'datetime',
    'mysql_type' => 'datetime',
    'pgsql_type' => 'timestamp without time zone',
    'sqlite_type' => 'varchar',
    'sqlsrv_type' => 'smalldatetime',
    'not null' => TRUE,
  ];
  $schema['columns']['membership_number'] = [
    'type' => 'int',
    'size' => 'normal',
    'default' => 0,
    'not null' => FALSE,
  ];
  $schema['columns']['payment_plan_number'] = [
    'type' => 'int',
    'size' => 'normal',
    'default' => 0,
    'not null' => FALSE,
  ];
  $schema['columns']['balance'] = [
    'type' => 'numeric',
    'precision' => 10,
    'scale' => 2,
    'default' => 0,
    'not null' => FALSE,
  ];
  $schema['columns']['payment_method'] = [
    'type' => 'varchar',
    'length' => 10,
    'default' => '',
    'not null' => FALSE,
  ];
  $schema['columns']['refreshed'] = [
    'type' => 'datetime',
    'mysql_type' => 'datetime',
    'pgsql_type' => 'timestamp without time zone',
    'sqlite_type' => 'varchar',
    'sqlsrv_type' => 'smalldatetime',
    'not null' => TRUE,
  ];
  return $schema;
}

/**
 * Entity integration.
 */
function care_fields_memberships_property_info_callback(&$info, $entity_type, $field, $instance, $field_type) {
  $property = &$info[$entity_type]['bundles'][$instance['bundle']]['properties'][$field['field_name']];
  $property['getter callback'] = 'entity_metadata_field_verbatim_get';
  $property['setter callback'] = 'entity_metadata_field_verbatim_set';
  unset($property['query callback']);
  $property['property info']['membership_type'] = [
    'type' => 'text',
    'label' => t('Membership type'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
  $property['property info']['renewal_date'] = [
    'type' => 'text',
    'label' => t('Renewal date'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
  $property['property info']['membership_number'] = [
    'type' => 'text',
    'label' => t('Membership number'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
  $property['property info']['payment_plan_number'] = [
    'type' => 'text',
    'label' => t('Payment Plan number'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
  $property['property info']['balance'] = [
    'type' => 'text',
    'label' => t('Balance'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
  $property['property info']['payment_method'] = [
    'type' => 'text',
    'label' => t('Payment Method'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
  $property['property info']['refreshed'] = [
    'type' => 'text',
    'label' => t('Refreshed date and time'),
    'setter callback' => 'entity_property_verbatim_set',
  ];
}

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

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