JFIF x x C C " } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w !1AQ aq"2B #3Rbr{
File "HomeController.php"
Full Path: /home2/yvrgircc/public_html/ariseskilltech.com/app/Http/Controllers/frontend/HomeController.php
File size: 7.6 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers\frontend;
use App\Http\Controllers\Controller;
use App\Models\Blog;
use App\Models\Builder_page;
use App\Models\Category;
use App\Models\Certificate;
use App\Models\Course;
use App\Models\Message;
use App\Models\Message_code;
use App\Models\Review;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
use DB;
class HomeController extends Controller
{
function homepage_switcher($id){
session(['home' => $id]);
return redirect(route('home'));
}
public function index()
{
if(session('home')){
$page_builder = Builder_page::where('id', session('home'))->first();
}else{
$page_builder = Builder_page::where('status', 1)->first();
}
if ($page_builder && $page_builder->is_permanent == 1) {
$page_data['blogs'] = Blog::where('status', 1)->orderBy('is_popular', 'desc')->orderBy('id', 'desc')->take(3)->get();
$page_data['reviews'] = Review::all();
return view('components.home_permanent_templates.' . $page_builder->identifier, $page_data);
} else {
$page_data['instructor'] = User::join('courses', 'users.id', 'courses.user_id')
->select('users.*', 'courses.title as course_title')
->get()->unique()->take(4);
$page_data['blogs'] = Blog::where('status', 1)->orderBy('is_popular', 'desc')->orderBy('id', 'desc')->take(3)->get();
$page_data['category'] = Category::take(8)->get();
$view_path = 'frontend' . '.' . get_frontend_settings('theme') . '.home.index';
return view($view_path, $page_data);
}
}
public function download_certificate($identifier)
{
$certificate = Certificate::where('identifier', $identifier);
if ($certificate->count() > 0) {
$qr_code_content_value = route('certificate', ['identifier' => $identifier]);
$qrcode = QrCode::size(300)->generate($qr_code_content_value);
$page_data['certificate'] = $certificate->first();
$page_data['qrcode'] = $qrcode;
return view('curriculum.certificate.download', $page_data);
} else {
return redirect(route('home'))->with('error', get_phrase('Certificate not found at this url'));
}
}
public function update_watch_history_with_duration(Request $request)
{
$userId = auth()->user()->id; // Get the logged-in user's ID
$courseProgress = 0;
$isCompleted = 0;
// Retrieve and sanitize input data
$courseId = htmlspecialchars($request->input('course_id'));
$lessonId = htmlspecialchars($request->input('lesson_id'));
$currentDuration = htmlspecialchars($request->input('current_duration'));
// Fetch current watch history record
$currentHistory = DB::table('watch_durations')
->where([
'watched_course_id' => $courseId,
'watched_lesson_id' => $lessonId,
'watched_student_id' => $userId,
])
->first();
// Fetch course details
$courseDetails = DB::table('courses')->where('id', $courseId)->first();
$dripContentSettings = json_decode($courseDetails->drip_content_settings, true);
if ($currentHistory) {
$watchedDurationArr = json_decode($currentHistory->watched_counter, true);
if (!is_array($watchedDurationArr)) $watchedDurationArr = [];
if (!in_array($currentDuration, $watchedDurationArr)) {
array_push($watchedDurationArr, $currentDuration);
}
$watchedDurationJson = json_encode($watchedDurationArr);
DB::table('watch_durations')
->where([
'watched_course_id' => $courseId,
'watched_lesson_id' => $lessonId,
'watched_student_id' => $userId,
])
->update([
'watched_counter' => $watchedDurationJson,
'current_duration' => $currentDuration,
]);
} else {
$watchedDurationArr = [$currentDuration];
DB::table('watch_durations')->insert([
'watched_course_id' => $courseId,
'watched_lesson_id' => $lessonId,
'watched_student_id' => $userId,
'current_duration' => $currentDuration,
'watched_counter' => json_encode($watchedDurationArr),
]);
}
if ($courseDetails->enable_drip_content != 1) {
return response()->json([
'lesson_id' => $lessonId,
'course_progress' => null,
'is_completed' => null
]);
}
// Fetch lesson details for duration calculations
$lessonTotalDuration = DB::table('lessons')->where('id', $lessonId)->value('duration');
$lessonTotalDurationArr = explode(':', $lessonTotalDuration);
$lessonTotalSeconds = ($lessonTotalDurationArr[0] * 3600) + ($lessonTotalDurationArr[1] * 60) + $lessonTotalDurationArr[2];
$currentTotalSeconds = count($watchedDurationArr) * 5; // Assuming each increment represents 5 seconds
// Drip content completion logic
if ($dripContentSettings['lesson_completion_role'] == 'duration') {
if ($currentTotalSeconds >= $dripContentSettings['minimum_duration']) {
$isCompleted = 1;
} elseif (($currentTotalSeconds + 4) >= $lessonTotalSeconds) {
$isCompleted = 1;
}
} else {
$requiredDuration = ($lessonTotalSeconds / 100) * $dripContentSettings['minimum_percentage'];
if ($currentTotalSeconds >= $requiredDuration) {
$isCompleted = 1;
} elseif (($currentTotalSeconds + 4) >= $lessonTotalSeconds) {
$isCompleted = 1;
}
}
// Update course progress if the lesson is completed
if ($isCompleted == 1) {
$watchHistory = DB::table('watch_histories')
->where([
'course_id' => $courseId,
'student_id' => $userId,
])
->first();
if ($watchHistory) {
$lessonIds = json_decode($watchHistory->completed_lesson, true);
$courseProgress = $watchHistory->course_progress;
if (!is_array($lessonIds)) $lessonIds = [];
if (!in_array($lessonId, $lessonIds)) {
array_push($lessonIds, $lessonId);
$totalLesson = DB::table('lessons')->where('course_id', $courseId)->count();
$courseProgress = (100 / $totalLesson) * count($lessonIds);
$completedDate = ($courseProgress >= 100 && !$watchHistory->completed_date)
? time()
: $watchHistory->completed_date;
DB::table('watch_histories')
->where('id', $watchHistory->id)
->update([
'course_progress' => $courseProgress,
'completed_lesson' => json_encode($lessonIds),
'completed_date' => $completedDate,
]);
}
}
}
// Return the response
return response()->json([
'lesson_id' => $lessonId,
'course_progress' => round($courseProgress),
'is_completed' => $isCompleted,
]);
}
}