Sync global-autoresponder current state
This commit is contained in:
@@ -14,22 +14,23 @@ final class DirectAdminUser
|
||||
throw new InvalidArgumentException('Invalid username');
|
||||
}
|
||||
$this->username = $username;
|
||||
$this->skin = $skin !== '' ? $skin : 'enhanced';
|
||||
$this->skin = self::normalizeSkin($skin);
|
||||
$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'];
|
||||
}
|
||||
$username = self::environmentValue(['USERNAME', 'DA_USER', 'USER']);
|
||||
if ($username === '') {
|
||||
throw new RuntimeException('Cannot determine DirectAdmin user');
|
||||
}
|
||||
$skin = getenv('SKIN') ?: (string)($_SERVER['SKIN'] ?? 'enhanced');
|
||||
$lang = self::readLanguage($username) ?: $settings->defaultLanguage();
|
||||
$userConf = self::readUserConf($username);
|
||||
$skin = self::environmentValue(['SKIN', 'SESSION_SKIN', 'SESSION_SELECTED_SKIN', 'DA_SKIN', 'USER_SKIN', 'THEME']);
|
||||
if ($skin === '') {
|
||||
$skin = (string)($userConf['skin'] ?? 'enhanced');
|
||||
}
|
||||
$lang = self::languageFromUserConf($userConf) ?: $settings->defaultLanguage();
|
||||
return new self($username, $skin, $lang);
|
||||
}
|
||||
|
||||
@@ -58,21 +59,65 @@ final class DirectAdminUser
|
||||
return $settings->defaultEnable();
|
||||
}
|
||||
|
||||
private static function readLanguage(string $username): string
|
||||
private static function normalizeSkin(string $skin): string
|
||||
{
|
||||
$path = '/usr/local/directadmin/data/users/' . $username . '/user.conf';
|
||||
if (!is_file($path)) {
|
||||
return '';
|
||||
$normalizedSkin = strtolower(trim($skin));
|
||||
if ($normalizedSkin === '') {
|
||||
return 'enhanced';
|
||||
}
|
||||
$lines = file($path, FILE_IGNORE_NEW_LINES);
|
||||
if ($lines === false) {
|
||||
return '';
|
||||
if (str_contains($normalizedSkin, 'evolution')) {
|
||||
return 'evolution';
|
||||
}
|
||||
foreach ($lines as $line) {
|
||||
if (str_starts_with($line, 'language=')) {
|
||||
return strtolower(trim(substr($line, 9)));
|
||||
return $normalizedSkin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<string> $keys
|
||||
*/
|
||||
private static function environmentValue(array $keys): string
|
||||
{
|
||||
foreach ($keys as $key) {
|
||||
$value = getenv($key);
|
||||
if ($value !== false && trim((string)$value) !== '') {
|
||||
return trim((string)$value);
|
||||
}
|
||||
if (isset($_SERVER[$key]) && trim((string)$_SERVER[$key]) !== '') {
|
||||
return trim((string)$_SERVER[$key]);
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string,string>
|
||||
*/
|
||||
private static function readUserConf(string $username): array
|
||||
{
|
||||
$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 [];
|
||||
}
|
||||
$data = [];
|
||||
foreach ($lines as $line) {
|
||||
$line = trim($line);
|
||||
if ($line === '' || str_starts_with($line, '#') || !str_contains($line, '=')) {
|
||||
continue;
|
||||
}
|
||||
[$key, $value] = explode('=', $line, 2);
|
||||
$data[trim($key)] = trim($value);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string,string> $userConf
|
||||
*/
|
||||
private static function languageFromUserConf(array $userConf): string
|
||||
{
|
||||
return strtolower(trim((string)($userConf['language'] ?? $userConf['lang'] ?? '')));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user