shell bypass 403
<?php
namespace Modules\Quiz\Http\Controllers;
use App\Exports\OnlineQuizReport;
use App\Jobs\SendGeneralEmail;
use App\User;
use App\TableList;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Org\Entities\OrgBranch;
use Modules\Org\Entities\OrgPosition;
use Modules\Quiz\Entities\QuizTest;
use App\Http\Controllers\Controller;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Support\Facades\Auth;
use Modules\CourseSetting\Entities\Category;
use Modules\CourseSetting\Entities\Course;
use Modules\Quiz\Entities\OnlineExamQuestionAssign;
use Modules\Quiz\Entities\OnlineQuiz;
use Modules\Quiz\Entities\QuizeSetup;
use Modules\Quiz\Entities\QuizMarking;
use Modules\Quiz\Entities\QuestionBank;
use Modules\Quiz\Entities\QuestionGroup;
use Modules\CourseSetting\Entities\Lesson;
use Modules\Quiz\Entities\QuizTestDetails;
use Modules\CourseSetting\Entities\Chapter;
use Modules\Quiz\Entities\StudentTakeOnlineQuiz;
use Yajra\DataTables\Facades\DataTables;
class OnlineQuizController extends Controller
{
public function index()
{
try {
$user = Auth::user();
$query = OnlineQuiz::with('subCategory', 'category')->latest();
if ($user->role_id == 2) {
$quiz_ids = [];
if (isModuleActive('OrgInstructorPolicy')) {
$ids = $user->policy->course_assigns->pluck('course_id')->toArray();
$course_quiz_ids = Course::select('quiz_id')->whereNotNull('quiz_id')->whereIn('id', $ids)->get()->pluck('quiz_id')->toArray();
$lesson_quiz_ids = Lesson::select('quiz_id')->whereNotNull('quiz_id')->whereIn('id', $ids)->get()->pluck('quiz_id')->toArray();
$quiz_ids = array_merge($course_quiz_ids, $lesson_quiz_ids);
}
$query->where('created_by', $user->id)->orWhereIn('id', $quiz_ids);
}
$online_exams = $query->get();
$categories = Category::orderBy('position_order', 'asc')->get();
$groups = QuestionGroup::select('title', 'id')->where('active_status', 1)->pluck('title', 'id');
$present_date_time = date("Y-m-d H:i:s");
$present_time = date("H:i:s");
$quiz_setup = QuizeSetup::getData();
return view('quiz::online_quiz', compact('quiz_setup', 'online_exams', 'categories', 'present_date_time', 'present_time', 'groups'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function CourseQuizStore(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
if ($request->type == 2) {
$rules = [
'title' => 'required',
'category' => 'required',
'percentage' => 'required',
'instruction' => 'required'
];
$this->validate($request, $rules, validationMessage($rules));
// return OnlineQuiz::get();
try {
DB::beginTransaction();
$sub = $request->sub_category;
if (empty($sub)) {
$sub = null;
}
$online_exam = new OnlineQuiz();
foreach ($request->title as $key => $title) {
$online_exam->setTranslation('title', $key, $title);
}
foreach ($request->instruction as $key => $instruction) {
$online_exam->setTranslation('instruction', $key, $instruction);
}
$online_exam->category_id = $request->category;
$online_exam->sub_category_id = $sub;
$online_exam->course_id = $request->course_id;
$online_exam->percentage = $request->percentage;
$online_exam->status = 1;
$online_exam->created_by = Auth::user()->id;
$setup = QuizeSetup::getData();
$online_exam->random_question = $setup->random_question == 1 ? 1 : 0;
$online_exam->question_time_type = $setup->set_per_question_time == 1 ? 0 : 1;
$online_exam->question_time = $setup->set_per_question_time == 1 ? $setup->time_per_question : $setup->time_total_question;
$online_exam->question_review = $setup->question_review == 1 ? 1 : 0;
$online_exam->show_result_each_submit = $setup->show_result_each_submit == 1 ? 1 : 0;
$online_exam->multiple_attend = $setup->multiple_attend == 1 ? 1 : 0;
$online_exam->show_ans_with_explanation = $setup->show_ans_with_explanation == 1 ? 1 : 0;
$online_exam->save();
$user = Auth::user();
if ($user->role_id == 2) {
$course = Course::where('id', $request->course_id)->where('user_id', Auth::id())->first();
} else {
$course = Course::where('id', $request->course_id)->first();
}
$chapter = Chapter::find($request->chapterId);
if (isset($course) && isset($chapter)) {
$lesson = new Lesson();
$lesson->course_id = $request->course_id;
$lesson->chapter_id = $request->chapterId;
$lesson->quiz_id = $online_exam->id;
$lesson->is_quiz = $request->is_quiz;
$lesson->is_lock = $request->lock;
$lesson->save();
$quiz = OnlineQuiz::find($online_exam->id);
$codes = [
'time' => Carbon::now()->format('d-M-Y, g:i A'),
'course' => $course->title,
'chapter' => $chapter->name,
'quiz' => $quiz->title,
];
$act = 'Course_Quiz_Added';
if (isset($course->enrollUsers) && !empty($course->enrollUsers)) {
foreach ($course->enrollUsers as $user) {
if (UserEmailNotificationSetup($act, $user)) {
SendGeneralEmail::dispatch($user, $act, $codes);
}
if (UserBrowserNotificationSetup($act, $user)) {
send_browser_notification($user, $act, $codes,
trans('common.View'),
courseDetailsUrl(@$course->id, @$course->type, @$course->slug),
);
}
if (UserMobileNotificationSetup($act, $user) && !empty($user->device_token)) {
send_mobile_notification($user, $act, $codes);
}
}
}
$courseUser = $course->user;
if (UserEmailNotificationSetup($act, $courseUser)) {
SendGeneralEmail::dispatch($courseUser, $act, $codes);
}
if (UserBrowserNotificationSetup($act, $courseUser)) {
send_browser_notification($courseUser, $act, $codes,
trans('common.View'),
courseDetailsUrl(@$course->id, @$course->type, @$course->slug),
);
}
if (UserMobileNotificationSetup($act, $courseUser) && !empty($courseUser->device_token)) {
send_mobile_notification($courseUser, $act, $codes);
}
DB::commit();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} else {
Toastr::error('Invalid Access !', 'Failed');
return redirect()->back();
}
} catch (\Exception $e) {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
} else {
$rules = [
'quiz' => 'required',
'chapterId' => 'required',
'lock' => 'required',
];
$this->validate($request, $rules, validationMessage($rules));
try {
$user = Auth::user();
if ($user->role_id == 2) {
$course = Course::where('id', $request->course_id)->where('user_id', Auth::id())->first();
} else {
$course = Course::where('id', $request->course_id)->first();
}
$chapter = Chapter::find($request->chapterId);
if (isset($course) && isset($chapter)) {
$lesson = new Lesson();
$lesson->course_id = $request->course_id;
$lesson->chapter_id = $request->chapterId;
$lesson->quiz_id = $request->quiz;
$lesson->is_quiz = $request->is_quiz;
$lesson->is_lock = $request->lock;
$lesson->save();
$quiz = OnlineQuiz::find($request->quiz);
$act = 'Course_Quiz_Added';
$codes = [
'time' => Carbon::now()->format('d-M-Y, g:i A'),
'course' => $course->title,
'chapter' => $chapter->name,
'quiz' => $quiz->title,
];
if (isset($course->enrollUsers) && !empty($course->enrollUsers)) {
foreach ($course->enrollUsers as $user) {
if (UserEmailNotificationSetup($act, $user)) {
SendGeneralEmail::dispatch($user, $act, $codes);
}
if (UserBrowserNotificationSetup($act, $user)) {
send_browser_notification($user, $act, $codes,
trans('common.View'),
courseDetailsUrl(@$course->id, @$course->type, @$course->slug),
);
}
if (UserMobileNotificationSetup($act, $user) && !empty($user->device_token)) {
send_mobile_notification($user, $act, $codes);
}
}
}
$courseUser = $course->user;
if (UserEmailNotificationSetup($act, $courseUser)) {
SendGeneralEmail::dispatch($courseUser, $act, $codes);
}
if (UserBrowserNotificationSetup($act, $courseUser)) {
send_browser_notification($courseUser, $act, $codes,
trans('common.View'),
courseDetailsUrl(@$course->id, @$course->type, @$course->slug),
);
}
if (UserMobileNotificationSetup($act, $courseUser) && !empty($courseUser->device_token)) {
send_mobile_notification($courseUser, $act, $codes);
}
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
}
Toastr::error('Invalid Access !', 'Failed');
return redirect()->back();
} catch (\Exception $e) {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
}
}
public function CourseQuizUpdate(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
$rules = [
'title' => 'required',
'category' => 'required',
'percentage' => 'required',
'instruction' => 'required'
];
$this->validate($request, $rules, validationMessage($rules));
DB::beginTransaction();
try {
$sub = $request->sub_category;
if (empty($sub)) {
$sub = null;
}
$online_exam = OnlineQuiz::find($request->quiz_id);
foreach ((array)$request->title as $key => $title) {
$online_exam->setTranslation('title', $key, $title);
}
foreach ((array)$request->instruction as $key => $instruction) {
$online_exam->setTranslation('instruction', $key, $instruction);
}
$online_exam->category_id = $request->category;
$online_exam->sub_category_id = $sub;
$online_exam->percentage = $request->percentage;
$online_exam->status = 0;
$online_exam->created_by = Auth::user()->id;
$result = $online_exam->save();
DB::commit();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->route('courseDetails', $request->course_id);
} catch (\Exception $e) {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
}
public function store(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
$code = auth()->user()->language_code;
$rules = [
'title.' . $code => 'required|max:255',
'instruction.' . $code => 'required',
'category' => 'required',
'percentage' => 'required',
];
$this->validate($request, $rules, validationMessage($rules));
try {
DB::beginTransaction();
$sub = $request->sub_category;
if (empty($sub)) {
$sub = null;
}
$group = $request->group_id;
if (empty($group)) {
$group = null;
}
$online_exam = new OnlineQuiz();
foreach ($request->title as $key => $title) {
$online_exam->setTranslation('title', $key, $title);
}
foreach ($request->instruction as $key => $instruction) {
$online_exam->setTranslation('instruction', $key, $instruction);
}
$online_exam->group_id = $group;
$online_exam->category_id = $request->category;
$online_exam->sub_category_id = $sub;
$online_exam->course_id = $request->course;
$online_exam->percentage = $request->percentage;
$online_exam->status = 1;
$online_exam->created_by = Auth::user()->id;
if ($request->change_default_settings == 0) {
$setup = QuizeSetup::getData();
$online_exam->random_question = $setup->random_question == 1 ? 1 : 0;
$online_exam->question_time_type = $setup->set_per_question_time == 1 ? 0 : 1;
$online_exam->question_time = $setup->set_per_question_time == 1 ? $setup->time_per_question : $setup->time_total_question;
$online_exam->question_review = $setup->question_review == 1 ? 1 : 0;
$online_exam->show_result_each_submit = $setup->show_result_each_submit == 1 ? 1 : 0;
$online_exam->multiple_attend = $setup->multiple_attend == 1 ? 1 : 0;
$online_exam->show_ans_with_explanation = $setup->show_ans_with_explanation == 1 ? 1 : 0;
$online_exam->losing_focus_acceptance_number = $setup->losing_focus_acceptance_number ?? 0;
$online_exam->losing_type = $setup->losing_type;
if ($setup->show_ans_sheet != 1) {
$show_ans_sheet = 0;
} else {
$show_ans_sheet = $setup->show_ans_sheet;
}
$online_exam->show_ans_sheet = $show_ans_sheet;
} else {
$online_exam->random_question = $request->random_question == 1 ? 1 : 0;
$online_exam->question_time_type = $request->type == 1 ? 1 : 0;
$online_exam->question_time = $request->question_time;
$online_exam->question_review = $request->question_review == 1 ? 1 : 0;
$online_exam->show_result_each_submit = $request->show_result_each_submit == 1 ? 1 : 0;
$online_exam->multiple_attend = $request->multiple_attend == 1 ? 1 : 0;
$online_exam->show_ans_with_explanation = $request->show_ans_with_explanation == 1 ? 1 : 0;
if ($request->losing_focus_acceptance_number_check != 1) {
$losing_focus_acceptance_number = 0;
} else {
$losing_focus_acceptance_number = $request->losing_focus_acceptance_number;
}
$online_exam->losing_focus_acceptance_number = $losing_focus_acceptance_number;
$online_exam->losing_type = $request->losing_type ?? 1;
if ($request->show_ans_sheet != 1) {
$show_ans_sheet = 0;
} else {
$show_ans_sheet = $request->show_ans_sheet;
}
$online_exam->show_ans_sheet = $show_ans_sheet;
}
$result = $online_exam->save();
if ($request->set_random_question == 1) {
$total = $request->random_question;
$query = QuestionBank::query();
if (Auth::user()->role_id == 2) {
$query->where('user_id', Auth::user()->id);
}
if (!empty($request->category)) {
$query->where('category_id', $request->category);
}
if (!empty($sub)) {
$query->where('sub_category_id', $sub);
}
if (!empty($group)) {
$query->where('q_group_id', $group);
}
$questions = $query->inRandomOrder()->limit($total)->get();
foreach ($questions as $question) {
$assign = new OnlineExamQuestionAssign();
$assign->online_exam_id = $online_exam->id;
$assign->question_bank_id = $question->id;
$assign->save();
}
}
if ($result) {
DB::commit();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} else {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function edit($id)
{
try {
$user = Auth::user();
if ($user->role_id == 2) {
$online_exams = OnlineQuiz::latest()->get();
} else {
$online_exams = OnlineQuiz::where('created_by', $user->id)->latest()->get();
}
$categories = Category::orderBy('position_order', 'asc')->get();
$online_exam = OnlineQuiz::find($id);
$groups = QuestionGroup::select('title', 'id')->where('active_status', 1)->pluck('title', 'id');
$present_date_time = date("Y-m-d H:i:s");
$present_time = date("H:i:s");
$quiz_setup = QuizeSetup::getData();
return view('quiz::online_quiz', compact('groups', 'quiz_setup', 'online_exams', 'categories', 'online_exam', 'present_date_time', 'present_time'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function update(Request $request, $id)
{
if (demoCheck()) {
return redirect()->back();
}
$code = auth()->user()->language_code;
$rules = [
'title.' . $code => 'required|max:255',
'instruction.' . $code => 'required',
'category' => 'required',
'percentage' => 'required',
];
$this->validate($request, $rules, validationMessage($rules));
DB::beginTransaction();
try {
$sub = $request->sub_category;
if (empty($sub)) {
$sub = null;
}
$group = $request->group_id;
if (empty($group)) {
$group = null;
}
$online_exam = OnlineQuiz::find($id);
foreach ($request->title as $key => $title) {
$online_exam->setTranslation('title', $key, $title);
}
foreach ($request->instruction as $key => $instruction) {
$online_exam->setTranslation('instruction', $key, $instruction);
}
$online_exam->category_id = $request->category;
$online_exam->sub_category_id = $sub;
$online_exam->group_id = $group;
$online_exam->course_id = $request->course;
$online_exam->percentage = $request->percentage;
$online_exam->random_question = $request->random_question == 1 ? 1 : 0;
$online_exam->question_time_type = $request->type == 1 ? 1 : 0;
$online_exam->question_time = $request->question_time;
$online_exam->question_review = $request->question_review == 1 ? 1 : 0;
$online_exam->show_result_each_submit = $request->show_result_each_submit == 1 ? 1 : 0;
$online_exam->multiple_attend = $request->multiple_attend == 1 ? 1 : 0;
$online_exam->show_ans_with_explanation = $request->show_ans_with_explanation == 1 ? 1 : 0;
if ($request->losing_focus_acceptance_number_check != 1) {
$losing_focus_acceptance_number = 0;
} else {
$losing_focus_acceptance_number = $request->losing_focus_acceptance_number;
}
$online_exam->losing_focus_acceptance_number = $losing_focus_acceptance_number;
$online_exam->losing_type = $request->losing_type ?? 1;
if ($request->show_ans_sheet != 1) {
$show_ans_sheet = 0;
} else {
$show_ans_sheet = $request->show_ans_sheet;
}
$online_exam->show_ans_sheet = $show_ans_sheet;
$result = $online_exam->save();
if ($result) {
DB::commit();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} else {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function delete(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
try {
$id_key = 'online_exam_id';
$tables = TableList::getTableList($id_key, $request->id);
try {
if ($tables == null) {
$delete_query = OnlineQuiz::destroy($request->id);
if ($delete_query) {
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} else {
Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
return redirect()->back();
}
} else {
$msg = 'This data already used in : ' . $tables . ' Please remove those data first';
Toastr::error($msg, 'Failed');
return redirect()->back();
}
} catch (\Illuminate\Database\QueryException $e) {
$msg = 'This data already used in : ' . $tables . ' Please remove those data first';
Toastr::error($msg, 'Failed');
return redirect()->back();
}
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function manageOnlineExamQuestion($id, Request $request)
{
try {
$user = Auth::user();
$online_exam = OnlineQuiz::findOrFail($id);
$online_exam->total_marks = $online_exam->totalMarks() ?? 0;
$online_exam->total_questions = $online_exam->totalQuestions() ?? 0;
if (!empty($online_exam->group_id)) {
$request->merge([
'group' => $online_exam->group_id
]);
}
if (empty($request->get('group'))) {
$searchGroup = '';
$query = QuestionBank::where('category_id', $online_exam->category_id);
if ($online_exam->sub_category_id != null) {
$query->where('sub_category_id', $online_exam->sub_category_id);
}
if ($user->role_id == 2) {
$query->where('user_id', $user->id);
}
$question_banks = $query->with('questionGroup', 'questionMu')->get();
} else {
$searchGroup = $request->get('group');
$query = QuestionBank::where('category_id', $online_exam->category_id);
if ($online_exam->sub_category_id != null) {
$query->where('sub_category_id', $online_exam->sub_category_id);
}
if ($user->role_id == 2) {
$query->where('user_id', $user->id);
}
$question_banks = $query->where('q_group_id', $request->get('group'))
->with('questionGroup', 'questionMu')
->get();
}
if ($user->role_id == 2) {
$groups = QuestionGroup::where('user_id', $user->id)->where('active_status', 1)->latest()->get();
} else {
$groups = QuestionGroup::where('active_status', 1)->latest()->get();
}
$assigned_questions = OnlineExamQuestionAssign::with('questionBank')->where('online_exam_id', $id)->get();
$already_assigned = [];
foreach ($assigned_questions as $assigned_question) {
$already_assigned[] = $assigned_question->question_bank_id;
}
return view('quiz::manage_quiz', compact('searchGroup', 'groups', 'online_exam', 'question_banks', 'already_assigned'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function onlineExamPublish($id)
{
try {
$publish = OnlineQuiz::find($id);
$publish->status = 1;
$publish->save();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function quizSetup()
{
$quiz_setup = QuizeSetup::getData();
return view('quiz::quiz_setup', compact('quiz_setup'));
}
public function SaveQuizSetup(Request $request)
{
if (demoCheck()) {
return redirect()->back();
}
try {
if ($request->set_per_question_time == 1) {
if (empty($request->set_time_per_question)) {
Toastr::error('Per question time required', trans('common.Failed'));
return redirect()->back();
}
} else {
if (empty($request->set_time_total_question)) {
Toastr::error('Total questions time required', trans('common.Failed'));
return redirect()->back();
}
}
$setup = QuizeSetup::firstOrCreate(['id' => 1]);
$setup->random_question = $request->random_question;
$setup->set_per_question_time = $request->set_per_question_time;
$setup->multiple_attend = $request->multiple_attend ?? 0;
$setup->show_ans_with_explanation = $request->show_ans_with_explanation ?? 0;
if ($request->set_per_question_time == 1) {
$setup->time_per_question = $request->set_time_per_question;
$setup->time_total_question = null;
} else {
$setup->time_per_question = null;
$setup->time_total_question = $request->set_time_total_question;
}
$setup->question_review = $request->question_review;
if ($request->question_review == 1) {
$setup->show_result_each_submit = null;
} else {
$setup->show_result_each_submit = $request->show_result_each_submit;
}
$setup->losing_type = $request->losing_type ?? 1;
if ($request->show_ans_sheet != 1) {
$show_ans_sheet = 0;
} else {
$show_ans_sheet = $request->show_ans_sheet;
}
$setup->show_ans_sheet = $show_ans_sheet;
if ($request->losing_focus_acceptance_number_check != 1) {
$losing_focus_acceptance_number = 0;
} else {
$losing_focus_acceptance_number = $request->losing_focus_acceptance_number;
}
$setup->losing_focus_acceptance_number = $losing_focus_acceptance_number;
$setup->save();
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function onlineExamMarksRegister($id)
{
try {
$online_exam_question = OnlineQuiz::find($id);
$students = User::where('role_id', 3)->get();
$present_students = [];
foreach ($students as $student) {
$take_exam = StudentTakeOnlineQuiz::where('student_id', $student->id)->where('online_exam_id', $online_exam_question->id)->first();
if ($take_exam != "") {
$present_students[] = $student->id;
}
}
return view('quiz::online_exam_marks_register', compact('online_exam_question', 'students', 'present_students'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function onlineExamQuestionAssign(Request $request)
{
try {
OnlineExamQuestionAssign::where('online_exam_id', $request->online_exam_id)->delete();
if (isset($request->questions)) {
foreach ($request->questions as $question) {
$assign = new OnlineExamQuestionAssign();
$assign->online_exam_id = $request->online_exam_id;
$assign->question_bank_id = $question;
$assign->save();
}
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
}
Toastr::error('No question is assigned', 'Failed');
return redirect()->back();
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function onlineExamQuestionAssignByAjax(Request $request)
{
try {
$online_exam = OnlineQuiz::findOrFail($request->online_exam_id);
if (saasPlanCheck('quiz', $online_exam->totalQuestions())) {
return response()->json([
'success' => 'You have no permission to add more quiz',
'totalQus' => $online_exam->total_marks,
'totalMarks' => $online_exam->total_questions,
], 200);
}
OnlineExamQuestionAssign::where('online_exam_id', $request->online_exam_id)->delete();
if (isset($request->questions)) {
foreach ($request->questions as $question) {
$assign = new OnlineExamQuestionAssign();
$assign->online_exam_id = $request->online_exam_id;
$assign->question_bank_id = $question;
$assign->save();
}
$totalMarks = $online_exam->total_marks = $online_exam->totalMarks() ?? 0;
$totalQus = $online_exam->total_questions = $online_exam->totalQuestions() ?? 0;
return response()->json([
'success' => 'Operation successful',
'totalQus' => $totalQus,
'totalMarks' => $totalMarks,
], 200);
}
return response()->json([
'success' => 'Operation successful',
'totalQus' => 0,
'totalMarks' => 0,
], 200);
} catch (\Exception $e) {
return response()->json(['error' => 'Something Went Wrong'], 500);
}
}
public function viewOnlineQuestionModal($id)
{
try {
$question_bank = QuestionBank::find($id);
return view('quiz::online_eaxm_question_view_modal', compact('question_bank'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function quizResult(Request $request)
{
$category = $request->get('category');
$sub_category = $request->get('sub_category');
$quiz_id = $request->get('quiz');
try {
$categories = Category::orderBy('position_order', 'asc')->get();
if ($request->category) {
$category_search = $request->category;
} else {
$category_search = '';
}
if ($request->sub_category) {
$subcategory_search = $request->sub_category;
} else {
$subcategory_search = '';
}
if ($request->course) {
$course_search = $request->course;
} else {
$course_search = '';
}
$query = QuizTest::with('details', 'user');
if (Auth::user()->role_id != 1 && isModuleActive('OrgInstructorPolicy')) {
$ids = [];
$code = [];
$user_qurey = DB::table('users')->where('role_id', 3)->where('teach_via', 1);
if (Auth::user()->policy) {
$branches = Auth::user()->policy->branches;
foreach ($branches as $branch) {
$code[] = $branch->branch->code;
}
$user_qurey->whereIn('org_chart_code', $code);
}
$ids = $user_qurey->select('id')->pluck('id');
$query->whereIn('user_id', $ids);
} elseif (Auth::user()->role_id == 2) {
$query->whereHas('course', function ($q) {
$q->where('user_id', Auth::id());
});
}
$allReports = $query->latest()->get();
$reports = [];
foreach ($allReports as $key => $report) {
$quiz = OnlineQuiz::with('category', 'subCategory')->where('id', $report->quiz_id)->first();
if ($quiz) {
if ((empty($category) || $quiz->category_id == $category) &&
(empty($sub_category) || $quiz->sub_category_id == $sub_category) &&
(empty($quiz_id) || $quiz->id == $quiz_id)
) {
$reports[$key]['date'] = showDate($report->start_at) ?? "";
$reports[$key]['status'] = $report->publish ?? "";
$reports[$key]['pass'] = $report->pass ?? "";
$reports[$key]['user_name'] = $report->user->name ?? "";
$reports[$key]['category'] = $quiz->category->name ?? "";
$reports[$key]['subCategory'] = $quiz->subCategory->name ?? "";
$reports[$key]['quiz'] = $quiz->title ?? "";
$totalCorrect = $report->details->where('status', 1)->sum('mark');
$totalMark = $quiz->totalMarks();
$reports[$key]['totalMarks'] = $totalMark;
$reports[$key]['marks'] = $totalCorrect;
}
}
}
$data = [];
if (isModuleActive('Org')) {
$data['positions'] = OrgPosition::orderBy('order', 'asc')->get();
$data['branches'] = OrgBranch::where('parent_id', 0)->orderBy('order', 'asc')->get();
}
return view('quiz::online_exam_report', $data, compact('course_search', 'subcategory_search', 'category_search', 'categories', 'reports'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function quizMarkingStore(Request $request)
{
try {
$test = QuizTest::where('id', $request->quizTestId)->with('details', 'user')->first();
if ($test->publish == 1) {
Toastr::error('Marks Already Given', trans('common.Failed'));
return redirect()->back();
}
DB::beginTransaction();
foreach ($request->question as $key => $question) {
if ($request->mark[$question] > $request->question_marks[$question]) {
Toastr::error('Given Marks Should not greater than question marks', trans('common.Failed'));
return redirect()->back();
} else {
$quizDetails = QuizTestDetails::where('quiz_test_id', $test->id)->where('qus_id', $question)->first();
if (!empty($quizDetails) && $request->mark[$question] > 0) {
$quizDetails->status = 1;
}
if (!empty($quizDetails) && $request->question_type[$question] != 'M') {
$quizDetails->mark = $request->mark[$question];
$quizDetails->save();
}
}
}
$question_given_marks = QuizTestDetails::where('quiz_test_id', $test->id)->sum('mark');
$quiz_marking = QuizMarking::where('quiz_test_id', $test->id)->where('student_id', $test->user_id)->where('quiz_id', $test->quiz_id)->first();
if ($quiz_marking) {
$quiz_marking->marked_by = Auth::user()->id ?? 1;
$quiz_marking->marking_status = 1;
$quiz_marking->marks = $question_given_marks;
$quiz_marking->save();
}
$quiz = OnlineQuiz::find($test->quiz_id);
$totalScore = totalQuizMarks($quiz->id);
$result['passMark'] = $quiz->percentage ?? 0;
$result['mark'] = $question_given_marks > 0 ? number_format($question_given_marks / $totalScore * 100, 1) : 0;
$result['status'] = $result['mark'] >= $result['passMark'] ? "Passed" : "Failed";
$result['text_color'] = $result['mark'] >= $result['passMark'] ? "success_text" : "error_text";
$test->pass = $result['mark'] >= $result['passMark'] ? "1" : "0";
$test->publish = 1;
$test->save();
DB::commit();
if (UserEmailNotificationSetup('QUIZ_RESULT_TEMPLATE', $test->user)) {
SendGeneralEmail::dispatch($test->user, 'QUIZ_RESULT_TEMPLATE', [
'quiz' => $quiz->title,
'mark' => $question_given_marks,
'total' => $totalScore,
'status' => $test->pass == 1 ? 'Passed' : 'Failed',
]);
}
if (UserBrowserNotificationSetup('QUIZ_RESULT_TEMPLATE', $test->user)) {
send_browser_notification($test->user, 'QUIZ_RESULT_TEMPLATE', [
'quiz' => $quiz->title,
'mark' => $question_given_marks,
'total' => $totalScore,
'status' => $test->pass == 1 ? 'Passed' : 'Failed',
],
'',//actionText
''//actionUrl
);
}
if (UserMobileNotificationSetup('Course_Chapter_Added', $test->user) && !empty($test->user->device_token)) {
send_mobile_notification($test->user, 'Course_Chapter_Added', [
'quiz' => $quiz->title,
'mark' => $question_given_marks,
'total' => $totalScore,
'status' => $test->pass == 1 ? 'Passed' : 'Failed',
]);
}
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect('quiz/quiz-enrolled-student/' . $test->quiz_id);
} catch (\Exception $e) {
DB::rollback();
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function enrolledStudent($id, Request $request)
{
try {
$quiz_type = '';
if ($request->type) {
$type = $request->type;
if ($type == "Course") {
$quiz_type = 1;
} elseif ($type == "Quiz") {
$quiz_type = 2;
}
} else {
$type = '';
}
$quiz = OnlineQuiz::find($id);
if (empty($quiz_type)) {
$quizTests = QuizTest::where('quiz_id', $quiz->id)->with('details', 'quiz', 'user')->get();
} else {
$quizTests = QuizTest::where('quiz_id', $quiz->id)->where('quiz_type', $quiz_type)->with('details', 'quiz', 'user')->get();
}
$student_details = [];
if (isModuleActive('OrgInstructorPolicy')) {
$user = Auth::user();
if ($user->role_id != 1) {
$ids = $user->policy->course_assigns->pluck('course_id')->toArray();
$quizTests = $quizTests->whereIn('course_id', $ids);
}
}
foreach ($quizTests as $key => $test) {
$student_details[$key]['id'] = $test->user->id;
$student_details[$key]['role_id'] = $test->user->role_id;
$student_details[$key]['date'] = showDate($test->start_at);
$student_details[$key]['name'] = $test->user->name;
if (isModuleActive('Org')) {
$student_details[$key]['branch_name'] = $test->user->branch->group;
}
$student_details[$key]['quiz_id'] = $id;
$student_details[$key]['course_id'] = $test->course_id;
$student_details[$key]['status'] = $test->publish;
$student_details[$key]['pass'] = $test->pass;
$student_details[$key]['duration'] = $test->duration;
$student_details[$key]['test_id'] = $test->id;
$student_details[$key]['quizDetails'] = $test->details;
$student_details[$key]['focus_lost'] = $test->focus_lost;
}
return view('quiz::online_exam_enrolled', compact('type', 'quiz', 'student_details'));
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function markingScript($quiz_test_id)
{
try {
$quizTest = QuizTest::where('id', $quiz_test_id)->with('details', 'user')->first();
$data = [];
$user = $quizTest->user->id;
$questions = [];
if (Auth::check() && $quizTest->user_id == $user) {
$quizSetup = QuizeSetup::getData();
$course = Course::with('quiz')
->where('courses.id', $quizTest->course_id)->first();
$quiz = OnlineQuiz::with('assign', 'assign.questionBank', 'assign.questionBank.questionMu')->findOrFail($quizTest->quiz_id);
foreach (@$quiz->assign as $key => $assign) {
$questions[$key]['qus_id'] = $assign->questionBank->id;
$questions[$key]['qus'] = $assign->questionBank->question;
$questions[$key]['type'] = $assign->questionBank->type;
$questions[$key]['image'] = $assign->questionBank->image;
$questions[$key]['question_marks'] = $assign->questionBank->marks;
$test_answer = QuizTestDetails::where('quiz_test_id', $quizTest->id)->where('qus_id', $assign->questionBank->id)->first();
if ($test_answer) {
$test_ans_mark = $test_answer->mark;
$test_ans_answer = $test_answer->answer;
} else {
$test_ans_mark = 0;
$test_ans_answer = '';
}
$questions[$key]['mark'] = $test_ans_mark;
if ($assign->questionBank->type != 'M') {
$questions[$key]['answer'] = $test_ans_answer;
} else {
foreach (@$assign->questionBank->questionMuInSerial as $key2 => $option) {
$questions[$key]['option'][$key2]['title'] = $option->title;
$questions[$key]['option'][$key2]['right'] = $option->status == 1 ? true : false;
}
$test = QuizTestDetails::where('quiz_test_id', $quizTest->id)->where('qus_id', $assign->questionBank->id)->first();
if ($test) {
$questions[$key]['isSubmit'] = true;
if ($test->status == 0) {
$questions[$key]['option'][$key2]['wrong'] = $test->status == 0 ? true : false;
$questions[$key]['isWrong'] = true;
}
}
}
}
return view('quiz::online_exam_marking', compact('questions', 'quizSetup', 'course', 'data', 'quizTest'));
} else {
Toastr::error('Permission Denied', 'Failed');
return redirect()->back();
}
} catch (\Exception $e) {
GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
}
}
public function getTotalQuizNumbers(Request $request)
{
if (Auth::check()) {
$query = QuestionBank::query();
if (Auth::user()->role_id == 2) {
$query->where('user_id', Auth::user()->id);
}
if (!empty($request->category_id)) {
$query->where('category_id', $request->category_id);
}
if (!empty($request->subcategory_id)) {
$query->where('sub_category_id', $request->subcategory_id);
}
if (!empty($request->group_id)) {
$query->where('q_group_id', $request->group_id);
}
return $query->count();
} else {
return 0;
}
}
public function query()
{
$query = QuizTest::with(['course', 'quiz', 'user']);
if (\request('student_status')) {
$query->whereHas('user', function ($q) {
return $q->where('status', \request('student_status'));
});
}
if (\request('category')) {
$category = Category::find(request('category'));
if ($category) {
$ids = $category->getAllChildIds($category, [$category->id]);
$query->whereHas('quiz', function ($q) use ($ids) {
$q->whereIn('category_id', $ids);
$q->orWhereIn('sub_category_id', $ids);
});
}
}
if (\request('type')) {
$query->where('quiz_type', \request('type'));
}
if (isModuleActive('Org')) {
if (\request('required_type')) {
$query->whereHas('course', function ($q) {
return $q->where('required_type', \request('required_type'));
});
}
if (\request('mode_of_delivery')) {
$query->whereHas('course', function ($q) {
return $q->where('mode_of_delivery', \request('mode_of_delivery'));
});
}
if (\request('org_branch')) {
$query->whereHas('user', function ($q) {
return $q->where('org_chart_code', \request('org_branch'));
});
}
if (\request('job_position')) {
$query->whereHas('user', function ($q) {
return $q->where('org_position_code', \request('job_position'));
});
}
if (isModuleActive('OrgInstructorPolicy')) {
$user = Auth::user();
if ($user->role_id != 1) {
$brancheIds = $user->policy->branches->pluck('branch_id');
$branchCodes = OrgBranch::select('code')->whereIn('id', $brancheIds)->pluck('code');
$query->whereHas('user', function ($q) use ($branchCodes) {
$q->whereIn('org_chart_code', $branchCodes);
});
}
}
}
return $query;
}
public function quizResultData()
{
$query = $this->query();
return Datatables::of($query)
->addIndexColumn()
->addColumn('student_name', function ($query) {
return $query->user->name;
})
->addColumn('employee_id', function ($query) {
return $query->user->employee_id;
})
->addColumn('org_chart_code', function ($query) {
return $query->user->org_chart_code;
})
->addColumn('org_position_code', function ($query) {
return $query->user->org_position_code;
})
->addColumn('course_name', function ($query) {
return $query->course->title;
})
->addColumn('quiz_name', function ($query) {
return $query->quiz->title;
})
->addColumn('percentage', function ($query) {
return $query->quiz->percentage . '%';
})
->editColumn('start_at', function ($query) {
return showDate($query->start_at) . ' ' . Carbon::parse($query->start_at)->format('h:i A');
})
->editColumn('end_at', function ($query) {
return showDate($query->end_at) . ' ' . Carbon::parse($query->end_at)->format('h:i A');
})
->addColumn('marks', function ($query) {
$totalCorrect = $query->details->where('status', 1)->sum('mark');
$totalMark = $query->quiz->totalMarks();
return $totalCorrect . '/' . $totalMark;
})->editColumn('duration', function ($query) {
if ($query->duration == 0) {
return 0;
} else {
return $query->duration;
}
})->addColumn('status', function ($query) {
if ($query->pass == 1) {
return trans('common.Pass');
} else {
return trans('common.Fail');
}
})
->addColumn('result', function ($query) {
$totalCorrect = $query->details->where('status', 1)->sum('mark');
$totalMark = $query->quiz->totalMarks();
if ($totalCorrect == 0) {
$result = 0;
} else {
$result = number_format(($totalCorrect / $totalMark) * 100, 1);
}
return $result . '%';
})
->make(true);
}
public function quizResultExport()
{
return Excel::download(new OnlineQuizReport(), 'quiz-report.xlsx');
}
public function quizReTest($id)
{
$test = QuizTest::find($id);
if ($test) {
$details = $test->details;
foreach ($details as $item) {
$ans = $item->answers;
foreach ($ans as $a) {
$a->delete();
}
$item->delete();
}
$test->delete();
}
Toastr::success(trans('common.Operation successful'), trans('common.Success'));
return redirect()->back();
}
}