--- ldapdata.module.orig Fri Aug 31 12:36:07 2007 +++ ldapdata.module Fri Aug 31 12:37:11 2007 @@ -486,13 +486,24 @@ return; } + $profile_types = _ldapdata_retrieve_profile_fields_types(); + $entry = $ldapdata_ldap->retrieveAttributes($user->ldap_dn); if ($entry) { $ldap_drupal_mappings = array_flip(_ldapdata_reverse_mappings($user->ldap_config)); foreach ($ldap_drupal_mappings as $ldap_attr => $drupal_field) { if (isset($user->$drupal_field) && $ldap_attr && $drupal_field != 'access') { - if ($drupal_field != 'pass') { - $user->$drupal_field = $entry[strtolower($ldap_attr)][0]; + if ($drupal_field != 'pass') { + if ($profile_types[$drupal_field] == "list" || $profile_types[$drupal_field] == "urllist"){ + $user->$drupal_field = $entry[strtolower($ldap_attr)][0]; + for ($vals = 1; $vals < $entry[strtolower($ldap_attr)]["count"]; $vals++) + $user->$drupal_field .= "\n".$entry[strtolower($ldap_attr)][$vals]; + } else if ($profile_types[$drupal_field] == "date") { + $user->$drupal_field['month'] = substr($ldap_attr, 4, 2); + $user->$drupal_field['day'] = substr($ldap_attr, 6, 2); + $user->$drupal_field['year'] = substr($ldap_attr, 0, 4); + } else + $user->$drupal_field = $entry[strtolower($ldap_attr)][0]; } } } @@ -512,17 +523,30 @@ // Retrieve profile fields list $profile_fields = _ldapdata_retrieve_profile_fields(); + $profile_types = _ldapdata_retrieve_profile_fields_types(); // compare against mapped fields list $writeout = array(); $entry = $ldapdata_ldap->retrieveAttributes($user->ldap_dn); foreach ($profile_fields as $key => $field ) { if (in_array($key, $ldap_drupal_mappings)) { - $writeout[$field] = $entry[strtolower($ldap_drupal_reverse_mappings[$key])][0]; + if ($profile_types[$field] == "list" || $profile_types[$field] == "urllist"){ +//print_r ($entry); + $writeout[$field] = $entry[strtolower($ldap_drupal_reverse_mappings[$key])][0]; + for ($vals = 1; $vals < $entry[strtolower($ldap_drupal_reverse_mappings[$key])]["count"]; $vals++) + $writeout[$field] .= "\n".$entry[strtolower($ldap_drupal_reverse_mappings[$key])][$vals]; + } else if ($profile_types[$field] == "date") { + $writeout[$field]['month'] = substr($entry[strtolower($ldap_drupal_reverse_mappings[$key])][0], 4, 2); + $writeout[$field]['day'] = substr($entry[strtolower($ldap_drupal_reverse_mappings[$key])][0], 6, 2); + $writeout[$field]['year'] = substr($entry[strtolower($ldap_drupal_reverse_mappings[$key])][0], 0, 4); + } else + $writeout[$field] = $entry[strtolower($ldap_drupal_reverse_mappings[$key])][0]; } } // Write coincidences to Drupal DB foreach ($writeout as $field => $value) { + if (is_array($value)) + $value = serialize($value); $result = db_fetch_array(db_query("SELECT fid FROM {profile_fields} WHERE name = '%s'", $field)); $fid = $result['fid']; $uid = $user->uid; @@ -676,11 +700,19 @@ // Retrieve profile fields list $profile_fields = _ldapdata_retrieve_profile_fields(); + $account_field_types = _ldapdata_retrieve_profile_fields_types(); + // Compare against $edit list $writeout = array(); foreach ($profile_fields as $key => $field) { if (isset($edit[$field]) && isset($ldap_drupal_reverse_mappings[$key])) { - $writeout[$ldap_drupal_reverse_mappings[$key]] = $edit[$field]; + if ($account_field_types[$field] == "list" || $account_field_types[$field] == "urllist"){ + $writeout[$ldap_drupal_reverse_mappings[$key]] = explode ("\r\n", $edit[$field]); + } else if ($account_field_types[$field] == "date"){ + $writeout[$ldap_drupal_reverse_mappings[$key]] = sprintf ( "%04d%02d%02d00000", + $edit[$field]['year'], $edit[$field]['month'], $edit[$field]['day']); + } else + $writeout[$ldap_drupal_reverse_mappings[$key]] = $edit[$field]; } } @@ -761,11 +793,25 @@ $result = db_query($sql); $fields = array(); while ($row = db_fetch_object($result)) { - $fields[$row->fid] = $row->name; + if ($withtypes) + $fields[$row->fid] = Array("name" => $row->name, "type" => $row->type); + else + $fields[$row->fid] = $row->name; } return $fields; } +function _ldapdata_retrieve_profile_fields_types() { + + $sql = 'SELECT * FROM {profile_fields}'; + $result = db_query($sql); + $fields = array(); + while ($row = db_fetch_object($result)) { + $fields[$row->name] = $row->type; + } + return $fields; +} + function _ldapdata_retrieve_standard_user_fields() { // pablom - @@ -912,4 +958,4 @@ } -?> \ No newline at end of file +?>