HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/comfama.sports-crowd.com/app/Http/Controllers/CategoryController.php
<?php

namespace App\Http\Controllers;

use DB;
use Datatables;
use App\Category;
use App\Sucursal;
use App\Parameter;
use App\Subcategories;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\WoocommerceController;

class CategoryController extends Controller
{
    public function index($storeType = 'main')
    {
        $parameter = Parameter::select('sucursal_products')->first();
        $categories = Category::orderBy('name', 'ASC')->get();
        if ($parameter->sucursal_products) {
            $sucursals = Sucursal::where('active', 1)->get();
        } else {
            $sucursals = null;
        }
        return view('categories.categories')
            ->with('categories', $categories)
            ->with('sucursals', $sucursals)
            ->with('storeType', $storeType);
    }

    public function indexAdd()
    {
        $parameter = Parameter::select('sucursal_products')->first();
        if ($parameter->sucursal_products) {
            $sucursals = Sucursal::where('active', 1)->get();
        } else {
            $sucursals = null;
        }
        return view('categories.addCategory')->with('sucursals', $sucursals);
    }

    public function indexEdit($storeType = 'main', $id)
    {
        $category = Category::find($id);
        $parameter = Parameter::select('sucursal_products')->first();
        if ($parameter->sucursal_products) {
            $sucursals = Sucursal::where('active', 1)->get();
        } else {
            $sucursals = null;
        }
        return view('categories.editCategory')
            ->with('category', $category)
            ->with('sucursals', $sucursals)
            ->with('storeType', $storeType);
    }

    public function create(Request $request, $sync = true)
    {
        if ($request["sucursal_id"]) {
            $exist = Category::where(
                [
                    ['name', $request["name"]],
                    ['sucursal_id', $request["sucursal_id"]],
                    ['store_type', $request["store_type"]]
                ]
            )->first();
        } else {
            $exist = Category::where('name', $request["name"])->where('store_type', $request["store_type"])->first();
        }
        if (!$exist) {
            $reference_category_id = null;
            if ($sync) {
                $woo = new WoocommerceController();
                $data = [
                    'name' => $request["name"],
                ];
                $reference_category_id = $woo->createCategory($data);
            } else {
                $reference_category_id = $request["reference_woocommerce_category_id"];
            }

            $category = new Category();
            $category->name = $request["name"];
            $category->order = $request["priority"];
            $category->sucursal_id = $request["sucursal_id"];
            $category->store_type = $request["store_type"];
            $category->reference_woocommerce_category_id = $reference_category_id;
            $category->active = 1;
            $category->save(); //Guarda el nuevo objeto

            $subcategory = new Subcategories();
            $subcategory->name = $request["name"];
            $subcategory->order = $request["priority"];
            $subcategory->active = 1;
            $subcategory->reference_woocommerce_category_id = $reference_category_id;
            $subcategory->category_id = $category->id;
            $subcategory->save();

            $logObject = $category;
            $logObject2 = $subcategory;

            if (Auth::user()) {
                $this->registerLog(Auth::user()->id, 'Creó una categoría', json_encode($logObject), "Create", 6);
                $this->registerLog(Auth::user()->id, 'Creó una subcategoría', json_encode($logObject2), "Create", 6);
            }
            return array('r' => true, 'd' => $category->id, 'm' => trans('messages.screen_categories_tag8'), 's' => $subcategory->id); //Se asigna a una respuesta en array
        } else {
            $category = $exist;
            $category->name = $request["name"];
            $category->order = $request["priority"];
            $category->sucursal_id = $request["sucursal_id"];
            $category->store_type = $request["store_type"];
            $category->active = 1;
            $category->update();

            $subcategory = Subcategories::where('category_id', $exist->id)->where('name', $request["name"])->first();
            return array('r' => false, 'd' => null, 'm' => trans('messages.screen_categories_tag13'), 's' => $subcategory->id);
        }
    }

