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/qas.sports-crowd.com/app/Http/Controllers/UtilController.php
<?php

namespace App\Http\Controllers;

use DB;
use App\SystemLog;
use Carbon\Carbon;
use NumberFormatter;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Response;
use App\Core\CorporateIdentity\Application\CorporateIdentityService;

class UtilController extends Controller
{

    private $corporateIdentityService;

    public function __construct()
    {
        $this->corporateIdentityService = new CorporateIdentityService();
    }
    public function generateEmptyImageColumn()
    {
        return '<div class="media-left">
                    <p>Sin imagen</p>
                </div>';
    }

    public function generateCarouselImagesProducts($images, $prefix, $name, $id)
    {
        $indicators = '';
        $inners = '';
        foreach ($images as $key => $value) {
            $src = $prefix . $value;
            $src .= '?_dc=' . time();
            if ($key == 0) {
                $indicators .= '<button type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide-to="' . $key . '" class="active" aria-current="true" aria-label="Slide ' . ($key + 1) . '"></button>';
                $inners .= '<div class="carousel-item active">
                                <span class="badge badge-danger product-delete-badge" onClick="clickDeleteProductImage(' . $id . ', \'' . $value . '\')">Eliminar</span>
                                <img style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;" src="' . $src . '" class="d-block w-100" alt="' . $value . '">
                            </div>';
            } else {
                $indicators .= '<button type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide-to="' . $key . '" aria-label="Slide ' . ($key + 1) . '"></button>';
                $inners .= '<div class="carousel-item">
                                <span class="badge badge-danger product-delete-badge" onClick="clickDeleteProductImage(' . $id . ', \'' . $value . '\')">Eliminar</span>
                                <img style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;" src="' . $src . '" class="d-block w-100" alt="' . $value . '">
                            </div>';
            }
        }
        $src = $prefix . $images[0];
        $src .= '?_dc=' . time();
        return '<div class="media-left media-center">
            ' . (count($images) > 1 ? '<span class="badge badge-primary product-badge">' . count($images) . '</span>' : '') .
            '<img src="' . $src . '" class="media-object-small view_photo adaptCellImage" alt="User Image" data-toggle="modal" data-target="#modal' . $id . '" onerror="this.onerror=null; this.remove();">
            <div class="modal fade" id="modal' . $id . '" tabindex="-1" role="dialog" aria-hidden="true">
                <div class="modal-dialog role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h2 class="modal-title">' . $name . '</h2>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position: absolute; top: 20px; right: 20px;">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <div id="carouselExampleIndicators' . $id . '" class="carousel slide" data-bs-ride="carousel">
                                <!--
                                <div class="carousel-indicators">' . $indicators . '</div>
                                -->
                                <div class="carousel-inner">' . $inners . '</div>
                                <!--
                                <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide="prev">
                                    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                    <span class="visually-hidden">Previous</span>
                                </button>
                                <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide="next">
                                    <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                    <span class="visually-hidden">Next</span>
                                </button>
                                -->
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>';
    }

    public function generateImageColumn($src, $name, $id)
    {
        $src .= '?_dc=' . time();
        return '<div class="media-left media-center">
            <img src="' . $src . '" class="view_photo adaptCellImage" alt="User Image" data-toggle="modal" data-target="#modal' . $id . '" onerror="this.onerror=null; this.remove();">
            <div class="modal fade"
                id="modal' . $id . '" tabindex="-1">
                <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
                    <div class="modal-content" style="max-width: fit-content; margin: auto;">
                        <div class="modal-header">
                            <h2 class="modal-title">' . $name . '</h2>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position: absolute; top: 20px; right: 20px;">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body text-center">
                            <img style="max-width:100%; height:auto; display:block; margin:auto;" src="' . $src . '" />
                        </div>
                    </div>
                </div>
            </div>
            <script>
                $("#modal' . $id . '").appendTo("body");
            </script>
        </div>';
    }

