28 lines
2.3 KiB
PHP
28 lines
2.3 KiB
PHP
<?php
|
|
namespace Modules\Sites\Http\Controllers;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
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 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.');
|
|
}
|
|
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
|
|
{
|
|
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')];
|
|
}
|
|
}
|