You are here

function LdapUserConf::drupalUserToLdapEntry in Lightweight Directory Access Protocol (LDAP) 8.2

Same name and namespace in other branches
  1. 7.2 ldap_user/LdapUserConf.class.php \LdapUserConf::drupalUserToLdapEntry()

populate ldap entry array for provisioning

Parameters

array $account drupal account:

object $ldap_server:

array $ldap_user ldap entry of user, returned by reference:

array $params with the following key values:: 'ldap_context' => 'module' => module calling function, e.g. 'ldap_user' 'function' => function calling function, e.g. 'provisionLdapEntry' 'include_count' => should 'count' array key be included 'direction' => LDAP_USER_PROV_DIRECTION_TO_LDAP_ENTRY || LDAP_USER_PROV_DIRECTION_TO_DRUPAL_USER

Return value

array(ldap entry, $result) in ldap extension array format.!THIS IS NOT THE ACTUAL LDAP ENTRY

3 calls to LdapUserConf::drupalUserToLdapEntry()
LdapUserConf::getProvisionRelatedLdapEntry in ldap_user/LdapUserConf.class.php
given a drupal account, find the related ldap entry.
LdapUserConf::provisionLdapEntry in ldap_user/LdapUserConf.class.php
given a drupal account, provision an ldap entry if none exists. if one exists do nothing
LdapUserConf::synchToLdapEntry in ldap_user/LdapUserConf.class.php
given a drupal account, synch to related ldap entry

File

ldap_user/LdapUserConf.class.php, line 914

Class

LdapUserConf

Code

function drupalUserToLdapEntry($account, $ldap_server, $params, $ldap_user_entry = NULL) {

  //debug('call to drupalUserToLdapEntry, account:'); //debug($account); //debug('ldap_server'); //debug($ldap_server);

  //debug('params'); //debug($params); //debug('ldap_user_entry');//debug($ldap_user_entry);
  $provision = isset($params['function']) && $params['function'] == 'provisionLdapEntry';
  $result = LDAP_USER_PROV_RESULT_NO_ERROR;
  if (!$ldap_user_entry) {
    $ldap_user_entry = array();
  }
  if (!is_object($account) || !is_object($ldap_server)) {
    return array(
      NULL,
      LDAP_USER_PROV_RESULT_BAD_PARAMS,
    );
  }
  $watchdog_tokens = array(
    '%drupal_username' => $account->name,
  );
  $include_count = isset($params['include_count']) && $params['include_count'];
  $direction = isset($params['direction']) ? $params['direction'] : LDAP_USER_PROV_DIRECTION_ALL;
  $prov_events = empty($params['prov_events']) ? ldap_user_all_events() : $params['prov_events'];
  $mappings = $this
    ->getSynchMappings($direction, $prov_events);

  //debug('prov_events'); //debug(join(",",$prov_events));

  //  debug('mappings'); debug($mappings);
  // Loop over the mappings.
  foreach ($mappings as $field_key => $field_detail) {
    list($ldap_attr_name, $ordinal, $conversion) = ldap_servers_token_extract_parts($field_key, TRUE);

    //trim($field_key, '[]');
    $ordinal = !$ordinal ? 0 : $ordinal;
    if ($ldap_user_entry && isset($ldap_user_entry[$ldap_attr_name]) && is_array($ldap_user_entry[$ldap_attr_name]) && isset($ldap_user_entry[$ldap_attr_name][$ordinal])) {
      continue;

      // don't override values passed in;
    }
    $synched = $this
      ->isSynched($field_key, $params['prov_events'], LDAP_USER_PROV_DIRECTION_TO_LDAP_ENTRY);

    //  debug("isSynched $field_key: $synched");
    if ($synched) {
      $token = $field_detail['user_attr'] == 'user_tokens' ? $field_detail['user_tokens'] : $field_detail['user_attr'];
      $value = ldap_servers_token_replace($account, $token, 'user_account');
      if (substr($token, 0, 10) == '[password.' && (!$value || $value == $token)) {

        // deal with empty/unresolved password
        if (!$provision) {
          continue;

          //don't overwrite password on synch if no value provided
        }
      }
      if ($ldap_attr_name == 'dn' && $value) {
        $ldap_user_entry['dn'] = $value;
      }
      elseif ($value) {
        if (!isset($ldap_user_entry[$ldap_attr_name]) || !is_array($ldap_user_entry[$ldap_attr_name])) {
          $ldap_user_entry[$ldap_attr_name] = array();
        }
        $ldap_user_entry[$ldap_attr_name][$ordinal] = $value;
        if ($include_count) {
          $ldap_user_entry[$ldap_attr_name]['count'] = count($ldap_user_entry[$ldap_attr_name]);
        }
      }
    }
  }

  /**
   * 4. call drupal_alter() to allow other modules to alter $ldap_user
   */
  drupal_alter('ldap_entry', $ldap_user_entry, $params);
  return array(
    $ldap_user_entry,
    $result,
  );
}