merci-8.x-2.x-dev/modules/merci_staff/merci_staff.module

modules/merci_staff/merci_staff.module
<?php

/**
 * @file
 * merci_staff functions
 */

/**
 * @todo Please document this function.
 * @see http://drupal.org/node/1354
 */
function merci_staff_menu() {
  $items = array();

  if (module_exists('civicrm')) {
    $items['user/autocompletecivi'] = array(
      'title' => 'User autocomplete',
      'page callback' => 'merci_staff_autocomplete',
      'access callback' => 'user_access',
      'access arguments' => array('access user profiles'),
      'type' => MENU_CALLBACK,
    );
  }

  return $items;
}

/**
 * @todo Please document this function.
 * @see http://drupal.org/node/1354
 */
function merci_staff_load_user($post = NULL) {
  static $admin_user;
  global $user;
  if (empty($admin_user)) {
    $admin_user = $user;
  }
  if ($post and empty($post['override']) and ($newuser = user_load_by_name($post['name']))) {
    $user = $newuser;
  }
  else {
    $user = $admin_user;
  }
}

//function merci_staff_after_build($form, &$form_state) {
function merci_staff_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  return;

  if($form_id != 'merci_reservation_node_form') {
    return;
  }

  if (!user_access('manage reservations')) {
    return;
  }

  if (isset($form_state['values'])) {
    $node = (array)$form_state['values'] + (array)$form['#node'];
  } else {
    $node = $form['#node'];
  }
  $node = (object) $node;
  // Override the validation function so we can validate as the submitted user.
  $form['#merci_staff_validated'][] = 'merci_reservation_node_validate';
  $form['#validate'][] = 'merci_staff_reservation_node_validate';

  foreach ($form['#merci_staff_validated'] as $function) {
    $key = array_search($function, $form['#validate']);
    if (is_numeric($key)) {
      unset($form['#validate'][$key]);
    }
  }

  // Recreate the groups and choices based on the submitted name.
  merci_staff_load_user((array) $node);

  // Add the current choices to the form.
  $reset = true;
  foreach (element_children($form['choice_wrapper']['merci_reservation_items']) as $delta) {
    if (is_numeric($delta)) {
      continue;
    }
    $delta = substr($delta, 7);
    $default = isset($node->merci_reservation_items["choice_" . $delta]['merci_item_nid']) ? $node->merci_reservation_items["choice_" . $delta]['merci_item_nid'] : '';
    $form['choice_wrapper']['merci_reservation_items']["choice_" . $delta]['merci_item_nid'] =
      _merci_choice_form($node, $form_state, $delta, $default, $reset);
    $reset = false;
  }
  merci_staff_load_user();
  array_push($form['field_merci_date']['field_merci_date_button']['#limit_validation_errors'], array('name'), array('override'));
  array_push($form['choice_wrapper']['merci_more']['#limit_validation_errors'], array('name'), array('override'));
  return $form;
}
/**
 * Implementation of hook_form_alter
 **/

/**
 * @todo Please document this function.
 * @see http://drupal.org/node/1354
 */
function merci_staff_form_merci_reservation_node_form_alter(&$form, &$form_state) {
  if (user_access('manage reservations')) {

    if (isset($form_state['node'])) {
      $node = (array) $form_state['node'] + (array) $form['#node'];
    }
    else {
      $node = $form['#node'];
    }
    $node = (object) $node;
    // Move the author field and set autocomplete and ahah handlers.
    // We do this here and not in after_build because the ahah hash is handled before after_build is called.
    $form['name'] = $form['author']['name'];
    $form['name']['#title'] = 'Reserve for';
    $form['name']['#weight'] = -99;
    if (module_exists('civicrm')) {
      $form['name']['#autocomplete_path'] = 'user/autocompletecivi';
    }
    $form['name']['#ajax'] = array(
      //'path' => 'mercistaff/updatename',
      //'wrapper' => 'edit-og-groups-wrapper',
      'callback' => 'merci_staff_update_name',
      'wrapper' => 'merci-staff-edit-form-wrapper',
      'method' => 'replace',
      'effect' => 'fade',
    );

    unset($form['author']['name']);

    //create override checkbox
    $form['override'] = array(
      //'#type' => 'optionwidgets_onoff',
      '#type' => 'checkbox',
      '#title' => 'Override Validation',
      '#default_value' => isset($node->override) ? $node->override : FALSE,
      '#weight' => -97,
      '#columns' => 0,
    );
    $form['#prefix'] = '<div id="merci-staff-edit-form-wrapper">';
    $form['#suffix'] = '</div>';
  }
}

/**
 * @todo Please document this function.
 * @see http://drupal.org/node/1354
 */
function merci_staff_reservation_node_validate($form, &$form_state) {
  merci_staff_load_user($form_state['values']);
  foreach ($form['#merci_staff_validated'] as $function) {
    $function($form, $form_state);
  }
  merci_staff_load_user();
}
/**
 ** Menu callback; Retrieve a JSON object containing autocomplete suggestions for existing users.
 **/
function merci_staff_autocomplete($string = '') {
  $matches = array();
  if ($string) {

    if ( ! civicrm_initialize( ) ) {
      return;
    }
    $fields = field_info_fields();
    $field = $fields[$field_name];

    $references = _merci_staff_potential_references($field, $string);
    foreach ($references as $id => $row) {
      // Add a class wrapper for a few required CSS overrides.
      $matches["{$row['title']}"] = '<div class="reference-autocomplete">' . $row['rendered'] . '</div>';
    }
  }
  drupal_json_output($matches);
}