    public function generateImageColumnRound($src, $name, $id)
    {
        $src .= '?_dc=' . time();
        return '<div class="media-left media-center">
            <img src="' . $src . '" class="media-object view_photo" alt="User Image" data-toggle="modal" data-target="#modal' . $id . '" onerror="this.onerror=null; this.remove();">
            <div class="modal fade"
                id="modal' . $id . '" tabindex="-1">
                <div class="modal-dialog role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h2 class="modal-title">' . $name . '</h2>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position: absolute; top: 20px; right: 20px;">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <img style="max-width:100%; max-height:100%;" src="' . $src . '" />
                        </div>
                    </div>
                </div>
            </div>
        </div>';
    }

    public function generateImageColumnLarge($src, $name, $id)
    {
        $src .= '?_dc=' . time();
        return '<div class="media-left media-center" style="min-width: 500px;">
            <img src="' . $src . '" class="view_photo adaptCellImage" alt="User Image" data-toggle="modal" data-target="#modal' . $id . '" onerror="this.onerror=null; this.remove();">
            <div class="modal fade"
                id="modal' . $id . '" tabindex="-1">
                <div class="modal-dialog role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h2 class="modal-title">' . $name . '</h2>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position: absolute; top: 20px; right: 20px;">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <img style="max-width:100%; max-height:100%;" src="' . $src . '" />
                        </div>
                    </div>
                </div>
            </div>
        </div>';
    }

    public function export($name)
    {
        $path = public_path('storage/') . $name;
        if (file_exists($path)) {
            return Response::download($path);
        }
        $path = storage_path('app/public/') . $name;
        if (file_exists($path)) {
            return Response::download($path);
        }
    }

    public function logFile($data, $origin = null)
    {
        $log = new SystemLog();
        $log->data = $data;
        $log->origin = $origin;
        if (Auth::user())
            $log->user_id = Auth::user()->id;

        $log->save();
    }

    public function getFullSexText($sex)
    {
        $gender = '';
        switch ($sex) {
            case 'M':
                $gender = __('messages.sex_types.male');
                break;
            case 'F':
                $gender = __('messages.sex_types.female');
                break;
            case 'I':
                $gender = __('messages.sex_types.indeterminate');
                break;
        }
        return $gender;
    }

    public function getGenericData($sql, $bindings)
    {
        ini_set('memory_limit', '-1');
        $sql = $this->getSql($sql, $bindings);
        DB::statement("SET sql_mode = ''");
        $results = DB::select(DB::raw($sql));
        DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
        return $results;
    }

    private function getSql($sql, $bindings)
    {
        if ($bindings != null)
            foreach (explode(',', $bindings) as $binding) {
                $value = $this->toBoolean($binding);
                if ($value == null) {
                    $value = is_numeric($binding) ? $binding : "'" . $binding . "'";
                }
                $sql = preg_replace('/\?/', $value, $sql, 1);
            }
        return $sql;
    }

