Files

155 lines
5.4 KiB
PHP
Raw Permalink Normal View History

2026-05-14 11:55:22 +07:00
<?php
namespace Modules\MarketingAddon\App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Maatwebsite\Excel\Facades\Excel;
use Modules\MarketingAddon\App\Exports\SmsGatewayExport;
use Modules\MarketingAddon\App\Models\GatewayType;
use Modules\MarketingAddon\App\Models\Smsgateway;
class AcnooSmsGatewayController extends Controller
{
public function index(Request $request)
{
$gateways = Smsgateway::with('type:id,name')
->where('business_id', auth()->user()->business_id)
->when($request->filled('channel'), function ($q) use ($request) {
$q->where('channel', $request->channel);
})
->when($request->filled('search'), function ($q) use ($request) {
$q->where(function ($query) use ($request) {
$query->where('name', 'like', '%' . $request->search . '%')
->orWhereHas('type', function ($type) use ($request) {
$type->where('name', 'like', '%' . $request->search . '%');
});
});
})
->latest()
->paginate($request->per_page ?? 20)
->appends($request->query());
if ($request->ajax()) {
return response()->json([
'data' => view('marketingaddon::sms-gateways.datas', compact('gateways'))->render()
]);
}
return view('marketingaddon::sms-gateways.index', compact('gateways'));
}
public function create(Request $request)
{
$types = GatewayType::where('channel', $request->channel)
->latest()
->get();
return view('marketingaddon::sms-gateways.create', compact('types'));
}
public function store(Request $request)
{
$request->validate([
'status' => 'required|integer',
'params' => 'required|array',
'params.*' => 'required|string',
'name' => [
'required',
Rule::unique('smsgateways')->where(function ($q) {
return $q->where('business_id', auth()->user()->business_id);
}),
],
'type_id' => 'required|exists:gateway_types,id',
]);
$type = GatewayType::findOrFail($request->type_id);
Smsgateway::create($request->all() + [
'driver' => $type->driver,
'namespace' => $type->namespace,
'business_id' => auth()->user()->business_id
]);
return response()->json([
'message' => __(':channel gateway created successfully.', ['channel' => ucfirst($request->channel)]),
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
]);
}
public function show(string $id)
{
$gateway = Smsgateway::findOrFail($id);
$gateway->update(['status' => !$gateway->status]);
return response()->json(['message' => 'Sms gateway']);
}
public function edit(Request $request, string $id)
{
$types = GatewayType::where('channel', $request->channel)->latest()->get();
$gateway = Smsgateway::where('business_id', auth()->user()->business_id)->findOrFail($id);
return view('marketingaddon::sms-gateways.edit', compact('gateway', 'types'));
}
public function update(Request $request, string $id)
{
$request->validate([
'status' => 'required|integer',
'params' => 'required|array',
'params.*' => 'required|string',
'type_id' => 'required|exists:gateway_types,id',
'name' => [
'required',
Rule::unique('smsgateways', 'name')->ignore($id)->where(function ($q) {
return $q->where('business_id', auth()->user()->business_id);
}),
],
]);
$type = GatewayType::findOrFail($request->type_id);
$gateway = Smsgateway::findOrFail($id);
$gateway->update($request->all() + [
'driver' => $type->driver,
'namespace' => $type->namespace
]);
return response()->json([
'message' => __(':channel gateway updated successfully.', ['channel' => ucfirst($request->channel)]),
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
]);
}
public function destroy(Request $request, string $id)
{
Smsgateway::where('id', $id)->delete();
return response()->json([
'message' => __(':channel gateway deleted successfully.', ['channel' => ucfirst($request->channel)]),
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
]);
}
public function deleteAll(Request $request)
{
Smsgateway::whereIn('id', $request->ids)->delete();
return response()->json([
'message' => __('Selected :channel gateway deleted successfully.', ['channel' => $request->channel]),
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
]);
}
public function exportExcel()
{
return Excel::download(new SmsGatewayExport, 'sms-gateway.xlsx');
}
public function exportCsv()
{
return Excel::download(new SmsGatewayExport, 'sms-gateway.csv');
}
}