NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Events for Laravel

Notifikácie a pripomienky

Každá notifikácia rozširuje Notifications\EventNotification: ShouldQueue, odosiela sa až po commite, na fronte events.notifications.queue, cez kanály events.notifications.channels (mail a podľa potreby database), v jazyku príjemcu s časmi v časovom pásme podujatia a jeho skratkou. Žiadna nenesie názov triedy ani údaje iného účastníka.

TypTriedaOdošle sa, keďKomu
invitedEventInvitationNotificationPozvánka sa odošle — alebo, ak bola odoslaná na koncepte, po jeho zverejnení (s novým tokenom).Pozvaný (odkaz na prijatie; vo fronte šifrované).
confirmedRsvpConfirmedNotificationRSVP prejde do going.Účastník — kód pre check-in ako text a odkaz na vstupenku, nikdy QR obrázok v e-maile.
waitlist_promotedWaitlistPromotedNotificationSkupina z čakacej listiny dostane miesta.Účastník — hneď pri bezplatnom mieste; pri platenom z úlohy platby, s odkazom na platbu.
reminderEventReminderNotificationevents:sweep, pri každom posune pripomienky.going
updatedEventUpdatedNotificationZmena začiatku, konca, príznaku celodenného podujatia, časového pásma, miesta konania, odkazu na pripojenie alebo spôsobu účasti na ohlásenom podujatí.going, held
postponed · rescheduled · cancelledEventPostponed… · EventRescheduled… · EventCancelledNotificationOdložené · presunuté · zrušené (vrátane rezervácií, ktoré zrušenie uvoľnilo).going, held, waitlisted, interested
moved_onlineEventMovedOnlineNotificationOhlásené podujatie prešlo online.going, held

Príjemcovia a doručenie

  • Príjemcovia vychádzajú z publika podľa stavu RSVP (events.notifications.audiences.<type>), každý raz, bez toho, kto zmenu urobil (ak nie je zapnuté notify_actor), a len tí, ktorí podujatie smú vidieť a dá sa im poslať notifikácia — model bez ciest pre notifikácie sa preskočí a events:doctor ich spočíta.
  • Pri doručení každá notifikácia overí znova (shouldSend()), že podujatie stále existuje a príjemca ho vidí a že ho jeho RSVP stále zaraďuje do publika — pripomienka vo fronte pre niekoho, kto minútu nato odmietol, sa zahodí.
  • Zlyhaná notifikácia sa nahlási, nikdy sa nevráti do zápisu, ktorý ju spôsobil, a vrátený zápis neodošle nič. Kanál database nikdy neukladá kód pre check-in ani token pozvánky.
  • E-mail má predmet s názvom podujatia, oslovenie, riadky textu a jedno tlačidlo — odkaz na prijatie pri invited (events.urls.invitation), odkaz na vstupenku pri confirmed (events.urls.rsvp), odkaz na platbu pri rezervovanom waitlist_promoted, inak stránku podujatia (events.urls.event); bez URL tlačidlo nie je. Celodenné podujatia ukazujú len dátum.

Kanál database

toArray() — to, čo ukladá database — sú čisté dáta bez názvov tried:

{
  "type": "rescheduled",
  "event": { "id": "uuid", "title": "Jazz Night", "starts_at": "2026-12-05T20:00:00+01:00", "timezone": "Europe/Bratislava", "all_day": false },
  "previous_starts_at": "2026-11-14T19:00:00+00:00",
  "reason": "The band is ill"
}
TypKľúče navyše
invitedmessage
confirmedrsvp {id, status, guests}
waitlist_promotedrsvp {id, status}
reminderoffset
updatedchanged (názvy atribútov)
postponed, cancelledreason
rescheduledprevious_starts_at, reason
moved_online—

Zmena notifikácie

// config/events.php
'notifications' => [
    'channels' => ['mail', 'database'],
    'types' => [
        'cancelled' => App\Notifications\EventCancelledWithRefund::class,   // must extend the package's class
        'updated' => false,                                                  // off
    ],
    'audiences' => ['postponed' => ['going', 'held']],
],
use Illuminate\Notifications\Messages\MailMessage;
use RoundlyConsulting\Events\Notifications\EventCancelledNotification;

