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

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Notification;
use App\NotificationTag;
use App\Tag;
use App\User;
use App\TargetNotification;
use App\UserTag;
use DB;
use Datatables;

class NotificationsController extends Controller
{
    public function index()
    {
        return view('notifications.notifications');
    }

    public function indexAdd()
    {
        $targets = TargetNotification::all();
        $multiselectItems = Tag::where('active', true)->get();
        return view('notifications.addNotification')
            ->with('targets', $targets)
            ->with('multiselectItems', $multiselectItems);
    }

    public function create(Request $request)
    {

        $push = new PushNotificationController();
        $academyLocationController = new AcademyLocationController();
        $id = Auth::user()->id;
        $notification = new Notification();
        $notification->message = $request["message"];
        $notification->when_send = $request["when_send"];
        $notification->is_pending = 1;
        $notification->admin_id = $id;
        $notification->user_id = $request["user_id"];
        $notification->link = $request["link"];
        $notification->target_notification_id = $request["target_id"];
        $notification->notifications_origin = 'PUSH';
        $notification->save(); //Guarda el nuevo objeto

        $when_send = $request["when_send"] . " " . "GMT-0500";


        $data = new \stdClass();
        $data->link = $notification->link;
        $academyLocations = $academyLocationController->getByAuthUser()->pluck('id')->toArray();

        if ($request["target_id"] != null) {
            $segment = TargetNotification::find($request["target_id"]);
            $push->sendToSegments($request["message"], $segment->name, null, $data, null, $when_send, 'U');
        } else if ($request["user_id"] != null) {
            $user = User::select('id', 'pns_id')->where('id', $request["user_id"])->first();
            $userNotificationInformation = Notification::latest('id')->first();
            $onesignalID = $push->sendToUser($request["message"], $user->pns_id, null, $data, null, $when_send, 'U');
            if ($userNotificationInformation && $onesignalID) {
                $userNotificationInformation->reference_onesignal_notification_id = $onesignalID;
                $userNotificationInformation->update();
            }
        } else if ($request["tags"] != null) {
            foreach ($request["tags"] as $tagId) {
                NotificationTag::create([
                    'tag_id'            => $tagId,
                    'notification_id'   => $notification->id
                ]);

                $users = UserTag::select('users.id', 'users.pns_id')
                    ->join('users', 'users.id', '=', 'user_tags.user_id')
                    ->where('user_tags.tag_id', $tagId)
                    ->whereNull('users.deleted_at')->whereNotNull('users.pns_id')->get();

                $pnsIdsArray = $users->pluck('pns_id')->toArray();
                $push->sendToUser($request["message"], $pnsIdsArray, null, $data, null, $when_send, 'U');
            }
        } else if (count($academyLocations)) {
            $users = User::select('users.id', 'users.pns_id')
                ->join('academy_users', 'academy_users.user_id', '=', 'users.id')
                ->whereNotNull('users.pns_id')
                ->whereIn('academy_users.academy_location_id', $academyLocations)
                ->groupBy('users.id', 'users.pns_id')
                ->get();
            $pnsIdsArray = $users->pluck('pns_id')->toArray();
            $push->sendToUser($request["message"], $pnsIdsArray, null, $data, null, $when_send, 'U');
        } else {
            $notification = Notification::latest('id')->first();
            $onesignalID = $push->sendToAll($request["message"], null, $data, null, $when_send, 'U');
            if ($notification && $onesignalID) {
                $notification->reference_onesignal_notification_id = $onesignalID;
                $notification->update();
            }
        }

        $logObject = $notification;
        $this->registerLog(Auth::user()->id, 'Creó una notificación', json_encode($logObject), "Create", $this->getModule($request));

        if ($notification) {
            return array('r' => true, 'd' => null, 'm' => trans('messages.screen_create_notifications_tag9'));
        } else {
            return array('r' => false, 'd' => null, 'm' => trans('messages.screen_create_notifications_tag10'));
        }
    }

    public function tableFilter()
    {
        DB::statement("SET sql_mode = ''");
        $obj = Notification::select(
            'notifications.id',
            'notifications.message',
            'notifications.when_send',
            'notifications.is_pending',
            'notifications.link',
            'notifications.admin_id',
            'notifications.user_id',
            'notifications.target_notification_id',
            'notifications.target_city',
            'notifications.created_at',
            'notifications.notifications_origin',
            DB::raw('GROUP_CONCAT(DISTINCT(tags.name)) AS segmentation')
        )
            ->with('admin', 'user', 'target_notification')
            ->leftjoin('notification_tags', 'notifications.id', '=', 'notification_tags.notification_id')
            ->leftjoin('tags', 'tags.id', '=', 'notification_tags.tag_id')
            ->whereNull('notifications.deleted_at')
            ->where('notifications_origin', 'PUSH');

        $academyLocationController = new AcademyLocationController();
        $academyLocations = $academyLocationController->getByAuthUser()->pluck('id')->toArray();

        if (count($academyLocations)) {
            $obj->join('academy_location_users', 'academy_location_users.user_id', '=', 'notifications.admin_id')
                ->whereIn('academy_location_users.academy_location_id', $academyLocations);
        }
        $obj->groupBy('notifications.id');

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

        return Datatables::of($obj)
            ->addColumn('actions', function ($obj) {
                return '<i class="fa fa-trash iconMini" onClick="clickDeleteNotification(' . $obj->id . ')" data-id="' . $obj->id . '" data-toggle="tooltip" data-placement="bottom" title="Eliminar" style="cursor:pointer;"></i>';
            })
            ->editColumn('user', function ($obj) {
                if ($obj->user)
                    return $obj->user->first_name . ' ' . $obj->user->last_name;
                else
                    return '';
            })
            ->editColumn('segment', function ($obj) {
                if ($obj->target_notification) {
                    return $obj->target_notification->name;
                } else {
                    return '';
                }
            })
            ->editColumn('name', function ($obj) {
                if ($obj->admin)
                    return $obj->admin->first_name . ' ' . $obj->admin->last_name;
                else
                    return '';
            })
            ->editColumn('created_at', function ($obj) {
                return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
            })
            ->editColumn('when_send', function ($obj) {
                if ($obj->when_send) {
                    return \Carbon\Carbon::parse($obj->when_send)->format('Y-m-d h:i:s A');
                } else {
                    return 'No tiene fecha programada';
                }
            })
            ->rawColumns(['actions', 'name', 'user', 'segment', 'when_send', 'segmentation', 'notifications_origin'])
            ->make(true);
    }


    public function removeScheduledNotification(Request $request)
    {
        $notification = Notification::find($request['id']);
        $onesignalId = $notification->reference_onesignal_notification_id;
        if ($onesignalId) {
            $appId = config('onesignal.app_id');
            $push = new PushNotificationController();
            $push->cancelNotification($onesignalId, $appId, 'U');
        }
        $notification->delete();

        if ($notification) {
            return array('r' => true, 'd' => null, 'm' => trans('messages.screen_create_notifications_tag12'));
        } else {
            return array('r' => false, 'd' => null, 'm' => trans('messages.screen_create_notifications_tag13'));
        }
    }
}