/**
 * Menu callback for AHAH additions.
 */
function merci_staff_update_name($form, $form_state) {
  return $form;
}

function _merci_staff_potential_references($field, $string = '', $exact_string = FALSE) {
  static $results = array();

  $references = _merci_staff_potential_references_standard($field, $string, $exact_string);

  // Store the results.
  $results[$field['field_name']][$string][$exact_string] = $references;

  return $results[$field['field_name']][$string][$exact_string];
}

/**
 * Helper function for _civicrm_cck_potential_references():
 * referenceable nodes defined by content types.
 */
function _merci_staff_potential_references_standard( $field, $string = '', $exact_string = FALSE, $limit = '10' ) {
  
  $args = $whereClause = $contactTypes = $contactSubTypes = array();

  if ( ! civicrm_initialize( ) ) {
    return;
  }
  global $civicrm_root;
  
  require_once $civicrm_root . '/CRM/Contact/BAO/ContactType.php';
  require_once $civicrm_root . '/CRM/Core/BAO/UFMatch.php';
  $basicTypes = CRM_Contact_BAO_ContactType::basicTypePairs( );

  foreach ( $basicTypes as $name => $label ) {
    if ( is_array( $field[$name] ) ) {
      $contactNames = array_filter( $field[$name] );
      if ( !empty( $contactNames ) ) {
        if ( in_array( $name, $contactNames ) ) {
          $contactTypes[] = $name;
        }
        else {
          $contactSubTypes = array_merge( $contactSubTypes, array_keys( $contactNames ) );
        }
      }
    }
  }

  if ( !empty( $contactTypes ) ) {
    $contactTypes  = implode( "','", $contactTypes );
    $whereClause[] = "contact_type IN ( '{$contactTypes}' )";
  }

  if ( !empty( $contactSubTypes ) ) {
    $contactSubTypes = implode( "','", $contactSubTypes );
    $whereClause[]   = "contact_sub_type IN ( '{$contactSubTypes}' )";
  }

  $whereClause = empty( $whereClause ) ? '' : '(' . implode( ' OR ', $whereClause ) . ') AND';
  $related_clause = "";

  if (isset($string)) {
    if ($exact_string) {
      $string_clause = " AND display_name = %1";
      $args[] = $string;
    }
    else {
      $string_clause = " AND display_name LIKE %1";
      $args[] = "%%" . $string . "%";
    }
  }

  $q = "
    SELECT civicrm_contact.id, display_name
    FROM civicrm_contact
    JOIN civicrm_uf_match ON civicrm_contact.id = civicrm_uf_match.contact_id
    WHERE $whereClause
    display_name IS NOT NULL
    AND display_name NOT LIKE ''
    AND display_name NOT LIKE '<Last>%%'
    AND display_name NOT LIKE '%@%%'
    AND display_name NOT LIKE '--%%'
    AND display_name NOT LIKE '- -%%'
    AND display_name NOT LIKE ',%%'
    AND display_name NOT LIKE '..%%'
    " . $string_clause . " LIMIT $limit";
  $params = array(1 => array($args[0], "String"));
  $dao = CRM_Core_DAO::executeQuery( $q, $params );

  $references = array();
  while ($dao->fetch()) {
    $uid = CRM_Core_BAO_UFMatch::getUFId($dao->id);
    $username = db_query("SELECT name FROM {users} WHERE uid = :uid", array(':uid' => $uid))->fetchField();
    $references[$dao->id] = array(
      'title' => $username,
      'rendered' => $dao->display_name,
    );
  }

  return $references;
}

function merci_staff_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) {
  return;
  if ($context['instance']['bundle'] == 'merci_reservation' and $context['instance']['field_name'] == 'group_audience') {
    $form = $context['form'];
    $field = $context['field'];
    $instance = $context['instance'];
    $langcode = $context['langcode'];
    $items = $context['items'];
    $delta = $context['delta'];
    if (!user_access('manage reservations')) {
      return;
    }

    if (isset($form_state['values'])) {
      $node = (array)$form_state['values'] + (array)$form['#node'];
    } else {
      $node = $form['#node'];
    }
    $node = (object) $node;
    drupal_static_reset('og_field_audience_options');
    unset($element['#input']);
    unset($element['#type']); 
    unset($element['#options']); 
    unset($element['#default_value']);
    unset($element['#attributes']);
    unset($element['#disabled']);
    // Re-use options widget element validation, to correctly transform
    // submitted values from field => delta to delta => field.
    // @see options_field_widget().
    unset($element['#value_key']);
    unset($element['#element_validate']);
    unset($element['#properties']);
    // Add OG specific context.
    unset($element['#opt_group']);
    unset($element['#audience']);
    unset($element['#hidden_selected_gids']);

    $base = $element;
    // Recreate the groups and choices based on the submitted name.
    merci_staff_load_user((array) $node);
    global $user;

    $return = og_field_widget_form($form, $form_state, $field, $instance, $langcode, $items, $delta, $base);
    merci_staff_load_user();
    $element = $return;
  }
}

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

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