!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/ecom1.picotech.app/public_html_ecom1/app/Http/Controllers/Api/Vendor/   drwxr-xr-x
Free 26.84 GB of 117.98 GB (22.75%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     ApiVendorProductController.php (35.82 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * @package ApiVendorProductController
 * @author TechVillage <support@techvill.org>
 * @contributor Sakawat Hossain Rony <[sakawat.techvill@gmail.com]>
 * @created 12-04-2022
 */
namespace App\Http\Controllers\Api\Vendor;
use 
App\Http\Controllers\Controller;
use 
App\Http\Resources\ProductDetailResource;
use 
App\Http\Resources\ProductResource;
use 
App\Models\{
    
InventoryProduct,
    
ProductAttribute,
    
ProductCategory,
    
ProductCrossSale,
    
ProductDetail,
    
ProductOption,
    
ProductRelate,
    
ProductTag,
    
Tag
};
use 
Illuminate\Http\Request;
use 
Str;
use 
DB;

class 
ApiVendorProductController extends Controller
{
    
/**
     * Product List
     * @param Request $request
     * @return json $data
     */
    
public function index(Request $request)
    {
        
$configs $this->initialize([], $request->all());
        
$vendorId = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$items Product::where('vendor_id'$vendorId);
        
$name = isset($request->name) ? $request->name null;
        if (!empty(
$name)) {
            
$items->where('name'strtolower($name));
        }

        
$itemCode = isset($request->code) ? $request->code null;
        if (!empty(
$itemCode)) {
            
$items->where('code'strtolower($itemCode));
        }

        
$sku = isset($request->sku) ? $request->sku null;
        if (!empty(
$sku)) {
            
$items->where('sku'strtolower($sku));
        }

        
$vendor = isset($request->vendor) ? $request->vendor null;
        if (!empty(
$vendor)) {
            
$items->whereHas("vendor", function ($q) use ($vendor) {
                
$q->where('name'strtolower($vendor));
            })->
with('vendor');
        }

        
$brand = isset($request->brand) ? $request->brand null;
        if (!empty(
$brand)) {
            
$items->whereHas("brand", function ($q) use ($brand) {
                
$q->where('name'strtolower($brand));
            })->
with('brand');
        }

        
$status = isset($request->status) ? $request->status null;
        if (!empty(
$status)) {
            
$items->where('status'strtolower($status));
        }

        
$keyword = isset($request->keyword) ? $request->keyword null;
        if (!empty(
$keyword)) {
            if (
is_int($keyword)) {
                
$items->where('id'$keyword);
            } else {
                if (
strlen($keyword) >= 3) {
                    
$items->where(function ($query) use ($keyword) {
                        
$query->where('name''LIKE''%' $keyword '%')
                            ->
where('code''LIKE''%' $keyword '%')
                            ->
where('sku''LIKE''%' $keyword '%')
                            ->
orwhereHas("vendor", function ($q) use ($keyword) {
                                
$q->where('name''LIKE'"%" $keyword "%");
                            })->
with('vendor')
                            ->
orwhereHas("brand", function ($q) use ($keyword) {
                                
$q->where('name''LIKE'"%" $keyword "%");
                            })->
with('brand')
                            ->
orwhere('status'$keyword);
                    });
                }
            }
        }
        return 
$this->response([
            
'data' => ProductResource::collection($items->paginate($configs['rows_per_page'])),
            
'pagination' => $this->toArray($items->paginate($configs['rows_per_page'])->appends($request->all()))
        ]);
    }

    
/**
     * Store Product
     * @param Request $request
     * @return json $data
     */
    
public function store(Request $request)
    {
        
$attributeData = [];
        
$optionData = [];
        
$optionOrderBy 1;
        
$request['attribute_data'] = json_decode($request->attribute_datatrue);
        
$request['option_data'] = json_decode($request->option_datatrue);
        
$request['tags'] = json_decode($request->tagstrue);
        
$request['vendor_id'] = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$validator Product::storeValidation($request->all());
        if (
$validator->fails()) {
            return 
$this->unprocessableResponse($validator->messages());
        }
        try {
            while(
1) {
                
$itemCode Str::random(12);
                if (!
hasProductCodeExists(strtoupper($itemCode))) {
                    break;
                }
            }
            
$request['code'] = strtoupper($itemCode);
            
$request['available_from'] = !empty($request->available_from) ? DbDateFormat($request->available_from) : null;
            
$request['available_to'] = !empty($request->available_to) ? DbDateFormat($request->available_to) : null;
            
$request['discount_from'] = !empty($request->discount_from) ? DbDateFormat($request->discount_from) : null;
            
$request['discount_to'] = !empty($request->discount_to) ? DbDateFormat($request->discount_to) : null;
            
DB::beginTransaction();
            
$itemId = (new Product)->store($request->all());
            if (!empty(
$itemId)) {
                
$productCategory = [
                    
'product_id' => $itemId,
                    
'category_id' => $request->category_id
                
];
                (new 
ProductCategory)->store($productCategory);

                
// item other
                
$itemDetail['shipping_id'] = $request->shipping_id ?? null;
                
$itemDetail['product_id'] = $itemId;
                
$itemDetail['tax_id'] = $request->tax_id;
                
$itemDetail['warranty_type'] = $request->warranty_type;
                
$itemDetail['warranty_period'] = $request->warranty_period;
                
$itemDetail['warranty_policy'] = $request->warranty_policy;
                
$itemDetail['is_track_inventory'] = isset($request->is_track_inventory) && $request->is_track_inventory == 'on' 0;
                
$itemDetail['is_discount'] = isset($request->is_discount) && $request->is_discount == 'on' 0;
                
$itemDetail['is_featured'] = isset($request->is_featured) && $request->is_featured == 'on' 0;
                
$itemDetail['is_cash_on_delivery'] = isset($request->is_cash_on_delivery) && $request->is_cash_on_delivery == 'on' 0;
                
$itemDetail['is_hide_stock'] = isset($request->is_hide_stock) && $request->is_hide_stock == 'on' 0;
                (new 
ProductDetail)->store($itemDetail);
                
//end item other

                
if (isset($request->attribute_data)) {
                    foreach (
$request->attribute_data as $key => $attribute) {
                        if (!empty(
$attribute)) {
                            
$attributeData[] = [
                                
'product_id' => $itemId,
                                
'attribute_id' => $key,
                                
'payloads' => is_array($attribute) ? json_encode($attribute) : $attribute
                            
];
                        }
                    }
                    (new 
ProductAttribute)->store($attributeData);
                }
                if (isset(
$request->option_data)) {
                    foreach (
$request->option_data as $key => $option) {
                        
$labelData = [];
                        
$optionPriceData = [];
                        
$optionPriceTypeData = [];
                        
$optionValueOrderBy 1;
                        
$optionStatus = [];
                        
$inventoryIds = [];
                        foreach (
$option['label'] as $label) {
                            
$labelData[] = $label;
                        }
                        foreach (
$option['option_price'] as $priceKey => $option_price) {
                            
$optionPriceData[] = [
                                
'order_by' => $optionValueOrderBy++,
                                
'option_price' => $option_price
                            
];
                            
// insert inventory
                            
$inventory = [
                                
'label' => $labelData[$priceKey] ?? null,
                                
'vendor_id' => $request->vendor_id ?? null,
                                
'quantity' => isset($option['option_qty'][$priceKey]) && $option['option_qty'][$priceKey] > $option['option_qty'][$priceKey] : 0
                            
];
                            
$inventoryIds[] = (new Inventory)->store($inventory);
                        }
                        foreach (
$option['option_price_type'] as $option_price_type) {
                            
$optionPriceTypeData[] = $option_price_type;
                        }

                        foreach (
$option['option_status'] as $opStatus) {
                            
$optionStatus[] = $opStatus;
                        }

                        
$payloads = [
                            
'label' => $labelData,
                            
'option_price'  => $optionPriceData,
                            
'option_price_type' => $optionPriceTypeData,
                            
'inventory_id' => $inventoryIds,
                            
'option_status' => $optionStatus
                        
];
                        
$optionData = [
                            
'product_id' => $itemId,
                            
'name' => $option['option_name'],
                            
'type' => $option['type'],
                            
'order_by' => $optionOrderBy++,
                            
'is_required' => $option['is_required'],
                            
'payloads' => json_encode($payloads),
                        ];
                        
$optionId = (new ProductOption)->store($optionData);

                        
// update inventory & add item option id
                        
if (!empty($inventoryIds) && !empty($optionId)) {
                            foreach (
$inventoryIds as $invId) {
                                (new 
Inventory)->updateInventory(['item_option_id' => $optionId], $invId);
                            }
                        }
                    }
                }

                
//tag region
                
$insertProductTags = [];
                if (isset(
$request->tags) && !empty($request->tags)) {
                    foreach (
$request->tags as $tag) {
                        
$tagExists Tag::getAll()->where('name'$tag)->where('status'"Active")->first();
                        if (!empty(
$tagExists)) {
                            
$existsProductTag ProductTag::where('tag_id'$tagExists->id)->where('product_id'$itemId)->first();
                            if (empty(
$existsProductTag)) {
                                
$insertProductTags[] = [
                                    
"product_id" => $itemId,
                                    
"tag_id" => $tagExists->id
                                
];
                            }
                        }
                        else {
                            if (!empty(
$tag)) {
                                
$insertTag = [
                                    
"name" => $tag,
                                    
"vendor_id" => $request->vendor_id,
                                ];
                                
$tagId = (new Tag)->store($insertTag);
                                
$insertProductTags[] = [
                                    
"product_id" => $itemId,
                                    
"tag_id" => $tagId
                                
];
                            }
                        }
                    }
                    
$dupTagId = [];
                    foreach (
$insertProductTags as $key => $itTag) {
                        if (!
in_array($itTag['tag_id'], $dupTagId)) {
                            
$dupTagId[] = $itTag['tag_id'];
                        } else {
                            unset(
$insertProductTags[$key]);
                        }
                    }
                    (new 
ProductTag)->store($insertProductTags);
                }
                
//end tag region

                
DB::commit();
                return 
$this->okResponse([], __('The :x has been successfully saved.', ['x' => __('Product')]));
            }
        } catch (
Exception $e) {
            
DB::rollBack();
            return 
$this->unprocessableResponse($e->getMessage());
        }
        return 
$this->errorResponse();
    }

    
/**
     * Product Serch
     *
     * @param Request $request
     * @param $type
     */
    
public function search(Request $request$type)
    {
        
$id $request->product_id;
        
$vendorId = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$item Product::where('id'$id)->where('vendor_id'$vendorId);
        if (
$item->exists()) {
            if (
$type == 'relate') {
                return 
$this->response([
                    
'data' => (new Product)->search($request->search$request->product_id$type"api""vendorApi"),
                ]);
            }
            if (
$type == 'cross') {
                return 
$this->response([
                    
'data' => (new Product)->search($request->search$request->product_id$type"api""vendorApi"),
                ]);
            }
            if (
$type == 'up') {
                return 
$this->response([
                    
'data' => (new Product)->search($request->search$request->product_id$type"api""vendorApi"),
                ]);
            }
        }
        return 
$this->unprocessableResponse(__(':x does not exist.', ['x' => __('Product')]));
    }

    
/**
     * Detail Product
     * @param Request $request
     * @return json $data
     */
    
public function detail($id)
    {
        
$vendorId = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$item Product::where('id'$id)->where('vendor_id'$vendorId)->first();
        if (!empty(
$item)) {
            return 
$this->response([
                
'data' => new ProductDetailResource($item)
            ]);
        }
        return 
$this->unprocessableResponse(__(':x does not exist.', ['x' => __('Product')]));
    }

    
/**
     * Update Related Product
     *
     * @param $type
     * @param Request $request
     * @return \Illuminate\Http\RedirectResponse
     */
    
public function updateRelatedProduct($typeRequest $request)
    {
        
$vendorId = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$item Product::where('id'$request->product_id)->where('vendor_id'$vendorId);
        if (
$item->exists()) {
            
$request['related_product_id'] = json_decode($request->related_product_id);
            
$data = [];
            
$existValue = [];
            
$newProduct = [];
            
$itemIds = [];
            if (
$type == "relate") {
                
$oldRelateProduct ProductRelate::getAll()->where('product_id'$request->product_id)->pluck('related_product_id')->toArray();
                if (isset(
$request->related_product_id) && !empty($request->related_product_id)) {
                    foreach (
$request->related_product_id as $item) {
                        if (
in_array($item$oldRelateProduct)) {
                            
$existValue[] = $item;
                        } else {
                            
$itemIds[] = $item;
                            
$newProduct[] = [
                                
'product_id' => $request->product_id,
                                
'related_product_id' => $item
                            
];
                        }
                    }
                }
                if (
count($newProduct) > 0) {
                    
$data = [
                        
"product_id" => $request->product_id,
                        
"related_product_id" => $itemIds,
                    ];
                    
$validator ProductRelate::storeValidation($data$request->product_id);
                    if (
$validator->fails()) {
                        return 
$this->unprocessableResponse($validator->messages());
                    }
                    (new 
ProductRelate)->store($newProduct);
                }
                foreach (
$oldRelateProduct as $old) {
                    if (!
in_array($old$existValue)) {
                        (new 
ProductRelate)->remove($request->product_id$old);
                    }
                }
                return 
$this->okResponse([], __('The :x has been successfully saved.', ['x' => __('Related Products')]));
            } elseif (
$type == "cross") {
                
$oldCrossProduct ProductCrossSale::getAll()->where('product_id'$request->product_id)->pluck('cross_sale_product_id')->toArray();
                if (isset(
$request->related_product_id) && !empty($request->related_product_id)) {
                    foreach (
$request->related_product_id as $item) {
                        if (
in_array($item$oldCrossProduct)) {
                            
$existValue[] = $item;
                        } else {
                            
$itemIds[] = $item;
                            
$newProduct[] = [
                                
'product_id' => $request->product_id,
                                
'cross_sale_product_id' => $item
                            
];
                        }
                    }
                }
                if (
count($newProduct) > 0) {
                    
$data = [
                        
"product_id" => $request->product_id,
                        
"related_product_id" => $itemIds,
                    ];
                    
$validator ProductCrossSale::storeValidation($data$request->product_id);
                    if (
$validator->fails()) {
                        return 
$this->unprocessableResponse($validator->messages());
                    }
                    (new 
ProductCrossSale)->store($newProduct);
                }
                foreach (
$oldCrossProduct as $old) {
                    if (!
in_array($old$existValue)) {
                        (new 
ProductCrossSale)->remove($request->product_id$old);
                    }
                }
                return 
$this->okResponse([], __('The :x has been successfully saved.', ['x' => __('Cross Sale')]));
            } elseif (
$type == "up") {
                
$oldUpProduct ProductTag::getAll()->where('product_id'$request->product_id)->pluck('upsale_product_id')->toArray();
                if (isset(
$request->related_product_id) && !empty($request->related_product_id)) {
                    foreach (
$request->related_product_id as $item) {
                        if (
in_array($item$oldUpProduct)) {
                            
$existValue[] = $item;
                        } else {
                            
$itemIds[] = $item;
                            
$newProduct[] = [
                                
'product_id' => $request->product_id,
                                
'upsale_product_id' => $item
                            
];
                        }
                    }
                }
                if (
count($newProduct) > 0) {
                    
$data = [
                        
"product_id" => $request->product_id,
                        
"related_product_id" => $itemIds,
                    ];
                    
$validator ProductTag::storeValidation($data$request->product_id);
                    if (
$validator->fails()) {
                        return 
$this->unprocessableResponse($validator->messages());
                    }
                    (new 
ProductTag)->store($newProduct);
                }
                foreach (
$oldUpProduct as $old) {
                    if (!
in_array($old$existValue)) {
                        (new 
ProductTag)->remove($request->product_id$old);
                    }
                }
                return 
$this->okResponse([], __('The :x has been successfully saved.', ['x' => __('Up Sale')]));
            }
        } else {
            return 
$this->unprocessableResponse(__(':x does not exist.', ['x' => __('Product')]));
        }
    }

    
/**
     * Update Product Information
     * @param Request $request
     * @return json $data
     */
    
public function update(Request $request$id)
    {
        
$vendorId = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$item Product::where('id'$id)->where('vendor_id'$vendorId)->first();
        if (!empty(
$item)) {
            
$request['price'] = validateNumbers($request->price);
            
$request['discount_price'] = validateNumbers($request->discount_price);
            
$request['discount_amount'] = validateNumbers($request->discount_amount);
            
$request['maximum_discount_amount'] = validateNumbers($request->maximum_discount_amount);
            
$request['minimum_order_for_discount'] = validateNumbers($request->minimum_order_for_discount);
            
$request['attribute_data'] = json_decode($request->attribute_datatrue);
            
$request['option_data'] = json_decode($request->option_datatrue);
            
$request['vendor_id'] = $vendorId;
            
$validator Product::updateValidation($request->all(), $id);
            if (
$validator->fails()) {
                return 
$this->unprocessableResponse($validator->messages());
            }
            
$attributeData = [];
            
$editedAttribute = [];
            
$editedOption = [];
            
$optionData = [];
            
$optionOrderBy 1;
            try {
                
DB::beginTransaction();
                
$request['available_from'] = !empty($request->available_from) ? DbDateFormat($request->available_from) : null;
                
$request['available_to'] = !empty($request->available_to) ? DbDateFormat($request->available_to) : null;
                
$request['discount_from'] = !empty($request->discount_from) ? DbDateFormat($request->discount_from) : null;
                
$request['discount_to'] = !empty($request->discount_to) ? DbDateFormat($request->discount_to) : null;
                if ((new 
Product)->updateProduct($request->only('code''name''description''summary''video_url''review_count''review_average',
                    
'available_from''available_to''vendor_id''brand_id''status''is_virtual''is_shippable''is_shareable',
                    
'favourite_count''total_wish''price''discount_amount''discount_type''discounted_price''discount_from''discount_to',
                    
'maximum_discount_amount''minimum_order_for_discount''sku''is_inventory_enabled''item_quantity''stock_availability'), $id)) {
                    
$oldProductCategory ProductCategory::getAll()->where('product_id',$id)->first();
                    if (
$oldProductCategory->category_id != $request->category_id) {
                        (new 
ProductCategory)->updateProductCategory(['category_id' => $request->category_id], $id);
                    }

                    
// item other
                    
$itemDetail['shipping_id'] = $request->shipping_id ?? null;
                    
$itemDetail['tax_id'] = $request->tax_id;
                    
$itemDetail['warranty_type'] = $request->warranty_type;
                    
$itemDetail['warranty_period'] = $request->warranty_period;
                    
$itemDetail['warranty_policy'] = $request->warranty_policy;
                    
$itemDetail['is_track_inventory'] = isset($request->is_track_inventory) && $request->is_track_inventory == 'on' 0;
                    
$itemDetail['is_discount'] = isset($request->is_discount) && $request->is_discount == 'on' 0;
                    
$itemDetail['is_featured'] = isset($request->is_featured) && $request->is_featured == 'on' 0;
                    
$itemDetail['is_cash_on_delivery'] = isset($request->is_cash_on_delivery) && $request->is_cash_on_delivery == 'on' 0;
                    
$itemDetail['is_hide_stock'] = isset($request->is_hide_stock) && $request->is_hide_stock == 'on' 0;
                    (new 
ProductDetail)->updateProductDetail($itemDetail$id);
                    
//end item other

                    
$oldProductAttribute ProductAttribute::getAll()->where('product_id'$id)->pluck('attribute_id')->toArray();
                    
$oldProductOption ProductOption::getAll()->where('product_id',$id)->pluck('id')->toArray();
                    if (isset(
$request->attribute_data)) {
                        foreach (
$request->attribute_data as $key => $attribute) {
                            if (!empty(
$attribute)) {
                                if (
in_array($key $oldProductAttribute)) {
                                    (new 
ProductAttribute)->updateProductAttribute([
                                        
'payloads' => is_array($attribute) ? json_encode($attribute) : $attribute
                                    
], $key$id);
                                    
$editedAttribute[] = $key;
                                } else {
                                    (new 
ProductAttribute)->store([
                                        
'product_id' => $id,
                                        
'attribute_id' => $key,
                                        
'payloads' => is_array($attribute) ? json_encode($attribute) : $attribute
                                    
]);
                                }
                            }
                        }
                        foreach (
$oldProductAttribute as $oldAtt) {
                            if (!
in_array($oldAtt$editedAttribute)) {
                                (new 
ProductAttribute)->remove($oldAtt$id);
                            }
                        }
                    } else {
                        foreach (
$oldProductAttribute as $oldAtt) {
                            (new 
ProductAttribute)->remove($oldAtt$id);
                        }
                    }
                    if (isset(
$request->option_data)) {
                        foreach (
$request->option_data as $key => $option) {
                            
$labelData = [];
                            
$optionPriceData = [];
                            
$optionPriceTypeData = [];
                            
$optionValueOrderBy 1;
                            
$inventoryIds = [];
                            
$newInventoryIds = [];
                            
$optionStatus = [];
                            foreach (
$option['label'] as $label) {
                                
$labelData[] = $label;
                            }
                            foreach (
$option['option_price'] as $priceKey => $option_price) {
                                
$optionPriceData[] = [
                                    
'order_by' => $optionValueOrderBy++,
                                    
'option_price' => validateNumbers($option_price)
                                ];
                                
$itemOptionId = isset($option['item_option_id']) ? $option['item_option_id'] : null;
                                
//inventory
                                
$inventoryDetails Inventory::where('item_option_id'$itemOptionId)->where('label'$labelData[$priceKey] ?? null)->first();
                                if (!empty(
$inventoryDetails)) {
                                    
$inventoryIds[] = $inventoryDetails->id;
                                    (new 
Inventory)->updateInventory(['vendor_id' => $request->vendor_id ?? null'quantity' => isset($option['option_qty'][$priceKey]) && $option['option_qty'][$priceKey] > $option['option_qty'][$priceKey] : 0], $inventoryDetails->id);
                                } else {
                                    
$inventory = [
                                        
'label' => $labelData[$priceKey] ?? null,
                                        
'vendor_id' => $request->vendor_id ?? null,
                                        
'quantity' => isset($option['option_qty'][$priceKey]) && $option['option_qty'][$priceKey] > $option['option_qty'][$priceKey] : 0
                                    
];
                                    
$lastInsertInventoryId = (new Inventory)->store($inventory);
                                    if (!empty(
$itemOptionId)) {
                                        (new 
Inventory)->updateInventory(['item_option_id' => $itemOptionId], $lastInsertInventoryId);
                                    }
                                    
$inventoryIds[] = $lastInsertInventoryId;
                                    
$newInventoryIds[] = $lastInsertInventoryId;
                                }
                                
$inventoryLabelCheck Inventory::where('item_option_id'$itemOptionId)->pluck('label')->toArray();
                                foreach (
$inventoryLabelCheck as $lbChk) {
                                    if (!
in_array($lbChk$labelData)) {
                                        (new 
Inventory)->removeLabel($itemOptionId$lbChk);
                                    }
                                }
                                
//end inventory
                            
}
                            foreach (
$option['option_price_type'] as $option_price_type) {
                                
$optionPriceTypeData[] = $option_price_type;
                            }

                            foreach (
$option['option_status'] as $opStatus) {
                                
$optionStatus[] = $opStatus;
                            }

                            
$payloads = [
                                
'label' => $labelData,
                                
'option_price'  => $optionPriceData,
                                
'option_price_type' => $optionPriceTypeData,
                                
'inventory_id' => $inventoryIds,
                                
'option_status' => $optionStatus
                            
];
                            if (isset(
$option['item_option_id']) && in_array($option['item_option_id'] , $oldProductOption)) {
                                (new 
ProductOption)->updateProductOption([
                                    
'name' => $option['option_name'],
                                    
'type' => $option['type'],
                                    
'order_by' => $optionOrderBy++,
                                    
'is_required' => $option['is_required'],
                                    
'payloads' => json_encode($payloads),
                                ], 
$option['item_option_id']);
                                
$editedOption[] = $option['item_option_id'];
                            } else {
                                
$lastOptionId = (new ProductOption)->store([
                                    
'product_id' => $id,
                                    
'name' => $option['option_name'],
                                    
'type' => $option['type'],
                                    
'order_by' => $optionOrderBy++,
                                    
'is_required' => $option['is_required'],
                                    
'payloads' => json_encode($payloads),
                                ]);
                                
//update new inventory id
                                
foreach ($newInventoryIds as $newId) {
                                    (new 
Inventory)->updateInventory(['item_option_id' => $lastOptionId], $newId);
                                }
                            }
                        }
                        foreach (
$oldProductOption as $oldOp) {
                            if (!
in_array($oldOp$editedOption)) {
                                (new 
ProductOption)->remove($oldOp);
                                
// delete inventory
                                
(new Inventory)->remove($oldOp);
                            }
                        }
                    } else {
                        foreach (
$oldProductOption as $oldOp) {
                            (new 
ProductOption)->remove($oldOp);
                            
// delete inventory
                            
(new Inventory)->remove($oldOp);
                        }
                    }


                }
                
//tag
                
$itemTag ProductTag::where('product_id'$id)->pluck('tag_id');
                
$insertProductTags = [];
                
$removeCheckTagId = [];
                if (isset(
$request->tags) && !empty($request->tags)) {
                    foreach (
$request->tags as $tag) {
                        
$tagExists Tag::getAll()->where('name'$tag)->where('status'"Active")->first();
                        if (!empty(
$tagExists)) {
                            
$existsProductTag ProductTag::where('tag_id'$tagExists->id)->where('product_id'$id)->first();
                            isset(
$existsProductTag->tag_id) ? $removeCheckTagId[] = $existsProductTag->tag_id '';
                            if (empty(
$existsProductTag)) {
                                
$insertProductTags[] = [
                                    
"product_id" => $id,
                                    
"tag_id" => $tagExists->id
                                
];
                            }
                        }
                        else {
                            if (!empty(
$tag)) {
                                
$insertTag = [
                                    
"name" => $tag,
                                    
"vendor_id" => $request->vendor_id,
                                ];
                                
$tagId = (new Tag)->store($insertTag);
                                
$insertProductTags[] = [
                                    
"product_id" => $id,
                                    
"tag_id" => $tagId
                                
];
                            }
                        }
                    }
                    
$dupTagId = [];
                    foreach (
$insertProductTags as $key => $itTag) {
                        if (!
in_array($itTag['tag_id'], $dupTagId)) {
                            
$dupTagId[] = $itTag['tag_id'];
                        } else {
                            unset(
$insertProductTags[$key]);
                        }
                    }
                }
                if (!empty(
$itemTag)) {
                    foreach (
$itemTag as $delTag) {
                        if (
in_array($delTag$removeCheckTagId)) {
                            continue;
                        } else {
                            (new 
ProductTag)->remove($id$delTag);
                        }
                    }
                }
                (new 
ProductTag)->store($insertProductTags);
                
//end tag
                
DB::commit();
                return 
$this->okResponse([], __('The :x has been successfully saved.', ['x' => __('Product')]));
            } catch (
Exception $e) {
                
DB::rollBack();
                
$this->unprocessableResponse($e->getMessage());
            }
        } else {
            return 
$this->unprocessableResponse(__(':x does not exist.', ['x' => __('Product')]));
        }
    }

    
/**
     * Remove the specified Product from db.
     * @param Request $request
     * @return json $data
     */
    
public function destroy(Request $request$id)
    {
        
$vendorId = isset(auth()->user()->vendorUser->vendor_id) ? auth()->user()->vendorUser->vendor_id null;
        
$item Product::where('id'$id)->where('vendor_id'$vendorId);
        if (
$item->exists()) {
            
$result = (new Product)->remove($id);
            return 
$this->okResponse([], $result['message']);
        }
        return 
$this->unprocessableResponse(__(':x does not exist.', ['x' => __('Product')]));
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0071 ]--