77use App \SupportTicket \Status ;
88use Illuminate \Contracts \View \View ;
99use Illuminate \Support \Facades \Notification ;
10+ use Illuminate \Support \Facades \RateLimiter ;
1011use Livewire \Attributes \Layout ;
1112use Livewire \Attributes \Title ;
1213use Livewire \Component ;
@@ -33,10 +34,22 @@ public function reply(): void
3334 {
3435 $ this ->authorize ('reply ' , $ this ->supportTicket );
3536
37+ $ key = 'support-reply: ' .auth ()->id ();
38+
39+ if (RateLimiter::tooManyAttempts ($ key , 10 )) {
40+ $ seconds = RateLimiter::availableIn ($ key );
41+
42+ $ this ->addError ('replyMessage ' , "You're sending messages too quickly. Please wait {$ seconds } seconds. " );
43+
44+ return ;
45+ }
46+
3647 $ this ->validate ([
3748 'replyMessage ' => ['required ' , 'string ' , 'max:5000 ' ],
3849 ]);
3950
51+ RateLimiter::hit ($ key , 60 );
52+
4053 $ reply = $ this ->supportTicket ->replies ()->create ([
4154 'user_id ' => auth ()->id (),
4255 'message ' => $ this ->replyMessage ,
@@ -48,8 +61,6 @@ public function reply(): void
4861
4962 $ this ->replyMessage = '' ;
5063 $ this ->supportTicket ->load (['user ' , 'replies.user ' ]);
51-
52- session ()->flash ('success ' , 'Your reply has been sent. ' );
5364 }
5465
5566 public function closeTicket (): void
@@ -60,7 +71,30 @@ public function closeTicket(): void
6071 'status ' => Status::CLOSED ,
6172 ]);
6273
63- session ()->flash ('success ' , __ ('account.support_ticket.close_ticket.success ' ));
74+ $ this ->supportTicket ->replies ()->create ([
75+ 'user_id ' => null ,
76+ 'message ' => auth ()->user ()->name .' closed this ticket. ' ,
77+ 'note ' => false ,
78+ ]);
79+
80+ $ this ->supportTicket ->load (['user ' , 'replies.user ' ]);
81+ }
82+
83+ public function reopenTicket (): void
84+ {
85+ $ this ->authorize ('reopenTicket ' , $ this ->supportTicket );
86+
87+ $ this ->supportTicket ->update ([
88+ 'status ' => Status::OPEN ,
89+ ]);
90+
91+ $ this ->supportTicket ->replies ()->create ([
92+ 'user_id ' => null ,
93+ 'message ' => auth ()->user ()->name .' reopened this ticket. ' ,
94+ 'note ' => false ,
95+ ]);
96+
97+ $ this ->supportTicket ->load (['user ' , 'replies.user ' ]);
6498 }
6599
66100 public function render (): View
0 commit comments