65 lines
2.5 KiB
PHP
65 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Countries\Http\Controllers;
|
|
|
|
use Illuminate\Contracts\View\View;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Countries\Http\Requests\UpdateCountryRequest;
|
|
use Modules\Countries\Models\Country;
|
|
|
|
class CountriesController extends Controller
|
|
{
|
|
public function index(Request $request): View
|
|
{
|
|
$search = trim((string) $request->query('search', ''));
|
|
$status = (string) $request->query('status', 'all');
|
|
|
|
$countries = Country::query()
|
|
->when($search !== '', function ($query) use ($search): void {
|
|
$query->where(function ($nested) use ($search): void {
|
|
$nested->where('name', 'ilike', "%{$search}%")
|
|
->orWhere('official_name', 'ilike', "%{$search}%")
|
|
->orWhere('common_name', 'ilike', "%{$search}%")
|
|
->orWhere('display_name', 'ilike', "%{$search}%")
|
|
->orWhere('alpha2', 'ilike', "%{$search}%")
|
|
->orWhere('alpha3', 'ilike', "%{$search}%")
|
|
->orWhere('numeric', 'ilike', "%{$search}%");
|
|
});
|
|
})
|
|
->when($status === 'active', fn ($query) => $query->where('is_active', true))
|
|
->when($status === 'inactive', fn ($query) => $query->where('is_active', false))
|
|
->ordered()
|
|
->paginate(50)
|
|
->withQueryString();
|
|
|
|
$activeCount = Country::query()->where('is_active', true)->count();
|
|
$inactiveCount = Country::query()->where('is_active', false)->count();
|
|
$totalCount = Country::query()->count();
|
|
|
|
return view('countries::index', compact('countries', 'activeCount', 'inactiveCount', 'totalCount', 'search', 'status'));
|
|
}
|
|
|
|
public function show(Country $country): View
|
|
{
|
|
return view('countries::show', compact('country'));
|
|
}
|
|
|
|
public function edit(Country $country): View
|
|
{
|
|
return view('countries::edit', compact('country'));
|
|
}
|
|
|
|
public function update(UpdateCountryRequest $request, Country $country): RedirectResponse
|
|
{
|
|
$country->update([
|
|
'display_name' => $request->validated('display_name'),
|
|
'is_active' => $request->boolean('is_active'),
|
|
'sort_order' => (int) ($request->validated('sort_order') ?? 0),
|
|
]);
|
|
|
|
return redirect()->route('countries.show', $country)->with('success', 'Country settings updated.');
|
|
}
|
|
}
|