public function getSession($UserID, $Refresh = false)
{
// Ask for the user. This will check cache first.
$User = $this->getID($UserID, DATASET_TYPE_OBJECT);
if (!$User) {
return false;
}
// If we require confirmation and user is not confirmed
$ConfirmEmail = self::requireConfirmEmail();
$Confirmed = val('Confirmed', $User);
if ($ConfirmEmail && !$Confirmed) {
// Replace permissions with those of the ConfirmEmailRole
$ConfirmEmailRoleID = RoleModel::getDefaultRoles(RoleModel::TYPE_UNCONFIRMED);
if (!is_array($ConfirmEmailRoleID) || count($ConfirmEmailRoleID) == 0) {
throw new Exception(sprintf(t('No role configured with a type of "%s".'), RoleModel::TYPE_UNCONFIRMED), 400);
}
$RoleModel = new RoleModel();
$permissionsModel = new Vanilla\Permissions();
$RolePermissions = $RoleModel->getPermissions($ConfirmEmailRoleID);
$permissionsModel->compileAndLoad($RolePermissions);
$Permissions = $permissionsModel->getPermissions();
// Ensure Confirm Email role can always sign in
if (!$Permissions->has('Garden.SignIn.Allow')) {
$Permissions->set('Garden.SignIn.Allow', true);
}
$User->Permissions = $Permissions->getPermissions();
// Otherwise normal loadings!
} else {
if ($User && ($User->Permissions == '' || Gdn::cache()->activeEnabled())) {
$userPermissions = $this->getPermissions($UserID);
$User->Permissions = $userPermissions->getPermissions();
}
}
// Remove secret info from session
unset($User->Password, $User->HashMethod);
return $User;
}