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

Úpravy a systémové správy

Messages::message() vráti handle pre jednu správu:

use RoundlyConsulting\Messages\Facades\Messages;

Messages::message($message)->edit('edited body', by: $alice);
Messages::message($message)->delete(by: $alice); // soft delete ("unsent")

Správu smie upraviť len jej autor — ani vlastník či administrátor, a to bez ohľadu na messages.permissions.enabled. Zmazať ju smie autor a v skupinovom vlákne s vynucovanými rolami aj vlastníci a administrátori. V oboch prípadoch musí byť vykonávateľ stále účastníkom vlákna. Pri dôveryhodných serverových volaniach by: vynechajte.

Úprava alebo zmazanie už zmazanej správy vyhodí typovanú RoundlyConsulting\Messages\Exceptions\MessageException. Úprava spustí MessageEdited, zmazanie MessageDeleted. Správa sa považuje za upravenú, len keď sa jej text naozaj zmenil: zmena textu zapíše meta.edited_at (ISO-8601) a edited_at v MessageResource číta práve to — nikdy updated_at, ktorý nastaví aj zrušenie odoslania a obnovenie. Správy upravené pred verziou 1.1.0 túto značku nemajú a edited_at u nich vráti null.

Obmedzené na vlákno

Ak vlákno aj správa prichádzajú z požiadavky, choďte cez vlákno — správa z iného vlákna vyhodí MessageException::notInThread():

// PATCH /threads/{thread}/messages/{message} — refuses a message of another thread
Messages::thread($thread)->message($message)->edit($request->body, by: $request->user());
Messages::thread($thread)->message($message)->delete(by: $request->user());

Čo robí zrušenie odoslania

  • Správa sa zmaže mäkko (soft delete) — riadok zostáva až do trvalého zmazania alebo prune.
  • Broadcasty a MessageResource skryjú text (null) a preview() vráti „This message was deleted.“ (v slovenčine „Táto správa bola odstránená.“).
  • Ukazovateľ poslednej správy vlákna sa presunie na predchádzajúcu zachovanú správu.
  • Súbory príloh zostanú; odstráni ich len trvalé zmazanie alebo prune.

Systémové správy

Systémové správy zapnete cez messages.system-messages.enabled (MESSAGES_SYSTEM_MESSAGES). Ukladajú sa ako správa typu MessageType::System bez odosielateľa, s prekladovým kľúčom ako textom a parametrami v JSON stĺpci meta, takže sa správne zobrazia v ľubovoľnom jazyku. Po zapnutí ich balík zapisuje sám:

  • pridanie účastníka — messages::messages.system.participant_joined s poľom participateAs() účastníka v meta.participant;
  • odchod účastníka — messages::messages.system.participant_left, rovnaké meta;
  • premenovanie vlákna — messages::messages.system.thread_renamed s meta.name.

preview() ich zobrazí v aktuálnom jazyku. Za :participant dosadí kľúč name z uloženej snímky — a ak ho snímka nemá alebo model neimplementuje ParticipatesInMessaging, text „bez mena“ (v angličtine „An unnamed participant“). Rovnako sa zobrazia aj správy uložené verziami 1.0.0–1.0.1.

Vlastné systémové správy zapíšete cez builder. preview() preloží kľúč a skalárne hodnoty z meta použije ako náhrady:

use RoundlyConsulting\Messages\Facades\Messages;

$message = Messages::to($thread)
    ->asSystem('messages::messages.system.thread_renamed', ['name' => 'Launch'])
    ->send();   // type System, no sender, body = the translation key, params in meta

$message->preview();   // "The conversation was renamed to Launch."

Prekladové kľúče

Angličtina a slovenčina sú súčasťou balíka. Ak chcete texty preformulovať alebo pridať ďalší jazyk, publikujte ich tagom messages-translations:

KľúčPredvolený anglický text
messages::messages.system.participant_joined:participant joined the conversation.
messages::messages.system.participant_left:participant left the conversation.
messages::messages.system.thread_renamedThe conversation was renamed to :name.
messages::messages.system.unnamed_participantAn unnamed participant
messages::messages.preview.deletedThis message was deleted.
messages::messages.reply.cross-threadA reply must target a message in the same thread.
messages::messages.participation.not-a-participant[:participant] is not a participant of this thread.
messages::messages.participation.ownership-by-transferOwnership changes hands only through transferOwnership().
messages::messages.participation.owner-must-transferThe owner must transferOwnership() before leaving the thread.
messages::messages.participation.not-the-owner[:participant] does not own this thread, so has no ownership to transfer.
messages::messages.participation.direct-has-no-rolesA direct thread has no roles to change.
messages::messages.participation.direct-is-closedA direct thread takes no new participants; start a group thread to bring someone in.
messages::messages.participation.direct-takes-twoA direct thread has one or two participants; start a group thread for more.
messages::messages.participation.participant-missingThe model behind participant [:participant] no longer exists.
messages::messages.participation.thread-missingThe thread of participant [:participant] no longer exists.
messages::messages.participation.interface-requiredMissing implementation of the :interface interface for class :class.
messages::messages.permissions.requires-role[:actor] requires the :role role to :action.
messages::messages.permissions.unauthorized[:actor] is not authorized to :action.
messages::messages.scope.message-in-another-threadMessage [:message] belongs to another thread.
messages::messages.scope.participant-in-another-threadParticipant [:participant] belongs to another thread.

UnauthorizedMessagingAction::for(Model $actor, string $action) aj requiresRole(Model $actor, ParticipantRole $required, string $action) očakávajú v $action kľúč messages::messages.permissions.actions.* a prečítajú ho v aktuálnom jazyku — bežnú frázu, ktorá kľúčom nie je, použijú tak, ako je. Požadovanú rolu berú z messages::messages.permissions.roles.* (owner, admin, member), takže celé odmietnutie je v jednom jazyku. Po slovensky znie napríklad takto: […] potrebuje rolu „vlastník“, ak chce odovzdať vlastníctvo.

Kľúč permissions.actions.*Predvolený anglický text
join-threadjoin this thread
send-messagessend messages to this thread
add-participants / remove-participantsadd participants / remove participants
remove-participantremove this participant
change-roleschange participant roles
transfer-ownershiptransfer ownership
rename-thread / archive-threadrename the thread / archive the thread
delete-message / edit-messagedelete this message / edit this message

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.