---
title: "Organizátori, spoluorganizátori a pozvánky — Events | Roundly"
description: "Používatelia a tímy ako organizátori, kto podujatie spravuje, spoluorganizátori, prevod podujatia a podujatia na pozvanie s jednorazovými tokenmi."
url: https://roundly-consulting.com/sk/open-source/navody/events-for-laravel/organizatori-a-pozvanky
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Events for Laravel](https://roundly-consulting.com/sk/open-source/navody/events-for-laravel.md)

# Organizátori, spoluorganizátori a pozvánky

## Organizátori

Organizátorom je akýkoľvek model, ktorý implementuje Contracts\\Organizer — používateľ, tím, prevádzkovateľ priestoru. Concerns\\OrganizesEvents dodá predvolené hodnoty:

| Metóda | Predvolené |
| --- | --- |
| `eventOrganizerName(): string` | Atribút name, inak kľúč (JSON-LD, kalendárové súbory, notifikácie). |
| `eventOrganizerUrl(): ?string` | null (organizer.url v JSON-LD). |
| `allowsEventManagementBy(Model $user): bool` | Len on sám. |
| `scopeManagingEventsFor(Builder $query, Model $user)` | Len on sám. |
| `eventOrganizerEmail(): ?string` | Voliteľné, nie je v kontrakte — ak existuje, kalendárové súbory obsahujú ORGANIZER;CN=…:mailto:…. |

Pridáva aj organizedEvents(), coHostedEvents() a organizeEvent($title), čo je Events::make($title)->organizedBy($this):

```php
$user->organizedEvents()->upcoming()->get();
$user->coHostedEvents()->with('event')->get();
Event::query()->managedBy($user)->get();       // every event the user manages, drafts included
```

## Tímy ako organizátori

Prepíšte obe metódy správy spolu — členstvo v PHP aj v SQL —, aby sa managedBy() a policy zhodli:

```php
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Events\Concerns\OrganizesEvents;
use RoundlyConsulting\Events\Contracts\Organizer;

final class Team extends Model implements Organizer
{
    use OrganizesEvents;

    public function allowsEventManagementBy(Model $user): bool
    {
        return $this->members()->whereKey($user->getKey())->exists();
    }

    public function scopeManagingEventsFor(Builder $query, Model $user): void
    {
        $query->whereHas('members', fn (Builder $members) => $members->whereKey($user->getKey()));
    }
}
```

Potom uveďte každú triedu organizátora v events.organizers. Strana SQL — managedBy() a cez ňu visibleTo(), browse() aj filter\[mine\]=organizing v API — sa pýta každej uvedenej triedy a aj vlastnej triedy používateľa na scopeManagingEventsFor(). Trieda tímu, ktorá v zozname chýba, v PHP cez policy prejde, no jej členovia nikdy neuvidia jej koncepty a súkromné podujatia v zoznamoch. Verzia pre teams-for-laravel je na stránke Recepty.

## Kto podujatie spravuje

Správcami sú schválení používatelia organizátora, schválení používatelia každého spoluorganizátora a držitelia events.authorization.abilities.admin (events.admin; nedefinované znamená nikto; administrátor musí byť Authenticatable). Organizovanie za tím vyžaduje súhlas tímu pre aktéra, inak InvalidOrganizerException.

## Spoluorganizátori a prevod

```php
Events::for($event)->by($organizer)->hosts()->add($partnerTeam);   // manageHosts
Events::for($event)->hosts()->remove($partnerTeam);
Events::for($event)->hosts()->all();   // EventHost rows with ->host
Events::for($event)->hosts()->has($partnerTeam);

Events::for($event)->by($organizer)->transferTo($newOrganizer, keepAsHost: true);
```

- Spoluorganizátor musí byť Organizer (remove() prijme akýkoľvek model). Spoluorganizátori podujatie spravujú — typy vstupeniek, účastníkov, check-in —, nemôžu však pridávať ani odoberať spoluorganizátorov či podujatie previesť: to patrí organizátorovi (manageHosts, transfer). Spustia sa CoHostAdded a CoHostRemoved; spoluorganizátorov môžete uviesť aj pri vytvorení cez ->coHostedBy().
- transferTo() podujatie odovzdá a spustí OrganizerTransferred. Nový organizátor musí aktéra povoliť, ak aktér nie je administrátor. Nový organizátor, ktorý bol spoluorganizátorom, ním prestane byť; keepAsHost urobí zo starého organizátora spoluorganizátora. Prevod na súčasného organizátora nič nezmení.
- Pri events.tags.scope = organizer sa štítky podujatia v tej istej transakcii presunú do katalógu nového organizátora — nájdu sa tam podľa názvu alebo sa vytvoria so všetkými prekladmi.

## Pozvánky

```php
$invitation = Events::for($event)->by($organizer)->invitations()->send($user, 'See you there!');   // invite
$invitation->plainToken;   // once — the accept link's token; only its hash is stored

Events::for($event)->invitations()->revoke($user);
Events::for($event)->invitations()->all();      // ->pending(); invite with by($actor)
```

- Pri súkromnom podujatí je pozvánka vstupenkou dovnútra; pri verejnom alebo len cez odkaz je to upozornenie typu „pozvi kamaráta“.
- Opätovné odoslanie vytvorí nový token a starý zanikne — zrušená alebo odmietnutá pozvánka znova čaká na odpoveď, prijatá zostane prijatá. Správa má najviac 1000 znakov.
- Odkaz vyprší pri aktuálnom začiatku podujatia ($invitation->expiresAt(), čítané z harmonogramu, nikdy uložené): presun termínu ho posunie a kým je podujatie odložené, nevyprší.
- Pozvánky odoslané, kým je podujatie konceptom, odídu pri jeho zverejnení — každá čakajúca dostane nový token a InvitationSent sa spustí znova; token získaný z plainToken na koncepte vtedy prestane fungovať.
- Zrušenie pozvánky zmaže token. Pri súkromnom podujatí zároveň pozvanému vezme miesto, ak ešte nemá stav going: RSVP v stave interested, waitlisted alebo held prejde do not\_going, miesta sa vrátia a čakacia listina sa posunie.
- InvitationSent nesie token pre e-mail. Notifikácia invited vo fronte je šifrovaná (ShouldBeEncrypted), takže jobs a failed\_jobs ho nikdy neobsahujú v čitateľnej podobe, a kanál database ho nikdy neukladá — vlastné listenery InvitationSent vo fronte šifrujte rovnako.

## Odpoveď z odkazu

```php
use RoundlyConsulting\Events\Enums\RsvpResponse;

Events::invitations()->find($token);                              // the live invitation, or null
Events::invitations()->accept($token, RsvpResponse::Going, by: $request->user());   // RSVPs the invitee
Events::invitations()->decline($token, by: $request->user());
Events::invitations()->asSystem()->accept($token);               // trusted PHP: imports, seeders, tests
```

Token je jednorazové tajomstvo na doručiteľa a účastníkom je vždy pozvaný z pozvánky, nikdy volajúci:

| Pozvaný | Kto smie odpovedať |
| --- | --- |
| Účet (Authenticatable, napr. váš User) | Len tento používateľ, prihlásený: by musí byť pozvaný. Odhlásený alebo prihlásený ako niekto iný je odmietnutý — preposlaný e-mail nemôže odpovedať za neho ani zobraziť jeho kód pre check-in. |
| Nie účet (model Guest — pozrite Recepty) | Ktokoľvek s odkazom: token je prihlasovací údaj. |
| Ktokoľvek, cez asSystem() | Dôveryhodný kód, používateľ nie je potrebný. |

Kontrola prebehne skôr, než sa čokoľvek zapíše, takže odmietnutá odpoveď ponechá token použiteľný pre skutočného pozvaného. Odpoveď a zápis pozvánky zdieľajú jednu transakciu a pozvánka sa znova načíta pod svojím zámkom: zrušenie dopadne buď pred ňou (odpoveď sa odmietne), alebo po nej (odpoveď platí) — nikdy medzi. Neznámy, chybný, zrušený, vypršaný či použitý token aj cudzí odkaz vyzerajú rovnako: InvalidInvitationException, jednotné 404. Spustia sa InvitationAccepted, InvitationDeclined a InvitationRevoked.

## Účastníci bez účtu

Zúčastniť sa môže akýkoľvek model — uveďte ho v events.attendees s rovnakým typom kľúča, aký majú vaši používatelia. Recepty obsahujú model Guest pre ľudí, ktorých vaša aplikácia pozná len podľa mena a e-mailu.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/events-for-laravel.md)
