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/SymbolicTicketController.php
<?php

namespace App\Http\Controllers;

use App\Tag;
use App\Ticket;
use Datatables;
use App\MatchEvent;
use App\SymbolicTicket;
use App\SymbolicTicketUser;
use Illuminate\Support\Str;
use App\SymbolicTicketPrice;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\UtilController;
use App\SymbolicTicketTag;

class SymbolicTicketController extends Controller
{
    private $util;

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

    public function index()
    {
        return view("symbolic_ticket.symbolicTickets");
    }

    public function create()
    {
        $events = MatchEvent::where('active', true)->get();
        $multiselectItems = Tag::where('active', true)->get();
        return view("symbolic_ticket.add_symbolic_ticket", compact('events', 'multiselectItems'));
    }

    public function edit($id)
    {
        $obj = SymbolicTicket::find($id);
        $events = MatchEvent::where('active', true)->get();
        $multiselectItems = Tag::where('active', true)->get();
        $multiselectValues = SymbolicTicketTag::select('tag_id')->where('symbolic_ticket_id', $id)->get();

        return view(
            "symbolic_ticket.edit_symbolic_ticket",
            compact(['obj', 'events', 'multiselectItems', 'multiselectValues'])
        );
    }

    public function add(Request $request)
    {
        $obj = new SymbolicTicket;
        $obj->name = $request['name'];
        $obj->start_date = $request['start_date'];
        $obj->end_date = $request['end_date'];
        $obj->capacity = $request['capacity'];
        $obj->match_event_id = $request['match_event_id'];
        $obj->is_subscriber = $request['is_subscriber'];
        $obj->save();

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

        return array('r' => true, 'm' => trans('messages.symbolic_tickets.to_create'), 'd' => $obj->id);
    }

    public function update(Request $request)
    {
        $obj = SymbolicTicket::find($request['id']);
        $obj->name = $request['name'];
        $obj->start_date = $request['start_date'];
        $obj->end_date = $request['end_date'];
        $obj->capacity = $request['capacity'];
        $obj->match_event_id = $request['match_event_id'];
        $obj->is_subscriber = $request['is_subscriber'];
        $obj->update();

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

        return array('r' => true, 'm' => trans('messages.symbolic_tickets.to_update'), 'd' => $obj->id);
    }

