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/Console/Commands/BirthdayMessageAutomation.php
<?php

namespace App\Console\Commands;

use App\AcademyParameter;
use Illuminate\Console\Command;
use App\AcademyUser;
use App\User;
use Carbon\Carbon;
use App\Http\Controllers\PushNotificationController;
use App\Tag;

class BirthdayMessageAutomation extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sportscrowd:birthdayMessageAutomation';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Automatiza el envío de mensajes de cumpleaños.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $today = Carbon::now()->format('m-d');
        $tagId = Tag::where('name', 'Abonado')->first();
        if ($tagId) {
            $tagId = $tagId->id;
        } else {
            return 0;
        }
        $academyUsers = AcademyUser::select('academy_users.id', 'academy_users.student_name', 'users.pns_id')
            ->join('users', 'academy_users.user_id', '=', 'users.id')
            ->whereRaw("DATE_FORMAT(academy_users.birthdate, '%m-%d') = ?", [$today])
            ->whereNotNull('users.pns_id')
            ->get();
        $subscriberUsers = User::select('users.id', 'users.first_name', 'users.pns_id')
            ->join('user_informations', 'users.id', '=', 'user_informations.user_id')
            ->whereHas('user_tags', function ($query) use ($tagId) {
                $query->where('tag_id', $tagId);
            })
            ->whereRaw("DATE_FORMAT(user_informations.dob, '%m-%d') = ?", [$today])
            ->whereNotNull('users.pns_id')
            ->get();
        $globalUsers = $subscriberUsers->merge($academyUsers);
        $academyParameterMessage = AcademyParameter::where('key', 'notify_birthday_message')->first();

        $push = new PushNotificationController;

        $defaultMessage = "¡Feliz cumpleaños! 🎉🎂 {student_name}, queremos desearte un día lleno de alegría y momentos especiales. ¡Que todos tus deseos se hagan realidad!";

        foreach ($globalUsers as $user) {
            if ($academyParameterMessage) {
                $message = $academyParameterMessage->value;
                $message = str_replace('"student_name"', $user->first_name ?? $user->student_name, $message);
            } else {
                $message = str_replace('{student_name}', $user->first_name ?? $user->student_name, $defaultMessage);
            }

            $push->sendToUser($message, $user->pns_id, null, null, null, null, 'U');
            $this->info("Notificación de cumpleaños enviada a: " . ($user->first_name ?? $user->student_name));
        }
        return 0;
    }
}