KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.41 (Ubuntu)
System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64
User : www-data ( 33)
PHP Version : 8.2.12
Disable Function : NONE
Directory :  /var/www/parassaas.edukrypt.in/app/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //var/www/parassaas.edukrypt.in/app/Http/Controllers/ApiController.php
<?php

namespace App\Http\Controllers;

use JWTAuth;
use App\Models\User;
use App\Models\Main_category;
use App\Models\Log;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Exceptions\JWTException;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use App\Models\Admin_user;
use App\Models\Otpsession;
use App\Models\User_device_id;
use App\Models\Notification;
use Illuminate\Support\Facades\Auth;
use DB;
use Postal\Client;
use App\Helpers\Frontend;
use App\Models\Product;

class ApiController extends Controller
{

	// Check Active Device
	public function classroomActiveDeviceAPI(Request $request)
	{
		$admin_id = 2;
		$rules = array(
			'user_unique_id'    => 'required',
			'model_id'      => 'required',
			'model_no'      => 'required',
			'device_type'   => 'required'
		);

		$messages = array(
			'user_unique_id.required' => 'Please enter user_unique_id.',
			'model_id.required' => 'Please enter a model id.',
			'model_no.required' => 'Please enter a model no.',
			'device_type.required' => 'Please enter Device Type.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}


		$checkUserData =  User::select('users.*')->Join('users_classroom_tb', 'users_classroom_tb.user_unique_id', '=', 'users.user_unique_id')->where(['users.user_unique_id' => $request->user_unique_id])->first();
		if (!empty($checkUserData)) {

			$checkActiveDCount = User_device_id::where(['user_id' => $checkUserData->id, 'status' => '1'])->count();
			if ($checkActiveDCount > 1) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Multiple Active device found!.',
					'data' => '{}'
				], 200);
			}


