268 lines
11 KiB
PHP
268 lines
11 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\IamPrincipal;
|
|
use App\Models\NotificationDetails;
|
|
use Illuminate\Http\Request;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\Log;
|
|
use App\Helpers\onesignalhelper;
|
|
use App\Models\ManageState;
|
|
use App\Models\Subscriptions;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ManageNotificationsController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
/**
|
|
* Created By : Sayli Raut
|
|
* Created at : 11 June 2024
|
|
* Use : To list notifications.
|
|
*/
|
|
$activeQuery = $request->query('active');
|
|
|
|
if ($activeQuery == 4) { // for customer
|
|
$notifications = NotificationDetails::with('Notification')
|
|
->where('is_active', 1)
|
|
->where('is_schedule', 0)
|
|
->whereHas('Notification', function ($query) {
|
|
$query->where('principal_type_xid', 3);
|
|
})
|
|
->latest()
|
|
->take(12)
|
|
->get();
|
|
} else if ($activeQuery == 3) { // for restaurant
|
|
$notifications = NotificationDetails::with('Notification')
|
|
->where('is_active', 1)
|
|
->where('is_schedule', 0)
|
|
->whereHas('Notification', function ($query) {
|
|
$query->where('principal_type_xid', 4);
|
|
})
|
|
->latest()
|
|
->take(12)
|
|
->get();
|
|
|
|
// return $notifications;
|
|
} else {
|
|
$notificationsOfType3 = NotificationDetails::with('Notification')
|
|
->where('is_active', 1)
|
|
->where('is_schedule', 0)
|
|
->whereHas('Notification', function ($query) {
|
|
$query->where('principal_type_xid', 3);
|
|
})
|
|
->latest()
|
|
->take(12)
|
|
->get();
|
|
|
|
$notificationsOfType4 = NotificationDetails::with('Notification')
|
|
->where('is_active', 1)
|
|
->where('is_schedule', 0)
|
|
->whereHas('Notification', function ($query) {
|
|
$query->where('principal_type_xid', 4);
|
|
})
|
|
->latest()
|
|
->take(12)
|
|
->get();
|
|
|
|
$notifications = $notificationsOfType3->merge($notificationsOfType4);
|
|
|
|
}
|
|
|
|
return view('Admin.pages.manage_notification.manage_notification', compact('notifications'));
|
|
}
|
|
|
|
/**
|
|
* Created By : Sayli Raut
|
|
* Created at : 10 June 2024
|
|
* Use : To view notification details.s
|
|
*/
|
|
public function add()
|
|
{
|
|
$state = ManageState::where('is_active', 1)->get()->toArray();
|
|
return view('Admin.pages.manage_notification.manage_notifications_add', compact('state'));
|
|
}
|
|
|
|
/**
|
|
* Created By : Sayli Raut
|
|
* Created at : 10 June 2024
|
|
* Use : To add notification .
|
|
*/
|
|
|
|
public function store_notification_data(Request $request)
|
|
{
|
|
try {
|
|
$request->validate([
|
|
'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
|
|
]);
|
|
|
|
DB::beginTransaction();
|
|
|
|
$imagePath = null;
|
|
if ($request->hasFile('image')) {
|
|
$image = $request->file('image');
|
|
$imagePath = saveSingleImageWithoutCrop($image, 'notification_images');
|
|
$imagePath = ListingImageUrl('notification_images', $imagePath);
|
|
}
|
|
|
|
$states = $request->states;
|
|
$dateTime = now();
|
|
$formattedDateTime = $dateTime->format('Y-m-d H:i:s');
|
|
$iamPrincipals = Subscriptions::select('iam_principal_xid')
|
|
->where('next_payment_date', '>=', $formattedDateTime)
|
|
->get();
|
|
$iamPrincipalIds = $iamPrincipals->pluck('iam_principal_xid');
|
|
$subscribe = IamPrincipal::whereIn('id', $iamPrincipalIds)
|
|
->where('is_active', 1)
|
|
->where('notification_status', 1)
|
|
->where('principal_type_xid', 3)
|
|
->whereIn('state_xid', $states)
|
|
->get();
|
|
|
|
$scheduled = false;
|
|
|
|
if ($request->user_type == 1) {
|
|
$allCustomerOneSignalIds = $subscribe->pluck('id');
|
|
$UserData = IamPrincipal::whereIn('id', $allCustomerOneSignalIds)->get();
|
|
|
|
if ($request->schedule_radio1 == 1 && $request->schedule_date) {
|
|
NotificationDetails::create([
|
|
'user_type' => $request->user_type,
|
|
'description' => $request->description,
|
|
'type' => $request->title,
|
|
'image' => $imagePath,
|
|
'date_added' => $request->schedule_date,
|
|
'is_schedule' => 1,
|
|
'delivery_schedule' => $request->schedule_date,
|
|
'state_ids' => json_encode($states),
|
|
]);
|
|
$scheduled = true;
|
|
} else {
|
|
foreach ($UserData as $customerIdItem) {
|
|
if ($customerIdItem->one_signal_player_id) {
|
|
onesignalhelper::sendNotificationApi(
|
|
$customerIdItem->one_signal_player_id,
|
|
$request->title,
|
|
$request->description,
|
|
'Dashboard Notification',
|
|
$imagePath,
|
|
$id = null
|
|
);
|
|
}
|
|
onesignalhelper::StoreNotificationDetails($customerIdItem->id, 'Notification', $request->title, $imagePath);
|
|
}
|
|
}
|
|
} elseif ($request->user_type == 2) {
|
|
$allPrincipalIds = IamPrincipal::where('principal_type_xid', 3)->pluck('id');
|
|
$subscribedIds = Subscriptions::select('iam_principal_xid')
|
|
->where('next_payment_date', '>=', $formattedDateTime)
|
|
->pluck('iam_principal_xid');
|
|
$unsubscribedIds = $allPrincipalIds->diff($subscribedIds);
|
|
$unsubscribedPrincipals = IamPrincipal::whereIn('id', $unsubscribedIds)
|
|
->where('is_active', 1)
|
|
->where('notification_status', 1)
|
|
->whereIn('state_xid', $states)
|
|
->get();
|
|
|
|
$allRestaurantOneSignalIds = $unsubscribedPrincipals->pluck('id');
|
|
$restaurantData = IamPrincipal::whereIn('id', $allRestaurantOneSignalIds)->get();
|
|
|
|
if ($request->schedule_radio1 == 1 && $request->schedule_date) {
|
|
NotificationDetails::create([
|
|
'user_type' => $request->user_type,
|
|
'description' => $request->description,
|
|
'type' => $request->title,
|
|
'image' => $imagePath,
|
|
'date_added' => $request->schedule_date,
|
|
'is_schedule' => 1,
|
|
'delivery_schedule' => $request->schedule_date,
|
|
'state_ids' => json_encode($states),
|
|
]);
|
|
$scheduled = true;
|
|
} else {
|
|
foreach ($restaurantData as $restaurantsData) {
|
|
if ($restaurantsData->one_signal_player_id) {
|
|
onesignalhelper::sendNotificationApi(
|
|
$restaurantsData->one_signal_player_id,
|
|
$request->title,
|
|
$request->description,
|
|
$request->title,
|
|
$imagePath,
|
|
$id = null
|
|
);
|
|
}
|
|
onesignalhelper::StoreNotificationDetails($restaurantsData->id, 'Notification', $request->title, $imagePath);
|
|
}
|
|
}
|
|
} elseif ($request->user_type == 3) {
|
|
$userQuery = IamPrincipal::where('is_active', 1)
|
|
->where('notification_status', 1)
|
|
->where('principal_type_xid', 3)
|
|
->whereIn('state_xid', $states);
|
|
|
|
$allUserOneSignalIds = $userQuery->pluck('id');
|
|
$UserData = IamPrincipal::whereIn('id', $allUserOneSignalIds)->get();
|
|
|
|
if ($request->schedule_radio1 == 1 && $request->schedule_date) {
|
|
NotificationDetails::create([
|
|
'user_type' => $request->user_type,
|
|
'description' => $request->description,
|
|
'type' => $request->title,
|
|
'image' => $imagePath,
|
|
'date_added' => $request->schedule_date,
|
|
'is_schedule' => 1,
|
|
'delivery_schedule' => $request->schedule_date,
|
|
'state_ids' => json_encode($states),
|
|
]);
|
|
$scheduled = true;
|
|
} else {
|
|
foreach ($UserData as $CustomerData) {
|
|
if ($CustomerData->one_signal_player_id) {
|
|
onesignalhelper::sendNotificationApi(
|
|
$CustomerData->one_signal_player_id,
|
|
$request->title,
|
|
$request->description,
|
|
'Dashboard Notification',
|
|
$imagePath,
|
|
$id = null
|
|
);
|
|
}
|
|
onesignalhelper::StoreNotificationDetails($CustomerData->id, 'Notification', $request->title, $imagePath);
|
|
}
|
|
}
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
if ($scheduled) {
|
|
return jsonResponseWithSuccessMessage(__('success.save_data_scheduled'));
|
|
} else {
|
|
return jsonResponseWithSuccessMessage(__('success.save_data_immediate'));
|
|
}
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
Log::error("Notification send Failed " . $e->getMessage());
|
|
return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Created By : Sayli Raut
|
|
* Created at : 10 June 2024
|
|
* Use : To view notification details.s
|
|
*/
|
|
public function view($id)
|
|
{
|
|
$notification = NotificationDetails::with('notification')->findOrFail($id);
|
|
return view('Admin.pages.manage_notification.manage_notifications_view', compact('notification'));
|
|
}
|
|
}
|