final class EventCancelledWithRefund extends EventCancelledNotification
{
    public function toMail(object $notifiable): MailMessage
    {
        return parent::toMail($notifiable)->line(__('Your ticket is refunded within 5 days.'));
    }
}

Trieda, ktorá nie je podtypom triedy balíka, vyhodí výnimku s názvom kľúča a EVENTS_NOTIFICATIONS=off vypne všetky notifikácie. Texty sú v events::notifications (en, sk) — každý typ má predmet, oslovenie a text plus spoločné riadky — so zástupnými hodnotami :title a :when. V podtriede prepíšte tieto háčiky:

HáčikPredvolené
toMail(object $notifiable): MailMessagePredmet, oslovenie, lines(), action().
toArray(object $notifiable): arraytype, event, payload()
via(object $notifiable): arrayevents.notifications.channels
shouldSend(object $notifiable, string $channel): boolKontrola pri doručení — naďalej volajte parent::shouldSend().
lines() · payload() · action() (protected)Riadky textu · extra kľúče typu · [popis, url] alebo null.
line(string $key, array $replace = []) · when(?CarbonImmutable $moment = null) (protected)Preložený riadok tohto typu · čas v časovom pásme podujatia a jazyku čitateľa.

Tiché zápisy

Events::for($event)->silently()->edit()->title(['en' => 'Jazz Night (fixed typo)'])->save();
Events::for($event)->silently()->reschedule('2026-12-05 20:00');

Zmeny celého podujatia cez tichý handle — update, postpone, reschedule, cancel, move online — spustia doménové udalosti s príznakom silent, no neodošlú žiadnu notifikáciu. Osobné potvrdenia — potvrdené miesto, posun z listiny, pozvánka — nie sú zmenami celého podujatia a dotknutá osoba ich dostane aj tak. Cez API robí to isté ?notify=0 pri PATCH /events/{event}.

Pripomienky

// config/events.php — every event
'reminders' => [
    'offsets' => ['P1D', 'PT2H'],     // at most five, each PT5M–P31D
    'max_lateness' => 'PT1H',
    'all_day_at' => '09:00',
],

// one event's own list replaces the config
Events::for($event)->edit()->reminders(['P2D'])->save();
  • Posuny sú trvania ISO-8601 pred začiatkom, medzi PT5M a P31D a najviac päť — v events.reminders.offsets pre všetky podujatia alebo vo vlastnom ->reminders([...]) podujatia. Nakonfigurovaný zoznam mimo hraníc vyhodí InvalidEventsConfigurationException s názvom kľúča a events:doctor ho ohlási.
  • Denná časť posunu je kalendárna aritmetika v časovom pásme podujatia — P1D je deň predtým v rovnakom miestnom čase, pri prechode času 23 alebo 25 hodín skutočného času — a časová časť je absolútna: PT2H sú dve hodiny.
  • Celodenné podujatia počítajú od events.reminders.all_day_at (09:00 miestneho času) prvého dňa: P1D je 09:00 deň predtým, PT1H 08:00 v deň podujatia.
  • Práve raz: events:sweep si každú pripomienku nárokuje vložením (event, offset, starts_at) do event_reminder_deliveries, takže ju ľubovoľný počet súbežných sweepov odošle raz. Presun termínu zmení starts_at, takže pripomienky sa znova nastavia.
  • Preskočí sa posun splatný pred ohlásením aktuálneho harmonogramu — žiadna pripomienka „zajtra“ pre podujatie vytvorené hodinu vopred —, posun oneskorený o viac ako events.reminders.max_lateness (PT1H), čokoľvek v čase začiatku a po ňom a podujatia, ktoré nie sú naplánované ani presunuté.
  • Spustí sa RemindersDispatched(Event, string $offset, int $recipients) a SweepResult počíta reminders a notified.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.