50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Form\Actions;
 | 
						|
 | 
						|
use App\Form\Editor\FormConditionResolver;
 | 
						|
use App\Form\Models\Participant;
 | 
						|
use App\Prevention\Mails\PreventionRememberMail;
 | 
						|
use App\Prevention\PreventionSettings;
 | 
						|
use Illuminate\Support\Facades\Mail;
 | 
						|
use Lorisleiva\Actions\Concerns\AsAction;
 | 
						|
 | 
						|
class PreventionRememberAction
 | 
						|
{
 | 
						|
    use AsAction;
 | 
						|
 | 
						|
    public string $commandSignature = 'prevention:remember';
 | 
						|
 | 
						|
    public function handle(): void
 | 
						|
    {
 | 
						|
        $query = Participant::whereHas(
 | 
						|
            'form',
 | 
						|
            fn ($form) => $form
 | 
						|
                ->where('needs_prevention', true)
 | 
						|
                ->where('from', '>=', now())
 | 
						|
        )
 | 
						|
            ->where(
 | 
						|
                fn ($q) => $q
 | 
						|
                    ->where('last_remembered_at', '<=', now()->subWeeks(2))
 | 
						|
                    ->orWhereNull('last_remembered_at')
 | 
						|
            );
 | 
						|
        foreach ($query->get() as $participant) {
 | 
						|
            if (!app(FormConditionResolver::class)->forParticipant($participant)->filterCondition($participant->form->prevention_conditions)) {
 | 
						|
                continue;
 | 
						|
            }
 | 
						|
 | 
						|
            if ($participant->getFields()->getMailRecipient() === null || count($participant->preventions()) === 0) {
 | 
						|
                continue;
 | 
						|
            }
 | 
						|
 | 
						|
            $body = app(PreventionSettings::class)->refresh()->formmail
 | 
						|
                ->placeholder('formname', $participant->form->name)
 | 
						|
                ->append($participant->form->prevention_text);
 | 
						|
 | 
						|
            Mail::send(new PreventionRememberMail($participant, $body));
 | 
						|
 | 
						|
            $participant->update(['last_remembered_at' => now()]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |