0 && $currentUserId === $userId; $canEditUser = $isOwnAccount ? ($canUpdateUser || $canUpdateSelf) : $canUpdateUser; if (!$canEditUser) { Router::redirect('error/forbidden'); return; } if (!$isOwnAccount && !TenantScopeService::canAccess('users', $userId, $currentUserId)) { Router::redirect('error/forbidden'); return; } $locale = $user['locale'] ?? (I18n::$locale ?? I18n::$defaultLocale); $name = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? '')); $isGerman = strpos((string) $locale, 'de') === 0; $greeting = $isGerman ? 'Hallo' : 'Hello'; if ($name !== '') { $greeting .= ' ' . $name; } $greeting .= ','; $loginUrl = appUrl(Request::withLocale('login', $locale)); $resetUrl = appUrl(Request::withLocale('password/forgot', $locale)); $previousLocale = I18n::$locale ?? null; I18n::$locale = $locale; $subject = t('Your access details'); I18n::$locale = $previousLocale; $vars = [ 'app_name' => appTitle(), 'app_logo_url' => appLogoUrlAbsolute(128), 'imprint_url' => appUrl(Request::withLocale('imprint', $locale)), 'privacy_url' => appUrl(Request::withLocale('privacy', $locale)), 'greeting' => $greeting, 'username' => (string) ($user['email'] ?? ''), 'login_url' => $loginUrl, 'reset_url' => $resetUrl, ]; $result = MailService::sendTemplate('access_info', $vars, (string) $user['email'], $subject, $locale); if (!($result['ok'] ?? false)) { Flash::error(t('Access email failed'), "admin/users/edit/{$uuid}", 'access_email_failed'); Router::redirect("admin/users/edit/{$uuid}"); } Flash::success(t('Access email sent'), "admin/users/edit/{$uuid}", 'access_email_sent'); Router::redirect("admin/users/edit/{$uuid}");