JFIF  x x C         C     "        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        w !1AQ aq"2B #3Rbr{ gilour
<?php namespace App\Http\Controllers; use App\Models\CartItem; use App\Models\Category; use App\Models\Course; use App\Models\Enrollment; use App\Models\Language; use App\Models\Live_class; use App\Models\User; use App\Models\Wishlist; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rules; use Illuminate\Auth\Events\Registered; use Illuminate\Support\Str; use App\Models\FileUploader; use App\Models\Review; use DB; use Carbon\Carbon; class ApiController extends Controller { //student login function public function login(Request $request) { $fields = $request->validate([ 'email' => 'required|string', 'password' => 'required|string', ]); // Check email $user = User::where('email', $fields['email'])->where('status', 1)->first(); // Check password if (!$user || !Hash::check($fields['password'], $user->password)) { if (isset($user) && $user->count() > 0) { return response([ 'message' => 'Invalid credentials!', ], 401); } else { return response([ 'message' => 'User not found!', ], 401); } } else if ($user->role == 'student') { // $user->tokens()->delete(); $token = $user->createToken('auth-token')->plainTextToken; $user->photo = get_photo('user_image', $user->photo); $response = [ 'message' => 'Login successful', 'user' => $user, 'token' => $token, ]; return response($response, 201); } else { //user not authorized return response()->json([ 'message' => 'User not found!', ], 400); } } public function signup(Request $request) { // return $request->all(); $response = array(); $rules = array( 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'confirmed', Rules\Password::defaults()] ); $validator = Validator::make($request->all(), $rules); // if ($validator->fails()) { // return json_encode(array('validationError' => $validator->getMessageBag()->toArray())); // } if ($validator->fails()) { return response()->json(['validationError' => $validator->errors()], 422); } // return $response; $user_data = [ 'name' => $request->name, 'email' => $request->email, 'role' => 'student', 'password' => Hash::make($request->password), 'status' => 1, ]; if(get_settings('student_email_verification') == 1){ $user_data['email_verified_at'] = Carbon::now(); } $user = User::create($user_data); if ($user) { $response['success'] = true; $response['message'] = 'user create successfully'; } event(new Registered($user)); return $response; } //student logout function public function logout(Request $request) { auth()->user()->tokens()->delete; return response()->json([ 'message' => 'Logged out successfully.', ], 201); } // update user data public function update_userdata(Request $request) { $response = array(); $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; if ($request->name != "") { $data['name'] = htmlspecialchars($request->name, ENT_QUOTES, 'UTF-8'); } else { $response['status'] = 'failed'; $response['error_reason'] = 'Name cannot be empty'; return $response; } $data['biography'] = $request->biography; $data['about'] = $request->about; $data['address'] = $request->address; $data['facebook'] = htmlspecialchars($request->facebook, ENT_QUOTES, 'UTF-8'); $data['twitter'] = htmlspecialchars($request->twitter, ENT_QUOTES, 'UTF-8'); $data['linkedin'] = htmlspecialchars($request->linkedin, ENT_QUOTES, 'UTF-8'); if ($request->hasFile('photo')) { $file = $request->file('photo'); $file_name = Str::random(20) . '.' . $file->getClientOriginalExtension(); $path = 'assets/upload/users/' . auth('sanctum')->user()->role . '/' . $file_name; // Assuming FileUploader::upload() is a method that uploads the file FileUploader::upload($file, $path, null, null, 300); // Save the path to the database $data['photo'] = $path; } User::where('id', $user_id)->update($data); $user = auth('sanctum')->user(); $user->photo = get_photo('user_image', $user->photo); $updated_user = User::find($user_id); $updated_user['photo'] = url('public/' . $updated_user['photo']); $response['status'] = 'success'; $response['user'] = $updated_user; $response['error_reason'] = 'None'; } else { $response['status'] = 'failed'; $response['error_reason'] = 'Unauthorized login'; } return $response; } // public function top_courses($top_course_id = "") { $query = Course::orderBy('id', 'desc')->limit(10)->get(); if ($top_course_id != "") { $query->where('id', $top_course_id); } $result = course_data($query); return $result; } public function all_categories() { $all_categories = array(); $categories = Category::where('parent_id', 0)->get(); foreach ($categories as $key => $category) { $all_categories[$key] = $category; $all_categories[$key]['thumbnail'] = get_photo('category_thumbnail', $category['thumbnail']); $all_categories[$key]['number_of_courses'] = get_category_wise_courses($category['id'])->count(); $all_categories[$key]['number_of_sub_categories'] = $category->childs->count(); // $sub_categories = $category->childs; } return $all_categories; } // Get categories public function categories($category_id = "") { if ($category_id != "") { $categories = Category::where('id', $category_id)->first(); } else { $categories = Category::where('parent_id', 0)->get(); } foreach ($categories as $key => $category) { $categories[$key]['thumbnail'] = get_photo('category_thumbnail', $category['thumbnail']); $categories[$key]['number_of_courses'] = get_category_wise_courses($category['id'])->count(); $categories[$key]['number_of_sub_categories'] = $category->childs->count(); } return $categories; } // Fetch all the categories public function category_details(Request $request) { $response = array(); $categories = array(); $categories = sub_categories($request->category_id); // $response['sub_categories'] = $categories; $response[0]['sub_categories'] = $categories; $courses = get_category_wise_courses($request->category_id); $response[0]['courses'] = course_data($courses); // foreach ($response as $key => $resp) { // $response[$key]['sub_categories'] = $categories; // } return $response; // $response['courses'] = $result; // return $response; } // Fetch all the categories public function sub_categories($parent_category_id = "") { $categories = array(); $categories = sub_categories($parent_category_id); return $categories; } // Fetch all the courses belong to a certain category public function category_wise_course(Request $request) { $category_id = $request->category_id; $courses = get_category_wise_courses($category_id); $result = course_data($courses); return $result; } // Fetch all the courses belong to a certain category public function category_subcategory_wise_course(Request $request) { $category_id = $request->category_id; $courses = get_category_wise_courses($category_id); $sub = Category::where('category_id', $category_id)->where('status', 'active')->get(); $result = course_data($courses); return $result; } // Filter course public function filter_course(Request $request) { // $courses = $this->api_model->filter_course(); // $this->set_response($courses, REST_Controller::HTTP_OK); $selected_category = $request->selected_category; $selected_price = $request->selected_price; $selected_level = $request->selected_level; $selected_language = $request->selected_language; $selected_rating = $request->selected_rating; $selected_search_string = ltrim(rtrim($request->selected_search_string)); // $course_ids = array(); $query = Course::query(); if ($selected_search_string != "" && $selected_search_string != "null") { $query->where('title', $selected_search_string->id); } if ($selected_category != "all") { $query->where('category_id', $selected_category); } if ($selected_price != "all") { if ($selected_price == "paid") { $query->where('is_paid', 1); } elseif ($selected_price == "free") { $query->where('is_paid', 0) ->orWhere('is_paid', null); } } if ($selected_level != "all") { $query->where('level', $selected_level); } if ($selected_language != "all") { $query->where('language', $selected_language); } $query->where('status', 'active'); $courses = $query->get(); // foreach ($courses as $course) { // if ($selected_rating != "all") { // $total_rating = $this->crud_model->get_ratings('course', $course['id'], true)->row()->rating; // $number_of_ratings = $this->crud_model->get_ratings('course', $course['id'])->num_rows(); // if ($number_of_ratings > 0) { // $average_ceil_rating = ceil($total_rating / $number_of_ratings); // if ($average_ceil_rating == $selected_rating) { // array_push($course_ids, $course['id']); // } // } // } else { // array_push($course_ids, $course['id']); // } // } // This block of codes return the required data of courses $result = array(); $result = course_data($courses); return $result; } // Fetch all the courses belong to a certain category public function languages() { $response = array(); $languages = Language::select('name')->distinct()->get(); foreach ($languages as $key => $language) { $response[$key]['id'] = $key + 1; $response[$key]['value'] = $language->name; $response[$key]['displayedValue'] = ucfirst($language->name); } return $response; } // Filter course public function courses_by_search_string(Request $request) { $search_string = $request->search_string; $courses = Course::where('title', 'LIKE', "%{$search_string}%")->where('status', 'active')->get(); $response = course_data($courses); return $response; } // Course Details public function course_details_by_id(Request $request) { $response = array(); $course_id = $request->course_id; $user = auth('sanctum')->user(); $user_id = $user ? $user->id : 0; if ($user_id > 0) { $response = course_details_by_id($user_id, $course_id); } else { $response = course_details_by_id(0, $course_id); } return $response; } //Protected APIs. This APIs will require Authorization. // My Courses API public function my_courses(Request $request) { $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; $my_courses = array(); $my_courses_ids = Enrollment::where('user_id', $user_id)->orderBy('id', 'desc')->get(); foreach ($my_courses_ids as $my_courses_id) { $course_details = Course::find($my_courses_id['course_id']); array_push($my_courses, $course_details); } $my_courses = course_data($my_courses); foreach ($my_courses as $key => $my_course) { if (isset($my_course['id']) && $my_course['id'] > 0) { $my_courses[$key]['completion'] = round(course_progress($my_course['id'], $user_id)); $my_courses[$key]['total_number_of_lessons'] = count(get_lessons('course', $my_course['id'])); $my_courses[$key]['total_number_of_completed_lessons'] = get_completed_number_of_lesson($user_id, 'course', $my_course['id']); } } return $my_courses; } else { } } // My Courses API public function my_wishlist(Request $request) { $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; $wishlist = Wishlist::where('user_id', $user_id)->pluck('course_id'); $wishlists = json_decode($wishlist); if (sizeof($wishlists) > 0) { $courses = Course::whereIn('id', $wishlists)->get(); $response = course_data($courses); } else { $response = array(); } } else { } return $response; } // Remove from wishlist public function toggle_wishlist_items(Request $request) { $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; $status = ""; $course_id = $request->course_id; $wishlists = array(); $check_status = Wishlist::where('course_id', $course_id)->where('user_id', $user_id)->first(); if (empty($check_status)) { $wishlist = new Wishlist(); $wishlist->course_id = $request->course_id; $wishlist->user_id = $user_id; $wishlist->save(); $status = "added"; } else { Wishlist::where('user_id', $user_id)->where('course_id', $request->course_id)->delete(); $status = "removed"; } // $this->my_wishlist($user_id); $response['status'] = $status; return $response; } else { return response()->json([ 'message' => 'Please login first', ], 400); } } // Get all the sections public function sections(Request $request) { $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; $course_id = $request->course_id; $response = sections($course_id, $user_id); } else { } return $response; } // password reset public function update_password(Request $request) { $token = $request->bearerToken(); $response = array(); if (isset($token) && $token != '') { $auth = auth('sanctum')->user(); // The passwords matches if (!Hash::check($request->get('current_password'), $auth->password)) { $response['status'] = 'failed'; $response['message'] = 'Current Password is Invalid'; return $response; } // Current password and new password same if (strcmp($request->get('current_password'), $request->new_password) == 0) { $response['status'] = 'failed'; $response['message'] = 'New Password cannot be same as your current password.'; return $response; } // Current password and new password same if (strcmp($request->get('confirm_password'), $request->new_password) != 0) { $response['status'] = 'failed'; $response['message'] = 'New Password is not same as your confirm password.'; return $response; } $user = User::find($auth->id); $user->password = Hash::make($request->new_password); $user->save(); $response['status'] = 'success'; $response['message'] = 'Password Changed Successfully'; return $response; } else { $response['status'] = 'failed'; $response['message'] = 'Please login first'; return $response; } } public function account_disable(Request $request) { $token = $request->bearerToken(); $response = array(); if (isset($token) && $token != '') { $auth = auth('sanctum')->user(); $account_password = $request->get('account_password'); // The passwords matches if (Hash::check($account_password, $auth->password)) { User::where('id', $auth->id)->update([ 'status' => 0, ]); $response['validity'] = 1; $response['message'] = 'Account has been removed'; } else { $response['validity'] = 0; $response['message'] = 'Mismatch password'; } } return $response; } public function cart_list(Request $request) { $token = $request->bearerToken(); $cart_items = array(); if (isset($token) && $token != '') { $auth = auth('sanctum')->user(); $my_courses_ids = CartItem::where('user_id', $auth->id)->get(); foreach ($my_courses_ids as $my_courses_id) { $course_details = Course::find($my_courses_id['course_id']); array_push($cart_items, $course_details); } $cart_items = course_data($cart_items); } return $cart_items; } // Toggle from cart list public function toggle_cart_items(Request $request) { $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; $status = ""; $course_id = $request->course_id; $cart_items = array(); $check_status = CartItem::where('course_id', $course_id)->where('user_id', $user_id)->first(); if (empty($check_status)) { $cart_item = new CartItem(); $cart_item->course_id = $request->course_id; $cart_item->user_id = $user_id; $cart_item->save(); $status = "added"; } else { CartItem::where('user_id', $user_id)->where('course_id', $request->course_id)->delete(); $status = "removed"; } // $this->my_wishlist($user_id); $response['status'] = $status; return $response; } } public function save_course_progress(Request $request) { $token = $request->bearerToken(); if (isset($token) && $token != '') { $user_id = auth('sanctum')->user()->id; $lessons = get_lessons('lesson', $request->lesson_id); update_watch_history_manually($request->lesson_id, $lessons[0]->course_id, $user_id); return course_completion_data($lessons[0]->course_id, $user_id); } } public function live_class_schedules(Request $request) { $response = array(); $classes = array(); $live_classes = Live_class::where('course_id', $request->course_id)->orderBy('class_date_and_time', 'desc')->get(); foreach ($live_classes as $key => $live_class) { $additional_info = json_decode($live_class->additional_info, true); $classes[$key]['class_topic'] = $live_class->class_topic; $classes[$key]['provider'] = $live_class->provider; $classes[$key]['note'] = $live_class->note; $classes[$key]['class_date_and_time'] = $live_class->class_date_and_time; $classes[$key]['meeting_id'] = $additional_info['id']; $classes[$key]['meeting_password'] = $additional_info['password']; $classes[$key]['start_url'] = $additional_info['start_url']; $classes[$key]['join_url'] = $additional_info['join_url']; } $response['live_classes'] = $classes; $response['zoom_sdk'] = get_settings('zoom_web_sdk'); $response['zoom_sdk_client_id'] = get_settings('zoom_sdk_client_id'); $response['zoom_sdk_client_secret'] = get_settings('zoom_sdk_client_secret'); return $response; } public function payment(Request $request) { $response = array(); $token = $request->bearerToken(); if (isset($token) && $token != '') { $user = auth('sanctum')->user(); Auth::login($user); } if ($request->app_url) { session(['app_url' => $request->app_url . '://']); } return redirect(route('payment')); // return $response; } public function free_course_enroll(Request $request, $course_id) { $response = array(); $token = $request->bearerToken(); if (isset($token) && $token != '') { $check = Enrollment::where('course_id', $course_id)->count(); if ($check == 0) { $enrollment['user_id'] = auth('sanctum')->user()->id; $enrollment['course_id'] = $course_id; $enrollment['enrollment_type'] = 'free'; $enrollment['entry_date'] = time(); $enrollment['expiry_date'] = null; $done = Enrollment::insert($enrollment); if ($done) { $response['status'] = true; $response['message'] = "Course Successfully enrolled"; } else { $response['status'] = false; $response['message'] = "Some error occur,Try again"; } } } return $response; } public function cart_tools(Request $request) { $response = array(); $token = $request->bearerToken(); if (isset($token) && $token != '') { $response['course_selling_tax'] = get_settings('course_selling_tax'); $response['currency_position'] = get_settings('currency_position'); $response['currency_symbol'] = DB::table('currencies')->where('code', get_settings('system_currency'))->value('symbol'); } else { $response['status'] = "Not Authorized Credential"; } return $response; } }