- Menambahkan EmailBlastController untuk mengelola email blast. - Menyediakan metode untuk menampilkan, membuat, dan menyimpan email blast. - Mengimplementasikan validasi untuk input email blast. - Menyimpan riwayat email blast dan mengantre pengiriman menggunakan job. - Menyediakan metode untuk menampilkan detail dan datatables untuk riwayat email blast.
82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Webstatement\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Modules\Webstatement\Models\Customer;
|
|
use Modules\Webstatement\Models\EmailBlastHistory;
|
|
use Modules\Webstatement\Jobs\SendEmailBlast;
|
|
|
|
class EmailBlastController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
return view('webstatement::emailblast.index');
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
return view('webstatement::emailblast.create');
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'subject' => 'required|string',
|
|
'content' => 'required|string',
|
|
'recipients_type' => 'required|in:all,custom',
|
|
'recipients' => 'required_if:recipients_type,custom|array',
|
|
'recipients.*' => 'email',
|
|
]);
|
|
|
|
if ($request->recipients_type === 'all') {
|
|
$recipients = Customer::limit(3)->pluck('email')->toArray();
|
|
} else {
|
|
$recipients = $request->recipients;
|
|
}
|
|
|
|
$emailBlastHistory = EmailBlastHistory::create([
|
|
'subject' => $request->subject,
|
|
'content' => $request->content,
|
|
'recipients_count' => count($recipients),
|
|
'status' => 'pending',
|
|
]);
|
|
|
|
SendEmailBlast::dispatch($emailBlastHistory, $recipients);
|
|
|
|
return redirect()->route('emailblast.index')->with('success', 'Email blast queued successfully');
|
|
}
|
|
|
|
public function view($id)
|
|
{
|
|
$emailBlast = EmailBlastHistory::findOrFail($id);
|
|
return view('webstatement::emailblast.view', compact('emailBlast'));
|
|
}
|
|
|
|
public function datatables(Request $request)
|
|
{
|
|
$query = EmailBlastHistory::query();
|
|
|
|
if ($request->has('search')) {
|
|
$searchTerm = $request->search;
|
|
$query->where('subject', 'like', "%{$searchTerm}%");
|
|
}
|
|
|
|
$total = $query->count();
|
|
|
|
$result = $query->orderBy('created_at', 'desc')
|
|
->skip($request->input('start', 0))
|
|
->take($request->input('length', 10))
|
|
->get();
|
|
|
|
return response()->json([
|
|
'draw' => $request->input('draw', 1),
|
|
'recordsTotal' => $total,
|
|
'recordsFiltered' => $total,
|
|
'data' => $result
|
|
]);
|
|
|
|
}
|
|
}
|