---
title: "Pozvánky a stavy — Connections for Laravel | Roundly"
description: "Schvaľovacie postupy: vytvárajte prepojenia v stave pending, prijímajte ich alebo blokujte z oboch strán a využite enum ConnectionStatus."
url: https://roundly-consulting.com/sk/open-source/navody/connections-for-laravel/pozvanky-a-stavy
language: sk
---

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

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

# Pozvánky a stavy

Každé prepojenie má stav — pending, accepted alebo blocked. connect() predvolene vytvára prijaté prepojenia; invite() vytvorí prepojenie v stave pending, ktoré prijímajúca strana prijme alebo zablokuje:

```php
// Connector side: send an invitation (a pending connection).
Connections::between($user, $team)->withPermissions('view')->invite();

// Receiving side accepts or blocks.
$team->acceptConnectionFrom($user);  // status → accepted (now active)
$team->blockConnectionFrom($user);   // status → blocked (grants nothing)

// Or drive it from the connector / builder.
Connections::between($user, $team)->accept();
Connections::between($user, $team)->block();
$user->inviteConnection($team);

// Model helpers.
$connection->isPending();
$connection->isAccepted();
$connection->isBlocked();
$connection->isActive();   // accepted AND not expired
```

Kým je zapnuté enforce\_active\_on\_check (predvolene áno), oprávnenia udeľujú a do isConnectedTo() sa započítavajú len aktívne prepojenia — prijaté a neexpirované. Otvorená pozvánka ani zablokované prepojenie neudelia nič.

- acceptConnectionFrom() a blockConnectionFrom() voláte na prijímajúcej strane a ako argument odovzdáte connector.
- accept() a block() vyhodia ConnectionNotFound, ak dvojica prepojenie nemá.
- Ak už prepojenie v danom stave je, nič sa nestane a event sa nespustí; inak sa spustí ConnectionAccepted alebo ConnectionBlocked.
- Blokovanie zruší jedine výslovné accept() — na prijímajúcej strane acceptConnectionFrom().
- Vytvorenie prepojenia v stave pending spustí ConnectionCreated a po ňom ConnectionInvited.

## Prechody stavov sa vynucujú

Stav sa mení len tak, ako dovolí ConnectionStatus::canTransitionTo(), a vynucuje to každá akcia:

- connect(), toggle(), connectAll() a sync() stav existujúceho prepojenia nikdy nezmenia — opätovné prepojenie neprijme otvorenú pozvánku samo, neznehodnotí prijaté prepojenie ani nezruší blokovanie.
- invite() nad otvorenou pozvánkou je v poriadku; nad prijatým či zablokovaným prepojením vyhodí RoundlyConsulting\\Connections\\Exceptions\\InvalidStatusTransition.
- Blokovanie zruší jedine výslovné accept(). Prežije aj disconnect() a connections:prune: opätovné prepojenie soft-deleted zablokovanej dvojice ju obnoví stále zablokovanú a spustí ConnectionRestored.

```php
// Re-connecting never changes an existing connection's status.
Connections::between($user, $team)->invite();    // pending
Connections::between($user, $team)->connect();   // still pending — no self-accept
Connections::between($user, $team)->invite();    // fine — re-inviting a pending invitation

$team->acceptConnectionFrom($user);              // accepted
Connections::between($user, $team)->invite();    // throws InvalidStatusTransition

// Only an explicit accept() lifts a block — it even survives disconnect() and a prune.
$team->blockConnectionFrom($user);
Connections::between($user, $team)->disconnect();
Connections::between($user, $team)->connect();   // restored still blocked (ConnectionRestored)
$team->acceptConnectionFrom($user);              // accepted — the block is lifted
```

## Pozvánky ako predvolený stav

Nastavte default\_status na pending a každé nové prepojenie bude pozvánkou — connect() potom vytvára prepojenia v stave pending a pre každé spustí ConnectionInvited. Pre jedno volanie pripraví stav pending metóda asPending():

```php
// config/connections.php — every new connection starts as an invitation
'default_status' => 'pending',

// Or for a single call: asPending() stages the pending state.
Connections::between($user, $team)->asPending()->withPermissions('view')->connect();
// same as ->invite()
```

## Enum ConnectionStatus

Stĺpec status sa castuje na reťazcový enum Enums\\ConnectionStatus. Jeho kontrola canTransitionTo() povoľuje prijatie zo stavu pending aj blocked (accept() nad zablokovaným prepojením je výslovné zrušenie blokovania), blokovanie z ľubovoľného stavu, návrat do pending nikdy a prechod do aktuálneho stavu vždy. Vynucuje ju každá akcia a prepájacie slovesá sú ešte prísnejšie — blokovanie nikdy nezrušia. Využite ju aj vo vlastnom UI a validácii:

```php
use RoundlyConsulting\Connections\Enums\ConnectionStatus;

$connection->status;   // ConnectionStatus::Accepted (cast from the status column)

ConnectionStatus::Pending->canTransitionTo(ConnectionStatus::Accepted);   // true
ConnectionStatus::Blocked->canTransitionTo(ConnectionStatus::Accepted);   // true — accept() is the explicit unblock
ConnectionStatus::Accepted->canTransitionTo(ConnectionStatus::Blocked);   // true — blocking is always allowed
ConnectionStatus::Accepted->canTransitionTo(ConnectionStatus::Pending);   // false
```

Enum používa zdieľaný trait Helpers z enums-for-laravel, takže ponúka aj popisky, možnosti pre select a validačné pravidlo:

```php
use RoundlyConsulting\Connections\Enums\ConnectionStatus;

ConnectionStatus::values();          // Collection: ['pending', 'accepted', 'blocked']
ConnectionStatus::labels();          // Collection: ['Pending', 'Accepted', 'Blocked']
ConnectionStatus::toOptions();       // Collection: ['pending' => 'Pending', ...] for <select>
ConnectionStatus::toArray();         // array: the plain-array form of toOptions()
ConnectionStatus::options();         // Collection<EnumOption> for JS/Inertia selects
ConnectionStatus::validationRule();  // 'in:pending,accepted,blocked'
ConnectionStatus::Accepted->readable();       // 'Accepted'
ConnectionStatus::tryFromLabel('Accepted');   // ConnectionStatus::Accepted

$request->validate([
    'status' => ['required', ConnectionStatus::validationRule()],
]);
```

## 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/connections-for-laravel.md)