    private function toBoolean($booleable)
    {
        return filter_var($booleable, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
    }

    public function generateEncrypData($user_data, $code_ticket, $key)
    {
        $cryptoString = Crypt::encryptString($key . '|' . $user_data->id . '|' . $code_ticket . '|ticket');
        return $cryptoString;
    }

    public function shorterUrl($url)
    {
        $shortener = url()->shortener();
        return $shortener->shorten($url);
    }

    public function completeLeadingZeros($consecutive, $length)
    {
        if (strlen($consecutive) == $length) {
            return $consecutive;
        }

        do {
            $consecutive = "0" . $consecutive;
        } while (strlen($consecutive) < $length);

        return $consecutive;
    }

    public function getNextWorkingDay($weekendDays, $date)
    {
        $newDate = $date->addDays(1);
        if (in_array($newDate->dayOfWeek, $weekendDays)) {
            return $this->getNextWorkingDay($weekendDays, $newDate);
        }

        $client = new \GuzzleHttp\Client();
        $response = $client->get('https://date.nager.at/api/v3/PublicHolidays/' . $newDate->year . '/CO');
        $holidays = json_decode($response->getBody()->getContents(), true);

        $holiday = array_filter($holidays, function ($item) use ($newDate) {
            return $item['date'] == $newDate->format('Y-m-d');
        }, ARRAY_FILTER_USE_BOTH);

        if (count($holiday)) {
            return $this->getNextWorkingDay($weekendDays, $newDate);
        }
        $now = \Carbon\Carbon::now();
        if ($newDate <= $now) {
            $newDate = $now->addDays(1);
        }
        return $newDate;
    }

    public function generateCarouselImagesPhotosClub($images, $name, $id)
    {
        $indicators = '';
        $inners = '';
        foreach ($images as $key => $value) {
            $src = $value;
            $src .= '?_dc=' . time();
            if ($key == 0) {
                $indicators .= '<button type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide-to="' . $key . '" class="active" aria-current="true" aria-label="Slide ' . ($key + 1) . '"></button>';
                $inners .= '<div class="carousel-item active">
                                <span class="badge badge-danger product-delete-badge" onClick="clickDeleteProductImage(' . $id . ', \'' . $value . '\')">Eliminar</span>
                                <img style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;" src="' . $src . '" class="d-block w-100" alt="' . $value . '">
                            </div>';
            } else {
                $indicators .= '<button type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide-to="' . $key . '" aria-label="Slide ' . ($key + 1) . '"></button>';
                $inners .= '<div class="carousel-item">
                                <span class="badge badge-danger product-delete-badge" onClick="clickDeleteProductImage(' . $id . ', \'' . $value . '\')">Eliminar</span>
                                <img style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;" src="' . $src . '" class="d-block w-100" alt="' . $value . '">
                            </div>';
            }
        }
        $src = $images[0];
        $src .= '?_dc=' . time();
        return '<div class="media-left media-center">
            ' . (count($images) > 1 ? '<span class="badge badge-primary product-badge">' . count($images) . '</span>' : '') .
            '<img src="' . $src . '" class="media-object-small view_photo adaptCellImage" alt="User Image" data-toggle="modal" data-target="#modal' . $id . '" onerror="this.onerror=null; this.remove();">
            <div class="modal fade" id="modal' . $id . '" tabindex="-1" role="dialog" aria-hidden="true">
                <div class="modal-dialog role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h2 class="modal-title">' . $name . '</h2>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position: absolute; top: 20px; right: 20px;">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <div id="carouselExampleIndicators' . $id . '" class="carousel slide" data-bs-ride="carousel">
                                <!--
                                <div class="carousel-indicators">' . $indicators . '</div>
                                -->
                                <div class="carousel-inner">' . $inners . '</div>
                                <!--
                                <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide="prev">
                                    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                    <span class="visually-hidden">Previous</span>
                                </button>
                                <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide="next">
                                    <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                    <span class="visually-hidden">Next</span>
                                </button>
                                -->
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>';
    }

    public function generateCarouselVideosClub($videos, $name, $id)
    {
        return view('videos_club.galeryVideos', compact('videos', 'name', 'id'));

        $indicators = '';
        $inners = '';
        foreach ($videos as $key => $value) {
            $idVideo = $this->getIdVimeoFromUrl($value);
            // $src ="https://player.vimeo.com/video/".$idVideo;
            $src = $value;
            // $src ="https://vumbnail.com/".$idVideo ."_large.jpg";

            // $src .= '?_dc=' . time();
            if ($key == 0) {
                $indicators .= '<button type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide-to="' . $key . '" class="active" aria-current="true" aria-label="Slide ' . ($key + 1) . '"></button>';
                $inners .= ' class="carousel-item active">
                                <span class="badge badge-danger product-delete-badge" onClick="clickDeleteProductImage(' . $id . ', \'' . $value . '\')">Eliminar</span>
                                <iframe src="' . $src . '" width="640" height="1141"
                                    frameborder="0"
                                    allow="fullscreen; picture-in-picture"
                                    allowfullscreen
                                    class="d-block w-100"
                                    style="max-width:100%; max-height:100%; min-width: -webkit-fill-available; width: 640px;
                                    aspect-ratio: 16 / 9;
                                    height: auto;"
                                ></iframe>
                                <!--
                                <img style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;" src="' . $src . '" class="d-block w-100" alt="' . $value . '">
                                -->
                            </div>';
            } else {
                $indicators .= '<button type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide-to="' . $key . '" aria-label="Slide ' . ($key + 1) . '"></button>';
                $inners .= '<div class="carousel-item">
                                <span class="badge badge-danger product-delete-badge" onClick="clickDeleteProductImage(' . $id . ', \'' . $value . '\')">Eliminar</span>
                                <iframe src="' . $src . '" width="640" height="1141"
                                    frameborder="0"
                                    allow="fullscreen; picture-in-picture"
                                    allowfullscreen
                                    class="d-block w-100"
                                    style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;
                                    width: 640px;
                                    aspect-ratio: 16 / 9;
                                    height: auto;"
                                ></iframe>
                                <!--
                                <img style="max-width:100%; max-height:100%; min-width: -webkit-fill-available;" src="' . $src . '" class="d-block w-100" alt="' . $value . '">
                                -->
                            </div>';
            }
        }

        $idVideo = self::getIdVimeoFromUrl($videos[0]);
        $src = "https://vumbnail.com/" . $idVideo . "_large.jpg";
        // $src =$videos[0];
        // $src .= '?_dc=' . time();
        return '<div class="media-left media-center">
            ' . (count($videos) > 1 ? '<span class="badge badge-primary product-badge">' . count($videos) . '</span>' : '') .
            '<img src="' . $src . '" class="media-object-small view_photo adaptCellImage" alt="User Image" data-toggle="modal" data-target="#modal' . $id . '" onerror="this.onerror=null; this.remove();">
            <div class="modal fade" id="modal' . $id . '" tabindex="-1" role="dialog" aria-hidden="true">
                <div class="modal-dialog role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h2 class="modal-title">' . $name . '</h2>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="position: absolute; top: 20px; right: 20px;">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <div id="carouselExampleIndicators' . $id . '" class="carousel slide" data-bs-ride="carousel">
                                <!--
                                <div class="carousel-indicators">' . $indicators . '</div>
                                -->
                                <div class="carousel-inner">' . $inners . '</div>
                                <!--
                                <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide="prev">
                                    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                                    <span class="visually-hidden">Previous</span>
                                </button>
                                <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators' . $id . '" data-bs-slide="next">
                                    <span class="carousel-control-next-icon" aria-hidden="true"></span>
                                    <span class="visually-hidden">Next</span>
                                </button>
                                -->
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>';
    }

    public static function getIdVimeoFromUrl($url)
    {
        $pattern = '/(?:player\.)?vimeo\.com\/(?:video\/)?(\d+)/';

        if (preg_match($pattern, $url, $matches)) {
            return $matches[1];
        }
        return $url;
    }

    public function generateEmptyVideoColumn()
    {
        return '<div class="media-left">
                    <p>Sin video</p>
                </div>';
    }

    public function findValueByKey($jsonObject, $searchKey)
    {
        // Check if the key exists at the top level
        if (array_key_exists($searchKey, $jsonObject)) {
            return $jsonObject[$searchKey];
        }

        // Iterate through the object/array and search recursively
        foreach ($jsonObject as $key => $value) {
            if (is_array($value)) {
                $result = $this->findValueByKey($value, $searchKey);
                if ($result !== null) {
                    return $result;
                }
            }
        }

        return null; // Return null if the key is not found
    }

    public function getTextMonth($date = null)
    {
        // Set locale to Spanish
        Carbon::setLocale(config('app.locale'));

        // Get the current month name in Spanish
        if ($date) {
            $monthName = Carbon::parse($date)->translatedFormat('F');
        } else {
            $monthName = Carbon::now()->translatedFormat('F');
        }

        return $monthName;
    }


    public function removeStrAccent($string)
    {
        return  strtr($string, [
            'á' => 'a',
            'é' => 'e',
            'í' => 'i',
            'ó' => 'o',
            'ú' => 'u',
            'Á' => 'A',
            'É' => 'E',
            'Í' => 'I',
            'Ó' => 'O',
            'Ú' => 'U',
            'ñ' => 'n',
            'Ñ' => 'N'
        ]);
    }

    public function getCurrencyFormat($value)
    {
        $formatter = new NumberFormatter('es_CO', NumberFormatter::CURRENCY);
        return $formatter->formatCurrency($value, $this->corporateIdentityService->getCurrency());
    }

    public static function removeSpaces($string)
    {
        return preg_replace('/\s+/', '', $string);
    }
}