    public function updateImage(Request $request)
    {
        $id = $request->id;
        $category = Category::find($id);
        $image = $category->image;
        $subcategory = Subcategories::where('category_id', $id)->where('name', $category->name)->first();
        $imageSubcategory = $subcategory->image;

        Storage::disk('s3')->delete(config('s3.categories') . $image);
        Storage::disk('s3')->delete(config('s3.subcategories') . $imageSubcategory);

        $num_ram = rand(1, 999);
        $extension = $request->file('image')->getClientOriginalExtension();
        $filenametostore = $num_ram . time() . '.' . $extension;

        Storage::disk('s3')->put(config('s3.categories') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
        Storage::disk('s3')->put(config('s3.subcategories') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');

        $logObject = $category;
        $logObject2 = $subcategory;
        $category->image = $filenametostore;
        $category->update();

        $woo = new WoocommerceController();
        $data = [
            'name' => $category->name,
            'image' => [
                'src' => config('filesystems.disks.s3.url') . '/categories/' . $filenametostore
            ]
        ];
        $woo->updateCategory($category->reference_woocommerce_category_id, $data);

        $subcategory->image = $filenametostore;
        $subcategory->update();


        $this->registerLog(Auth::user()->id, 'Actualizó la imagen de una categoría', json_encode($logObject), "Update", 6);
        $this->registerLog(Auth::user()->id, 'Actualizó la imagen de una subcategoría', json_encode($logObject2), "Update", 6);


        return array('r' => true, 'm' => trans('messages.screen_categories_tag9'));
    }

    public function saveImage(Request $request)
    {
        $id = $request->id;
        $num_ram = rand(1, 999);
        $extension = $request->file('image')->getClientOriginalExtension();
        $filenametostore = $num_ram . time() . '.' . $extension;

        Storage::disk('s3')->put(config('s3.categories') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
        Storage::disk('s3')->put(config('s3.subcategories') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');

        $category = Category::find($id);
        $category->image = $filenametostore;
        $logObject = $category;
        $category->update();

        $woo = new WoocommerceController();
        $data = [
            'name' => $category->name,
            'image' => [
                'src' => config('filesystems.disks.s3.url') . '/categories/' . $filenametostore
            ]
        ];
        $woo->updateCategory($category->reference_woocommerce_category_id, $data);

        $subcategory = Subcategories::where('category_id', $id)->first();
        $subcategory->image = $filenametostore;
        $logObject2 = $subcategory;
        $subcategory->update();

        $this->registerLog(Auth::user()->id, 'Guardó una imagen', json_encode($logObject), "Create", 6);
        $this->registerLog(Auth::user()->id, 'Guardó una imagen', json_encode($logObject2), "Create", 6);

        return array('r' => true, 'm' => trans('messages.controller_category'));
    }

    public function update(Request $request)
    {
        $id = $request["id"];
        $category = Category::find($id);
        $subcategory = Subcategories::where('name', $category->name)->where('category_id', $id)->first();
        $logObject = $category;
        $logObject2 = $subcategory;

        $category->name = $request["name"];
        $category->order = $request["priority"];
        $category->sucursal_id = $request["sucursal_id"];
        $category->store_type = $request["store_type"];
        $id = array('id' => $category->id);
        $category->update(); //Actualiza el objeto

        $woo = new WoocommerceController();
        $data = [
            'name' => $request["name"],
        ];
        $woo->updateCategory($category->reference_woocommerce_category_id, $data);

        $subcategory->name = $request["name"];
        $subcategory->order = $request["priority"];
        $subcategory->update();

        $this->registerLog(Auth::user()->id, 'Actualizó una categoría', json_encode($logObject), "Update", 6);
        $this->registerLog(Auth::user()->id, 'Actualizó una subcategoría', json_encode($logObject2), "Update", 6);

        return array('r' => true, 'd' => $id, 'm' => trans('messages.screen_categories_tag9')); //Se asigna a una respuesta en array
    }

    public function activateCategory(Request $request)
    {
        $id = $request['id'];
        $state = $request['state'];
        $category = Category::find($id);
        $subcategory = Subcategories::where('name', $category->name)->where('category_id', $id)->first();

        $category->active = $state;
        $logObject = $category;
        $category->update();

        $subcategory->active = $state;
        $logObject2 = $subcategory;
        $subcategory->update();


        $this->registerLog(Auth::user()->id, 'Activó/Desactivo una categoría', json_encode($logObject), "Update", 6);
        $this->registerLog(Auth::user()->id, 'Activó/Desactivo una subcategoría', json_encode($logObject2), "Update", 6);

        return array('r' => true, 'd' => $id, 'm' => trans('messages.screen_categories_tag10'));
    }

    public function delete(Request $request)
    {
        $id = $request['id'];
        $category = Category::find($id);
        $subcategory = Subcategories::where('name', $category->name)->where('category_id', $id)->first();

        $logObject = $category;
        $category->delete();

        if ($subcategory) {
            $logObject2 = $subcategory;
            $subcategory->delete();
            $this->registerLog(Auth::user()->id, 'Eliminó una subcategoría', json_encode($logObject2), "Delete", 6);
        }

        $woo = new WoocommerceController();
        $woo->deleteCategory($category->reference_woocommerce_category_id);

        $this->registerLog(Auth::user()->id, 'Eliminó una categoría', json_encode($logObject), "Delete", 6);

        return array('r' => true, 'd' => $id, 'm' => trans('messages.screen_categories_tag11'));
    }

    public function tableFilter($sucursal_id = false, $storeType = 'main')
    {
        if ($sucursal_id && $sucursal_id == 'false')
            $sucursal_id = false;

        if ($sucursal_id) {
            $obj = $obj = DB::table('categories')
                ->select('categories.id', 'categories.image', 'categories.name', 'categories.order', 'categories.active')
                ->whereNull('categories.deleted_at')
                ->where([['categories.sucursal_id', $sucursal_id], ['categories.store_type', $storeType]]);
        } else {
            $obj = $obj = DB::table('categories')
                ->select('categories.id', 'categories.image', 'categories.name', 'categories.order', 'categories.active')
                ->whereNull('categories.deleted_at')
                ->where('categories.store_type', $storeType);
        }

        return Datatables::of($obj)
            ->addColumn('actions', function ($obj) {
                return '<i class="fa fa-pencil iconMini" onClick="clickEditCategory(' . $obj->id . ')" data-id="' . $obj->id . '" title="Editar"></i>
            <i class="fa fa-trash iconMini" onClick="clickDeleteCategory(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>';
            })
            ->editColumn('image', function ($obj) {
                if ($obj->image == '') {
                    return '<div class="media-left">
                <p>Sin imagen</p>
                    </div>';
                } else {
                    return '<div class="media-left">
                <img src="' . config('filesystems.disks.s3.url') . '/categories/' . $obj->image . '" class="media-object " alt="User Image">
                    </div>';
                }
            })
            ->editColumn('active', function ($obj) {
                if ($obj->active == 0) {
                    return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkCategory(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" /> <span></span>Si </label></div> </label> </div>';
                } else {
                    return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label>   No <input type="checkbox" onChange="chkCategory(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" />
                        <span></span> Si </label> </div>  </label> </div>';
                }
            })
            ->rawColumns(['image', 'active', 'actions'])
            ->make(true);
    }

    public function list()
    {
        try {
            $categories = Category::where('active', 1)->get();
            return response(array("r" => true, "type" => "success", "title" => "", "m" => '', "data" => $categories));
        } catch (\Throwable $th) {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error'), "data" => null));
        }
    }
}