new app store assets ready for relese
This commit is contained in:
@@ -1,34 +1,95 @@
|
||||
<?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\DB;
|
||||
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]);
|
||||
}
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Component;
|
||||
|
||||
class SupportDesk extends Component
|
||||
{
|
||||
public function boot(): void
|
||||
{
|
||||
abort_unless(auth()->check() && auth()->user()->hasVerifiedEmail(), 403);
|
||||
if (auth()->user()->is_admin) {
|
||||
abort_unless(auth()->user()->two_factor_confirmed_at, 403);
|
||||
}
|
||||
}
|
||||
|
||||
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'), 'support-update'));
|
||||
}
|
||||
$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'), 'support-update');
|
||||
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