HEX
Server: LiteSpeed
System: Linux sv4.hami.host 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64
User: armgroup (1008)
PHP: 8.2.32
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, mail, socket_create, socket_create_listen, socket_create_pair, link, dl, openlog, syslog, stream_socket_server, curl_multi_init
Upload Files
File: /home/armgroup/libs/app/Http/Controllers/Admin/CategoryController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;

class CategoryController extends Controller
{
    public function __construct()
    {
        $this->middleware('permission:manage categories');
    }

    public function index()
    {
        return view('admin.categories.index');
    }

    public function create(Request $request)
    {
        $type = categoryExists($request->type);
        $categories = Category::where('type', $type['className'])->select('id', 'name')->get();
        $parent = $request->parent;
        if ($parent && ! in_array($parent, $categories->pluck('id')->toArray())) {
            abort(404);
        }

        return view('admin.categories.create', compact('categories', 'type', 'parent'));
    }

    public function edit(Category $category)
    {
        $type = $category->getCategoryType();
        $categories = Category::where('type', $category->type)
            ->where('id', '<>', $category->id)
            ->select('id', 'name')
            ->get();

        return view('admin.categories.edit', compact('category', 'categories', 'type'));
    }

    public function destroy(Category $category)
    {
        DB::transaction(function () use ($category) {
            $this->clearProducts($category->getAllChildren()->push($category));
            $category->delete();
        });
        $this->removeCachedCategories();
        $this->doneMessage("دسته‌بندی $category->name با موفقیت حذف شد");

        return back();
    }

    private function clearProducts($categories)
    {
        foreach ($categories as $category) {
            $products = $category->products();
            if ($products->count()) {
                $products->update(['status' => false]);
                $product_ids = $products->pluck('id')->toArray();
                DB::table('attribute_product')->whereIn('product_id', $product_ids)->delete();
                DB::table('option_product')->whereIn('product_id', $product_ids)->delete();
            }
        }
    }

    public function showCategories($slug)
    {
        $type = categoryExists($slug);
        $categories = Category::where('type', $type['className'])
            ->whereNull('parent_id')
            ->select('id', 'name', 'slug', 'status')
            ->get();

        return view('admin.categories.showCategories', compact('categories', 'type'));
    }

    public function ajax($id)
    {
        if (! request()->ajax()) {
            abort(404);
        }

        $category = Category::with('children')->findOrFail($id);
        $data = view('admin.categories.ajax', [
            'categories' => $category->children,
            'name' => $category->name,
            'level' => request('level') + 1,
            'typeSlug' => request('typeSlug'),
            'parent' => $category->id,
        ])->render();

        return response()->json($data);
    }

    private function removeCachedCategories()
    {
        Cache::forget('product-categories');
        Cache::forget('article-categories');
    }
}