MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 8.0.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/amanda/app/Http/Controllers/ProductController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Product;
use App\Product_image;
use App\Product_price;
use App\Product_video;
use DB;
use App\Category;
use App\Tag;
use App\Product_tag;
use File;
class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {   
      
        
        $limit = config('constants.limit');
        $productRs = Product::leftjoin('product_tag','product_tag.product_id','products.id')
                    ->leftjoin('categories','categories.id','products.category_id')
                    ->select('products.*','categories.name as category_name',
                        DB::raw("(select p1.price from product_price as p1 where p1.product_id=products.id) as price"),
                        DB::raw("(select p1.days from product_price as p1 where p1.product_id=products.id) as days")
                        ,DB::raw("(GROUP_CONCAT(product_tag.tag_id SEPARATOR ',')) as tag_ids")
                        )    
                    ->orderBy('products.id','desc')
                    ->groupBy('products.id')
                    ->get();      
                    // ->paginate(5);
        
        $products=array();
        foreach ($productRs as $quest) {
            $quest->id=intval($quest->id);
            $quest->showImages = $this->getProductImage($quest->id);
            $quest->showVideos = $this->getProductVideo($quest->id);
            // $quest->showPriceDay = $this->getProductPrice($quest->id);
            $quest->showProductTag = $this->getProductTag($quest->id);
            if($quest->image!=null){

                if (file_exists(config('constants.imageFolderPath')."/images/".$quest->image)) {
                    $path = "/api/imagesView/".$quest->image;
                } else {
                    $path = "/api/videoView/".$quest->image;
                }     

                $ext = \File::extension($path);
                if($ext=="jpg" || $ext=="jpeg" || $ext=="png" || $ext=="JPEG" || $ext=="JPG")
                {
                    $fileType ="image";
                    $filePath = "/api/imagesView/".$quest->image;
             
                }
                else
                {
                    $fileType="video";
                    $filePath = "/api/videoView/".$quest->image;
                }
               /* $data = [
                    'path'=>$filePath,
                    'imageType'=>'profile',
                    'fileType'=>$fileType
                ];*/
                
                $data=array();
                $data[0]['path']=$path;
                $data[0]['imageType']='profile';
                $data[0]['fileType']=$fileType;

                $quest->profileShow = $data;
                $quest->profile = $quest->image;
                
            }
            $products[]=$quest;
        }
        $category = Category::get();
        $tags = Tag::get();    
        $data = ['products'=>$products,'category'=>$category,'tags'=>$tags];
        return response()->json($data,200);
    }


    public function productSearch(Request $request)
    { 
        $search = $request->search;
        $limit = config('constants.limit');
        $productRs = Product::leftjoin('product_tag','product_tag.product_id','products.id')
                    ->leftjoin('categories','categories.id','products.category_id')
                     ->where(function($q) use ($search)
                        {
                            $q->orWhere('products.name', 'like', '%' . $search . '%');
                            $q->orWhere('categories.name', 'like', '%' . $search . '%');
                        })
                    ->select('products.*','categories.name as category_name',
                        DB::raw("(select p1.price from product_price as p1 where p1.product_id=products.id) as price"),
                        DB::raw("(select p1.days from product_price as p1 where p1.product_id=products.id) as days")
                        ,DB::raw("(GROUP_CONCAT(product_tag.tag_id SEPARATOR ',')) as tag_ids")
                        )    
                    ->orderBy('products.id','desc')
                    ->groupBy('products.id')
                    ->get();      
                    // ->paginate(5);
        
        $products=array();
        foreach ($productRs as $quest) {
            $quest->id=intval($quest->id);
            $quest->showImages = $this->getProductImage($quest->id);
            $quest->showVideos = $this->getProductVideo($quest->id);
            // $quest->showPriceDay = $this->getProductPrice($quest->id);
            $quest->showProductTag = $this->getProductTag($quest->id);
            if($quest->image!=null){
                if (file_exists(config('constants.imageFolderPath')."/images/".$quest->image)) {
                    $path = "/api/imagesView/".$quest->image;
                } else {
                    $path = "/api/videoView/".$quest->image;
                }     

                $ext = \File::extension($path);
                if($ext=="jpg" || $ext=="jpeg" || $ext=="png" || $ext=="JPEG" || $ext=="JPG")
                {
                    $fileType ="image";
                    $filePath = "/api/imagesView/".$quest->image;
             
                }
                else
                {
                    $fileType="video";
                    $filePath = "/api/videoView/".$quest->image;
                }
                
                    $data = [
                        'path'=>$path,
                        'imageType'=>'profile',
                        'fileType'=>$fileType
                    ];

                    /*$data = array();
                    $data[0]['path']=$path;
                    $data[0]['imageType']='profile';
                    $data[0]['fileType']=$fileType;*/

                $quest->profileShow = $data;

                $quest->profile = $quest->image;
            }
            $products[]=$quest;
        }
        $category = Category::get();
        $tags = Tag::get();    
        $data = ['products'=>$products,'category'=>$category,'tags'=>$tags];
        return response()->json($data,200);
    }


 
   
    public function getProductImage($id) {
        $result = Product_image::where(array('product_id' => $id))->get();
        $array =array();
        foreach ($result as $value) {
             $value->id=intval($value->id);
            $value->path =  "/api/imagesView/".$value->fileName;
            $value->imageType="multiImage";
            $array[]=$value;
        }
     
        return $array;
    }

    public function getProductVideo($id) {
        $result = Product_video::where(array('product_id' => $id))->get();
        $array =array();
        foreach ($result as $value) {
             $value->id=intval($value->id);
            $value->path =  "/api/videoView/".$value->fileName;
            $array[]=$value;
        }
     
        return $array;
    }

    public function getProductPrice($id) {
        $result = Product_price::where(array('product_id' => $id))->get();
        return $result;
    }

    public function getProductTag($id) {
        // $result = Product_tag::where(array('product_id' => $id))->select('product_tag.tag_id')->get();

        $result = Product_tag::join('tags','product_tag.tag_id','tags.id')
                    ->where(array('product_tag.product_id'=>$id))
                    ->select('tags.*')
                    ->get();

        // $array =array();
        /*foreach ($result as $value) {
            $value->id=intval($value->id);
            $value->tag_id=intval($value->tag_id);
            $array[]=$value;
        }*/
     
        return $result;
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {   

        $request->validate([
            'name' => 'required|unique:products,name|max:30',
            'description' => 'required|max:500',
            'images' => 'image|mimes:jpeg,png,jpg|max:2048',
            'videos'  => 'mimes:mp4,m4v,mov,mpeg,webm|max:20000',
            'price' => "required|numeric",
            'profile' => 'required',
            'days' => "required",
            'category_id' => 'required|not_in:0',
            'tag_ids' => 'required',
        ]);

        DB::beginTransaction();
        try {
            $profile=null;
            $fileType='image';
            if(!empty($request->profile)){
                foreach ($request->profile as $val) {
                    $profile = $val['name'];
                    $fileType = $val['fileType'];
                }
            }
            $product = Product::create([
                'name' => $request->name,
                'description' => $request->description,
                'units' => 1,
                'price' => 1,
                'image' => $profile,
                'fileType'=>$fileType,
                'type'=>"single",
                'status'=>'active',
                'category_id' => $request->category_id['id']
            ]);

           
            if(!empty($product->id)){
                if(!empty($request->multipleFiles)){
                    foreach ($request->multipleFiles as $val) {
                        if($val['filetype']=="image"){
                            $product_image = Product_image::create([
                                'fileName' => $val['name'],
                                'product_id'=> $product->id,
                            ]);
                        }
                        else if($val['filetype']=="video"){
                            $product_video = Product_video::create([
                                'fileName' => $val['name'],
                                'product_id'=> $product->id,
                            ]);
                        }
                    }
                }

               // if(!empty($request->days)){
                    $product_price = Product_price::create([
                        'price' => $request->price,
                        'days' => $request->days,
                        'status' => 'active',
                        'product_id'=> $product->id,
                    ]);
               // }

                if(!empty($request->tag_ids)){
                    foreach ($request->tag_ids as $tagId) {
                        Product_tag::create([
                            'tag_id' => $tagId['id'],
                            'product_id'=> $product->id,
                        ]);
                    }
                }
            }
            DB::commit();
            return response()->json([
                'status' => (bool) $product,
                'data'   => $product,
                'message' => $product ? 'Product Created!' : 'Error Creating Product'
            ]);
        
        } catch (\Throwable $e) {
            DB::rollback();
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Error in product add',
                'errors' => [],
                ],
                422
            );
        }
        
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show()
    {   
        $product = Product::get(); 
        return response()->json($product,200); 
    }

    public function uploadFile(Request $request)
    {   
       
        $m=1;
        $multiImage=array();

        DB::beginTransaction();
        try {

            if(!empty($request->images)){
                foreach ($request->images as $data) {
                    if(preg_match('/data:image\/(jpg|jpeg|png);base64,(.*)/i', $data, $matches)) {

                        $imageType = $matches[1];
                        $imageData = base64_decode($matches[2]);
                        $image = imagecreatefromstring($imageData);
                        $filename = time().'m'.$m. '.' . $imageType;

                        $filepath =config('constants.imageFolderPath')."/images/";
                        if(!File::exists($filepath)) {
                            mkdir($filepath, 0755, true);
                        }
                       
                        $path =$filepath.$filename;
                        file_put_contents($path, $data); 
                        $imageName = $filename;
                        file_put_contents($path, base64_decode(explode(',',$data)[1]));
                        $multiImage[]=array('name'=>$imageName,'path'=>$path,'filetype'=>'image','id'=>0);
                        
                    }
                    if(preg_match('/data:video\/(mp4|m4v|mov|mpeg|webm);base64,(.*)/i', $data, $matches)) {
                        //mp4,m4v,webm,flv,mov,mpeg            
                        $imageType = $matches[1];
                        $imageData = base64_decode($matches[2]);
                        // $image = imagecreatefromstring($imageData);
                        $filename = time().'v'.$m. '.' . $imageType;

                       $filepath =config('constants.imageFolderPath')."/video/";
                        if(!File::exists($filepath)) {
                            mkdir($filepath, 0755, true);
                        }
                       
                        $path =$filepath.$filename;
                        file_put_contents($path, $data); 
                        $imageName = $filename;

                        file_put_contents($path, base64_decode(explode(',',$data)[1]));

                        $multiImage[]=array('name'=>$imageName,'path'=>$path,'filetype'=>'video','id'=>0);
                        // $j++;
                    }
                    
                     /*else {
                        throw new \Exception('did not match data URI with image data');
                    }     */

                    $m++;      
                }
            }
            $profileImage = array();
            if($request->profile!=null){

                $data = $request->profile;
                if(preg_match('/data:image\/(jpg|jpeg|png);base64,(.*)/i', $data, $matches)) {
                        $imageType = $matches[1];
                        $imageData = base64_decode($matches[2]);
                        $image = imagecreatefromstring($imageData);
                        $filename = time(). '.' . $imageType;
                        // $path = public_path("upload/images")."/".$filename;
                        $filepath =config('constants.imageFolderPath')."/images/";
                        if(!File::exists($filepath)) {
                            mkdir($filepath, 0755, true);
                        }
                       
                        $path =$filepath.$filename;
                        file_put_contents($path, $data); 
                        $imageName = $filename;
                        file_put_contents($path, base64_decode(explode(',',$data)[1]));
                        
                        // $profileImage []= array('name'=>$imageName,'path'=>asset("upload/images/$filename"),'fileType'=>'image','imageType'=>'profile','id'=>0);

                         $profileImage []= array('name'=>$imageName,'path'=>$path,'fileType'=>'image','imageType'=>'profile','id'=>0);
                }
                else if(preg_match('/data:video\/(mp4|m4v|mov|mpeg|webm);base64,(.*)/i', $data, $matches)) {
                        //mp4,m4v,webm,flv,mov,mpeg            
                        $imageType = $matches[1];
                        $imageData = base64_decode($matches[2]);
                        // $image = imagecreatefromstring($imageData);
                        $filename = time().'.' . $imageType;

                        $filepath =config('constants.imageFolderPath')."/video/";
                        if(!File::exists($filepath)) {
                            mkdir($filepath, 0755, true);
                        }
                       
                        $path =$filepath.$filename;

                        // $path = public_path("upload/video")."/".$filename;
                        file_put_contents($path, $data); 
                        $imageName = $filename;

                        file_put_contents($path, base64_decode(explode(',',$data)[1]));

                        $profileImage []= array('name'=>$imageName,'path'=>$path,'fileType'=>'video','imageType'=>'profile','id'=>0);
                        // $j++;
                    }
            }
            DB::commit();
            return response()->json(['multiImage'=>$multiImage,'profileImage'=>$profileImage],201);

        } catch (\Throwable $e) {
            DB::rollback();
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Error in file upload',
                'errors' => [],
                ],
                422
            );
        }
       
        
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {   
        $request->validate([
            'name' => 'required|max:30|unique:products,name,'.$id,
            'description' => 'max:500',
            'days' => "required",
            'category_id' => 'required|not_in:0',
            'tag_ids' => 'required',
           // 'profile' => 'image|mimes:jpeg,png,jpg|max:2048',
        ]);
        $productcheck = Product::find($id);
        
        if(empty($request->profile) && ($productcheck->image==null || $productcheck->image=='')){
            return response()->json(array('success' => false,"message"=>"The profile field is required"), 422); 
        // return response()->json(array('success' => false,"message"=>config('constants.permission')), 404); 
        }


        DB::beginTransaction();
        try {

            $product = Product::find($id);
       
            if(!empty($request->profile)){
                foreach ($request->profile as $val) {
                     $product->image  = $val['name'];
                     $product->fileType = $val['fileType'];
                }
            }

            $status = $product->update(
                $request->only(['name', 'description'])
            );
            // $product->image = $profile;
            $product->category_id= $request->category_id['id'];
              $product->save();

            if(!empty($request->multipleFiles)){
                // Product_image::where('product_id', $id)->delete();
                // Product_video::where('product_id', $id)->delete();
                foreach ($request->multipleFiles as $val) {
                    if($val['filetype']=="image"){
                        $product_image = Product_image::create([
                            'fileName' => $val['name'],
                            'product_id'=> $id,
                        ]);
                    }
                    else if($val['filetype']=="video"){
                        $product_video = Product_video::create([
                            'fileName' => $val['name'],
                            'product_id'=> $id,
                        ]);
                    }
                }
            }

            /*if(!empty($request->days)){*/
                Product_price::where('product_id', $id)->delete();
               /* if(!empty($request->price)){
                    $request->price=0.00;
                }*/
                $product_price = Product_price::create([
                    'price' => $request->price,
                    'days' => $request->days,
                    'status' => 'active',
                    'product_id'=> $id,
                ]);
            // }

            if(!empty($request->tag_ids)){
                Product_tag::where('product_id', $id)->delete();
                foreach ($request->tag_ids as $tagId) {
                    Product_tag::create([
                        'tag_id' => $tagId['id'],
                        'product_id'=> $product->id,
                    ]);
                }
            }
            DB::commit();
            return response()->json([
                'status' => $status,
                'message' => $status ? 'Product Updated!' : 'Error Updating Product'
            ]);
        } 
        catch (\Throwable $e) {
            DB::rollback();
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Error in product update',
                'errors' => [],
                ]);
        }
        
    }

    public function updateUnits(Request $request, Product $product)
    {
        $product->units = $product->units + $request->get('units');
        $status = $product->save();

        return response()->json([
            'status' => $status,
            'message' => $status ? 'Units Added!' : 'Error Adding Product Units'
        ]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        // $status = $product->delete();

        $status = Product::find($id);
       /* $status->delete_product_at = 1;
        $status->save();*/
        /*if($status)
        {
            Product_image::where(array('product_id'=>$id))->delete();
            Product_video::where(array('product_id'=>$id))->delete();
            Product_price::where(array('product_id'=>$id))->delete();
        }*/
        $status->delete();

        return response()->json([
            'status' => $status,
            'message' => $status ? 'Product Deleted!' : 'Error Deleting Product'
        ]);
    }

    public function deleteProductImage($id)
    {
        // $status= Product_image::where(array('id'=>$id))->delete();

        $Product_image = Product_image::find($id);

        if(!empty($Product_image)){
            $image_path = config('constants.imageFolderPath')."/images/".$Product_image->fileName;
            if (file_exists($image_path)) {
                @unlink($image_path);
            }
        }
        $status = $Product_image->delete();
        return response()->json([
            'status' => $status,
            'message' => $status ? 'Product Image Deleted!' : 'Error Deleting Product Image'
        ]);
    }

    public function deleteProductVideo($id)
    {
        // $status= Product_video::where(array('id'=>$id))->delete();

        $Product_video = Product_video::find($id);
       
        if(!empty($Product_video)){
            $image_path =config('constants.imageFolderPath')."/video/".$Product_video->fileName;
            if (file_exists($image_path)) {
                @unlink($image_path);
            }
        }
        $status = $Product_video->delete();
        
        return response()->json([
            'status' => $status,
            'message' => $status ? 'Product Video Deleted!' : 'Error Deleting Product Video'
        ]);
    }

    



}