/** * Synchronise a cached user with one from LDAP * @param object $principal A Principal object to be updated (or created) */ function sync_user_from_LDAP(Principal &$principal, $mapping, $ldap_values) { global $c; dbg_error_log("LDAP", "Going to sync the user from LDAP"); $fields_to_set = array(); $updateable_fields = Principal::updateableFields(); foreach ($updateable_fields as $field) { if (isset($mapping[$field])) { $tab_part_fields = explode(',', $mapping[$field]); foreach ($tab_part_fields as $part_field) { if (isset($ldap_values[$part_field])) { if (isset($fields_to_set[$field])) { $fields_to_set[$field] .= ' ' . $ldap_values[$part_field]; } else { $fields_to_set[$field] = $ldap_values[$part_field]; } } } dbg_error_log("LDAP", "Setting usr->%s to %s from LDAP field %s", $field, $fields_to_set[$field], $mapping[$field]); } else { if (isset($c->authenticate_hook['config']['default_value']) && is_array($c->authenticate_hook['config']['default_value']) && isset($c->authenticate_hook['config']['default_value'][$field])) { $fields_to_set[$field] = $c->authenticate_hook['config']['default_value'][$field]; dbg_error_log("LDAP", "Setting usr->%s to %s from configured defaults", $field, $c->authenticate_hook['config']['default_value'][$field]); } } } if ($principal->Exists()) { $principal->Update($fields_to_set); } else { $principal->Create($fields_to_set); CreateHomeCollections($principal->username()); CreateDefaultRelationships($principal->username()); } }