wite
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
namespace App\Livewire;
|
||||
use Livewire\Component;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\User;
|
||||
use App\Notifications\AccountUpdate;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
class SupportDesk extends Component {
|
||||
public string $subject='';public string $body='';public string $reply='';
|
||||
#[Locked] public ?int $ticketId=null;
|
||||
private function ticket() { $ticket=DB::table('tickets')->find($this->ticketId);abort_unless($ticket && (auth()->user()->is_admin || $ticket->user_id===auth()->id()),403);return $ticket; }
|
||||
public function select(int $id): void {$this->ticketId=$id;$this->ticket();}
|
||||
public function create(): void {
|
||||
$this->validate(['subject'=>'required|string|max:200','body'=>'required|string|min:10|max:10000']);
|
||||
$this->ticketId=DB::transaction(function(){ $id=DB::table('tickets')->insertGetId(['user_id'=>auth()->id(),'subject'=>$this->subject,'status'=>'open','created_at'=>now(),'updated_at'=>now()]);DB::table('ticket_messages')->insert(['ticket_id'=>$id,'user_id'=>auth()->id(),'body'=>$this->body,'created_at'=>now(),'updated_at'=>now()]);return $id;});
|
||||
if(config('tarnax.support_email')){Notification::route('mail',config('tarnax.support_email'))->notify(new AccountUpdate('New Tarnax support ticket',$this->subject,url('/support')));}
|
||||
$this->reset('subject','body');
|
||||
}
|
||||
public function send(): void {
|
||||
$ticket=$this->ticket();$this->validate(['reply'=>'required|string|min:2|max:10000']);
|
||||
DB::table('ticket_messages')->insert(['ticket_id'=>$ticket->id,'user_id'=>auth()->id(),'body'=>$this->reply,'created_at'=>now(),'updated_at'=>now()]);
|
||||
DB::table('tickets')->where('id',$ticket->id)->update(['status'=>'open','updated_at'=>now()]);
|
||||
$notification=new AccountUpdate('Your Tarnax support ticket has a reply','Sign in to read the reply.',url('/support'));
|
||||
if(auth()->user()->is_admin){User::findOrFail($ticket->user_id)->notify($notification);}elseif(config('tarnax.support_email')){Notification::route('mail',config('tarnax.support_email'))->notify($notification);}
|
||||
$this->reply='';
|
||||
}
|
||||
public function close(): void {$ticket=$this->ticket();DB::table('tickets')->where('id',$ticket->id)->update(['status'=>'closed','updated_at'=>now()]);}
|
||||
public function render() {
|
||||
$query=DB::table('tickets');if(!auth()->user()->is_admin){$query->where('user_id',auth()->id());}
|
||||
$messages=collect();if($this->ticketId){$this->ticket();$messages=DB::table('ticket_messages')->join('users','users.id','=','ticket_messages.user_id')->where('ticket_id',$this->ticketId)->select('ticket_messages.*','users.name')->orderBy('ticket_messages.id')->get();}
|
||||
return view('livewire.support-desk',['tickets'=>$query->latest('updated_at')->limit(100)->get(),'messages'=>$messages]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user