HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: 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_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/CouponsController.php
<?php

namespace App\Http\Controllers;

use DB;
use App\Tag;
use Datatables;
use App\Coupons;
use App\CouponTag;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\UtilController;

class CouponsController extends Controller
{
  private $util;

  public function __construct()
  {
    $this->util = new UtilController();
  }

  /**
   * Display a listing of the resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function index()
  {
    $coupons = Coupons::latest()->paginate(5);
    return view('coupons.coupons', compact('coupons'))
      ->with('i', (request()->input('page', 1) - 1) * 5);
  }

  public function indexAdd()
  {
    $multiselectItems = Tag::where('active', true)->get();
    return view('coupons.addCoupons')->with('multiselectItems', $multiselectItems);
  }

  public function indexEdit($id)
  {
    $coupons = Coupons::find($id);
    $multiselectItems = Tag::where('active', true)->get();
    $multiselectValues = CouponTag::select('tag_id')->where('coupon_id', $id)->get();

    return view('coupons.editCoupons')
      ->with('coupons', $coupons)
      ->with('multiselectItems', $multiselectItems)
      ->with('multiselectValues', $multiselectValues);
  }

  /**
   * Show the form for creating a new resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function create(Request $request)
  {

    $codes = $request["codes"];

    if ($codes) {
      if (count(explode(",", $codes)) < $request["quantity"]) {
        return array('r' => false, 'd' => null, 'm' => trans('messages.screen_coupon_tag29'));
      }
    }

    $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->quantity = $request["quantity"];
    $wallet_coupons->quantity_per_user = $request["quantity_per_user"];
    $wallet_coupons->codes = $request["codes"];
    $wallet_coupons->message = $request["message"];
    $wallet_coupons->link_redeem = $request["link_redeem"];
    $wallet_coupons->save();

    if ($wallet_coupons) {
      $tags = $request["tags"];
      if ($tags != null) {
        foreach ($tags as $tagId) {
          CouponTag::create([
            'tag_id' => $tagId,
            'coupon_id' => $wallet_coupons->id
          ]);
        }
      }

      return array('r' => true, 'd' => array('id' => $wallet_coupons->id), 'm' => trans('messages.screen_points_tag3'));
    } else {
      return array('r' => false, 'd' => null, 'm' => trans('messages.screen_points_tag4'));
    }
  }

  /**
   * 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)
  {
    $wallet_coupons = Coupons::find($request["id"]);
    $wallet_coupons->name = $request["name"];
    if ($request["coupon_image"] != '') {
      $wallet_coupons->coupon_image = $request["coupon_image"];
    }
    $wallet_coupons->link = $request["link"];
    $wallet_coupons->quantity = $request["quantity"];
    $wallet_coupons->quantity_per_user = $request["quantity_per_user"];
    $wallet_coupons->codes = $request["codes"];
    // Reemplazar los saltos de lĂ­nea (hexadecimal 0x0A) por <br> antes de guardar
    $message = $request->input('message');
    $message = str_replace("\x0A", '<br>', $message);
    $wallet_coupons->message = $message;
    $wallet_coupons->link_redeem = $request["link_redeem"];
    $wallet_coupons->update();

    if ($wallet_coupons) {
      CouponTag::where('coupon_id', $wallet_coupons->id)->delete();
      $tags = $request["tags"];
      if ($tags != null) {
        foreach ($tags as $tagId) {
          CouponTag::create([
            'tag_id' => $tagId,
            'coupon_id' => $wallet_coupons->id
          ]);
        }
      }

      return array('r' => true, 'd' => array('id' => $wallet_coupons->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'];

    $coupon = Coupons::find($id);
    $coupon->active = $state;
    $coupon->update();

    if ($coupon) {
      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.created_at',
        'coupons.active',
        DB::raw('GROUP_CONCAT(DISTINCT(tags.name)) AS segmentation')
      )
      ->leftjoin('coupon_tags', 'coupons.id', '=', 'coupon_tags.coupon_id')
      ->leftjoin('tags', function ($join) {
        $join->on('tags.id', '=', 'coupon_tags.tag_id')->where('tags.active', 1);
      })
      ->groupBy('coupons.id');

    DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");

    return Datatables::of($obj)
      ->editColumn('coupon_image', function ($obj) {
        if (!$obj->coupon_image) {
          return $this->util->generateEmptyImageColumn();
        } else {
          return $this->util->generateImageColumn(config('filesystems.disks.s3.url') . '/coupons/' . $obj->coupon_image, $obj->name, 'logo' . $obj->id);
        }
      })
      ->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>
               <i class="fa fa-trash iconMini" onClick="clickDeleteCoupon(' . $obj->id . ')" data-id="' . $obj->id . '" data-toggle="tooltip" data-placement="bottom" title="Eliminar" 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>';
        }
      })
      ->editColumn('created_at', function ($obj) {
        return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
      })
      ->rawColumns(['active', 'actions', 'coupon_image'])
      ->make(true);
  }

  public function saveImage(Request $request)
  {
    try {
      $id = $request["id"];
      $extension = $this->extension($request->file('image')->getMimeType());
      $filenametostore = $id . '_cupon' . '.' . $extension;

      Storage::disk('s3')->put(config('s3.coupons') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
      Coupons::where('id', $id)->update(['coupon_image' => $filenametostore]);
      return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
    } catch (\Throwable $th) {
      return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => $th->getMessage()));
    }
  }

  public function saveTerm(Request $request)
  {
    try {
      $id = $request["id"];
      $extension = $this->extension($request->file('term')->getMimeType());
      if ($extension != 'pdf') {
        return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_file_pdf')));
      }
      $filenametostore = $id . '_terms' . '.' . $extension;

      Storage::disk('s3')->put(config('s3.coupons') . $filenametostore, fopen($request->file('term'), 'r+'), 'public');
      $url = config('filesystems.disks.s3.url') . '/coupons/' . $filenametostore;
      Coupons::where('id', $id)->update(['link' => $url]);
      return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
    } catch (\Throwable $th) {
      return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => $th->getMessage()));
    }
  }

  public function delete(Request $request)
  {
    $id = $request['id'];
    CouponTag::where('coupon_id', $id)->delete();
    $user = Coupons::find($id);
    $user->delete();
    return array('r' => true, 'm' => trans('messages.screen_coupon_tag20'));
  }

  protected static function generateRandomString($max_length = 12)
  {
    return Str::random($max_length);
  }
}