protected function createAdminAccount($submissionVars, $login = FALSE)
{
try {
$guid = register_user($submissionVars['username'], $submissionVars['password1'], $submissionVars['displayname'], $submissionVars['email']);
} catch (Exception $e) {
register_error($e->getMessage());
return false;
}
if (!$guid) {
register_error(_elgg_services()->translator->translate('install:admin:cannot_create'));
return false;
}
$user = get_entity($guid);
if (!$user instanceof ElggUser) {
register_error(_elgg_services()->translator->translate('install:error:loadadmin'));
return false;
}
elgg_set_ignore_access(TRUE);
if ($user->makeAdmin() == FALSE) {
register_error(_elgg_services()->translator->translate('install:error:adminaccess'));
} else {
_elgg_services()->configTable->set('admin_registered', 1);
}
elgg_set_ignore_access(false);
// add validation data to satisfy user validation plugins
create_metadata($guid, 'validated', TRUE, '', 0, ACCESS_PUBLIC);
create_metadata($guid, 'validated_method', 'admin_user', '', 0, ACCESS_PUBLIC);
if ($login) {
$handler = new Elgg\Http\DatabaseSessionHandler(_elgg_services()->db);
// session.cache_limiter is unfortunately set to "" by the NativeSessionStorage constructor,
// so we must capture and inject it directly.
$options = ['cache_limiter' => session_cache_limiter()];
$storage = new Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage($options, $handler);
$session = new ElggSession(new Symfony\Component\HttpFoundation\Session\Session($storage));
$session->setName('Elgg');
_elgg_services()->setValue('session', $session);
if (login($user) == FALSE) {
register_error(_elgg_services()->translator->translate('install:error:adminlogin'));
}
}
return TRUE;
}