JFIF x x C C " } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w !1AQ aq"2B #3Rbr{
File "Api_helper.php"
Full Path: /home/u735268861/domains/palsarh.in/public_html/app/Helpers/Api_helper.php
File size: 21.71 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// import facade
use App\Models\Addon;
use App\Models\NotificationSetting;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use App\Models\{Course, Category, Review};
//Api related
if (!function_exists('enroll_history')) {
function enroll_history($course_id = "", $distinct_data = false)
{
if ($distinct_data) {
$enroll_hoistory = DB::table('enrollments')->select('user_id')
->distinct()
->where('course_id', $course_id)
->get();
return $enroll_hoistory;
} else {
if ($course_id > 0) {
return DB::table('enrollments')->where('course_id', $course_id)->get();
} else {
return DB::table('enrollments')->get();
}
}
}
}
// Return require course data
if (!function_exists('course_data')) {
function course_data($courses = array())
{
foreach ($courses as $key => $course) {
$courses[$key]->requirements = json_decode($course->requirements);
$courses[$key]->outcomes = json_decode($course->outcomes);
$courses[$key]->thumbnail = get_photo('course_thumbnail', $course->thumbnail);
$courses[$key]->banner = get_photo('course_banner', $course->banner);
//$courses[$key]->preview = get_photo('course_preview', $course->preview);
// $courses[$key]->enable_drip_content = $course->enable_drip_content;
if ($course->is_paid == 0) {
$courses[$key]->price = 'Free';
} else {
if ($course->discount_flag == 1) {
$courses[$key]->price = currency($course->discounted_price);
$courses[$key]->price_cart = $course->discounted_price;
} else {
$courses[$key]->price = currency($course->price);
$courses[$key]->price_cart = $course->price;
}
}
// // $total_rating = get_ratings('course', $course->id, true)->row()->rating;
// // $number_of_ratings = get_ratings('course', $course->id)->num_rows();
// if ($number_of_ratings > 0) {
// $courses[$key]->rating = ceil($total_rating / $number_of_ratings);
// } else {
// $courses[$key]->rating = 0;
// }
// $courses[$key]->number_of_ratings = $number_of_ratings;
$instructor_details = get_user_info($course->user_id);
$courses[$key]->instructor_name = $instructor_details->name;
$courses[$key]->instructor_image = url('public/' . $instructor_details->photo);
$courses[$key]->total_enrollment = enroll_history($course->id)->count();
$courses[$key]->shareable_link = url('course/' . slugify($course->title));
$review = Review::where('course_id', $course->id)->get();
$total = $review->count();
$rating = array_sum(array_column($review->toArray(), 'rating'));
$average_rating = 0.0;
if ($total != 0.0) {
$average_rating = round($rating / $total);
}
$courses[$key]->total_reviews = $total;
// $courses[$key]->average_rating = $course->average_rating;
$courses[$key]->average_rating = number_format($average_rating, 1, '.', '');
}
return $courses;
}
}
if (!function_exists('get_photo')) {
function get_photo($type, $identifier)
{ // type is the flag to realize whether it is course, category or user image. For course, user image Identifier is id but for category Identifier is image name
if ($type == 'user_image') {
if (file_exists('public/' . $identifier) && $identifier != "") {
return url('public/' . $identifier);
} else {
return url('public/uploads/users/student/placeholder/placeholder.png');
return url('public/uploads/users/student/placeholder/placeholder.png');
}
} elseif ($type == 'course_thumbnail') {
if (file_exists('public/' . $identifier) && $identifier != "") {
return url('public/' . $identifier);
} else {
return url('public/uploads/course-thumbnail/placeholder/placeholder.png');
}
} elseif ($type == 'course_banner') {
if (file_exists('public/' . $identifier) && $identifier != "") {
return url('public/' . $identifier);
} else {
return url('public/uploads/course-banner/placeholder/placeholder.png');
}
} elseif ($type == 'course_preview') {
if (file_exists('public/' . $identifier) && $identifier != "") {
return url('public/' . $identifier);
} else {
return url('public/uploads/course-preview/placeholder/placeholder.png');
}
} elseif ($type == 'category_thumbnail') {
if (file_exists('public/' . $identifier) && $identifier != "") {
return url('public/' . $identifier);
} else {
return url('public/uploads/category-thumbnail/placeholder/placeholder.png');
}
}
}
}
if (!function_exists('get_category_wise_courses')) {
function get_category_wise_courses($category_id = "")
{
// $category_details = get_category_details_by_id($category_id);
$courses = Course::where('category_id', $category_id)->where('status', 'active')->get();
return $courses;
}
}
if (!function_exists('get_category_details_by_id')) {
function get_category_details_by_id($id)
{
return DB::table('categories')->where('id', $id)->get();
}
}
if (!function_exists('sub_categories')) {
// Get sub categories
function sub_categories($parent_category_id)
{
$response = array();
$categories = DB::table('categories')->where('parent_id', $parent_category_id)->get();
foreach ($categories as $key => $category) {
$number_of_courses = DB::table('courses')->where('status', 'active')->where('category_id', $category->id)->count();
$category->number_of_courses = $number_of_courses;
$category->thumbnail = get_photo('category_thumbnail', $category->thumbnail);
$response[] = $category;
}
return $response;
}
}
if (!function_exists('course_details_by_id')) {
// Get sub categories
function course_details_by_id($user_id = "", $course_id = "")
{
$course_details = get_course_by_id($course_id);
$response = course_data($course_details);
foreach ($response as $key => $resp) {
$response[$key]->sections = sections($course_id);
$response[$key]->is_wishlisted = is_added_to_wishlist($user_id, $course_id);
$response[$key]->is_purchased = is_purchased($user_id, $course_id);
$response[$key]->includes = array(
get_total_duration_of_lesson_by_course_id($course_id) . ' On demand videos',
get_lessons('course', $course_id)->count() . ' Lessons',
'High quality videos',
'Life time access'
);
}
return $response;
}
}
function get_course_by_id($course_id = "")
{
return DB::table('courses')->where('id', $course_id)->get();
}
function is_added_to_wishlist($user_id = 0, $course_id = "")
{
if ($user_id > 0) {
$wishlists = array();
$wishlist_check = DB::table('wishlists')->where('user_id', $user_id)->where('course_id', $course_id)->first();
if (!empty($wishlist_check)) {
return true;
} else {
return false;
}
} else {
return false;
}
}
function is_purchased($user_id = 0, $course_id = "")
{
// 0 represents Not purchased, 1 represents Purchased, 2 represents Pending
if ($user_id > 0) {
if (enroll_status($course_id, $user_id) == 'valid') {
return true;
} else {
return false;
}
} else {
return false;
}
}
if (!function_exists('enroll_status')) {
function enroll_status($course_id = "", $user_id = "")
{
$enrolled_history = DB::table('enrollments')->where('user_id', $user_id)->where('course_id', $course_id)->first();
if (!empty($enrolled_history)) {
$expiry_date = $enrolled_history->expiry_date;
if ($expiry_date == null || $expiry_date >= time()) {
return 'valid';
} else {
return 'expired';
}
} else {
return false;
}
}
}
function get_total_duration_of_lesson_by_course_id($course_id)
{
$total_duration = 0;
$lessons = get_lessons('course', $course_id);
foreach ($lessons as $lesson) {
if ($lesson->lesson_type != "other" && $lesson->lesson_type != "text") {
$time_array = !empty($lesson->duration) ? explode(':', $lesson->duration) : explode(':', '00:00:00');
$hour_to_seconds = $time_array[0] * 60 * 60;
$minute_to_seconds = $time_array[1] * 60;
$seconds = $time_array[2];
$total_duration += $hour_to_seconds + $minute_to_seconds + $seconds;
}
}
// return gmdate("H:i:s", $total_duration).' '.get_phrase('hours');
$hours = floor($total_duration / 3600);
$minutes = floor(($total_duration % 3600) / 60);
$seconds = $total_duration % 60;
return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds) . ' ' . get_phrase('hours');
}
if (!function_exists('course_progress')) {
function course_progress($course_id = "", $user_id = "", $return_type = "")
{
$watch_history = DB::table('watch_histories')->where('student_id', $user_id)->where('course_id', $course_id)->first();
$total_lessons = DB::table('lessons')->where('course_id', $course_id)->count();
if (!empty($watch_history)) {
$completed_lessons = json_decode($watch_history->completed_lesson, true);
// Check if completed_lesson is an array and is not empty
if (is_array($completed_lessons) && !empty($completed_lessons)) {
$total_completed_lesson = count($completed_lessons);
$watch_history->course_progress = ($total_completed_lesson / $total_lessons) * 100;
} else {
$total_completed_lesson = 0;
$watch_history->course_progress = 0; // Ensure course_progress is set to 0 if no lessons are completed
}
} else {
$total_completed_lesson = 0;
}
if ($return_type == "completed_lesson_ids") {
// Return completed_lesson as an array, or an empty array if it's empty
return is_array($completed_lessons) ? $completed_lessons : [];
}
if (!empty($watch_history) && $watch_history->course_progress > 0) {
return $watch_history->course_progress;
} else {
return 0;
}
}
}
if (!function_exists('lesson_progress_api')) {
function lesson_progress_api($lesson_id = "", $user_id = "", $course_id = "")
{
if ($course_id == "") {
$course_id = DB::table('lessons')->where('id', $lesson_id)->value('course_id');
}
$query = DB::table('watch_histories')->where('student_id', $user_id)->where('course_id', $course_id)->first();
if (!empty($query)) {
$lesson_ids = json_decode($query->completed_lesson, true);
if (is_array($lesson_ids) && in_array($lesson_id, $lesson_ids)) {
return 1;
} else {
return 0;
}
}
}
}
if (!function_exists('get_lessons')) {
function get_lessons($type = "", $id = "")
{
$lessons = array();
if ($type == "course") {
$lessons = DB::table('lessons')->where('course_id', $id)->orderBy("sort", "asc")->get();
} elseif ($type == "section") {
$lessons = DB::table('lessons')->where('section_id', $id)->orderBy("sort", "asc")->get();
} elseif ($type == "lesson") {
$lessons = DB::table('lessons')->where('id', $id)->orderBy("sort", "asc")->get();
} else {
$lessons = DB::table('lessons')->orderBy("sort", "asc")->get();
}
return $lessons;
}
}
if (!function_exists('update_watch_history_manually')) {
// code of mark this lesson as completed
function update_watch_history_manually($lesson_id = "", $course_id = "", $user_id = "")
{
$is_completed = 0;
$query = DB::table('watch_histories')->where('course_id', $course_id)->where('student_id', $user_id)->first();
$course_progress = course_progress($course_id, $user_id);
if (!empty($query)) {
$lesson_ids = json_decode($query->completed_lesson, true);
if (!is_array($lesson_ids))
$lesson_ids = array();
if (!in_array($lesson_id, $lesson_ids)) {
array_push($lesson_ids, $lesson_id);
$total_lesson = DB::table('lessons')->where('course_id', $course_id)->get();
$course_progress = (100 / count($total_lesson)) * count($lesson_ids);
if ($course_progress >= 100 && $query->completed_date == null) {
$completed_date = time();
} else {
$completed_date = $query->completed_date;
}
DB::table('watch_histories')->where('id', $query->id)->update([
'completed_lesson' => json_encode($lesson_ids),
'completed_date' => $completed_date,
]);
$is_completed = 1;
} else {
if (($key = array_search($lesson_id, $lesson_ids)) !== false) {
unset($lesson_ids[$key]);
}
$total_lesson = DB::table('lessons')->where('course_id', $course_id)->get();
$course_progress = (100 / count($total_lesson)) * count($lesson_ids);
if ($course_progress >= 100 && $query->completed_date == null) {
$completed_date = time();
} else {
$completed_date = $query->completed_date;
}
DB::table('watch_histories')->where('id', $query->id)->update([
'completed_lesson' => json_encode($lesson_ids),
'completed_date' => $completed_date,
]);
$is_completed = 0;
}
} else {
$total_lesson = DB::table('lessons')->where('course_id', $course_id)->get();
$course_progress = (100 / count($total_lesson));
$insert_data['course_id'] = $course_id;
$insert_data['student_id'] = $user_id;
$insert_data['completed_lesson'] = json_encode(array($lesson_id));
$insert_data['watching_lesson_id'] = $lesson_id;
DB::table('watch_histories')->create($insert_data);
}
return json_encode(array('lesson_id' => $lesson_id, 'course_progress' => round($course_progress), 'is_completed' => $is_completed));
}
}
function course_completion_data($course_id = "", $user_id = "")
{
$response = array();
$response['course_id'] = $course_id;
$response['number_of_lessons'] = get_lessons('course', $course_id)->count();
$response['number_of_completed_lessons'] = get_completed_number_of_lesson($user_id, 'course', $course_id);
$response['course_progress'] = round(course_progress($course_id, $user_id));
return $response;
}
if (!function_exists('get_completed_number_of_lesson')) {
function get_completed_number_of_lesson($user_id = "", $type = "", $id = "")
{
$counter = 0;
if ($type == 'section') {
$lessons = get_lessons('section', $id);
} else {
$lessons = get_lessons('course', $id);
}
foreach ($lessons as $key => $lesson) {
if (lesson_progress_api($lesson->id, $user_id)) {
$counter = $counter + 1;
}
}
return $counter;
}
}
//get all sections
function sections($course_id = "", $user_id = "")
{
$lesson_counter_starts = 0;
$lesson_counter_ends = 0;
$sections = api_get_section('course', $course_id);
foreach ($sections as $key => $section) {
$sections[$key]->lessons = section_wise_lessons($section->id, $user_id);
$sections[$key]->total_duration = str_replace(' Hours', "", get_total_duration_of_lesson_by_section_id($section->id));
if ($key == 0) {
$lesson_counter_starts = 1;
$lesson_counter_ends = count($sections[$key]->lessons);
} else {
$lesson_counter_starts = $lesson_counter_ends + 1;
$lesson_counter_ends = $lesson_counter_starts + count($sections[$key]->lessons);
}
$sections[$key]->lesson_counter_starts = $lesson_counter_starts;
$sections[$key]->lesson_counter_ends = $lesson_counter_ends;
if ($user_id > 0) {
$sections[$key]->completed_lesson_number = get_completed_number_of_lesson($user_id, 'section', $section->id);
} else {
$sections[$key]->completed_lesson_number = 0;
}
}
$response = add_user_validity($sections);
return $response;
}
function api_get_section($type_by, $id)
{
$sections = array();
if ($type_by == 'course') {
$sections = DB::table('sections')->where('course_id', $id)->orderBy("sort", "asc")->get();
} elseif ($type_by == 'section') {
$sections = DB::table('sections')->where('id', $id)->orderBy("sort", "asc")->get();
}
return $sections;
}
function section_wise_lessons($section_id = "", $user_id = "")
{
$response = [];
$lessons = get_lessons('section', $section_id);
foreach ($lessons as $key => $lesson) {
$response[$key]['id'] = $lesson->id;
$response[$key]['title'] = $lesson->title;
$response[$key]['duration'] = readable_time_for_humans($lesson->duration);
$response[$key]['course_id'] = $lesson->course_id;
$response[$key]['section_id'] = $lesson->section_id;
$response[$key]['video_type'] = ($lesson->video_type == "" ? "" : $lesson->video_type);
if ($lesson->lesson_type == 'system-video') {
$response[$key]['video_url'] = ($lesson->lesson_src == "" ? "" : url('/public') . '/' . $lesson->lesson_src);
} else {
$response[$key]['video_url'] = ($lesson->lesson_src == "" ? "" : $lesson->lesson_src);
}
// $response[$key]['video_url_web'] = $lesson->video_url;
// $response[$key]['video_type_web'] = $lesson->video_type;
$response[$key]['lesson_type'] = $lesson->lesson_type;
$response[$key]['is_free'] = $lesson->is_free;
if ($lesson->lesson_type == 'text') {
$response[$key]['attachment'] = remove_js(htmlspecialchars_decode_($lesson->attachment));
} else {
$response[$key]['attachment'] = $lesson->attachment;
}
$response[$key]['attachment_url'] = $lesson->attachment ? url('/public/uploads/lesson_file/attachment') . '/' . $lesson->attachment : $lesson->attachment;
$response[$key]['attachment_type'] = $lesson->attachment_type;
$response[$key]['summary'] = remove_js(htmlspecialchars_decode_($lesson->summary));
if ($user_id > 0) {
$response[$key]['is_completed'] = lesson_progress_api($lesson->id, $user_id);
} else {
$response[$key]['is_completed'] = 0;
}
$response[$key]['user_validity'] = true;
$response[$key]['start_time'] = $lesson->start_time;
$response[$key]['end_time'] = $lesson->end_time;
}
return $response;
}
function add_user_validity($responses = array())
{
foreach ($responses as $key => $response) {
$responses[$key]->user_validity = true;
}
return $responses;
}
function get_total_duration_of_lesson_by_section_id($section_id)
{
$total_duration = 0;
$lessons = get_lessons('section', $section_id);
foreach ($lessons as $lesson) {
if ($lesson->lesson_type != "other" && $lesson->lesson_type != "text") {
$time_array = !empty($lesson->duration) ? explode(':', $lesson->duration) : explode(':', '00:00:00');
$hour_to_seconds = $time_array[0] * 60 * 60;
$minute_to_seconds = $time_array[1] * 60;
$seconds = $time_array[2];
$total_duration += $hour_to_seconds + $minute_to_seconds + $seconds;
}
}
//return gmdate("H:i:s", $total_duration).' '.get_phrase('hours');
$hours = floor($total_duration / 3600);
$minutes = floor(($total_duration % 3600) / 60);
$seconds = $total_duration % 60;
return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
}
// Human readable time
if (!function_exists('readable_time_for_humans')) {
function readable_time_for_humans($duration)
{
if ($duration) {
$duration_array = explode(':', $duration);
$hour = $duration_array[0];
$minute = $duration_array[1];
$second = $duration_array[2];
if ($hour > 0) {
$duration = $hour . ' ' . get_phrase('hr') . ' ' . $minute . ' ' . get_phrase('min');
} elseif ($minute > 0) {
if ($second > 0) {
$duration = ($minute + 1) . ' ' . get_phrase('min');
} else {
$duration = $minute . ' ' . get_phrase('min');
}
} elseif ($second > 0) {
$duration = $second . ' ' . get_phrase('sec');
} else {
$duration = '00:00';
}
} else {
$duration = '00:00';
}
return $duration;
}
}
if (!function_exists('remove_js')) {
function remove_js($description = '')
{
return preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $description);
}
}