Your IP : 216.73.216.79


Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/
Upload File :
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]);
    }

}