			$checkActiveID = User_device_id::where(['user_id' => $checkUserData->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '1'])->count();
			if ($checkActiveID > 0) {
				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => 'Active device found!.',
					'data' => '{}'
				], 200);
			}
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Unknown Active device!.',
				'data' => '{}'
			], 200);
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'User not found!.',
			'data' => '{}'
		], 200);
	}

	//  Classroom Login API
	public function classroomLoginAPI(Request $request)
	{
		$admin_id = 2;
		$rules = array(
			'username'      => 'required',
			'password'      => 'required',
			'model_id'      => 'required',
			'model_no'      => 'required',
			//'fcm_token'     => 'required',
			'device_type'   => 'required'
		);

		$messages = array(
			'username.required' => 'Please enter a email/mobile.',
			'password.required' => 'Please enter a password.',
			'model_id.required' => 'Please enter a model id.',
			'model_no.required' => 'Please enter a model no.',
			//'fcm_token.required' => 'Please enter a FCM Token.',
			'device_type.required' => 'Please enter Device Type.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		$checkEmailPhone =  User::select('users.*')->Join('users_classroom_tb', 'users_classroom_tb.user_unique_id', '=', 'users.user_unique_id')->where(['users.email' => $request->username])->orWhere('users.phone', $request->username)->first();


		if (empty($checkEmailPhone)) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Email or Phone number not registered.',
				'data' => '{}'
			], 200);
		}

		if (Hash::check($request->password, $checkEmailPhone->password)) {
			// IF EMPTY OR FIRST DEVICE
			$userAnyDevice =  User_device_id::where(['user_id' => $checkEmailPhone->id])->first();
			// print_r($userAnyDevice);
			// exit;
			if (empty($userAnyDevice)) {
				$userDevice = array(
					'user_id' => $checkEmailPhone->id,
					'model_id' => $request->model_id,
					'model_no' => $request->model_no,
					'device_type' => $request->device_type,
					'status' => '1'
				);
				User_device_id::create($userDevice);
				User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
				$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
				//Request is valid, create new user
				$Admin = Admin_user::where(['id' => $admin_id])->first();
				$checkEmailPhoneData['salt'] = $Admin->salt;
				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => '3 - Student login successfully.',
					'data' => $checkEmailPhoneData
				], 200);
			}

			// IF SAME DEVICE TYPE MORE THEN 1
			$userDevicesCount = User_device_id::select('')->where(['user_id' => $checkEmailPhone->id])->groupBy('device_type')->count();
			if ($userDevicesCount > 1) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Same Device Type Registered twice, please contact to admin',
					'data' => '{}'
				], 200);
			}


			// IF USER LOGIN AGAIN SAME DEVICE
			$userDevices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'status' => '1'])->get();
			if (count($userDevices) > 1) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Already logged in another device.',
					'data' => '{}'
				], 200);
			} else if (count($userDevices) > 0) {
				if ($userDevices[0]->device_type == $request->device_type && $userDevices[0]->model_id == $request->model_id && $userDevices[0]->model_no == $request->model_no) {
					User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
					$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
					//Request is valid, create new user
					$Admin = Admin_user::where(['id' => $admin_id])->first();
					$checkEmailPhoneData['salt'] = $Admin->salt;
					User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->update(['status' => '1']);
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => '2 - Student login successfully.',
						'data' => $checkEmailPhoneData
					], 200);
				} else {
					return response()->json([
						'status' => 0,
						'success' => false,
						'message' => 'Already logged in another device, please loggout.',
						'data' => '{}'
					], 200);
				}
			} else {
				$_userDevices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->count();

				if ($_userDevices > 0) {
					User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
					$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
					//Request is valid, create new user
					$Admin = Admin_user::where(['id' => $admin_id])->first();
					$checkEmailPhoneData['salt'] = $Admin->salt;

					User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->update(['status' => '1']);
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => '1 - Student login successfully.',
						'data' => $checkEmailPhoneData
					], 200);
				} else {
					$_userDevices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type])->count();
					if ($_userDevices > 0) {
						return response()->json([
							'status' => 0,
							'success' => false,
							'message' => 'Duplicate device type found, please contact to admin.',
							'data' => '{}'
						], 200);
					} else if ($request->device_type == 'windows' || $request->device_type == 'android') {

						$userDevice = array(
							'user_id' => $checkEmailPhone->id,
							'model_id' => $request->model_id,
							'model_no' => $request->model_no,
							'device_type' => $request->device_type,
							'status' => '1'
						);
						User_device_id::create($userDevice);
						User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
						$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
						//Request is valid, create new user
						$Admin = Admin_user::where(['id' => $admin_id])->first();
						$checkEmailPhoneData['salt'] = $Admin->salt;
						return response()->json([
							'status' => 1,
							'success' => true,
							'message' => '3 - Student login successfully.',
							'data' => $checkEmailPhoneData
						], 200);
					} else {
						return response()->json([
							'status' => 0,
							'success' => false,
							'message' => 'Unknown device type found, please contact to admin.',
							'data' => '{}'
						], 200);
					}
				}
			}


			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Something went wrong, Please contact to admin.',
				'data' => '{}'
			], 200);
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'Wrong password, Please try again.',
			'data' => '{}'
		], 200);
	}

	//  Student Registration API
	public function studentRegisterAPI(Request $request)
	{
		$rules = array(
			'name' => 'required',
			'email' => 'required|unique:users,email',
			'phone' => 'required|unique:users,phone',
			'password' => 'required'
		);

		$messages = array(
			'name.required'     => 'Please enter a name.',
			'email.required'    => 'Please enter a email.',
			'email.unique'      => 'Email already registered',
			'phone.required'    => 'Please enter a mobile.',
			'phone.unique'      => 'Phone already registered.',
			'password.required' => 'Please enter a password.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		//  Send OTP
		$phone = $request->phone;
		$OTP_DATA = $this->send_otp($phone);

		//dd($OTP_DATA);
		if (isset($OTP_DATA->status) && ($OTP_DATA->status != 'Success')) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $OTP_DATA->description,
			], 200);
		}

		// Send Mail
		$TO_EMAIL = $request->email;
		$SUBJECT = "Navin Classes | Verification";
		$MAIL_OTP = rand(111111, 999999);
		$HTML = "Dear Student, use OTP code $MAIL_OTP to verify your account, Navin Classes";
		$resMail = Frontend::sendMailPostal($TO_EMAIL, $SUBJECT, $HTML);

		if (!empty($resMail->result->message_id)) {
			$data = array(
				'message_id' => $resMail->result->message_id,
				'email' => $TO_EMAIL,
				'otp' => $MAIL_OTP
			);
			$OTP_DATA['email'] = $TO_EMAIL;
			$OTP_DATA['email_message_id'] = $resMail->result->message_id;
			$OTP_SESSION = Otpsession::create($data);
		}
		//dd($OTP_DATA);

		return response()->json([
			'status' => 1,
			'success' => true,
			'message' => 'OTP sent to your registered email and mobile number.',
			'data' => $OTP_DATA
		], 200);
	}

	//  Student Registration Final API
	public function studentRegisterContinueAPI(Request $request)
	{
		$admin_id = 2;

		$rules = array(
			'email'         => 'required|unique:users,email',
			'phone'         => 'required|unique:users,phone',
			'name'          => 'required',
			'password'      => 'required',
			'otp_mobile'    => 'required',
			'message_id'    => 'required',
			'otp_email'     => 'required',
			'email_message_id'    => 'required',
			'model_id'      => 'required',
			'model_no'      => 'required',
			'device_type'   => 'required',
			'fcm_token'     => 'required',
		);

		$messages = array(
			'name.required'         => 'Please enter a name.',
			'email.required'        => 'Please enter a email.',
			'email.unique'          => 'Email already registered',
			'phone.required'        => 'Please enter a mobile.',
			'phone.unique'          => 'Phone already registered.',
			'password.required'     => 'Please enter a password.',

			'message_id.required'   => 'Mobile OTP Message ID is required.',
			'otp_mobile.required'   => 'Please enter Mobile OTP.',

			'email_message_id.required'   => 'Email Message ID is required.',
			'otp_email.required'    => 'Please enter Email OTP.',

			'model_id.required'     => 'Model ID is required.',
			'model_no.required'     => 'Model Number is required.',
			'device_type.required'  => 'Device Type is required.',
			'fcm_token.required'    => 'FCM Token is required.',
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		// if not valid
		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		// dd($request);

		// if valid
		$MOB_OTP_Value = Otpsession::where(['message_id' => $request->message_id, 'phone' => $request->phone])->first();
		$EMAIL_OTP_Value = Otpsession::where(['message_id' => $request->email_message_id, 'email' => $request->email])->first();

		// print_r($MOB_OTP_Value . '<br>');
		// print_r($EMAIL_OTP_Value);
		// exit;
		if (empty($MOB_OTP_Value) && empty($EMAIL_OTP_Value)) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Message ID not found!',
				'data' => '{}'
			], 200);
		}

		// Match OTP
		if (($MOB_OTP_Value->otp == $request->otp_mobile) && ($EMAIL_OTP_Value->otp == $request->otp_email)) {

			//Request is valid, create new user
			$Admin = Admin_user::where(['id' => $admin_id])->first();

			//dd($request->fcm_token);
			$user = User::create([
				'admin_id'          => $admin_id,
				'user_unique_id'    => uniqid(),
				'name'              => $request->name,
				'phone'             => $request->phone,
				'email'             => $request->email,
				'fcm_token'         => $request->fcm_token,
				'password'          => Hash::make($request->password),
			]);

			$user_id = $user->id;
			$user = User::where(['id' => $user_id, 'status' => '1'])->first();
			$user['salt'] = $Admin->salt;

			$userDevice = array(
				'user_id' => $user_id,
				'model_id' => $request->model_id,
				'model_no' => $request->model_no,
				'device_type' => $request->device_type,
				'status' => '1'
			);

			User_device_id::create($userDevice);

			//User created, return success response
			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'User successfully registered!',
				'data' => $user
			], 200);
		} else {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Otp Does Not Match!',
				'data' => '{}'
			], 200);
		}
	}

	// Check Active Device
	public function studentActiveDeviceAPI(Request $request)
	{
		$admin_id = 2;
		$rules = array(
			'user_unique_id'    => 'required',
			'model_id'      => 'required',
			'model_no'      => 'required',
			'device_type'   => 'required'
		);

		$messages = array(
			'user_unique_id.required' => 'Please enter user_unique_id.',
			'model_id.required' => 'Please enter a model id.',
			'model_no.required' => 'Please enter a model no.',
			'device_type.required' => 'Please enter Device Type.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}


		$checkUserData =  User::where(['user_unique_id' => $request->user_unique_id])->first();
		if (!empty($checkUserData)) {

			$checkActiveDCount = User_device_id::where(['user_id' => $checkUserData->id, 'status' => '1'])->count();
			if ($checkActiveDCount > 1) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Multiple Active device found!.',
					'data' => '{}'
				], 200);
			}


			$checkActiveID = User_device_id::where(['user_id' => $checkUserData->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '1'])->count();
			if ($checkActiveID > 0) {
				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => 'Active device found!.',
					'data' => '{}'
				], 200);
			}
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Unknown Active device!.',
				'data' => '{}'
			], 200);
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'User not found!.',
			'data' => '{}'
		], 200);
	}



	//  Student Login API
	public function studentLogoutAPI(Request $request)
	{
		$admin_id = 2;
		$rules = array(
			'user_unique_id'    => 'required',
			'model_id'      => 'required',
			'model_no'      => 'required',
			'device_type'   => 'required'
		);

		$messages = array(
			'user_unique_id.required' => 'Please enter user_unique_id.',
			'model_id.required' => 'Please enter a model id.',
			'model_no.required' => 'Please enter a model no.',
			'device_type.required' => 'Please enter Device Type.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		$checkUserData =  User::where(['user_unique_id' => $request->user_unique_id])->first();
		if (!empty($checkUserData)) {
			User_device_id::where(['user_id' => $checkUserData->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id])->update(['status' => '0']);
		}

		return response()->json([
			'status' => 1,
			'success' => true,
			'message' => 'Logged out successfully.',
			'data' => '{}'
		], 200);
	}

	//  Student Login API
	public function studentLoginAPI(Request $request)
	{
		$admin_id = 2;
		$rules = array(
			'username'      => 'required',
			'password'      => 'required',
			'model_id'      => 'required',
			'model_no'      => 'required',
			//'fcm_token'     => 'required',
			'device_type'   => 'required'
		);

		$messages = array(
			'username.required' => 'Please enter a email/mobile.',
			'password.required' => 'Please enter a password.',
			'model_id.required' => 'Please enter a model id.',
			'model_no.required' => 'Please enter a model no.',
			//'fcm_token.required' => 'Please enter a FCM Token.',
			'device_type.required' => 'Please enter Device Type.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		$checkEmailPhone =  User::where(['email' => $request->username])->orWhere('phone', $request->username)->first();
		if (empty($checkEmailPhone)) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Email or Phone number not registered.',
				'data' => '{}'
			], 200);
		}

		if (Hash::check($request->password, $checkEmailPhone->password)) {
			// The passwords match...

			// IF EMPTY OR FIRST DEVICE
			$userAnyDevice =  User_device_id::where(['user_id' => $checkEmailPhone->id])->first();
			if (empty($userAnyDevice)) {
				$userDevice = array(
					'user_id' => $checkEmailPhone->id,
					'model_id' => $request->model_id,
					'model_no' => $request->model_no,
					'device_type' => $request->device_type,
					'status' => '1'
				);
				User_device_id::create($userDevice);
				User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
				$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
				//Request is valid, create new user
				$Admin = Admin_user::where(['id' => $admin_id])->first();
				$checkEmailPhoneData['salt'] = $Admin->salt;
				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => '3 - Student login successfully.',
					'data' => $checkEmailPhoneData
				], 200);
			}

			// IF SAME DEVICE TYPE MORE THEN 1
			$userDevicesCount = User_device_id::select('')->where(['user_id' => $checkEmailPhone->id])->groupBy('device_type')->count();
			if ($userDevicesCount > 1) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Same Device Type Registered twice, please contact to admin',
					'data' => '{}'
				], 200);
			}


			// IF USER LOGIN AGAIN SAME DEVICE
			$userDevices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'status' => '1'])->get();
			if (count($userDevices) > 1) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Already logged in another device.',
					'data' => '{}'
				], 200);
			} else if (count($userDevices) > 0) {
				if ($userDevices[0]->device_type == $request->device_type && $userDevices[0]->model_id == $request->model_id && $userDevices[0]->model_no == $request->model_no) {


					User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
					$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
					//Request is valid, create new user
					$Admin = Admin_user::where(['id' => $admin_id])->first();
					$checkEmailPhoneData['salt'] = $Admin->salt;
					User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->update(['status' => '1']);
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => '2 - Student login successfully.',
						'data' => $checkEmailPhoneData
					], 200);
				} else {

					// Logout from another device
					User_device_id::where('user_id', '=', $checkEmailPhone->id)->where('model_no', '!=', $request->model_no)->where('model_id', '!=', $request->model_id)->update(['status' => '0']);

					// Check device exists or create new one
					$user_Devices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'model_no' => $request->model_no, 'model_id' => $request->model_id])->first();

					if (!empty($user_Devices)) {
						User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
						$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
						//Request is valid, create new user
						$Admin = Admin_user::where(['id' => $admin_id])->first();
						$checkEmailPhoneData['salt'] = $Admin->salt;
						User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->update(['status' => '1']);
						return response()->json([
							'status' => 1,
							'success' => true,
							'message' => '4 - Student login successfully.',
							'data' => $checkEmailPhoneData
						], 200);
					} else {

						// Check device exists or create new one
						$user_Devices_type = User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type])->first();
						if (empty($user_Devices_type)) {
							$userDevice = array(
								'user_id' => $checkEmailPhone->id,
								'model_id' => $request->model_id,
								'model_no' => $request->model_no,
								'device_type' => $request->device_type,
								'status' => '1'
							);
							User_device_id::create($userDevice);
							User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
							$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
							//Request is valid, create new user
							$Admin = Admin_user::where(['id' => $admin_id])->first();
							$checkEmailPhoneData['salt'] = $Admin->salt;
							return response()->json([
								'status' => 1,
								'success' => true,
								'message' => '5 - Student login successfully.',
								'data' => $checkEmailPhoneData
							], 200);
						} else {
							return response()->json([
								'status' => 0,
								'success' => false,
								'message' => 'Duplicate device type found, please contact to admin.',
								'data' => '{}'
							], 200);
						}
					}
				}
			} else {
				$_userDevices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->count();

				if ($_userDevices > 0) {
					User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
					$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
					//Request is valid, create new user
					$Admin = Admin_user::where(['id' => $admin_id])->first();
					$checkEmailPhoneData['salt'] = $Admin->salt;

					User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type, 'model_no' => $request->model_no, 'model_id' => $request->model_id, 'status' => '0'])->update(['status' => '1']);
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => '1 - Student login successfully.',
						'data' => $checkEmailPhoneData
					], 200);
				} else {
					$_userDevices = User_device_id::where(['user_id' => $checkEmailPhone->id, 'device_type' => $request->device_type])->count();
					if ($_userDevices > 0) {
						return response()->json([
							'status' => 0,
							'success' => false,
							'message' => 'Duplicate device type found, please contact to admin.',
							'data' => '{}'
						], 200);
					} else if ($request->device_type == 'windows' || $request->device_type == 'android') {

						$userDevice = array(
							'user_id' => $checkEmailPhone->id,
							'model_id' => $request->model_id,
							'model_no' => $request->model_no,
							'device_type' => $request->device_type,
							'status' => '1'
						);
						User_device_id::create($userDevice);
						User::where(['id' => $checkEmailPhone->id])->update(['fcm_token' => $request->fcm_token]);
						$checkEmailPhoneData =  User::where(['id' => $checkEmailPhone->id])->first();
						//Request is valid, create new user
						$Admin = Admin_user::where(['id' => $admin_id])->first();
						$checkEmailPhoneData['salt'] = $Admin->salt;
						return response()->json([
							'status' => 1,
							'success' => true,
							'message' => '3 - Student login successfully.',
							'data' => $checkEmailPhoneData
						], 200);
					} else {
						return response()->json([
							'status' => 0,
							'success' => false,
							'message' => 'Unknown device type found, please contact to admin.',
							'data' => '{}'
						], 200);
					}
				}
			}


			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Something went wrong, Please contact to admin.',
				'data' => '{}'
			], 200);
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'Wrong password, Please try again.',
			'data' => '{}'
		], 200);
	}



	// Student Forgot password
	public function studentForgotPasswordAPI(Request $request)
	{
		$rules = array(
			'username'  => 'required'
		);

		$messages = array(
			'username.required' => 'Please enter a email/mobile.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		$type = 'email';
		$mobilePattern = "/^[7-9][0-9]{9}$/";

		if (preg_match($mobilePattern, $request->username)) {
			$type = 'phone';
		}

		$checkUser =  User::where([$type => $request->username])->first();
		if (!empty($checkUser)) {
			if ($type == 'email') {
				// Send Mail
				$TO_EMAIL = $request->username;
				$SUBJECT = "Navin Classes | Verification";
				$MAIL_OTP = rand(111111, 999999);
				$HTML = "Dear Student, use OTP code $MAIL_OTP to verify your account, Navin Classes";
				$resMail = Frontend::sendMailPostal($TO_EMAIL, $SUBJECT, $HTML);

				if (!empty($resMail->result->message_id)) {
					$data = array(
						'message_id' => $resMail->result->message_id,
						'email' => $TO_EMAIL,
						'otp' => $MAIL_OTP
					);
					$OTP_DATA['email'] = $TO_EMAIL;
					$OTP_DATA['message_id'] = $resMail->result->message_id;
					$OTP_SESSION = Otpsession::create($data);
				}

				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => 'OTP send to your registered email.',
					'data' => $OTP_DATA
				], 200);
			} else {
				//  Send OTP
				$phone = $request->username;
				$OTP_DATA = $this->send_otp($phone);

				if (isset($OTP_DATA->status) && ($OTP_DATA->status != 'Success')) {
					return response()->json([
						'status' => 0,
						'success' => false,
						'message' => $OTP_DATA->description,
					], 200);
				}

				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => 'OTP send to your registered phone number.',
					'data' => $OTP_DATA
				], 200);
			}
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'Email or Phone number not registered.',
			'data' => '{}'
		], 200);
	}


	// Student Forgot Password Continue
	public function studentForgotPassword_OTP_Match_API(Request $request)
	{
		$rules = array(
			'username'      => 'required',
			'message_id'    => 'required',
			'otp'           => 'required'
		);

		$messages = array(
			'username.required'     => 'Please enter a email/mobile.',
			'message_id.required'   => 'Please enter a message id.',
			'otp.required'          => 'Please enter a OTP.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		$type = 'email';
		$mobilePattern = "/^[7-9][0-9]{9}$/";

		if (preg_match($mobilePattern, $request->username)) {
			$type = 'phone';
		}

		$otpCheck = Otpsession::where([$type => $request->username, 'otp' => $request->otp, 'message_id' => $request->message_id])->first();

		if (!empty($otpCheck)) {
			//User::where([$type => $request->username])->update(['password' => Hash::make($request->password)]);
			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'OTP Match successfully!.',
				'data' => '{}'
			], 200);
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'Invalid OTP, Please try again.',
			'data' => '{}'
		], 200);
	}


	// Student Forgot Password Continue
	public function studentForgotPasswordContinueAPI(Request $request)
	{
		$rules = array(
			'username'      => 'required',
			'message_id'    => 'required',
			'otp'           => 'required',
			'password'      => 'required'
		);

		$messages = array(
			'username.required'     => 'Please enter a email/mobile.',
			'message_id.required'   => 'Please enter a message id.',
			'otp.required'          => 'Please enter a OTP.',
			'password.required'     => 'Please enter a Password.'
		);

		$validator = Validator::make($request->all(), $rules, $messages);

		if ($validator->fails()) {
			$messages = $validator->messages();
			$errors = $messages->all();
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $errors[0],
				'data' => '{}'
			], 200);
		}

		$type = 'email';
		$mobilePattern = "/^[7-9][0-9]{9}$/";

		if (preg_match($mobilePattern, $request->username)) {
			$type = 'phone';
		}

		$otpCheck = Otpsession::where([$type => $request->username, 'otp' => $request->otp, 'message_id' => $request->message_id])->first();

		if (!empty($otpCheck)) {
			User::where([$type => $request->username])->update(['password' => Hash::make($request->password)]);
			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'Password reset successfully!.',
				'data' => '{}'
			], 200);
		}

		return response()->json([
			'status' => 0,
			'success' => false,
			'message' => 'Invalid OTP, Please try again.',
			'data' => '{}'
		], 200);
	}





	public function registerOtpSent(Request $request)
	{

		if (!$request->name || !$request->email || !$request->phone) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}

		$checkEmailPhone =  User::where(['email' => $request->email])->orWhere('phone', $request->phone)->first();

		if (!empty($checkEmailPhone)) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Email or Phone Number Already Exist',
				'data' => '{}'
			], 200);
		}


		$phone = $request->phone;
		$otpdata = $this->send_otp($phone);

		//dd($OTP_DATA);
		if (isset($otpdata->status) && ($otpdata->status != 'Success')) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $otpdata->description,
			], 200);
		}

		return response()->json([
			'status' => 1,
			'success' => true,
			'message' => 'OTP sent to registered mobile number.',
			'data' => $otpdata
		], 200);
	}

	public function register(Request $request)
	{
		if (!$request->name || !$request->email || !$request->phone || !$request->message_id || !$request->otp || !$request->model_id || !$request->model_no) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		$checkEmailPhone =  User::where(['email' => $request->email])->orWhere('phone', $request->phone)->first();

		if (!empty($checkEmailPhone)) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Email or Phone Number Already Exist',
				'data' => '{}'
			], 200);
		}




		$getOtp = Otpsession::where(['message_id' => $request->message_id, 'phone' => $request->phone])->first();

		$admin_id = 2;

		if ($getOtp->otp == $request->otp) {
			//Request is valid, create new user
			$getSalt = Admin_user::where(['id' => $admin_id])->first();
			// dd($getSalt);
			$user = User::create([
				'admin_id' => $admin_id,
				'user_unique_id' => time() . uniqid(),
				'name' => $request->name,
				'email' => $request->email,
				'fcm_token' => $request->fcm_token,
				'phone' => $request->phone,
				//   'password'=>$hashed,
				'ip_address' => $request->ip()

			]);

			$user_id = $user->id;
			$user = User::where(['id' => $user_id, 'status' => '1'])->first();

			$user['salt'] = $getSalt->salt;

			$userDevice = array(
				'user_id' => $user_id,
				'model_id' => $request->model_id,
				'model_no' => $request->model_no,
				'status' => '1'
			);

			User_device_id::create($userDevice);
			//User created, return success response
			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'User created successfully',
				'data' => $user
			], Response::HTTP_OK);
		} else {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Otp Does Not Match!',
				'data' => '{}'
			], Response::HTTP_OK);
		}
	}

	//jwt login with email and password
	public function authenticate(Request $request)
	{
		$credentials = $request->only('email', 'password');

		//valid credential
		$validator = Validator::make($credentials, [
			'email' => 'required',
			'password' => 'required|string|min:6|max:50'
		]);


		if (!$request->name || !$request->password) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		//Request is validated
		//Crean token
		try {
			if (!$token = JWTAuth::attempt($credentials)) {
				return response()->json([
					'success' => false,
					'message' => 'Login credentials are invalid.',
				], 400);
			}
		} catch (JWTException $e) {
			return $credentials;
			return response()->json([
				'success' => false,
				'message' => 'Could not create token.',
			], 500);
		}

		//Token created, return with success response and jwt token
		return response()->json([
			'success' => true,
			'token' => $token,
		]);
	}

	public function logout(Request $request)
	{
		//valid credential
		$validator = Validator::make($request->only('token'), [
			'token' => 'required'
		]);



		if (!$request->token) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		//Request is validated, do logout        
		try {
			JWTAuth::invalidate($request->token);

			return response()->json([
				'success' => true,
				'message' => 'User has been logged out'
			]);
		} catch (JWTException $exception) {
			return response()->json([
				'success' => false,
				'message' => 'Sorry, user cannot be logged out'
			], Response::HTTP_INTERNAL_SERVER_ERROR);
		}
	}

	public function get_user(Request $request)
	{
		$this->validate($request, [
			'token' => 'required'
		]);

		$user = JWTAuth::authenticate($request->token);

		return response()->json(['user' => $user]);
	}

	public function encryptionLogin(Request $request)
	{
		$credentials = $request->only('email', 'password');

		//valid credential
		$validator = Validator::make($credentials, [
			'email' => 'required|email',
			'password' => 'required|string'
		]);

		//Send failed response if request is not valid
		if ($validator->fails()) {
			return response()->json(['error' => $validator->messages()], 401);
		}


		$data = array(

			'email' => $request->email,
			'password' => $request->password,
			// 'role_id'=>'2',
		);

		// dd($data);

		if (Auth::guard('admin')->attempt($data)) {

			/* $users = DB::table('admin_users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.*', 'contacts.phone', 'orders.price')
            ->get(); */

			$res = Admin_user::select('admin_users.id', 'admin_users.username', 'admin_users.email', 'admin_users.salt', 'admin_users.role_id', 'admin_users.phone', 'admin_modules.module', 'admin_module_permissions.module_id', 'admin_module_permissions.permission')
				->join('admin_module_permissions', 'admin_users.id', '=', 'admin_module_permissions.admin_id')
				->join('admin_modules', 'admin_module_permissions.module_id', '=', 'admin_modules.id')
				//->where('admin_module_permissions.permission','=','delete')
				->where('admin_users.email', '=', "$request->email")
				->first();

			if ($res) {
				$data = ['id' => $res->id, 'username' => $res->username, 'email' => $res->email, 'salt' => $res->salt, 'role_id' => $res->role_id, 'phone' => $res->phone, 'module' => $res->module, 'module_id' => $res->module_id, 'permission' => $res->permission];

				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => 'User created successfully',
					'data' => $data
				], Response::HTTP_OK);
			} else {
				return response()->json([
					'status' => 0,
					'success' => true,
					'message' => 'Invalid Credintials',
					'data' => '{}'
				], 401);
			}

			//$res = Admin_user::where(['email'=>$request->email])->first();
			//dd($res);
			//dd(DB::getQueryLog());
			//print_r($res);
			//exit;

			$data = ['id' => $res->id, 'username' => $res->username, 'email' => $res->email, 'salt' => $res->salt, 'role_id' => $res->role_id, 'phone' => $res->phone, 'module' => $res->module, 'module_id' => $res->module_id];

			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'User created successfully',
				'data' => $data
			], Response::HTTP_OK);
		} else {

			return response()->json([
				'status' => 0,
				'success' => true,
				'message' => 'Invalid Credintials',
				'data' => '{}'
			], 401);
		}
	}

	public function logs(Request $request)
	{
		$credentials = $request->only('user_id', 'activity');

		//valid credential
		$validator = Validator::make($credentials, [
			'user_id' => 'required',
			'activity' => 'required|string'
		]);

		if (!$request->user_id || !$request->activity) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		$data = array(

			'user_id' => $request->user_id,
			'activity' => $request->activity,
			// 'role_id'=>'2',
		);


		$res = Log::create($data);
		if ($res) {
			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'Log created successfully',
				'data' => '{}'
			], Response::HTTP_OK);
		} else {

			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Something Went Wrong',
				'data' => '{}'
			], 500);
		}
	}

	// login with mobile no and otp

	public function otpSendByPhone(Request $request)
	{
		$credentials = $request->only('phone');
		$model_id = $request->only('model_id');


		if (!$request->phone || !$request->model_id) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}

		$phone = $request->phone;

		$checkExistUser = User::where(['phone' => $phone])->first();


		if (empty($checkExistUser)) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'User Not Found!',
				'data' => '{}'
			], 200);
		}



		$userDevice = User_device_id::where(['user_id' => $checkExistUser->id])->get();



		if ($userDevice->count() < 3) {



			foreach ($userDevice as $userDev) {
				$update = array(
					'status' => "0"
				);

				User_device_id::whereNotIn('model_id', [$request->model_id])
					->where(['user_id' => $checkExistUser->id])
					->update($update);

				if ($request->model_id != $userDev->model_id && $userDev->status == '1') {
					return response()->json([
						'status' => 0,
						'success' => false,
						'message' => 'logout From Other Device',
						'data' => '{}'
					], Response::HTTP_OK);
				}
			}
		} else {

			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Maximum Device Limit 3',
				'data' => '{}'
			], Response::HTTP_OK);
		}



		// dd($checkExistUser);

		if (!empty($checkExistUser)) {
			$otpdata = $this->send_otp($phone);

			//dd($OTP_DATA);
			if (isset($otpdata->status) && ($otpdata->status != 'Success')) {
				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => $otpdata->description,
				], 200);
			}

			return response()->json([
				'status' => 1,
				'success' => true,
				'message' => 'otp sent To Registered Mobile Number.',
				'data' => $otpdata
			], 200);
		} else {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'user Does Not Exist.',
				'data' => '{}'
			], Response::HTTP_OK);
		}
	}

	public function otpMatchForLogin(Request $request)
	{


		$admin_id = 2;

		if (!$request->phone || !$request->message_id || !$request->otp || !$request->model_id || !$request->model_no) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		$getOtp = Otpsession::where(['message_id' => $request->message_id, 'phone' => $request->phone])->first();

		if ($getOtp->otp == $request->otp) {

			$user = User::where(['phone' => $request->phone, 'status' => '1'])->first();
			$fcm_token = $request->fcm_token;
			if ($fcm_token != $user->fcm_token) {
				$fcmdata = array(
					'fcm_token' => $fcm_token
				);

				User::where(['phone' => $request->phone])->update($fcmdata);
			}



			$getSalt = Admin_user::where(['id' => $admin_id])->first();
			$user['salt'] = $getSalt->salt;

			$userDevice =  User_device_id::where(['user_id' => $user->id, 'model_id' => $request->model_id, 'status' => '1'])->first();

			if (!empty($userDevice)) {

				$update = array(
					'status' => "0"
				);

				User_device_id::whereNotIn('model_id', [$request->model_id])
					->where(['user_id' => $user->id])
					->update($update);


				return response()->json([
					'status' => 1,
					'success' => true,
					'message' => 'Login Success',
					'data' => $user
				], 200);
			}


			$userDevice = User_device_id::where(['user_id' => $user->id])->get();
			// dd($userDevice);
			// dd($userDevice->count());

			if ($userDevice->count() == 0) {

				$update = array(
					'status' => "0"
				);

				User_device_id::whereNotIn('model_id', [$request->model_id])
					->where(['user_id' => $user->id])
					->update($update);



				$data = array(
					'user_id' => $user->id,
					'model_id' => $request->model_id,
					'model_no' => $request->model_no,
					'status' => '1',

				);

				$_userDevic = User_device_id::create($data);
				if ($_userDevic) {
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => 'Login Success',
						'data' => $user
					], 200);
				}
			}


			if ($userDevice->count() < 3) {



				foreach ($userDevice as $userDev) {
					if ($request->model_id != $userDev->model_id && $userDev->status == '0') {
						$update = array(
							'status' => "0"
						);

						User_device_id::whereNotIn('model_id', [$request->model_id])
							->where(['user_id' => $user->id])
							->update($update);


						$data = array(
							'user_id' => $user->id,
							'model_id' => $request->model_id,
							'model_no' => $request->model_no,
							'status' => '1',

						);

						$_userDevic = User_device_id::create($data);
						if ($_userDevic) {
							return response()->json([
								'status' => 1,
								'success' => true,
								'message' => 'Login Success',
								'data' => $user
							], 200);
						}

						// exit;
					} else if ($request->model_id = $userDev->model_id) {


						$update = array(
							'status' => "0"
						);

						User_device_id::whereNotIn('model_id', ['970335385f18e607'])
							->where(['user_id' => $user->id])
							->update($update);


						return response()->json([
							'status' => 1,
							'success' => true,
							'message' => 'Login Success',
							'data' => $user
						], 200);
					} else {

						return response()->json([
							'status' => 0,
							'success' => false,
							'message' => 'logout From Other Device',
							'data' => '{}'
						], Response::HTTP_OK);
					}
				}
			} else {

				return response()->json([
					'status' => 0,
					'success' => false,
					'message' => 'Maximum Device Limit 3',
					'data' => '{}'
				], Response::HTTP_OK);
			}
		} else {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Otp Does Not Match!',
				'data' => '{}'
			], Response::HTTP_OK);
		}
	}

	public function resendOtp(Request $request)
	{
		$credentials = $request->only('phone');

		//valid credential
		$validator = Validator::make($credentials, [
			'phone' => 'required',

		]);

		if (!$request->phone) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		$phone = $request->phone;

		$otpdata = $this->send_otp($phone);
		//dd($OTP_DATA);
		if (isset($otpdata->status) && ($otpdata->status != 'Success')) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => $otpdata->description,
			], 200);
		}
		return response()->json([
			'status' => 1,
			'success' => true,
			'message' => 'otp sent To Registered Mobile Number.',
			'data' => $otpdata
		], 200);
	}


	public function getProfile(Request $request)
	{
		$credentials = $request->only('user_unique_id', 'cat_id');

		//valid credential
		$validator = Validator::make($credentials, [
			'user_unique_id' => 'required',
			'cat_id' => 'required',

		]);


		if (!$request->user_unique_id || !$request->cat_id) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		$admin_id = 2;

		$res =  User::where(['user_unique_id' => $request->user_unique_id, 'admin_id' => $admin_id])->first();

		$profilePics = (!empty($res->profile_pics)) ? asset('public/uploads/profile/' . $res->profile_pics) : "";

		$category =  Main_category::where(['id' => $request->cat_id])->first();
		$categoryNmae = (!empty($category)) ? $category->name : "";

		$data = ['id' => $res->id, 'user_unique_id' => $res->user_unique_id, 'name' => $res->name, 'email' => $res->email, 'phone' => $res->phone, 'profile_pics' => $profilePics, 'category' => $categoryNmae];

		return response()->json([
			'status' => 1,
			'success' => true,
			'message' => 'data fetch successfully!.',
			'data' => $data
		], 200);
	}

	// edit prfile


	public function updateProfile(Request $request)
	{
		$credentials = $request->only('user_unique_id', 'image', 'name');

		//valid credential
		$validator = Validator::make($credentials, [
			'user_unique_id' => 'required',

		]);

		if (!$request->user_unique_id) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}


		$admin_id = 2;

		$res =  User::where(['user_unique_id' => $request->user_unique_id, 'admin_id' => $admin_id])->first();

		if (!empty($res)) {
			$image =  $request->image;
			$name =  $request->name;

			if (!empty($image)) {
				$d_image = base64_decode($image);
				$i_file_name = time() . '_appimage.png';
				$put_image = file_put_contents('public/uploads/profile/' . $i_file_name, $d_image);
				$update_data['picture']    = $i_file_name;
				$data = array(
					'name' => $name,
					'profile_pics' => $i_file_name,
				);

				$res =  User::where(['user_unique_id' => $request->user_unique_id])->update($data);

				if ($res) {
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => 'data Update successfully!.',
						'data' => $data
					], 200);
				} else {

					return response()->json([
						'status' => 0,
						'success' => false,
						'message' => 'data Not Updated successfully!.',
						'data' => '{}'
					], 500);
				}
			} else {

				$data = array(
					'name' => $name
				);

				$res =  User::where(['user_unique_id' => $request->user_unique_id])->update($data);


				if ($res) {
					return response()->json([
						'status' => 1,
						'success' => true,
						'message' => 'data Update successfully!.',
						'data' => $data
					], 200);
				} else {

					return response()->json([
						'status' => 0,
						'success' => false,
						'message' => 'data Not Updated successfully!.',
						'data' => '{}'
					], 500);
				}
			}
		} else {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'User Not Found successfully!.',
				'data' => '{}'
			], 200);
		}
	}






	public function send_otp($mobile)
	{
		// dd($mobile);
		$KEY = "JIqYbkePhdgYBbz8";
		$TMPID = "1207162141508403142";
		$OTP = rand(111111, 999999);
		$MSG = urlencode("Dear Student, use OTP code $OTP to verify your account, Edukrypt APP");
		//$mobile = $number;
		//$url = "https://www.hellotext.live/vb/apikey.php?apikey=$KEY&senderid=EDUKYT&templateid=$TMPID&number=$mobile&message=$MSG";

		$url = "http://weberleads.in/http-jsonapi.php?username=navin2&password=navin&senderid=EDUKYT&route=2&number=$mobile&message=$MSG&templateid=$TMPID";

		$opts = array('http' => array('header' => "User-Agent:MyAgent/1.0\r\n"));
		$context = stream_context_create($opts);
		$output = file_get_contents($url, false, $context);
		$header = json_decode($output);

		//dd($header);

		if (empty($header) || ($header->Status != "Success")) {
			$header->Description = "OTP sending failed, Please try again!";
			return $header;
		}

		$data = array(
			'message_id' => $header->MessageId,
			'phone' => $mobile,
			'otp' => $OTP
		);

		$otp = Otpsession::create($data);
		if ($otp) {
			$return_data = array(
				'phone' => $mobile,
				"message_id" => $header->MessageId,
			);
			return $return_data;
		}
	}

	public function notification(Request $request)
	{
		$credentials = $request->only('user_unique_id');
		//valid credential
		$validator = Validator::make($credentials, [
			'user_unique_id' => 'required',

		]);

		if ($validator->fails()) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}

		$admin_id = 2;

		$product_ids = User::select('orderproductgroups.product_id')
			->join('billings', 'billings.user_unique_id', '=', 'users.user_unique_id')
			->join('orderproductgroups', 'orderproductgroups.billing_id', '=', 'billings.id')
			->where(['billings.admin_id' => $admin_id, 'billings.user_unique_id' => $request->user_unique_id, 'billings.payment_status' => 'Credit'])->groupBy('orderproductgroups.product_id')
			->get();

		$notification_userswise = Notification::whereIn('product_id', $product_ids)->get();


		$notification_all = Notification::where('public', 1)->get();
		$notifications = $notification_userswise->merge($notification_all);
		$noti = $notifications->sortByDesc('id');



		$arrayNoti = array();
		foreach ($noti as $not) {
			array_push($arrayNoti, $not);
		}

		// dd(json_encode($arrayNoti));exit;
		if (!empty($noti)) {
			return response()->json([
				'status' => "1",
				'success' => true,
				'message' => 'Notification Fetch successfully!.',
				'data' => $arrayNoti
			], 200);
		} else {
			return response()->json([
				'status' => "0",
				'success' => false,
				'message' => 'data Not found!.',
				'data' => '{}'
			], 200);
		}
	}

	public function notificationDelete(Request $request)
	{
		if (!$request->notification_id) {
			return response()->json([
				'status' => 0,
				'success' => false,
				'message' => 'Please insert All Required Field',
				'data' => '{}'
			], 200);
		}

		// dd($request->notification_id);

		$notification = Notification::where(['id' => $request->notification_id])->delete();
		if ($notification) {
			return response()->json([
				'status' => "1",
				'success' => true,
				'message' => 'Notification Delete successfully!.',
				'data' => '{}'
			], 200);
		} else {
			return response()->json([
				'status' => "0",
				'success' => false,
				'message' => 'Something Went Wrong!.',
				'data' => '{}'
			], 200);
		}
	}
}

Anon7 - 2021