ultimatepos/Modules/ManagementTools/Http/Controllers/UrgentMessageController.php

135 lines
4.5 KiB
PHP

<?php
namespace Modules\ManagementTools\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\ManagementTools\Entities\MtDefaultSentence;
use Yajra\DataTables\Facades\DataTables;
class UrgentMessageController extends Controller
{
protected function canManage(): bool
{
return auth()->user()->can('managementtools.urgent_messages');
}
protected function canView(): bool
{
return $this->canManage() || auth()->user()->can('managementtools.urgent_messages_view');
}
protected function authorizeManage(): void
{
if (! $this->canManage()) {
abort(403, 'Unauthorized action.');
}
}
protected function authorizeView(): void
{
if (! $this->canView()) {
abort(403, 'Unauthorized action.');
}
}
public function index(Request $request)
{
$this->authorizeView();
$business_id = (int) $request->session()->get('user.business_id');
if ($request->ajax()) {
if (! $this->canManage()) {
abort(403, 'Unauthorized action.');
}
$sentences = MtDefaultSentence::forBusiness($business_id)->ordered();
return DataTables::of($sentences)
->addColumn('action', function ($row) {
$html = '<div class="btn-group">';
$html .= '<button type="button" data-href="'.action([self::class, 'edit'], [$row->id]).'" class="btn btn-xs btn-primary btn-modal" data-container=".mt_sentence_modal"><i class="glyphicon glyphicon-edit"></i> '.__('managementtools::lang.edit').'</button>';
$html .= ' <button type="button" data-href="'.action([self::class, 'destroy'], [$row->id]).'" class="btn btn-xs btn-danger delete_mt_sentence"><i class="glyphicon glyphicon-trash"></i></button>';
$html .= '</div>';
return $html;
})
->editColumn('sentence', fn ($row) => e(\Str::limit($row->sentence, 120)))
->rawColumns(['action'])
->make(true);
}
if ($this->canManage()) {
return view('managementtools::urgent_messages.index');
}
$sentences = MtDefaultSentence::forBusiness($business_id)->ordered()->get();
return view('managementtools::urgent_messages.inbox', compact('sentences'));
}
public function create()
{
$this->authorizeManage();
return view('managementtools::urgent_messages.create');
}
public function store(Request $request)
{
$this->authorizeManage();
$business_id = (int) $request->session()->get('user.business_id');
$request->validate([
'sentence' => 'required|string|max:500',
'sort_order' => 'nullable|integer|min:0|max:255',
]);
MtDefaultSentence::create([
'business_id' => $business_id,
'sentence' => $request->sentence,
'sort_order' => $request->input('sort_order', 0),
]);
return response()->json(['success' => true, 'msg' => __('managementtools::lang.sentence_added')]);
}
public function edit($id)
{
$this->authorizeManage();
$business_id = (int) request()->session()->get('user.business_id');
$sentence = MtDefaultSentence::forBusiness($business_id)->findOrFail($id);
return view('managementtools::urgent_messages.edit', compact('sentence'));
}
public function update(Request $request, $id)
{
$this->authorizeManage();
$business_id = (int) $request->session()->get('user.business_id');
$sentence = MtDefaultSentence::forBusiness($business_id)->findOrFail($id);
$request->validate([
'sentence' => 'required|string|max:500',
'sort_order' => 'nullable|integer|min:0|max:255',
]);
$sentence->update([
'sentence' => $request->sentence,
'sort_order' => $request->input('sort_order', 0),
]);
return response()->json(['success' => true, 'msg' => __('managementtools::lang.sentence_updated')]);
}
public function destroy($id)
{
$this->authorizeManage();
$business_id = (int) request()->session()->get('user.business_id');
$sentence = MtDefaultSentence::forBusiness($business_id)->findOrFail($id);
$sentence->delete();
return response()->json(['success' => true, 'msg' => __('managementtools::lang.sentence_deleted')]);
}
}