135 lines
4.5 KiB
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')]);
|
|
}
|
|
}
|