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/agile-selling-wpb/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 __construct(Request $request)
    {
        $this->middleware('auth');
        // $this->middleware(function ($request, $next) {
        //     $this->user = Auth::user();
        //     if(Auth::user()->rol->id == 1 || Auth::user()->rol->id == 6){
        //         $this->changeDbDefault($request);
        //     }
        //     return $next($request);
        // });
    }
    public function index(){
        // $rol = Auth::user()->rol->id;
        // if ($rol == 1 ||  $rol == 6) {
            $parameter = Parameter::where('id',1)->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);
        // }else{
        //     return redirect()->back();
        // }
    }

    public function indexAdd(){
        $parameter = Parameter::where('id',1)->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($id){
        $category = Category::find($id);
        $parameter = Parameter::where('id',1)->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);
    }

    public function create(Request $request,$sync = true)
    {
        if($request["sucursal_id"]){
            $exist = Category::where([['name', $request["name"]],['sucursal_id', $request["sucursal_id"]]])->first();
        }else{
            $exist = Category::where('name', $request["name"])->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->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;

            $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{
            $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(env('S3_CATEGORY_PATH').$image);
        Storage::disk('s3')->delete(env('S3_SUBCATEGORY_PATH').$imageSubcategory);

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

        Storage::disk('s3')->put(env('S3_CATEGORY_PATH').$filenametostore, fopen($request->file('image'), 'r+'), 'public');
        Storage::disk('s3')->put(env('S3_SUBCATEGORY_PATH').$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' => env('AWS_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(env('S3_CATEGORY_PATH').$filenametostore, fopen($request->file('image'), 'r+'), 'public');
        Storage::disk('s3')->put(env('S3_SUBCATEGORY_PATH').$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' => env('AWS_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)
    {
        if(isset($request["sucursal_id"]) && $request["sucursal_id"]){
            $query = Category::where([['id', '!=', $request["id"]], ['name', $request["name"]],['sucursal_id', $request["sucursal_id"]]])->first();
        }else{
            $query = Category::where([['id', '!=', $request["id"]], ['name', $request["name"]]])->first();
        }
        if (!$query) {
            $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"];
            $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
        }else{
            return array('r' => false, 'd' => null,'m'=>trans('messages.screen_categories_tag13'));
        }
    }

    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();

        $logObject2 = $subcategory;
        $subcategory->delete();

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

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

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

    public function tableFilter($sucursal_id=false){
        if ($sucursal_id) {
          $obj = $obj = DB::table('categories')
                          ->select('categories.id','categories.image', 'categories.name','categories.order','categories.active')
                          ->where('sucursal_id', $sucursal_id)
                          ->whereNull('categories.deleted_at');
        }else{
          $obj = $obj = DB::table('categories')
                          ->select('categories.id','categories.image', 'categories.name','categories.order','categories.active')
                          ->whereNull('categories.deleted_at');
        }

        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="'.env('AWS_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));
        }
    }
}