Skupinové konverzácie
Messages::start() nastaví názov, verejnosť aj účastníkov v jednej reťazi. Prvý účastník v zozname sa stane vlastníkom vlákna, ostatní sa pridajú ako členovia:
use RoundlyConsulting\Messages\Facades\Messages;
$thread = Messages::start('Project X')
->public() // ->private(), ->direct()
->everyoneCanJoin()
->withParticipants([$alice, $bob, $carol]) // $alice becomes the owner
->create();
Messages::send($thread, $alice, 'Welcome everyone');Priamo z modelu
Trait HasMessaging je skratka nad tým istým managerom — startConversationWith() urobí z volajúceho modelu vlastníka:
$thread = $alice->startConversationWith([$bob, $carol], name: 'Project X');
$alice->sendMessageTo($thread, 'Welcome everyone');
$alice->threads(); // every thread $alice is in, newest activity first
$alice->conversations(); // alias of threads() with a chat-inbox name
$alice->unreadThreads(); // only threads with unread messages
$dave->joinThread($thread); // only when the thread is open to everyoneVerejné vlákna a pravidlá pridávania
Skupinové vlákna nesú dva príznaky, is_public a everyone_can_join. Ak ich volajúci nenastaví, prevezmú hodnoty publicity.public-by-default a publicity.everyone-can-join (THREADS_PUBLIC a THREADS_EVERYONE_CAN_JOIN). is_public určuje broadcast kanál nového vlákna a to, ktoré vlákna Messages::threads() zobrazí všetkým.
joinThread() slúži na to, aby sa model pridal sám: povolí to len vo vlákne vytvorenom s ->everyoneCanJoin() (alebo pri zapnutom publicity.everyone-can-join), inak vyhodí UnauthorizedMessagingAction — priame vlákna nie sú otvorené nikdy. Pre niekoho, kto už vo vlákne je, nerobí nič a vráti jeho existujúci záznam. Do uzavretého vlákna niekoho pridá až jeho správca.
Pridávanie a odoberanie účastníkov
Zmeny účastníkov idú cez handle participants() daného vlákna. Ak uvediete by: (vykonávateľa), roly sa vynucujú; pri dôveryhodnom serverovom kóde ho vynechajte:
use RoundlyConsulting\Messages\Enums\ParticipantRole;
use RoundlyConsulting\Messages\Facades\Messages;
$participants = Messages::thread($thread)->participants();
// $alice (the owner) adds Dave as an admin — a role above member needs the owner
$participants->add($dave, ParticipantRole::Admin, by: $alice);
// $alice removes Carol — takes a role above Carol's
$participants->remove($carol, by: $alice);
// Bob leaves on his own — no role needed (the owner hands over first)
$participants->leave($bob);Pridanie niekoho, kto už je účastníkom, nikdy nevytvorí druhý záznam: add() vráti jeho existujúci Participant bez zmeny — bez udalosti, systémovej správy aj zmeny roly (na tú slúži setRole()). Kto vlákno opustil a pridáte ho znova, dostane nový záznam. Každá metóda prijme model účastníka aj jeho záznam Participant; záznam z iného vlákna vyhodí ParticipationException.
Každé nové pridanie a každý odchod aktualizuje last_activity_at vlákna, spustí ParticipantJoined alebo ParticipantLeft a — pri zapnutých systémových správach — zapíše systémovú správu. Odobratie modelu, ktorý vo vlákne nie je, vyhodí ParticipationException::notAParticipant() a vlastník nemôže odísť, kým je vo vlákne ešte niekto iný — najprv prevedie vlastníctvo (pozri Roly a oprávnenia).
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 kryptomienOdoslaní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.