feat(email-blast): tambahkan kontroler untuk manajemen email blast
- 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.
This commit is contained in:
81
app/Http/Controllers/EmailBlastController.php
Normal file
81
app/Http/Controllers/EmailBlastController.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?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
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user