66 lines
2.0 KiB
PHP
66 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace Modules\Stylist\Services;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Modules\Settings\Services\SettingsRepository;
|
|
|
|
final class TenantThemeResolver
|
|
{
|
|
public function __construct(private readonly SettingsRepository $settings) {}
|
|
|
|
public function resolve(?string $context = null): string
|
|
{
|
|
$context ??= $this->context();
|
|
$column = config('stylist.tenant_theme_column', 'theme_key');
|
|
$user = Auth::user();
|
|
$company = $user?->company ?? null;
|
|
|
|
if ($company && filled($company->{$column} ?? null)) {
|
|
return (string) $company->{$column};
|
|
}
|
|
|
|
if (function_exists('tenant')) {
|
|
$tenant = tenant();
|
|
if ($tenant && filled($tenant->{$column} ?? null)) {
|
|
return (string) $tenant->{$column};
|
|
}
|
|
}
|
|
|
|
$settingKey = $context === 'frontend' ? 'frontend_theme' : 'backend_theme';
|
|
$default = $context === 'frontend'
|
|
? config('stylist.default_frontend_theme', 'saasland')
|
|
: config('stylist.default_backend_theme', config('stylist.default_theme', 'admin'));
|
|
|
|
return (string) $this->settings->get($settingKey, $default, 'site');
|
|
}
|
|
|
|
public function context(): string
|
|
{
|
|
if (app()->runningInConsole()) {
|
|
return 'backend';
|
|
}
|
|
|
|
$request = request();
|
|
|
|
return $request->routeIs('home', 'blog.public.*', 'news.public.*', 'pages.public.*')
|
|
|| ! $request->user()
|
|
? 'frontend'
|
|
: 'backend';
|
|
}
|
|
|
|
public function variables(): array
|
|
{
|
|
$variables = config('stylist.fallback_variables', []);
|
|
$company = Auth::user()?->company ?? null;
|
|
|
|
foreach (config('stylist.tenant_brand_columns', []) as $column => $variable) {
|
|
if ($company && filled($company->{$column} ?? null)) {
|
|
$variables[$variable] = (string) $company->{$column};
|
|
}
|
|
}
|
|
|
|
return $variables;
|
|
}
|
|
}
|