Beispiel #1
0
/**
* 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());
    }
}