Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
tbf.ro
/
app
/
Http
/
Controllers
/
Api
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
CourseDataController.php
| Size :
31.42
KB
Copy
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Course; use App\Lesson; use App\ProgressCourse; use App\Review; use Auth; use App\Http\Controllers\Controller; class CourseDataController extends Controller { public function personalCourses(Request $request){ $user = Auth::user(); $total_pages = ceil(Course::whereHas('orders', function($query) use ($user){$query->where('user_id', '=', $user->id);})->count() / 10); if($request->page){ $skip_items = ($request->page - 1) * 10; $courses = Course::whereHas('orders', function($query) use ($user){ $query->where('user_id', '=', $user->id); })->skip($skip_items)->take(10)->get(); }else{ $courses = Course::whereHas('orders', function($query) use ($user){ $query->where('user_id', '=', $user->id); })->take(10)->get(); } $courses_list = []; $relates = []; foreach ($courses as $course) { $completed_lessons = $course->lessons()->whereHas('progress_courses', function($query) use ($user){ $query->where('completed', '=', 1); $query->where('user_id', '=', $user->id); })->count(); $total_lessons = $course->lessons()->where('type', 'video')->count(); if($total_lessons > 0){ $percentage_completed = round(($completed_lessons * 100) / $total_lessons); }else{ $percentage_completed = false; } $paid = $course->orders()->where('user_id', Auth::user()->id)->whereIn('status', ['paid', 'access_free'])->first() ? true : false; $lesson_in_progress = $course->lessons()->orderBy('order')->whereHas('progress_courses', function($query) use ($user){ $query->where('progress', '<', 100); $query->where('user_id', '=', $user->id); })->first(); if($lesson_in_progress && ($lesson_in_progress->free == 'yes' || $paid)){ $slug_continue_lesson = $lesson_in_progress->slug; }else{ $slug_continue_lesson = false; } if(count($relates) < 4){ foreach ($course->course_relates as $relatedItem) { if(count($relates) > 4){continue;} if($relatedItem->course_related->reviews->count() > 0){ $average_rating_related = round($relatedItem->course_related->reviews->sum('rating') / $relatedItem->course_related->reviews->count()); }else{ $average_rating_related = 0; } $relates[] = [ 'name' => $relatedItem->course_related->name, 'description' => $relatedItem->course_related->description, 'average_rating' => $average_rating_related, 'slug' => $relatedItem->course_related->slug, ]; } } $average_rating = ($course->reviews->count() > 0) ? (round($course->reviews->sum('rating') / $course->reviews->count())) : 0; $courses_list[] =[ 'id' => $course->id, 'name' => $course->name, 'description' => $course->description, 'completed_lessons' => $completed_lessons, 'total_lessons' => $total_lessons, 'percentage_completed' => $percentage_completed, 'description' => $course->description, 'slug' => $course->slug, 'price' => $course->discount_in_euro ? number_format((float)($course->price_in_euro - $course->discount_in_euro), 2, '.', '') : number_format((float)$course->price_in_euro, 2, '.', ''), 'slug_continue_lesson' => $slug_continue_lesson, 'paid' => $paid, 'reviews_count' => $course->reviews->count(), 'average_rating' => $average_rating ]; } return response()->json(['courses' => $courses_list, 'total_pages' => $total_pages, 'relates' => $relates]); } public function getCourses(Request $request){ $user = Auth::user(); $random_course = Course::where('status', 'active')->whereDoesntHave('progress_courses', function($query) use ($user){ $query->where('user_id', $user->id); })->orWhereHas('progress_courses', function($query) use ($user){ $query->where('user_id', $user->id); $query->where('view_count', 9); })->where('status', 'active')->inRandomOrder()->first(); if(!$random_course){ $random_course = Course::where('status', 'active')->inRandomOrder()->first(); } $courses = Course::where('status', 'active')->where('id', '!=', $random_course->id); if($request->search){ $courses = $courses->where(function($query) use ($request){ $query->where('name', 'LIKE', '%' . $request->search . '%')->orWhere('description', 'LIKE', '%' . $request->search . '%')->orWhere('tags', 'LIKE', '%' . $request->search . '%'); }); } $total_pages = ceil($courses->count() / 10); if($request->page){ $skip_items = ($request->page - 1) * 10; $courses = $courses->orderBy('order', 'ASC')->skip($skip_items)->take(10)->get(); }else{ $courses = $courses->orderBy('order', 'ASC')->take(10)->get(); } $user = Auth::user(); $courses_list = []; foreach ($courses as $course) { $progress_course = $course->progress_courses()->where('user_id', $user->id)->first(); if($progress_course){ $percentage_completed = $progress_course->progress; $view_count = $progress_course->view_count; }else{ $percentage_completed = 0; $view_count = 0; } // $paid = $course->orders()->where('user_id', Auth::user()->id)->whereIn('status', ['paid', 'access_free'])->first() ? true : false; $paid = true; $average_rating = ($course->reviews->count() > 0) ? (round($course->reviews->sum('rating') / $course->reviews->count())) : 0; $courses_list[] =[ 'id' => $course->id, 'name' => $course->name, 'description' => $course->description, 'percentage_completed' => $percentage_completed, 'view_count' => $view_count, 'description' => $course->description, 'slug' => $course->slug, 'price' => $course->discount_in_euro ? number_format((float)($course->price_in_euro - $course->discount_in_euro), 2, '.', '') : number_format((float)$course->price_in_euro, 2, '.', ''), 'paid' => $paid, 'reviews_count' => $course->reviews->count(), 'average_rating' => $average_rating ]; } return response()->json(['random_course' => $random_course, 'courses' => $courses_list, 'total_pages' => $total_pages]); } public function getCoursesSearch(Request $request){ $courses = Course::where('status', 'active'); if($request->search){ $courses = $courses->where(function($query) use ($request){ $query->where('name', 'LIKE', '%' . $request->search . '%')->orWhere('description', 'LIKE', '%' . $request->search . '%'); }); } $courses = $courses->get(); $user = Auth::user(); $courses_list = []; foreach ($courses as $course) { $progress_course = $course->progress_courses()->where('user_id', $user->id)->first(); if($progress_course){ $percentage_completed = $progress_course->progress; $view_count = $progress_course->view_count; }else{ $percentage_completed = 0; $view_count = 0; } $courses_list[] =[ 'id' => $course->id, 'name' => $course->name, 'description' => $course->description, 'tags' => $course->tags, 'percentage_completed' => $percentage_completed, 'view_count' => $view_count, 'slug' => $course->slug, ]; } return response()->json(['courses' => $courses_list]); } public function getCourseInfo($slug){ $user = Auth::user(); $course = Course::where('slug', $slug)->first(); if($course) { // $modules = $course->modules()->with('lessons')->where('status', 'active')->orderBy('order')->get(); $all_lessons = $course->lessons()->get(); $progress_course = $course->progress_courses()->where('user_id', $user->id)->first(); if($progress_course){ $percentage_completed = $progress_course->progress; $time_completed = $progress_course->time_completed; $view_count = $progress_course->view_count; }else{ $percentage_completed = 0; $time_completed = 0; $view_count = 0; } $mobile_video_data = false; $videoKey = ''; if($course->video_presentation){ $videoKey = substr($course->video_presentation, strrpos($course->video_presentation, '/') + 1); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://fast.wistia.com/embed/medias/". $videoKey .".jsonp", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_TIMEOUT => 30000, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( // Set Here Your Requesred Headers 'Content-Type: application/json', ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { $mobile_video_data = []; } else { $response = substr($response, 0, strrpos($response, '}') + 1); $response = substr($response, strpos($response, '{')); $video_links = json_decode($response)->media->assets; $mobile_video_data = []; foreach ($video_links as $link) { if(isset($link->ext) && $link->ext == 'mp4'){ $mobile_video_data[] = [ 'url' => $link->url, 'size' => $link->size, 'ext' => $link->ext, 'width' => $link->width, 'height' => $link->height, 'type' => $link->type ]; } } } } $lessonsData = []; foreach ($all_lessons as $lesson) { $questionsData = []; if($lesson->type == 'qa'){ if($lesson->lesson_questions()->first()){ foreach ($lesson->lesson_questions as $questionItem) { $questionsData[] = [ 'id' => $questionItem->id, 'title' => $questionItem->question, 'answer' => $questionItem->answer ]; } } } $lessonsData[] = [ 'name' => $lesson->name, 'type' => $lesson->type, 'file_name' => $lesson->file_name, 'file' => $lesson->file, 'google_url' => $lesson->google_url, 'id' => $lesson->id, 'free' => $lesson->free == 'yes' ? true : false, 'slug' => $lesson->slug, 'questions' => $questionsData ]; } if($course->reviews->count() > 0){ $average_rating = round($course->reviews->sum('rating') / $course->reviews->count()); $review_from_user = $course->reviews()->where('user_id', Auth::user()->id)->first(); }else{ $average_rating = 0; $review_from_user = false; } // $paid = $course->orders()->where('user_id', Auth::user()->id)->whereIn('status', ['paid', 'access_free'])->first() ? true : false; $paid = true; $data_relates = []; foreach ($course->course_relates as $relatedItem) { if($relatedItem->course_related->reviews->count() > 0){ $average_rating_related = round($relatedItem->course_related->reviews->sum('rating') / $relatedItem->course_related->reviews->count()); }else{ $average_rating_related = 0; } $data_relates[] = (object)[ 'name' => $relatedItem->course_related->name, 'description' => $relatedItem->course_related->description, 'average_rating' => $average_rating_related, 'slug' => $relatedItem->course_related->slug, 'order' => $relatedItem->course_related->order, 'id' => $relatedItem->course_related->id ]; usort($data_relates, function($a, $b) {return $a->order - $b->order;}); } //Next Course $next_course = false; foreach($data_relates as $related_course){ if($related_course->order > $course->order){ $next_course = $related_course; break; } } // Random Course if(!$next_course){ $random_course = Course::whereNotIn('id', [$course->id])->inRandomOrder()->first(); $next_course = $random_course; }else{ $random_course = Course::whereNotIn('id', [$course->id, $next_course->id])->inRandomOrder()->first(); } $courseData = [ 'id' => $course->id, 'name' => $course->name, 'description' => $course->description, 'checklist' => $course->course_checklists, 'relates' => $data_relates, 'paid' => $paid, 'slug' => $course->slug, 'price' => $course->discount_in_euro ? number_format((float)($course->price_in_euro - $course->discount_in_euro), 2, '.', '') : number_format((float)$course->price_in_euro, 2, '.', ''), 'video_presentation' => $course->video_presentation, 'video_presentation_key' => $course->video_presentation ? substr($course->video_presentation, strrpos($course->video_presentation, '/') + 1) : '', 'time_completed' => $time_completed, 'lessons' => $lessonsData, 'show_send_review' => $review_from_user ? false : true , 'reviews_count' => $course->reviews->count(), 'average_rating' => $average_rating, 'percentage_completed' => $percentage_completed, 'view_count' => $view_count, 'mobile_video' => $mobile_video_data, 'next_course' => $next_course, 'random_course' => $random_course ]; return response()->json(['courseData' => $courseData]); }else{ return response()->json(['error' => 'Not found'], 404); } } public function getLessonInfo($courseSlug, $lessonSlug){ $course = Course::where('slug', $courseSlug)->first(); if($course){ $lesson = $course->lessons()->where('slug', $lessonSlug)->first(); if ($lesson) { $videoKey = substr($lesson->video_url, strrpos($lesson->video_url, '/') + 1); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://fast.wistia.com/embed/medias/". $videoKey .".jsonp", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_TIMEOUT => 30000, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( // Set Here Your Requesred Headers 'Content-Type: application/json', ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { $mobile_video_data = []; } else { $response = substr($response, 0, strrpos($response, '}') + 1); $response = substr($response, strpos($response, '{')); $video_links = json_decode($response)->media->assets; $mobile_video_data = []; foreach ($video_links as $link) { if(isset($link->ext) && $link->ext == 'mp4'){ $mobile_video_data[] = [ 'url' => $link->url, 'size' => $link->size, 'ext' => $link->ext, 'width' => $link->width, 'height' => $link->height, 'type' => $link->type ]; } } } $progress_exist = $lesson->progress_courses()->where('user_id', Auth::user()->id)->first(); $seconds_complete = 0; if($progress_exist){ $seconds_complete = $progress_exist->time_completed; } $next_lessons = Lesson::where([['type', 'video'],['order', '>', $lesson->order], ['course_id', $course->id]])->orderBy('order')->take(3)->get(); $paid = $course->orders()->where('user_id', Auth::user()->id)->whereIn('status', ['paid', 'access_free'])->first() ? true : false; $videoData = [ 'id' => $lesson->id, 'lesson_slug' => $lesson->slug, 'name' => $lesson->name, 'description' => $lesson->description, 'course_name' => $course->name, 'module_name' => $lesson->module->name, 'video_key' => $videoKey, 'time_completed' => $seconds_complete, 'mobile_video' => $mobile_video_data, 'course_slug' => $course->slug, 'next_videos' => $next_lessons, 'price' => $course->discount_in_euro ? number_format((float)($course->price_in_euro - $course->discount_in_euro), 2, '.', '') : number_format((float)$course->price_in_euro, 2, '.', ''), 'paid' => $paid, 'free' => $lesson->free == 'yes' ? true : false, ]; return response()->json(['videoData' => $videoData]); }else{ return response()->json([ 'error' => 'Acest link nu exista!' ], 404); } }else{ return response()->json([ 'error' => 'Acest link nu exista!' ], 404); } } public function setProgress(Request $request){ $course = Course::findOrFail($request->course_id); $progress_course = $course->progress_courses()->where('user_id', Auth::user()->id)->first(); if($progress_course){ $completed = $progress_course->completed; $view_count_increment = $progress_course->view_count; }else{ $completed = 0; $view_count_increment = 0; } $seconds = $request->seconds === 'end' ? $course->video_presentation_time : $request->seconds; $progress = ($seconds * 100) / $course->video_presentation_time; if($course->video_presentation_time - $seconds <= env('SECONDS_TO_COMPLETE')){ $progress = 0; $completed = 1; $seconds = 0; $view_count_increment = $view_count_increment + 1; } ProgressCourse::updateOrCreate( [ 'course_id' => $request->course_id, 'user_id' => Auth::user()->id ], [ 'progress' => $progress, 'type_complete' => 'automatic', 'time_completed' => $seconds, 'completed' => $completed, 'view_count' => $view_count_increment ] ); return response()->json(['success' => $progress]); } public function setProgressList(Request $request){ if($request->list){ $user = Auth::user(); foreach ($request->list as $item) { $lesson = Lesson::findOrFail($item['lesson_id']); $progress = ($item['seconds'] * 100) / $lesson->time; $progress_lesson = $lesson->progress_courses()->where('user_id', $user->id)->first(); $completed = 0; if($progress_lesson){ $completed = $progress_lesson->completed; } if($lesson->time - $item['seconds'] <= env('SECONDS_TO_COMPLETE')){ $progress = 100; if(!$completed){ $completed = 1; } } $progress_user = ProgressCourse::updateOrCreate( [ 'lesson_id' => $item['lesson_id'], 'user_id' => $user->id ], [ 'progress' => $progress, 'type_complete' => 'automatic', 'time_completed' => $item['seconds'], 'completed' => $completed ] ); if($item['checkManual']){ if($item['checkManual'] == 'check'){ $progress_user->progress = 100; $progress_user->type_complete = 'manual'; $progress_user->completed = 1; $progress_user->save(); }else if($item['checkManual'] == 'uncheck'){ $progress_user->progress = 0; $progress_user->type_complete = 'manual'; $progress_user->completed = 0; $progress_user->save(); } } } return response()->json(['status' => 'success']); }else{ return response()->json(['status' => 'error'], 500); } } public function changeProgressManual(Request $request){ $lesson = Lesson::findOrFail($request->lesson_id); $progress_user = $lesson->progress_courses()->where('user_id', Auth::user()->id)->first(); if($progress_user){ if($progress_user->completed){ $progress_user->progress = 0; $progress_user->type_complete = 'manual'; $progress_user->completed = 0; $progress_user->save(); }else{ $progress_user->progress = 100; $progress_user->type_complete = 'manual'; $progress_user->completed = 1; $progress_user->save(); } }else{ ProgressCourse::create([ 'lesson_id' => $lesson->id, 'user_id' => Auth::user()->id, 'progress' => 100, 'type_complete' => 'manual' ]); } return response()->json(['response' => 'Progress updated!']); } public function videoPresentation($courseSlug){ $course = Course::where('slug', $courseSlug)->first(); if($course){ if($course->video_presentation){ $videoKey = substr($course->video_presentation, strrpos($course->video_presentation, '/') + 1); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://fast.wistia.com/embed/medias/". $videoKey .".jsonp", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_TIMEOUT => 30000, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( // Set Here Your Requesred Headers 'Content-Type: application/json', ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { $mobile_video_data = []; } else { $response = substr($response, 0, strrpos($response, '}') + 1); $response = substr($response, strpos($response, '{')); $video_links = json_decode($response)->media->assets; $mobile_video_data = []; foreach ($video_links as $link) { if(isset($link->ext) && $link->ext == 'mp4'){ $mobile_video_data[] = [ 'url' => $link->url, 'size' => $link->size, 'ext' => $link->ext, 'width' => $link->width, 'height' => $link->height, 'type' => $link->type ]; } } } $paid = $course->orders()->where('user_id', Auth::user()->id)->whereIn('status', ['paid', 'access_free'])->first() ? true : false; $presentationData = [ 'course_name' => $course->name, 'video_key' => $videoKey, 'mobile_video' => $mobile_video_data, 'course_slug' => $course->slug, 'paid' => $paid, 'price' => $course->discount_in_euro ? number_format((float)($course->price_in_euro - $course->discount_in_euro), 2, '.', '') : number_format((float)$course->price_in_euro, 2, '.', '') ]; return response()->json(['presentationData' => $presentationData]); }else{ return response()->json([ 'error' => 'Acest curs nu are video de prezentare!' ], 404); } }else{ return response()->json([ 'error' => 'Acest link nu exista!' ], 404); } } public function createReview(Request $request){ $request->validate([ 'rating' => 'required', ]); $review = Review::create([ 'user_id' => Auth::user()->id, 'course_id' => $request->course_id, 'rating' => $request->rating, 'content' => $request->content ]); $course = Course::where('id', $request->course_id)->first(); if($course->reviews->count() > 0){ $average_rating = round($course->reviews->sum('rating') / $course->reviews->count()); }else{ $average_rating = 0; } return response()->json(['response' => 'success', 'reviews_count' => $course->reviews->count(), 'average_rating' => $average_rating]); } public function getReviews($slugCourse){ $course = Course::where('slug', $slugCourse)->first(); if($course){ $reviewsData = []; foreach ($course->reviews as $review) { $reviewsData[] = [ 'rating' => $review->rating, 'user_name' => $review->user->name, 'content' => $review->content, 'created_at' => $review->created_at ]; } $reviewsCourse = [ 'name_course' => $course->name, 'course_slug' => $course->slug, 'list' => $reviewsData, 'no_reviews' => $course->reviews->count() ]; return response()->json(['reviewsCourse' => $reviewsCourse]); }else{ return response()->json(['message' => 'Acest link nu exist!'], 404); } } public function getMyAccountData(){ $user = Auth::user(); $courseList = []; $courses = Course::whereHas('orders', function($query) use ($user){ $query->where('user_id', '=', $user->id); })->get(); if($courses->first()){ foreach ($courses as $course) { $progress_course = $course->progress_courses()->where('user_id', $user->id)->first(); if($progress_course){ $percentage_completed = $progress_course->progress; $view_count = $progress_course->view_count; }else{ $percentage_completed = 0; $view_count = 0; } $status_order = $course->orders->where('user_id', $user->id)->where('status', 'paid')->first() ? 'Platit' : 'In procesare'; $courseList[] = [ 'name' => $course->name, 'description' => $course->description, 'slug' => $course->slug, 'status' => $status_order, 'percentage' => $percentage_completed, 'view_count' => $view_count, ]; } } $myAccountData = [ 'user' => [ 'name' => $user->name, 'last_name' => $user->last_name, 'phone' => $user->phone, 'email' => $user->email ], 'courses' => $courseList ]; return response()->json(['myAccountData' => $myAccountData]); } public function saveProfile(Request $request){ $user = Auth::user(); $request->validate([ 'name' => 'required|string|max:255', 'email' => $request->email == $user->email ? '' : 'required|string|email|max:255|unique:users', ]); $user->update([ 'name' => $request->name, 'last_name' => $request->last_name, 'phone' => $request->phone, 'email' => $request->email ]); return response()->json("Ati actualizat cu succes!"); } public function changePassword(Request $request){ $user = Auth::user(); $request->validate([ 'password' => 'required|string|min:6|confirmed', ]); $user->update(['password' => bcrypt($request->password)]); return response()->json("Ati actualizat cu succes!"); } }
Back