private function importUser($username) { $this->log('Auth.Dispatch: User %s not found, try to import', $username, AgaviLogger::DEBUG); $padmin = $this->getContext()->getModel('PrincipalAdmin', 'AppKit'); foreach ($this->provider_keys as $pid) { $provider = $this->getProvider($pid); if ($provider->canCreateProfile()) { $this->log('Auth.Dispatch/import: %s will provide the user profile', $provider->getProviderName(), AgaviLogger::DEBUG); try { $data = $provider->getUserdata($username, false); if (is_array($data)) { $user = new NsmUser(); $user->fromArray($data, false); // Write a random password. // @todo Change this to let providers can do that later $user->generateRandomPassword(); $groups = $provider->getDefaultGroups(); if (is_array($groups)) { foreach ($groups as $group_name) { $group = Doctrine::getTable('NsmRole')->findOneBy('role_name', $group_name); if ($group instanceof NsmRole) { $user->NsmRole[] = $group; } else { $this->log('Auth.Dispatch/import: Could not assign group %s', $group_name, AgaviLogger::WARN); } } } if (count($user->NsmRole) > 0) { $user->save(); $user->refresh(true); } else { $this->log('Auth.Dispatch/import: No groups available for user, ABORT!', AgaviLogger::FATAL); return null; } $padmin->updatePrincipalValueData($user->principal, array(), array()); $user->save(); $this->log('Auth.Dispatch/import: user %s successfully imported (user_id=%d, provider=%s)', $username, $user->user_id, $provider->getProviderName(), AgaviLogger::DEBUG); return $user; } } catch (AgaviSecurityException $e) { $this->log('Auth.Dispatch/import: Import failed (provider=%s,msg=%s)', $provider->getProviderName(), $e->getMessage(), AgaviLogger::ERROR); } catch (Exception $e) { $this->log('Auth.Dispatch/import failed: Import failed: (provider=%s, msg=%s)', $provider->getProviderName(), $e->getMessage(), AgaviLogger::ERROR); } } } }