Zakladanie a úprava tiketov
Tickets::make() vráti TicketBuilder; create() tiket založí a vráti ho. Povinný je len predmet a žiadateľ (model vašej aplikácie alebo polia hosťa):
$ticket = Tickets::make()
->subject('Printer on floor 3 is jammed') // required
->description('Paper jam error E-102.')
->requester($user) // a host model…
->guest(['name' => 'Jo', 'email' => '[email protected]']) // …or guest fields (GuestData|array)
->category($hardware) // model, id or null
->priority('high') // value or enum case
->project($helpdesk) // a TicketProject
->assignee($agent)
->due(now()->addDay())
->channel('web')
->fields(['asset_tag' => 'PRN-0042'])
->tags(['printer']) // names or TicketTag models
->watchers($colleague)
->attach($request->file('photo')) // UploadedFile or a local path — never user input as a path
->meta(['crm_id' => 'C-1']) // host-owned metadata; top-level keys merge
->by($agent) // the actor (default: the auth user, with actor.from_auth)
->create();asSystem() ho založí bez aktéra; data() namiesto založenia vráti CreateTicketData. Neaktívna kategória sa pre nový tiket odmietne a kanál musí byť jeden z tickets.channels. Z PHP prílohy prijímajú uploady alebo lokálne cesty — vstup od používateľa nikdy neodovzdávajte ako cestu.
Predvolené hodnoty pri založení
- Hodnoty, ktoré volajúci vynechá, sa doplnia raz, pri založení: z najbližšej nadradenej kategórie, ktorá ich nastavuje, potom z konfigurácie — priorita (tickets.priority.default), riešiteľ (Contracts\AssignmentStrategy), termín (Contracts\DueDateResolver) a kanál (tickets.default_channel). Doplnia sa aj predvolené hodnoty vlastných polí.
- Každý kontrakt vidí uložený tiket: riešiteľ a termín sa vyberú hneď po vložení riadku, v tej istej transakcii — tiket už má kľúč, číslo, poradové číslo a počiatočný stav, žiadateľa, projekt, kategóriu, prioritu a kanál, ešte však nie hodnoty vlastných polí, štítky, sledujúcich ani prílohy.
- Neskoršia zmena kategórie tiketu nič znova neuplatní.
Podoba s DTO
use RoundlyConsulting\Tickets\DataTransferObjects\CreateTicketData;
$ticket = Tickets::create(new CreateTicketData(
subject: 'Printer on floor 3 is jammed',
requester: $customer,
category: $hardware,
priority: 'high',
channel: 'web',
fields: ['asset_tag' => 'PRN-0042'],
));Zo žiadateľa alebo projektu
// Concerns\RequestsTickets on your user model — the requester is set
$ticket = $user->openTicket()->subject('VPN drops every hour')->create();
// Concerns\HasTickets on your project model — numbered in the project's sequence
$ticket = $project->openTicket()->subject('…')->requester($user)->create(); // SUP-1Vyhľadanie tiketov
Tickets::find('SUP-42'); // ?Ticket — live tickets only
Tickets::find('SUP-42', withTrashed: true); // a soft-deleted one too
Tickets::findOrFail('SUP-42'); // TicketNotFoundException otherwise
Tickets::for('SUP-42'); // a handle; an unknown or soft-deleted reference throwsÚprava tiketu
use RoundlyConsulting\Tickets\DataTransferObjects\UpdateTicketData;
// Only what is given changes; null clears a nullable value
Tickets::for($ticket)->by($agent)->update(new UpdateTicketData(subject: 'Printer on floor 3 jams on A3', description: null));
Tickets::for($ticket)->by($agent)->prioritize('urgent'); // TicketPriorityChanged
Tickets::for($ticket)->by($agent)->categorize($printers); // TicketCategoryChanged; defaults are not re-applied
Tickets::for($ticket)->by($agent)->changeRequester($colleague); // a model or GuestData- Polia UpdateTicketData sú predvolene Support\Optional (nezadané), takže sa zmení len to, čo odovzdáte, a null môže zrušiť hodnotu, ktorá je voliteľná. TicketUpdated sa spustí so zmenenými kľúčmi (subject, description, meta).
- categorize() znova neuplatní predvolené hodnoty kategórie, novo povinné pole cieľovej kategórie však potrebuje hodnotu.
- changeRequester() tiket predošlému žiadateľovi odoberie: jeho automatické sledovanie sa potichu odstráni (sledovanie, ktoré agent pridal zámerne, zostane), a ak bol predošlý žiadateľ hosť, všetky odkazy pre hostí k tiketu sa zneplatnia (GuestAccessRevoked).
- Opätovné nastavenie rovnakej priority nespustí nič.
Mazanie a obnovenie
Tickets::for($ticket)->by($manager)->delete(); // soft delete
Tickets::for(Tickets::findOrFail('SUP-42', withTrashed: true))->restore(); // bring it backSoft-deleted tiket si ponechá číslo a každá jeho zmena vyhodí TicketTrashedException, kým ho neobnovíte. V API vyžaduje mazanie a obnovenie oprávnenie manage u agenta pre daný tiket (pozrite Policy a rozsah agentov).
Aktér
by($actor) pripíše nasledujúce volania aktérovi; by(null) použije prihláseného používateľa (tickets.actor.from_auth na tickets.actor.guard); asSystem() znamená nikoho. Aktérovi sa pripisujú záznamy aktivít, udalosti a notifikácie a podľa neho posudzujú doménové pravidlá — rolu agenta, žiadateľa či účastníka.
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.