<?php namespace App\Http\Controllers; use App\UserLogin; use Carbon\Carbon; use App\Models\User; use Carbon\CarbonPeriod; use Omnipay\MobilPay\Api\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; use Modules\Payment\Entities\Withdraw; use Illuminate\Support\Facades\Response; use Modules\CourseSetting\Entities\Course; use Modules\CourseSetting\Entities\CourseEnrolled; class HomeController extends Controller { public function __construct() { $this->middleware(['auth', 'verified']); } public function index() { if (Auth::user()->role_id == 1) { return redirect()->route('dashboard'); } else if (Auth::user()->role_id == 2) { return redirect()->route('dashboard'); } else if (Auth::user()->role_id == 3) { return redirect()->route('studentDashboard'); } else { return redirect('/'); } } //dashboard public function dashboard() { // dd(Auth::user()->unreadNotifications[0]->data['actionURL'] ?? ''); try { if (Auth::user()->role_id == 3) { return redirect()->route('studentDashboard'); } if (isModuleActive('Affiliate') && Auth::user()->role->name == 'Affiliate') { return redirect()->route('affiliate.my_affiliate.index'); } $user = Auth::user(); if ($user->role_id == 1) { $recentEnroll = CourseEnrolled::latest()->take(4)->select( 'reveune', 'course_id', 'user_id', 'purchase_price' )->with('course', 'course.user', 'user')->get(); $coursesEarnings = CourseEnrolled::select( DB::raw('Month(created_at) as month_number'), DB::raw('DATE_FORMAT(created_at , "%b") as month'), DB::raw('YEAR(created_at) as year'), DB::raw('ROUND(sum(purchase_price - reveune),2) as earning')) ->groupBy('month_number', 'year', 'month') ->whereYear('created_at', Carbon::now()->year) ->get(); $courses_enrolle = CourseEnrolled::select( DB::raw('MONTHNAME(created_at) as month'), DB::raw('YEAR(created_at) as year'), DB::raw('DAY(created_at) as day'), DB::raw('count(*) as count'))->groupBy('year', 'month', 'day')->get(); } else { $recentEnroll = CourseEnrolled::latest()->take(4)->select( 'reveune', 'course_id', 'user_id', 'purchase_price' )->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); })->with('course', 'course.user', 'user')->get(); $coursesEarnings = CourseEnrolled::select( DB::raw('Month(created_at) as month_number'), DB::raw('DATE_FORMAT(created_at , "%b") as month'), DB::raw('YEAR(created_at) as year'), DB::raw('ROUND(sum(purchase_price - reveune),2) as earning')) ->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); }) ->groupBy('month_number', 'year', 'month') ->whereYear('created_at', Carbon::now()->year) ->get(); $courses_enrolle = CourseEnrolled::select( DB::raw('MONTHNAME(created_at) as month'), DB::raw('YEAR(created_at) as year'), DB::raw('DAY(created_at) as day'), DB::raw('count(*) as count')) ->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); }) ->groupBy('year', 'month', 'day')->get(); } $courshEarningM_onth_name = []; foreach ($coursesEarnings as $key => $earning) { $courshEarningM_onth_name[] = $earning->month; } $courshEarningMonthly = []; foreach ($coursesEarnings as $key => $earn) { $courshEarningMonthly[] = $earn->earning; } // return $coursesEarnings; //====================================Payment Statistics==================================== $withdraws_query = Withdraw::selectRaw('monthname(issueDate) as month') ->selectRaw('YEAR(issueDate) as year') ->select('status') ->whereYear('issueDate', '=', date('Y')) ->whereMonth('issueDate', '=', date('m')); if ($user->role_id != 1) { $withdraws_query->where('instructor_id', $user->id); } $withdraws = $withdraws_query->get(); $withdraws_paid = $withdraws->where('status', '=', 1); $withdraws_unpaid = $withdraws->where('status', '=', 0); $payment_statistics['paid'] = $withdraws_paid; $payment_statistics['unpaid'] = $withdraws_unpaid; $payment_statistics['month'] = Carbon::now()->format('F'); //============================Course Overview=============================== $allCourses = Course::with('user', 'enrolls')->get(); $enable_courses = $allCourses->where('status', 1)->count(); $disable_courses = $allCourses->where('status', 0)->count(); $courses = $allCourses->where('type', 1)->count(); $quizzes = $allCourses->where('type', 2)->count(); $classes = $allCourses->where('type', 3)->count(); $course_overview['active'] = $enable_courses; $course_overview['pending'] = $disable_courses; $course_overview['courses'] = $courses; $course_overview['quizzes'] = $quizzes; $course_overview['classes'] = $classes; //====================================Course Enroll=================================== $enrolls = []; foreach ($courses_enrolle as $course) { if (date('Y') == $course->year && date('F') == $course->month) $enrolls[] = $course; } $enroll_day = []; foreach ($enrolls as $key => $enroll) { $enroll_day[] = $enroll->day; } $enroll_count = []; foreach ($enrolls as $key => $enroll) { $enroll_count[] = $enroll->count; } $students = null; if (isModuleActive('CPD')) { $students = User::with('cpds')->where('role_id', 3)->get(); } ///test start //test end return view('dashboard', compact('recentEnroll', 'courshEarningM_onth_name', 'courshEarningMonthly', 'payment_statistics', 'enroll_day', 'enroll_count', 'course_overview', 'allCourses', 'students')); } catch (\Exception $e) { GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent()); } } public function userLoginChartByDays(\Illuminate\Http\Request $request) { $userLoginChartByDays = []; $type = $request->type; $days = $request->days; if ($type == "days") { $from = Carbon::now()->subDays($days - 1); $to = Carbon::now(); } else { $allDays = explode(' - ', $days); $from = Carbon::parse($allDays[0]); $to = Carbon::parse($allDays[1]); } $period = CarbonPeriod::create($from, $to); $dates = []; $data = []; foreach ($period as $key => $value) { $day = $value->format('Y-m-d'); $dates[] = $day; $data[] = UserLogin::whereDate('login_at', $day)->count(); } $userLoginChartByDays['date'] = $dates; $userLoginChartByDays['data'] = $data; return $userLoginChartByDays; } public function userLoginChartByTime(\Illuminate\Http\Request $request) { $userLoginChartByDays = []; $type = $request->type; $days = $request->days; if ($type == "days") { $from = Carbon::now()->subDays($days - 1); $to = Carbon::now(); } else { $allDays = explode(' - ', $days); $from = Carbon::parse($allDays[0]); $to = Carbon::parse($allDays[1]); } $period = CarbonPeriod::create($from, $to); $hours = []; foreach ($period as $key => $value) { $day = $value->format('Y-m-d'); $loginData = UserLogin::whereDate('login_at', $day)->get(['id', 'login_at'])->groupBy(function ($date) { return Carbon::parse($date->login_at)->format('H'); }); for ($i = 0; $i <= 23; $i++) { if (!isset($hours[$i])) { $hours[$i] = 0; } if (!isset($loginData[$i])) { $loginData[$i] = []; } $hours[$i] = count($loginData[$i]) + $hours[$i]; } } return $hours; } public function getDashboardData() { try { $user = Auth::user(); if ($user->role_id == 2) { $allCourseEnrolled = CourseEnrolled::with('user', 'course') ->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); })->get(); $allCourses = Course::where('user_id', $user->id)->get(); $thisMonthEnroll = CourseEnrolled::whereYear('created_at', Carbon::now()->year) ->whereMonth('created_at', Carbon::now()->format('m')) ->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); })->sum('purchase_price'); $today = CourseEnrolled::whereDate('created_at', Carbon::today()) ->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); })->sum('purchase_price'); $month = CourseEnrolled::select( DB::raw('sum(purchase_price) as totalSell'), DB::raw("DATE_FORMAT(created_at,'%m') as months") )->whereHas('course', function ($query) use ($user) { $query->where('user_id', '=', $user->id); })->groupBy('months')->get(); $rev = $allCourseEnrolled->sum('reveune'); } else { $allCourseEnrolled = CourseEnrolled::all(); $allCourses = Course::all(); $thisMonthEnroll = CourseEnrolled::whereYear('created_at', Carbon::now()->year) ->whereMonth('created_at', Carbon::now()->format('m')) ->sum('purchase_price'); $today = CourseEnrolled::whereDate('created_at', Carbon::today())->sum('purchase_price'); $month = CourseEnrolled::select( DB::raw('sum(purchase_price) as totalSell'), DB::raw("DATE_FORMAT(created_at,'%m') as months") )->groupBy('months')->get(); $rev = $allCourseEnrolled->sum('purchase_price') - $allCourseEnrolled->sum('reveune'); } $info['allCourse'] = $allCourses->count(); $info['totalEnroll'] = $allCourseEnrolled->count(); $info['thisMonthEnroll'] = $thisMonthEnroll; $info['thisMonthEnroll'] = number_format($info['thisMonthEnroll'], 2, '.', ''); $info['today'] = $today; $info['today'] = number_format($info['today'], 2, '.', ''); $info['student'] = User::where('role_id', 3)->count(); $info['instructor'] = User::where('role_id', 2)->count(); $info['totalSell'] = $allCourseEnrolled->sum('purchase_price'); $info['totalSell'] = number_format($info['totalSell'], 2, '.', ''); $info['adminRev'] = number_format($rev, 2, '.', ''); $info['month'] = $month; return Response::json($info); } catch (\Exception $e) { GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent()); } } public function validateGenerate() { return view('validate_generate'); } public function validateGenerateSubmit() { $field = request()->field; $rules = request()->rules; $arr = []; $single_rule = explode('|', $rules); foreach ($single_rule as $rule) { $string = explode(':', $rule); $rule_name = $rule_message_key = $string[0]; if (in_array($rule_name, ['max', 'min'])) { $rule_message_key = $rule_message_key . '.string'; } $message = __('validation.' . $rule_message_key); $field_string = str_replace('_', ' ', $field); $message = str_replace( [':attribute', ':ATTRIBUTE', ':Attribute'], [$field_string, \Illuminate\Support\Str::upper($field_string), \Illuminate\Support\Str::ucfirst($field_string)], $message ); if (in_array($rule_name, ['max', 'min'])) { $message = str_replace( [':' . $rule_name], [$string[1]], $message ); } if ($rule_name == 'required_if') { $ex = explode(',', $string[1]); $message = str_replace( [':other'], [str_replace('_', ' ', $ex[0])], $message ); if (isset($ex[2])) { $message = str_replace( [':value', "'"], [str_replace('_', ' ', $ex[2]), ''], $message ); } else { $message = str_replace( [':value', "'"], [str_replace('_', ' ', $ex[1]), ''], $message ); } } if ($rule_name == 'mimes') { $message = str_replace( [':values'], [str_replace('_', ' ', $string[1])], $message ); } if ($rule_name == 'same') { $message = str_replace( [':other'], [str_replace('_', ' ', $string[1])], $message ); } if ($rule_name == 'required_with') { $message = str_replace( [':values'], [str_replace('_', ' ', $string[1])], $message ); } if ($rule_name == 'after_or_equal') { $message = str_replace( [':date'], [str_replace('_', ' ', $string[1])], $message ); } if ($rule_name == 'after') { $message = str_replace( [':date'], [str_replace('_', ' ', $string[1])], $message ); } $arr [$field . '.' . $rule_name] = $message; } $defaultFile = public_path('/../resources/lang/default/validation.php'); $languages = include "{$defaultFile}"; $languages = array_merge($languages, $arr); file_put_contents($defaultFile, ''); file_put_contents($defaultFile, '<?php return ' . var_export($languages, true) . ';'); return view('validate_generate', compact('field', 'rules', 'arr')); } }