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

namespace App\Http\Controllers;

use App\AppSection;
use Illuminate\Http\Request;
use App\Tag;
use App\Banner;
use App\PopupTags;
use App\PopupEmbed;
use App\TypeAction;
use App\Parameter;
use App\Category;
use App\BannerTags;
use App\BusinessCategory;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use DB;
use Illuminate\Support\Facades\Auth;

class AdvertisingAppController extends Controller
{

    public function search($infoo)
    {
        try {
            if ($infoo) {
                $exist = Banner::where('id', $infoo)->with('bannerTags')->first();
                return response(array("respuesta" => true, "type" => "success", "title" => "", "m" => __('messages.screen_banners_tag14'), "data" => $exist));
            }
        } catch (\Exception $e) {
            return response(array("respuesta" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_banners_tag15'), "data" => $e->getMessage()));
        }
    }

    public function searchPopup($popupId)
    {
        try {
            if ($popupId) {
                $exist = PopupEmbed::where('id', $popupId)->with('popupTag')->first();
                return response(array("respuesta" => true, "type" => "success", "title" => "", "m" => __('messages.screen_banners_tag14'), "data" => $exist));
            }
        } catch (\Exception $e) {
            return response(array("respuesta" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_banners_tag24'), "data" => $e->getMessage()));
        }
    }

    public function index()
    {
        $parameters = Parameter::first();
        $banners = Banner::where('active', 1)->orderBy('banners.order', 'ASC')->get();
        $popups = PopupEmbed::where('active', 1)->get();

        // logica para banner
        $returnBanners = [];
        foreach ($banners as $banner) {
            if (!Str::contains($banner['image'], 'asset')) {
                $banner['url_image'] = config('filesystems.disks.s3.url') . '/banners/' . $banner['image'];
            } else {
                $banner['id'] = null;
                $banner['url_image'] = '../img/upload.png';
            }

            if (!$this->findObjectByNameAndTarget($returnBanners, $banner['name'], $banner['target'])) {
                $returnBanners[] = $banner;
            }
        }

        // logica para popups
        $returnPopups = [];
        foreach ($popups as $popup) {
            if (!Str::contains($popup['image'], 'asset')) {
                $popup['url_image'] = config('filesystems.disks.s3.url') . '/popups/' . $popup['image'];
            } else {
                $popup['id'] = null;
                $popup['url_image'] = '../img/upload.png';
            }

            if (!$this->findObjectByTitleAndTarget($returnPopups, $popup['title'], $popup['target'])) {
                $returnPopups[] = $popup;
            }
        }

        if ($parameters->sucursal_products) {
            $categories = Category::where('active', 1)->with('sucursal')->get();
        } else {
            $categories = Category::where('active', 1)->get();
        }

        $typeActions = TypeAction::where('active', true)->get();
        $multiselectItems = Tag::where('active', true)->get();

        //-----------------------------------search_categories_with_popups----------------------------------------------
        $popupCategories = DB::table('business_categories as bc')
            ->select('bc.id', 'bc.name')
            ->join('popup_embeds as pe', DB::raw('pe.target'), '=', DB::raw('CONCAT("category-", bc.id)'))
            ->groupBy('bc.id')
            ->get();
        //---------------------------------END_search_categories_with_popups--------------------------------------------

        //-----------------------------------search_categories_with_banners---------------------------------------------
        $bannerCategories = DB::table('business_categories as bc')
            ->select('bc.id', 'bc.name')
            ->join('banners as b', DB::raw('b.target'), '=', DB::raw('CONCAT("category-", bc.id)'))
            ->groupBy('bc.id')
            ->get();
        //---------------------------------END_search_categories_with_banners-------------------------------------------

        //--------------------------------------search_business_categories----------------------------------------------
        $bussinesCategories = BusinessCategory::where('active', true)->get();
        //------------------------------------END_search_business_categories--------------------------------------------

        //--------------------------------------search_app_sections----------------------------------------------
        $appSections = AppSection::select('id', 'name', 'path')->where('active', true)->orderBy('name', 'ASC')->get()->toArray();
        if (count($appSections) > 0) {
            $appSections[] = [
                'id' => 0,
                'name' => 'Otra Sección',
                'path' => 'none',
            ];
        }
        //------------------------------------END_search_app_sectionss--------------------------------------------

        return view('advertising_app.advertisingOption')
            ->with('parameters', $parameters)
            ->with('categories', $categories)
            ->with('typeActions', $typeActions)
            ->with('multiselectItems', $multiselectItems)
            ->with('banners', $returnBanners)
            ->with('popupEmbeds', $returnPopups)
            ->with('popupCategories', $popupCategories)
            ->with('bannerCategories', $bannerCategories)
            ->with('bussinesCategories', $bussinesCategories)
            ->with('appSections', $appSections);
    }

    private function findObjectByNameAndTarget($array, $name, $target)
    {
        foreach ($array as $element) {
            if ($name == $element['name']  &&  $target == $element['target']) {
                return $element;
            }
        }
        return false;
    }

    private function findObjectByTitleAndTarget($array, $name, $target)
    {
        foreach ($array as $element) {
            if ($name == $element['title']  &&  $target == $element['target']) {
                return $element;
            }
        }
        return false;
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        try {
            if (Banner::where([['active', true], ['name', $request->input('name')], ['target', $request->input('target')]])->first()) {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
            }
            $count = Banner::where([['active', true], ['target', $request->input('target')]])->count();
            $tags = $request["tags"] ?? $request["generalMultiselect"];
            $data = $request->except(['generalMultiselect', 'tags', 'category_id']);
            if (!$data['name']) {
                $data['name'] = 'Banner' . $count;
            }
            if (!$data['order']) {
                $data['order'] = $count;
            }
            if (!isset($data['active'])) {
                $data['active'] = true;
            }
            if ($data['type_action_id'] == "0") {
                $data['type_action_id'] = null;
            }
            if ($model = Banner::create($data)) {
                if ($tags != null) {
                    foreach ($tags as $tagId) {
                        BannerTags::create([
                            'tag_id' => $tagId,
                            'banner_id' => $model->id
                        ]);
                    }
                }
                $this->registerLog(Auth::user()->id, 'Crear publicación banner', json_encode($request->all()), "Create", $this->getModule($request));
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.created_successfully'), "data" => $model->id));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => null));
            }
        } catch (\Exception $e) {
            return response(
                array(
                    "r" => false,
                    "type" => "error",
                    "title" => "Oops...",
                    "m" => __($e->getMessage()),
                    "data" => null
                )
            );
        }
    }

    public function update(Request $request)
    {
        try {
            $id = $request['id'];
            if (Banner::where([['id', '!=', $id], ['active', true], ['name', $request->input('name')], ['target', $request->input('target')]])->first()) {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
            }
            $count = Banner::where([['active', true], ['target', $request->input('target')]])->count();
            $tags = $request["tags"] ?? $request["generalMultiselect"];
            $data = $request->except(['generalMultiselect', 'tags', 'category_id']);
            if (!$data['name']) {
                $data['name'] = 'Banner' . $count;
            }
            if (!$data['order']) {
                $data['order'] = $count;
            }
            if ($data['type_action_id'] == "0") {
                $data['type_action_id'] = null;
            }
            if (Banner::where('id', $id)->update($data)) {
                BannerTags::where('banner_id', $id)->delete();
                if ($tags != null) {
                    foreach ($tags as $tagId) {
                        BannerTags::create([
                            'tag_id' => $tagId,
                            'banner_id' => $id
                        ]);
                    }
                }
                $this->registerLog(Auth::user()->id, 'Actualizar publicación banner', json_encode($request->all()), "Update", $this->getModule($request));
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => $id));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
            }
        } catch (\Exception $e) {
            return response(
                array(
                    "r" => false,
                    "type" => "error",
                    "title" => "Oops...",
                    "m" => __($e->getMessage()),
                    "data" => null
                )
            );
        }
    }

    public function createPopup(Request $request)
    {
        $name = $request["name"];
        if ($name) {
            $exist = PopupEmbed::where([['title', $name], ['target', $request["target"]]])->first();
        } else {
            $exist = PopupEmbed::where([['title', $name], ['target', $request["target"]]])->first();
        }
        if (!$exist) {
            $popupEmbed = new PopupEmbed();
            $popupEmbed->title = $name ? $name : 'Popup' . PopupEmbed::get()->count();
            $popupEmbed->type_action_id = $request["type_action_id"] == '0' ? null : $request["type_action_id"];
            $popupEmbed->value = $request["value"];
            $popupEmbed->msj = $request["description"];
            $popupEmbed->target = $request["target"];
            $popupEmbed->start_date = $request["start_date"];
            $popupEmbed->end_date = $request["end_date"];
            $popupEmbed->frequency = $request["frequency"];
            $popupEmbed->active = 1;
            $popupEmbed->text_button_ok = $request["text_button_ok"];
            $popupEmbed->save();

            $tags = $request["generalMultiselect"];
            $request->request->remove('generalMultiselect');
            if ($popupEmbed->id && $tags != null) {
                foreach ($tags as $tagId) {
                    PopupTags::create([
                        'tag_id' => $tagId,
                        'popup_id' => $popupEmbed->id
                    ]);
                }
            }
            $this->registerLog(Auth::user()->id, 'Crear publicación popup', json_encode($request->all()), "Create", $this->getModule($request));
            return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.screen_popup_tag14'), "data" => $popupEmbed->id));
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_popup_tag15'), "data" => null));
        }
    }

    public function updatePopup(Request $request)
    {
        if ($request["id"]) {
            $exist = PopupEmbed::where([['id', $request["id"]]])->first();
        }
        if ($exist) {
            $id = $request["id"];
            $popupEmbed = PopupEmbed::find($id);
            $popupEmbed->title = $request["name"];
            $popupEmbed->type_action_id = $request["type_action_id"];
            $popupEmbed->value = $request["value"];
            $popupEmbed->msj = $request["description"];
            $popupEmbed->target = $request["target"];
            $popupEmbed->start_date = $request["start_date"];
            $popupEmbed->end_date = $request["end_date"];
            $popupEmbed->frequency = $request["frequency"];
            $popupEmbed->active = 1;
            $popupEmbed->text_button_ok = $request["text_button_ok"];
            $popupEmbed->update();

            $tags = $request["generalMultiselect"];
            $request->request->remove('generalMultiselect');

            PopupTags::where('popup_id', $id)->delete();
            if ($tags != null) {
                foreach ($tags as $tagId) {
                    PopupTags::create([
                        'tag_id' => $tagId,
                        'popup_id' => $id
                    ]);
                }
            }
            $this->registerLog(Auth::user()->id, 'Actualizar publicación popup', json_encode($request->all()), "Update", $this->getModule($request));
            return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.advertising.title_19'), "data" => $popupEmbed->id));
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.screen_popup_tag17'), "data" => null));
        }
    }


    /**
     * 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  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id) {}

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function updateBanner(Request $request, $id)
    {
        if (!Banner::where([['id', '!=', $id], ['name', $request->input('name')]])->first()) {
            if (Banner::where('id', $id)->update(array_slice($request->except('image'), 1))) {
                $this->registerLog(Auth::user()->id, 'Actualizar publicación banner', json_encode($request->all()), "Update", $this->getModule($request));
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
            }
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
        }
    }

    public function updatePopupEmbed(Request $request, $id)
    {
        if (!PopupEmbed::where([['id', '!=', $id], ['name', $request->input('name')]])->first()) {
            if (PopupEmbed::where('id', $id)->update(array_slice($request->except('image'), 1))) {
                $this->registerLog(Auth::user()->id, 'Actualizar publicación popup', json_encode($request->all()), "Update", $this->getModule($request));
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
            }
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request, $id)
    {
        $banner = Banner::find($id);
        try {
            if ($banner) {
                if (Storage::disk('s3')->exists(config('s3.business') . $banner->image)) {
                    Storage::disk('s3')->delete(config('s3.business') . $banner->image);
                }
                $banner->active = 0;
                $banner->target = null;
                $banner->update();
                Banner::where('id', $id)->delete();
                BannerTags::where('banner_id', $id)->delete();
                $this->registerLog(Auth::user()->id, 'Eliminar publicación banner', json_encode($banner), "Delete", $this->getModule($request));
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
            }
        } catch (\Illuminate\Database\QueryException $e) {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
        }
    }

    public function saveImageBanner(Request $request)
    {
        try {
            $extension = $request->file('image')->getClientOriginalExtension();
            $filenametostore = $request->id . '.' . $extension;

            Storage::disk('s3')->put(config('s3.banners') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');

            $business_image = Banner::find($request->id);
            $business_image->image = $filenametostore;
            $business_image->update();

            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 destroyPopup(Request $request, $id)
    {
        $popup = PopupEmbed::find($id);
        try {
            if ($popup) {
                if (Storage::disk('s3')->exists(config('s3.popups') . $popup->image)) {
                    Storage::disk('s3')->delete(config('s3.popups') . $popup->image);
                }
                $popup->active = 0;
                $popup->target = null;
                $popup->update();
                PopupEmbed::where('id', $id)->delete();
                PopupTags::where('popup_id', $id)->delete();
                $this->registerLog(Auth::user()->id, 'Eliminar publicación popup', json_encode($popup), "Delete", $this->getModule($request));
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
            }
        } catch (\Illuminate\Database\QueryException $e) {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
        }
    }

    public function saveImagePopupEmbed(Request $request)
    {
        try {
            $extension = $request->file('image')->getClientOriginalExtension();
            $filenametostore = $request->id . '.' . $extension;

            Storage::disk('s3')->put(config('s3.popups') . $filenametostore, fopen($request->file('image'), 'r+'), 'public');

            $business_image = PopupEmbed::find($request->id);
            $business_image->image = $filenametostore;
            $business_image->update();

            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 activateNameBanner(Request $request)
    {
        try {
            $id = $request['id'];
            $state =  $request['state'];

            $banner = Banner::find($id);
            $banner->hide_name = $state;
            $banner->update();

            $this->registerLog(Auth::user()->id, 'Activar/inactivar publicación banner', json_encode($banner), "Update", $this->getModule($request));
            return array('r' => true, 'd' => null, 'm' => __('messages.advertising.updated_successfully'));
        } catch (\Throwable $th) {
            return array('r' => false, 'd' => null, 'm' => __('messages.advertising.error_updating'));
        }
    }

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

            $popupEmbed = PopupEmbed::find($id);
            $popupEmbed->hide_name = $state;
            $popupEmbed->update();

            $this->registerLog(Auth::user()->id, 'Activar/inactivar publicación popup', json_encode($popupEmbed), "Update", $this->getModule($request));
            return array('r' => true, 'd' => null, 'm' => __('messages.advertising.updated_successfully'));
        } catch (\Throwable $th) {
            return array('r' => false, 'd' => null, 'm' => __('messages.advertising.error_updating'));
        }
    }
}