File: /var/www/vhost/disk-apps/demo.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));
}
}
}