| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/ContentImageController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\ContentImageRequest;
use App\Models\Backend\ContentImage;
use App\Models\Backend\Ref;
use Illuminate\Http\Request;
class ContentImageController extends Controller
{
public function index(Request $request)
{
$search = $request->get('search');
$images = ContentImage::where(function($q) {
$q->whereNull('image_main')->orWhere('image_main', '1');
})->withCount(['translations'])
->when($search, function ($q) use ($search) {
$q->where(function ($sub) use ($search) {
$sub->where('image_title', 'like', "%{$search}%")
->orWhere('image_cat', 'like', "%{$search}%")
->orWhere('image_type', 'like', "%{$search}%")
->orWhere('image_status', 'like', "%{$search}%");
});
})
->orderBy('created_at', 'desc')->paginate(10)->onEachSide(1)->withQueryString();
$categories = Ref::where('cat', 'IMAGE_CAT')->orderBy('sort')->pluck('descr', 'code');
$statuses = Ref::where('cat', 'IMAGE_STATUS')->orderBy('sort')->pluck('descr', 'code');
return view('backend.module.contentImage.index', [
'images' => $images,
'categories' => $categories,
'statuses' => $statuses,
'search' => $search,
]);
}
public function create()
{
$categories = Ref::where('cat', 'IMAGE_CAT')->orderBy('sort')->pluck('descr', 'code');
$statuses = Ref::where('cat', 'IMAGE_STATUS')->orderBy('sort')->pluck('descr', 'code');
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
return view('backend.module.contentImage.create', [
'categories' => $categories,
'statuses' => $statuses,
'languages' => $languages,
]);
}
public function store(ContentImageRequest $request)
{
$filePath = null;
if ($request->hasFile('image_file')) {
$file = $request->file('image_file');
$name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$filename = $name . '_' . now()->format('Ymd') . '_' . substr(uniqid(), -5) . '.' . $file->getClientOriginalExtension();
$filePath = $file->storeAs('content-images', $filename, 'public');
}
ContentImage::create([
'image_main' => '1',
'image_parent_id' => null,
'image_title' => $request->image_title,
'image_language' => $request->image_language,
'image_cat' => $request->image_cat,
'image_type' => $request->image_type,
'image_status' => $request->image_status,
'image_sort' => $request->image_sort ?? 0,
'image_file' => $filePath,
'image_url' => $request->image_url,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
flash()->success('Image created successfully!');
return redirect()->route('content-image.index');
}
public function edit($id)
{
$image = ContentImage::findOrFail($id);
$categories = Ref::where('cat', 'IMAGE_CAT')->orderBy('sort')->pluck('descr', 'code');
$statuses = Ref::where('cat', 'IMAGE_STATUS')->orderBy('sort')->pluck('descr', 'code');
$languages = Ref::where('cat', 'LANGUAGE')->orderBy('sort')->pluck('descr', 'code');
$translations = collect();
if ($image->image_main === '1' || $image->image_main === 1) {
$translations = ContentImage::where('image_parent_id', $image->image_id)->get();
}
return view('backend.module.contentImage.edit', [
'image' => $image,
'categories' => $categories,
'statuses' => $statuses,
'languages' => $languages,
'translations' => $translations,
]);
}
public function deleteTranslation($id)
{
$translation = ContentImage::findOrFail($id);
if ($translation->image_file && \Storage::disk('public')->exists($translation->image_file)) {
\Storage::disk('public')->delete($translation->image_file);
}
$parentId = $translation->image_parent_id;
$translation->delete();
flash()->success('Translation deleted successfully.');
return redirect()->route('content-image.edit', $parentId);
}
public function update(ContentImageRequest $request, $id)
{
$image = ContentImage::findOrFail($id);
$filePath = $image->image_file;
if ($request->hasFile('image_file')) {
if ($filePath && \Storage::disk('public')->exists($filePath)) {
\Storage::disk('public')->delete($filePath);
}
$file = $request->file('image_file');
$name = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$filename = $name . '_' . now()->format('Ymd') . '_' . substr(uniqid(), -5) . '.' . $file->getClientOriginalExtension();
$filePath = $file->storeAs('content-images', $filename, 'public');
}
$image->update([
'image_title' => $request->image_title,
'image_language' => $request->image_language,
'image_cat' => $request->image_cat,
'image_type' => $request->image_type,
'image_status' => $request->image_status,
'image_sort' => $request->image_sort ?? 0,
'image_file' => $filePath,
'image_url' => $request->image_url,
'updated_by' => auth()->id(),
]);
flash()->success('Image updated successfully!');
return redirect()->route('content-image.index');
}
public function addTranslation($id)
{
$parent = ContentImage::findOrFail($id);
if (!($parent->image_main === '1' || $parent->image_main === 1)) {
flash()->error('Cannot add translation to a translation entry.');
return redirect()->route('content-image.index');
}
$translation = ContentImage::create([
'image_main' => '0',
'image_parent_id' => $parent->image_id,
'image_title' => $parent->image_title . ' (Translation)',
'image_language' => $parent->image_language,
'image_cat' => $parent->image_cat,
'image_type' => $parent->image_type,
'image_status' => 'INACTIVE',
'image_sort' => null,
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
flash()->success('Translation draft created. Please fill in the details.');
return redirect()->route('content-image.edit', $translation->image_id);
}
public function destroy($id)
{
$image = ContentImage::findOrFail($id);
if ($image->image_main === '1' || $image->image_main === 1) {
$translations = ContentImage::where('image_parent_id', $image->image_id)->get();
foreach ($translations as $translation) {
if ($translation->image_file && \Storage::disk('public')->exists($translation->image_file)) {
\Storage::disk('public')->delete($translation->image_file);
}
$translation->delete();
}
}
if ($image->image_file && \Storage::disk('public')->exists($image->image_file)) {
\Storage::disk('public')->delete($image->image_file);
}
$image->delete();
flash()->success('Image deleted successfully.');
return redirect()->route('content-image.index');
}
public function reorder(Request $request)
{
$ids = $request->input("ids", []);
$page = (int) $request->input('page', 1);
$perPage = 10;
$offset = ($page - 1) * $perPage;
foreach ($ids as $index => $id) {
\App\Models\Backend\ContentImage::where("id", $id)->update(["image_sort" => $offset + $index + 1]);
}
return response()->json(["success" => true]);
}
}