style updates
This commit is contained in:
@@ -1,19 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Sites\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Modules\Sites\Models\Site;
|
||||
use Modules\Sites\Models\SiteDomain;
|
||||
|
||||
final class DomainController extends Controller
|
||||
{
|
||||
public function store(Request $request, Site $site): RedirectResponse
|
||||
{
|
||||
$data=$request->validate(['domain'=>['required','string','max:255','regex:/^[a-z0-9.-]+$/i',Rule::unique('site_domains','domain')],'is_primary'=>['sometimes','boolean'],'redirect_to_primary'=>['sometimes','boolean'],'force_https'=>['sometimes','boolean'],'is_active'=>['sometimes','boolean']]);
|
||||
if ($request->boolean('is_primary')) { $site->domains()->update(['is_primary'=>false]); }
|
||||
$site->domains()->create($data + ['is_primary'=>$request->boolean('is_primary'),'redirect_to_primary'=>$request->boolean('redirect_to_primary'),'force_https'=>$request->boolean('force_https'),'is_active'=>$request->boolean('is_active', true)]);
|
||||
return back()->with('success','Domain added.');
|
||||
$data = $request->validate(['domain' => ['required', 'string', 'max:255', 'regex:/^[a-z0-9.-]+$/i', Rule::unique('site_domains', 'domain')], 'is_primary' => ['sometimes', 'boolean'], 'redirect_to_primary' => ['sometimes', 'boolean'], 'force_https' => ['sometimes', 'boolean'], 'is_active' => ['sometimes', 'boolean']]);
|
||||
if ($request->boolean('is_primary')) {
|
||||
$site->domains()->update(['is_primary' => false]);
|
||||
}
|
||||
$site->domains()->create($data + ['is_primary' => $request->boolean('is_primary'), 'redirect_to_primary' => $request->boolean('redirect_to_primary'), 'force_https' => $request->boolean('force_https'), 'is_active' => $request->boolean('is_active', true)]);
|
||||
|
||||
return back()->with('success', 'Domain added.');
|
||||
}
|
||||
|
||||
public function destroy(Site $site, SiteDomain $domain): RedirectResponse
|
||||
{
|
||||
abort_unless($domain->site_id === $site->id, 404);
|
||||
abort_if($domain->is_primary && $site->domains()->count() === 1, 422, 'A site must retain a domain.');
|
||||
$domain->delete();
|
||||
|
||||
return back()->with('success', 'Domain removed.');
|
||||
}
|
||||
public function destroy(Site $site, SiteDomain $domain): RedirectResponse { abort_unless($domain->site_id===$site->id,404); abort_if($domain->is_primary && $site->domains()->count()===1,422,'A site must retain a domain.'); $domain->delete(); return back()->with('success','Domain removed.'); }
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Sites\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
@@ -7,21 +9,60 @@ use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\View\View;
|
||||
use Modules\Sites\Models\Site;
|
||||
|
||||
final class SiteController extends Controller
|
||||
{
|
||||
public function index(): View { return view('sites::admin.sites.index', ['sites'=>Site::query()->with('domains')->orderByDesc('is_default')->orderBy('name')->paginate(20)]); }
|
||||
public function create(): View { return view('sites::admin.sites.form', ['site'=>new Site]); }
|
||||
public function store(Request $request): RedirectResponse { $site = Site::query()->create($this->validated($request)); return redirect()->route('administration.sites.edit', $site)->with('success','Site created.'); }
|
||||
public function edit(Site $site): View { return view('sites::admin.sites.form', ['site'=>$site->load(['domains','settings'])]); }
|
||||
public function index(): View
|
||||
{
|
||||
return view('sites::admin.sites.index', ['sites' => Site::query()->with('domains')->orderByDesc('is_default')->orderBy('name')->paginate(20)]);
|
||||
}
|
||||
|
||||
public function create(): View
|
||||
{
|
||||
return view('sites::admin.sites.form', ['site' => new Site]);
|
||||
}
|
||||
|
||||
public function store(Request $request): RedirectResponse
|
||||
{
|
||||
$site = Site::query()->create($this->validated($request));
|
||||
|
||||
return redirect()->route('administration.sites.edit', $site)->with('success', 'Site created.');
|
||||
}
|
||||
|
||||
public function edit(Site $site): View
|
||||
{
|
||||
return view('sites::admin.sites.form', ['site' => $site->load(['domains', 'settings'])]);
|
||||
}
|
||||
|
||||
public function update(Request $request, Site $site): RedirectResponse
|
||||
{
|
||||
DB::transaction(function () use ($request,$site): void { $data=$this->validated($request,$site); if ($data['is_default']) { Site::query()->whereKeyNot($site->id)->update(['is_default'=>false]); } $site->update($data); });
|
||||
return back()->with('success','Site updated.');
|
||||
DB::transaction(function () use ($request, $site): void {
|
||||
$data = $this->validated($request, $site);
|
||||
if ($data['is_default']) {
|
||||
Site::query()->whereKeyNot($site->id)->update(['is_default' => false]);
|
||||
} $site->update($data);
|
||||
});
|
||||
|
||||
return back()->with('success', 'Site updated.');
|
||||
}
|
||||
public function destroy(Site $site): RedirectResponse { abort_if($site->is_default, 422, 'The default site cannot be deleted.'); $site->delete(); return redirect()->route('administration.sites.index')->with('success','Site deleted.'); }
|
||||
public function switch(Request $request, Site $site): RedirectResponse { $request->session()->put(config('sites.session_key'), $site->id); return back()->with('success', "Site context changed to {$site->name}."); }
|
||||
private function validated(Request $request, ?Site $site=null): array
|
||||
|
||||
public function destroy(Site $site): RedirectResponse
|
||||
{
|
||||
return $request->validate(['name'=>['required','string','max:150'],'key'=>['required','alpha_dash','max:100',Rule::unique('sites','key')->ignore($site)],'status'=>['required',Rule::in(['active','inactive','maintenance'])],'theme'=>['nullable','string','max:100'],'default_locale'=>['required','string','max:20'],'timezone'=>['required','timezone'],'is_default'=>['sometimes','boolean']]) + ['is_default'=>$request->boolean('is_default')];
|
||||
abort_if($site->is_default, 422, 'The default site cannot be deleted.');
|
||||
$site->delete();
|
||||
|
||||
return redirect()->route('administration.sites.index')->with('success', 'Site deleted.');
|
||||
}
|
||||
|
||||
public function switch(Request $request, Site $site): RedirectResponse
|
||||
{
|
||||
$request->session()->put(config('sites.session_key'), $site->id);
|
||||
|
||||
return back()->with('success', "Site context changed to {$site->name}.");
|
||||
}
|
||||
|
||||
private function validated(Request $request, ?Site $site = null): array
|
||||
{
|
||||
return $request->validate(['name' => ['required', 'string', 'max:150'], 'key' => ['required', 'alpha_dash', 'max:100', Rule::unique('sites', 'key')->ignore($site)], 'status' => ['required', Rule::in(['active', 'inactive', 'maintenance'])], 'theme' => ['nullable', 'string', 'max:100'], 'default_locale' => ['required', 'string', 'max:20'], 'timezone' => ['required', 'timezone'], 'is_default' => ['sometimes', 'boolean']]) + ['is_default' => $request->boolean('is_default')];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Sites\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\Sites\Services\SiteManager;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
final class ResolveSite
|
||||
{
|
||||
public function __construct(private readonly SiteManager $sites) {}
|
||||
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$site = $this->sites->resolve($request);
|
||||
@@ -14,6 +18,7 @@ final class ResolveSite
|
||||
config(['app.url' => $request->getSchemeAndHttpHost(), 'app.timezone' => $site->timezone ?: config('app.timezone')]);
|
||||
date_default_timezone_set((string) config('app.timezone'));
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user