HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,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_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.shooperm.com/Modules/Product/Repositories/AttributeRepository.php
<?php

namespace Modules\Product\Repositories;

use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Modules\Product\Entities\Color;
use Modules\Product\Entities\Attribute;
use Modules\Product\Entities\AttributeValue;
use Modules\Product\Entities\ProductVariations;
use Modules\Seller\Entities\SellerProduct;
use Modules\Seller\Entities\SellerProductSKU;

class AttributeRepository
{
    public function getAll()
    {
        return Attribute::latest()->get();
    }

    public function getActiveAll()
    {
        return Attribute::with('values')->latest()->Active()->get();
    }

    public function getActiveAllWithoutColor()
    {
        return Attribute::with('values')->where('id', '!=', 1)->latest()->Active()->get();
    }

    public function getColorAttr()
    {
        return Attribute::with('values')->where('id', 1)->first();
    }

    public function create(array $data)
    {
        DB::beginTransaction();
        $variant = new Attribute();
        $variant->fill($data)->save();
        $variant_values = [];
        if ($data['variant_values']) {
            foreach ($data['variant_values'] as $value) {
                if ($value) {
                    $variant_values [] = [
                        "value" => $value,
                        "attribute_id" => $variant->id,
                        "created_at" => Carbon::now()
                    ];
                }
            }
            AttributeValue::insert($variant_values);
        }
        DB::commit();
    }

    public function find($id)
    {
        return Attribute::with('values', 'values.color')->findOrFail($id);
    }

    public function update(array $data, $id)
    {
        DB::beginTransaction();
        $variant = Attribute::findOrFail($id);
        $variant->update([
           'name' => $data['name'], 
           'description' => $data['description'],
           'status' => $data['status']
        ]);
        
        if ($variant->id != 1 && $data['edit_variant_values']) {
            $collection1 = collect($data['edit_variant_values']);
            $collection2 = collect($variant->values->pluck('value','id'));
            $newDifferentItems = $collection1->diff($collection2);
            $new_variant_values = $newDifferentItems->all();
            if(count($new_variant_values) > 0) {
                foreach ($new_variant_values as $key => $new_variant_value) {
                    if($data['value_id'][$key] != 'null'){
                        $attri_value = AttributeValue::find($data['value_id'][$key]);
                        if($attri_value){
                            $attri_value->update([
                                'value' => $new_variant_value
                            ]);
                        }
                    }else{
                        AttributeValue::create([
                            'value' => $new_variant_value,
                            "attribute_id" => $variant->id
                        ]);
                    }
                }
            }else {
                $differentItems = $collection2->diff($collection1);
                $old_variant_values = $differentItems->all();
                if (count($old_variant_values) > 0) {
                    foreach ($old_variant_values as $key => $old_variant_value) {
                        $exixt_product = ProductVariations::where('attribute_value_id', $key)->first();
                        if ($exixt_product == null) {
                            AttributeValue::find($key)->delete();
                        }
                    }
                }
            }
        }else {
            $collection1 = collect($data['edit_variant_c_name']);
            $collection2 = collect($variant->colors->pluck('name','id'));
            $newDifferentItems = $collection1->diff($collection2);
            $new_variant_values = $newDifferentItems->all();
            $differentItems = $collection2->diff($collection1);
            $old_variant_values = $differentItems->all();
            if (count($new_variant_values) > 0) {
                foreach ($new_variant_values as $key => $new_variant_value) {
                    $check = $data['color_with_id'][$key];
                    if($check == 'null'){
                        $attribute_val = new AttributeValue;
                        $attribute_val->value = $new_variant_value;
                        $attribute_val->attribute_id = $variant->id;
                        $attribute_val->created_at = Carbon::now();
                        $attribute_val->updated_at = Carbon::now();
                        $attribute_val->save();
                        $color = new Color;
                        $color->attribute_value_id = $attribute_val->id;
                        $color->name = $data['edit_variant_c_name'][$key];
                        $color->save();
                    }else{
                        $check_data = explode('-',$check);
                        $attribute_value = AttributeValue::find($check_data[1]);
                        $attribute_value->color->update([
                            'name' => $data['edit_variant_c_name'][$key]
                        ]);
                    }
                }
            }
            if(count($old_variant_values) > 0) {
                foreach ($old_variant_values as $key => $old_variant_value) {
                    $col = Color::find($key);
                    $exixt_product = ProductVariations::where('attribute_value_id', $col->attribute_value_id)->first();
                    if ($exixt_product == null) {
                        AttributeValue::find($col->attribute_value_id)->delete();
                        $col->delete();
                    }
                }
            }
            foreach($collection1 as $k => $val){
                $col = Color::with('attribute_value')->where('name', $val)->first();
                if($col){
                    $col->attribute_value->update([
                        'value' => $data['edit_variant_values'][$k]
                    ]);
                }
            }
        }
        DB::commit();
    }

    public function delete($id)
    {
        $attribute = Attribute::findOrFail($id);
        if(ProductVariations::where('attribute_id', $id)->first() == null)
        {
            $attribute->values()->delete();
            $attribute->delete();
        }
        else {
            return "not_possible";
        }
    }

