Edit File: NotificationService.php
<?php namespace App\Services\Entity; use App\Jobs\AdminNotify; use App\Jobs\Notify; use App\Jobs\SendEmailJob; use App\Jobs\SendSms; use App\Models\Admin; use App\Models\Notification; use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\View\View; class NotificationService extends BaseService { /** * Initializes the CityService class. * * @param Notification $notification */ public function __construct(Notification $notification) { $this->model = $notification; } public function index(): View { return view('admin.notifications.index'); } public function sendNotifications($request): JsonResponse { $rows = $this->getrows($request->user_type); $rules = [ 'type' => 'required|in:notify,email,sms', 'user_type' => 'required|in:all,admins,all_users,active_users,not_active_users,blocked_users,not_blocked_users', 'body' => 'required', ]; if ($request->type == 'notify') { unset($rules['body']); $rules = array_merge($rules, [ 'body_ar' => 'required', 'body_en' => 'required', ]); $request->validate($rules); // Separate the rows into different types if needed $users = $rows->whereInstanceOf(User::class); $admins = $rows->whereInstanceOf(Admin::class); // Notify users if ($users->isNotEmpty()) { $this->notify($users, $request->user_type, $request); } // Notify admins if ($admins->isNotEmpty()) { $this->notify($admins, $request->user_type, $request); } } else if ($request->type == 'email') { $request->validate($rules); $this->sendMail($rows, $request); } else { $request->validate($rules); $this->sendSms($rows->pluck('phone')->toArray(), $request->message); } return response()->json(); } protected function notify($rows, $type, $request): void { if ($type == 'admins') { dispatch(new AdminNotify($rows, $request)); } else { dispatch(new Notify($rows, $request)); } } protected function sendMail($rows, $request): void { dispatch(new SendEmailJob($rows->pluck('email'), $request)); } function sendSms($phones, $message) { dispatch(new SendSms($phones, $message)); } public function getRows($type) { $users = collect(); $admins = collect(); if ($type == 'all') { $users = User::all(); $admins = Admin::all(); } elseif ($type == 'all_users') { $users = User::all(); } elseif ($type == 'active_users') { $users = User::where('active', true)->get(); } elseif ($type == 'not_active_users') { $users = User::where('active', false)->get(); } elseif ($type == 'blocked_users') { $users = User::where('is_blocked', true)->get(); } elseif ($type == 'not_blocked_users') { $users = User::where('is_blocked', false)->get(); } elseif ($type == 'admins') { $admins = Admin::all(); } return $users->concat($admins); } }
Back to File Manager