21 lines
1.0 KiB
PHP
21 lines
1.0 KiB
PHP
<?php
|
|
namespace Modules\Sites\Services;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Collection;
|
|
use Modules\Sites\Models\Site;
|
|
final class SiteManager
|
|
{
|
|
private ?Site $current = null;
|
|
public function current(): ?Site { return $this->current; }
|
|
public function setCurrent(?Site $site): void { $this->current = $site; if ($site) { app()->instance(Site::class, $site); } }
|
|
public function all(): Collection { return Site::query()->active()->orderByDesc('is_default')->orderBy('name')->get(); }
|
|
public function resolve(Request $request): ?Site
|
|
{
|
|
$host = strtolower(preg_replace('/:\d+$/', '', $request->getHost()));
|
|
$site = Site::query()->with(['domains','settings'])->whereHas('domains', fn ($q) => $q->where('domain', $host)->where('is_active', true))->first();
|
|
if (! $site && config('sites.fallback_to_default')) { $site = Site::query()->with(['domains','settings'])->active()->where('is_default', true)->first(); }
|
|
$this->setCurrent($site);
|
|
return $site;
|
|
}
|
|
}
|