    public function getAttributeForSpecificCategory($category_id, $category_ids)
    {
        // $seller_products = SellerProductSKU::whereHas('product', function($query) use($category_ids, $category_id){
        //     $query->where('status',1)->whereHas('product',function($query) use($category_ids, $category_id){
        //         return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
        //             $q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
        //                 $q2->whereIn('id',$category_ids);
        //             });
        //         });
        //     });
        // })->pluck('product_sku_id');
        $seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($category_ids, $category_id){
            return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
                $q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
                    $q2->whereRaw("id in ('" . implode("','",$category_ids) . "')");
                });
                $q1->where('category_id',$category_id);
            });
        })->pluck('product_sku_id')->toArray();

        // $attribute_ids = ProductVariations::whereIn('product_sku_id', $seller_products)->where('attribute_id', '!=', 1)->pluck('attribute_id')->toArray();
        $attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', '!=', 1)->pluck('attribute_id')->toArray();
        
        // $attribute_list = Attribute::with('values')->whereIn('id', $attribute_ids)->take(20)->get();
        $attribute_list = Attribute::with('values')->whereRaw("id in ('" . implode("','", $attribute_ids)."')")->where('status',1)->take(20)->get();
        return $attribute_list;
    }

    public function getColorAttributeForSpecificCategory($category_id, $category_ids)
    {
        // $seller_products = SellerProductSKU::whereHas('product', function($query) use($category_ids, $category_id){
        //     $query->where('status',1)->whereHas('product',function($query) use($category_ids, $category_id){
        //         return $query->WhereHas('categories',function($q1) use($category_ids, $category_id){
        //             $q1->where('category_id', $category_id)->orWhereHas('subCategories', function($q2)use($category_ids){
        //                 $q2->whereIn('id', $category_ids);
        //             });
        //         });
        //     });
        // });
        
        // $seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($category_ids, $category_id){
        //     return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
        //         $q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
        //             $q2->whereIn('id',$category_ids);
        //         });
        //     });
        // })->pluck('product_sku_id')->toArray();
        $seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($category_ids, $category_id){
            return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
                $q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
                    $q2->whereRaw("id in ('" . implode("','",$category_ids)."')");
                });
                $q1->where('category_id',$category_id);
            });
        })->pluck('product_sku_id')->toArray();
        // $product_skus = $seller_products->unique('product_sku_id')->pluck('product_sku_id');

        // $attribute_ids = ProductVariations::whereIn('product_sku_id', $seller_products)->where('attribute_id', 1)->pluck('attribute_id')->toArray();
        $attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', 1)->pluck('attribute_id')->toArray();

        // $attribute_value_ids = ProductVariations::whereIn('product_sku_id', $product_skus)->where('attribute_id', 1)->pluck('attribute_value_id');

        // $attribute_list = Attribute::with('values')->whereIn('id', $attribute_ids)->first();
        $attribute_list = Attribute::with('values')->whereRaw("id in ('". implode("','", $attribute_ids)."')")->where('status', 1)->first();
        return $attribute_list;
    }

    public function getColorAttributeForSpecificBrand($brand_id)
    {
        // $seller_products = SellerProductSKU::whereHas('product', function($query) use($brand_id){
        //     $query->where('status',1)->whereHas('product',function($query) use($brand_id){
        //         return $query->where('brand_id',$brand_id)->where('status', 1);
        //     });
        // })->get();

        $seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($brand_id){
            return $query->where('brand_id', $brand_id);
        })->distinct('product_sku_id')->pluck('product_sku_id')->toArray();

        // $product_skus = $seller_products->unique('product_sku_id')->pluck('product_sku_id');
        $attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', 1)->pluck('attribute_id')->toArray();
        // $attribute_value_ids = ProductVariations::whereIn('product_sku_id', $product_skus)->where('attribute_id', 1)->get()->pluck('attribute_value_id');
        $attribute_list = Attribute::with('values')->whereRaw("id in ('". implode("','", $attribute_ids)."')")->where('status', 1)->first();
        return $attribute_list;
    }

    public function getAttributeForSpecificBrand($brand_id)
    {
        // $seller_products = SellerProductSKU::whereHas('product', function($query) use($brand_id){
        //     $query->where('status',1)->whereHas('product',function($query) use($brand_id){
        //         return $query->where('brand_id',$brand_id);
        //     });
        // })->get();
        $seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($brand_id){
            return $query->where('brand_id',$brand_id)->where('products.status', 1);
        })->distinct('product_sku_id')->pluck('product_sku_id')->toArray();

        // $product_skus = $seller_products->unique('product_sku_id')->pluck('product_sku_id');
        $attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', '!=', 1)->pluck('attribute_id')->toArray();
        // $attribute_value_ids = ProductVariations::whereIn('product_sku_id', $product_skus)->where('attribute_id', '!=', 1)->get()->pluck('attribute_value_id');
        $attribute_list = Attribute::with('values')->whereRaw("id in ('". implode("','", $attribute_ids)."')")->where('status', 1)->get();
        return $attribute_list;
    }
}