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);

  }
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);

  }
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 ) ; }
populate ldap entry array for provisioning

@param array $account drupal account
@param object $ldap_server
@param array $ldap_user ldap entry of user, returned by reference
@param 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 array(ldap entry, $result) in ldap extension array format.!THIS IS NOT THE ACTUAL LDAP ENTRY
populate ldap entry array for provisioning