    public function tableFilter()
    {
        DB::statement("SET sql_mode = ''");
        $obj = $obj = DB::table('symbolic_tickets')
            ->select(
                'symbolic_tickets.id',
                'symbolic_tickets.name',
                'symbolic_tickets.path_image',
                'symbolic_tickets.capacity',
                'symbolic_tickets.start_date',
                'symbolic_tickets.end_date',
                'symbolic_tickets.is_subscriber',
                'symbolic_tickets.active',
                'match_events.name as match_event',
                'symbolic_tickets.created_at',
                DB::raw('GROUP_CONCAT(DISTINCT(tags.name)) AS segmentation')
            )->leftjoin('match_events', 'symbolic_tickets.match_event_id', '=', 'match_events.id')
            ->leftjoin('symbolic_ticket_tags', 'symbolic_tickets.id', '=', 'symbolic_ticket_tags.symbolic_ticket_id')
            ->leftjoin('tags', function ($join) {
                $join->on('tags.id', '=', 'symbolic_ticket_tags.tag_id')->where('tags.active', 1);
            })
            ->groupBy('symbolic_tickets.id')
            ->orderBy('created_at', 'DESC');
        DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");

        return Datatables::of($obj)
            ->editColumn('path_image', function ($obj) {
                if (!$obj->path_image) {
                    return $this->util->generateEmptyImageColumn();
                } else {
                    return $this->util->generateImageColumn(config('filesystems.disks.s3.url') . '/symbolic_tickets/' . $obj->path_image, $obj->name, 'ticket' . $obj->id);
                }
            })
            ->addColumn('actions', function ($obj) {
                $resp = '<i class="fa fa-dollar iconMini" onClick="clickSymbolicTicketPrices(' . $obj->id . ')" data-id="' . $obj->id . '"  title="Precios"></i>';

                if ($obj->is_subscriber == 1) {
                    $resp = $resp . '<i class="fa fa-ticket iconMini" onClick="clickGenerateTickets(' . $obj->id . ')" data-id="' . $obj->id . '"  title="Generar boletas simbólicas"></i>';
                }

                $resp = $resp . '<i class="fa fa-eye iconMini" onClick="clickInfoSymbolicTicket(' . $obj->id . ')" name="btnEditar" data-id="' . $obj->id . '"  title="Información"></i>
                <i class="fa fa-pencil iconMini" onClick="clickEditSymbolicTicket(' . $obj->id . ')" data-id="' . $obj->id . '"  title="Editar"></i>
                <i class="fa fa-trash iconMini" onClick="clickDeleteSymbolicTicket(' . $obj->id . ')" data-id="' . $obj->id . '"  title="Eliminar"></i>';

                return $resp;
            })
            ->editColumn('start_date', function ($obj) {
                return \Carbon\Carbon::parse($obj->start_date)->format('Y-m-d h:i:s A');
            })
            ->editColumn('end_date', function ($obj) {
                return \Carbon\Carbon::parse($obj->end_date)->format('Y-m-d h:i:s A');
            })
            ->editColumn('is_subscriber', function ($obj) {
                if ($obj->is_subscriber == 0) {
                    return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" disabled /> <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" checked="" disabled /><span></span>Si </label> </div> </label> </div>';
                }
            })
            ->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="chkSymbolicTicket(' . $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="chkSymbolicTicket(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" /><span></span> Si </label> </div>  </label> </div>';
                }
            })
            ->rawColumns(['start_date', 'end_date', 'is_subscriber', 'active', 'actions', 'path_image'])
            ->make(true);
    }

    public function activeSymbolicTicket(Request $request)
    {
        $id = $request['id'];
        $state = $request['state'];

        $obj = SymbolicTicket::find($id);
        $logObj = $obj;
        $obj->active = $state;
        $obj->update();
        // Log
        $this->registerLog(Auth::user()->id, 'Actualizó campo active de ticket symbolic', json_encode($logObj), "Update", 14);
        return array('r' => true, 'm' => trans('messages.symbolic_tickets.update_state'));
    }

    public function saveImage(Request $request)
    {
        $symbolic_ticket_id = $request["symbolic_ticket_id"];
        $extension = $request->file('image')->getClientOriginalExtension();
        $filenametostore = $this->generateRandomString() . '.' . $extension;

        Storage::disk('s3')->put(config('s3.symbolic_tickets') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
        $status = SymbolicTicket::where('id', $symbolic_ticket_id)->update(['path_image' => $filenametostore]);
        if ($status) {
            return array('r' => true, 'd' => null, 'm' => trans('messages.symbolic_tickets.to_create'));
        } else {
            return array('r' => false, 'd' => null, 'm' => trans('messages.symbolic_tickets.error_create'));
        }
    }

    public function updateImage(Request $request)
    {
        $symbolic_ticket_id = $request["symbolic_ticket_id"];
        $symbolic_ticket = SymbolicTicket::find($symbolic_ticket_id);

        Storage::disk('s3')->delete(config('s3.symbolic_tickets') . $symbolic_ticket->path_image);

        $extension = $request->file('image')->getClientOriginalExtension();
        $filenametostore = $this->generateRandomString() . '.' . $extension;

        Storage::disk('s3')->put(config('s3.symbolic_tickets') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');
        $status = SymbolicTicket::where('id', $symbolic_ticket_id)->update(['path_image' => $filenametostore]);
        if ($status) {
            return array('r' => true, 'd' => null, 'm' => trans('messages.symbolic_tickets.to_update'));
        } else {
            return array('r' => false, 'd' => null, 'm' => trans('messages.symbolic_tickets.error_update'));
        }
    }

    public function delete(Request $request)
    {
        SymbolicTicketTag::where('symbolic_ticket_id', $request['id'])->delete();
        $symbolic_ticket = SymbolicTicket::find($request['id']);
        $logObj = $symbolic_ticket;
        $symbolic_ticket->delete();

        $this->registerLog(Auth::user()->id, 'Eliminó carné', json_encode($logObj), "Delete", 14);

        return array('r' => true, 'm' => trans('messages.symbolic_tickets.to_delete'));
    }

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

    public function generateTickets(Request $request)
    {
        $symbolic_ticket = SymbolicTicket::find($request['id']);

        $subscriber_users = Ticket::select('tickets.user_id')
            ->leftjoin(
                'symbolic_ticket_users',
                'tickets.user_id',
                '=',
                'symbolic_ticket_users.user_id',
                'symbolic_ticket_users.symbolic_ticket_id',
                '=',
                $symbolic_ticket->id,
                'symbolic_ticket_users.payment_state',
                '=',
                'CONFIRMED'
            )
            ->where('tickets.match_event_id', $symbolic_ticket->match_event_id)
            ->where('tickets.ticket_type_id', 2)
            ->whereNull('symbolic_ticket_users.id')
            ->groupBy('tickets.user_id')
            ->get();

        foreach ($subscriber_users as $user) {
            $resp = $this->createSymbolicTicket($symbolic_ticket->id, $user->user_id);

            if (!$resp['r']) {
                return $resp;
                break;
            }
        }

        return array('r' => true, 'd' => null, 'm' => trans('messages.symbolic_tickets.to_generate_tickets'));
    }

    public function createSymbolicTicket($symbolic_ticket_id, $user_id)
    {
        $symbolic_ticket_price = SymbolicTicketPrice::where('symbolic_ticket_id', $symbolic_ticket_id)->first();

        if ($symbolic_ticket_price == null) {
            return array('r' => false, 'd' => null, 'm' => trans('messages.symbolic_tickets.ticket_not_have_price'));
        }

        $o = new SymbolicTicketUser;
        $o->symbolic_ticket_id = $symbolic_ticket_id;
        $o->symbolic_ticket_price_id = $symbolic_ticket_price->id;
        $o->user_id = $user_id;
        $o->price = $symbolic_ticket_price->price;
        $o->quantity = 1;
        $o->total = $symbolic_ticket_price->price;
        $o->pin = $this->gen_uid();
        $o->payment_reference = strtoupper(hash("md5", $symbolic_ticket_id)) . '_' . $o->pin;
        $o->payment_state = "CONFIRMED";
        $o->save();

        return array('r' => true, 'd' => null, 'm' => trans('messages.symbolic_tickets.to_generate_tickets'));
    }
}