File: /var/www/vhost/disk-apps/agile-selling-orl/app/Http/Controllers/CouponsController.php
<?php
namespace App\Http\Controllers;
use App\Coupons;
use Illuminate\Http\Request;
use DB;
use Datatables;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
class CouponsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // return view('wallet_coupons.coupons');
        $coupons = Coupons::latest()->paginate(5);
        return view('coupons.coupons',compact('coupons'))
            ->with('i', (request()->input('page', 1) - 1) * 5);
        //
    }
    public function indexAdd()
    {
        return view('coupons.addCoupons');
    }
    public function indexEdit($id){
        $coupons = Coupons::find($id);
        return view('coupons.editCoupons')->with('coupons', $coupons);
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $wallet_coupons = new Coupons();
        $wallet_coupons->name = $request["name"];
        $wallet_coupons->coupon_image = $request["coupon_image"];
        $wallet_coupons->code_coupon = $request["code_coupon"];
        $wallet_coupons->link = $request["link"];
        $wallet_coupons->active = true;
        $wallet_coupons->save();
        if($wallet_coupons){
          return array('r' => true, 'd' => array('id'=>$wallet_coupons->id), 'm'=> trans('messages.screen_instagram_tag14'));
        }else{
          return array('r' => false, 'd' => null, 'm'=> trans('messages.screen_instagram_tag15'));
        }
        //
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }
    /**
     * Display the specified resource.
     *
     * @param  \App\Coupons  $coupons
     * @return \Illuminate\Http\Response
     */
    public function show(Coupons $coupons)
    {
        //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Coupons  $coupons
     * @return \Illuminate\Http\Response
     */
    public function edit(Coupons $coupons)
    {
        //
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Coupons  $coupons
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {
        $banner = Coupons::find($request["id"]);
        $banner->name = $request["name"];
        if($request["coupon_image"] != ''){
          $banner->coupon_image = $request["coupon_image"];
        }
        $banner->link = $request["link"];
        $banner->update();
        if ($banner) {
          return array('r' => true, 'd' => array('id'=>$banner->id), 'm'=> trans('messages.screen_coupon_tag16'));
        }else{
          return array('r' => false,'d' => null, 'm'=> trans('messages.screen_coupon_tag17'));
        }
        //
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Coupons  $coupons
     * @return \Illuminate\Http\Response
     */
    public function destroy(Coupons $coupons)
    {
        //
    }
    public function activateCoupons(Request $request){
        $id= $request['id'];
        $state=  $request['state'];
        $banner = Coupons::find($id);
        $banner->active = $state;
        $banner->update();
        if ($banner) {
          return array('r' => true, 'd' => null, 'm'=> trans('messages.screen_coupon_tag18'));
        }else{
          return array('r' => false,'d' => null, 'm'=> trans('messages.screen_coupon_tag19'));
        }
    }
    public function tableFilter(){
        $obj = $obj = DB::table('coupons')
        ->select('coupons.id','coupons.name','coupons.coupon_image','coupons.code_coupon','coupons.link','coupons.active');
        return Datatables::of($obj)
        ->editColumn('coupon_image', function($obj){
            if ($obj->coupon_image == '') {
                return '<div class="media-left">
                        <img src="' . env('AWS_URL') . '/public/no_image.png" class="media-object" alt="' . $obj->name . '">
                        </div>';
            } else {
                return '<div class="media-left">
                        <img src="' . env('AWS_URL') . '/coupons/' . $obj->coupon_image . '" class="media-object" alt="' . $obj->name . '">
                        </div>';
                    }
          })
        ->addColumn('actions', function ($obj) {
            return '
               <i class="fa fa-pencil iconMini " onClick="clickEditCoupon('.$obj->id.')" data-id="'.$obj->id.'" data-toggle="tooltip" data-placement="bottom" title="Editar" style="cursor:pointer;"></i>
            ';
        })
        ->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="chkCoupon('.$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="chkCoupon('.$obj->id.')" data-id="'.$obj->id.'" id="Checkactive'.$obj->id.'" name="Checkactivo" checked="" />
                        <span></span> Si </label> </div>  </label> </div>';
            }
           })
           ->rawColumns([ 'active','actions','coupon_image'])
        ->make(true);
    }
    public function saveImage(Request $request){
        $coupon_id = $request["coupon_id"];
        $extension = $request->file('image')->getClientOriginalExtension();
        $filenametostore = $this->generateRandomString().'.'.$extension;
        Storage::disk('s3')->put(env('S3_COUPONS_PATH').$filenametostore, fopen($request->file('image'), 'r+'), 'public');
        $status = Coupons::where('id', $coupon_id)->update(['coupon_image' => $filenametostore]);
        if ($status) {
          return array('r' => true, 'd' => null, 'm'=> '');
        }else{
          return array('r' => false,'d' => null, 'm'=> '');
        }
     }
     protected static function generateRandomString($max_length = 12){
        return Str::random($max_length);
    }
}