<?php
namespace App\Http\Controllers;
use App\Http\Requests\UpdateFeatureRequest;
use App\Models\Feature;
use App\Repositories\featureRepository;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Laracasts\Flash\Flash;
use Spatie\MediaLibrary\MediaCollections\Exceptions\FileDoesNotExist;
use Spatie\MediaLibrary\MediaCollections\Exceptions\FileIsTooBig;
use Illuminate\Support\Str;
class FeatureController extends AppBaseController
{
private $featureRepository;
public function __construct(featureRepository $featureRepository)
{
$this->featureRepository = $featureRepository;
}
public function index(): \Illuminate\View\View
{
return view('settings.features.index');
}
public function show($id)
{
//
}
public function edit(Feature $feature): \Illuminate\View\View
{
return view('settings.features.edit', compact('feature'));
}
public function new(): \Illuminate\View\View
{
return view('settings.features.new');
}
public function update(UpdateFeatureRequest $request, $id): RedirectResponse
{
$input = $request->all();
$this->featureRepository->update($input, $id);
Flash::success(__('messages.flash.feature_update'));
return redirect(route('features.index'));
}
public function store(UpdateFeatureRequest $request): RedirectResponse
{
$input = $request->all();
// Get current language from logged-in user
$language = getLogInUser()->language;
$input['language'] = $language;
// Validate unique slug for the language
$this->validate($request, [
'slug' => 'required|unique:features,slug,NULL,id,language,' . $language,
]);
// Generate slug if not provided
if (empty($input['slug'])) {
$count = Feature::where('language', $language)->count();
$input['slug'] = $language . '.features.' . ($count + 1);
} else {
// Ensure slug format
if (!Str::startsWith($input['slug'], $language . '.features.')) {
$input['slug'] = $language . '.features.' . Str::slug($input['slug']);
}
}
$this->featureRepository->update($input, null);
Flash::success(__('messages.flash.feature_update'));
return redirect(route('features.index'));
}
} |