care-8.x-1.x-dev/care_user/care_user.module

care_user/care_user.module
<?php

/**
 * @file
 * Main module file.
 */

/**
 * Implements hook_permission().
 */
function care_user_permission() {
  return [
    'administer care user integration' => [
      'title' => t('Administer CARE user integration'),
      'description' => t('Configure CARE user integration settings.'),
      'restrict access' => TRUE,
    ],
    'request new membership cards for anyone' => [
      'title' => t('Request new membership cards for anyone'),
      'description' => t('Normally users can only request cards for themselves.'),
      'restrict access' => TRUE,
    ],
  ];
}

/**
 * Implements hook_field_storage_pre_update().
 *
 * Prevent field data being saved for UID=0.
 */
function care_user_field_storage_pre_update($entity_type, $entity, &$skip_fields) {
  if ($entity_type == 'user' && $entity->uid == 0) {
    $fields = field_info_instances('user');
    foreach ($fields['user'] as $field_name => $field) {
      $skip_fields[$field['field_id']] = $field_name;
    }
    watchdog('care_user', 'Field update blocked for UID=0. Skip_fields: <pre>%data</pre>', ['%data' => print_r($skip_fields, TRUE)]);
  }
}

/**
 * Implements hook_menu().
 */
function care_user_menu() {
  $items = [];
  $items['admin/config/people/accounts/care'] = [
    'title' => 'CARE user integration',
    'description' => 'Configuration of CARE user integration.',
    'page callback' => 'drupal_get_form',
    'page arguments' => [
      'care_user_admin_settings_form',
    ],
    'file' => 'admin/settings_form.inc',
    'access arguments' => [
      'administer care user integration',
    ],
    'type' => MENU_NORMAL_ITEM,
  ];
  $items['user/%user/care_matches'] = [
    'title' => 'CARE Matching Contacts',
    'page callback' => 'care_user_find_care_matches',
    'page arguments' => [
      1,
    ],
    'access arguments' => [
      'administer care user integration',
    ],
    'type' => MENU_LOCAL_TASK,
  ];
  return $items;
}

/**
 * Implements hook_care_fields_membership_display_alter().
 */
function care_user_care_fields_membership_display_alter(&$markup, &$item, &$contact_number) {
  if ($contact_number) {
    $membership_number = $item['membership_number'];
    $markup .= drupal_render(drupal_get_form('care_user_new_card_form', $membership_number));
  }
}

/**
 * Form to request new membership card.
 */
function care_user_new_card_form($form, &$form_state, $membership_number) {
  $form['membership_number'] = [
    '#type' => 'value',
    '#value' => $membership_number,
  ];
  $form['button'] = [
    '#type' => 'submit',
    '#value' => t('Request new membership card'),
    '#attributes' => array('class' => array('btn-margin')),
  ];
  return $form;
}

/**
 * Page callback to request new membership card.
 */
function care_user_new_card_form_submit($form, &$form_state) {
  $data = [
    'MembershipNumber' => $form_state['values']['membership_number'],
    'ReprintMembershipCard' => 'Y',
  ];
  $care_xml_data = care_call_method('UpdateMember', $data);
  if (isset($care_xml_data->ErrorMessage)) {
    watchdog('care_user', 'Membership card request failed: @error', [
      '@error' => (string) $care_xml_data->ErrorMessage,
    ], WATCHDOG_ERROR);
  }
  else {
    watchdog('care_user', 'Request for new membership card for %memnum.', ['%memnum' => $form_state['values']['membership_number']]);
  }
  drupal_set_message(t('Your request for a new membership card has been recorded.'));
}

/**
 * Access callback for requesting new membership card.
 */
function care_user_new_card_permission($contact_number) {
  if (user_access('request new membership cards for anyone')) {
    return TRUE;
  }
  global $user;
  $user_wrapper = entity_metadata_wrapper('user', $user);
  $field_name = variable_get('care_user_membership_number_field', '');
  return ($user_wrapper->{$field_name}->number->value() == $contact_number);
}

/**
 * Find matching accounts in CARE for Drupal account.
 *
 * @param array|object $account
 *   The Drupal account to find matches for.
 *
 * @return string
 *   HTML table list of matches.
 */
function care_user_find_care_matches($account) {
  $care_user = new CareUnknownUser($account);
  $email = $care_user->getEmailField()[0]->email->value();
  $care_user->setTestEmail($email);
  $address_field = $care_user->getAddressField()[0];
  $care_user->setTestAddressField($address_field);
  $matches = $care_user->findMatchingContacts();
  $headers = [
    'ContactNumber',
    'Email',
    'Title',
    'Initial',
    'Forenames',
    'Surname',
    'Address',
    'Town',
    'Postcode',
  ];
  $rows = [];
  foreach ($matches as $match) {
    if ($match['ContactNumber'] == $care_user->getMembershipNumber()) {
      $match['Matches'][] = 'ContactNumber';
    }
    $row = [];
    foreach ($headers as $header) {
      $cell = [];
      $cell['data'] = $match[$header];
      if (in_array($header, $match['Matches'])) {
        $cell['style'] = 'background-color: #ccffcc';
      }
      if (in_array($header, $match['Mismatches'])) {
        $cell['style'] = 'background-color: #ffcccc';
      }
      $row[] = $cell;
    }
    $rows[] = $row;
  }
  return theme('table', [
    'header' => $headers,
    'rows' => $rows,
  ]);
}

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

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