username = $username; $this->skin = $skin !== '' ? $skin : 'enhanced'; $this->language = $language !== '' ? strtolower($language) : 'en'; $this->configDir = $configDir; } public static function fromEnvironment(Settings $settings): self { $username = getenv('USERNAME') ?: getenv('USER') ?: getenv('DA_USER') ?: ''; if ($username === '' && isset($_SERVER['USERNAME'])) { $username = (string)$_SERVER['USERNAME']; } if ($username === '') { throw new RuntimeException('Cannot determine DirectAdmin user'); } $skin = getenv('SKIN') ?: (string)($_SERVER['SKIN'] ?? 'enhanced'); $lang = self::readLanguage($username) ?: $settings->defaultLanguage(); return new self($username, $skin, $lang); } public function username(): string { return $this->username; } public function skin(): string { return $this->skin; } public function language(): string { return $this->language; } public function hasPluginAccess(Settings $settings): bool { $override = $this->configDir . '/users/' . $this->username . '.conf'; if (is_file($override)) { $data = Settings::load($override); return $data->getBool('enabled', $settings->defaultEnable()); } return $settings->defaultEnable(); } private static function readLanguage(string $username): string { $path = '/usr/local/directadmin/data/users/' . $username . '/user.conf'; if (!is_file($path)) { return ''; } $lines = file($path, FILE_IGNORE_NEW_LINES); if ($lines === false) { return ''; } foreach ($lines as $line) { if (str_starts_with($line, 'language=')) { return strtolower(trim(substr($line, 9))); } } return ''; } }