KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.41 (Ubuntu)
System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64
User : www-data ( 33)
PHP Version : 8.2.12
Disable Function : NONE
Directory :  /var/www/parassaas.edukrypt.in/app/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //var/www/parassaas.edukrypt.in/app/Http/Controllers/McqController.php
<?php

namespace App\Http\Controllers;

use File;
use Nette\Utils\Json;
use Aws\S3\PostObjectV4;
use App\Models\Mcq_option;
use App\Models\Mcq_ques_gp;
use App\Models\Mcq_question;
use Illuminate\Http\Request;

use App\Models\Upload_mcq_file;
use Aws\Exception\AwsException;
use Aws\S3\Exception\S3Exception;
use Aws\S3\S3Client as S3S3Client;
use Illuminate\Support\Facades\DB;
use Illuminate\Filesystem\Filesystem;
use Aws\CognitoIdentity\CognitoIdentityClient;

class McqController extends Controller
{
	public function mcqQuestionList()
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		// MCQ Questions ==========================
		$query = Mcq_question::select();
		// $query->leftJoin('subcategories', 'categories.id', 'subcategories.category_id')

		if (isset($_GET['query']) && !empty($_GET['query'])) {
			$query->where('mcq_questions.question', 'LIKE', '%' . $_GET['query'] . '%');
		}
		$query->where('mcq_questions.parent_id', '<=', '0');
		$data['mcq_questions'] = $query->paginate(10, ['mcq_questions.*']);
		// dd($data['mcq_questions']);
		return view('admin.mcq.mcq-question-list', $data);
	}


	// Add Question
	public function addQuestion()
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';
		return view('admin.mcq.add-mcq-question', $data);
	}

	public function saveQuestion(Request $request, $parent_id = NULL)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		// Admin ID ====================
		$admin_id = $request->session()->get('loggedIn')['id'];
		$validationArray = [];

		if ($request->gp_checkbox == "1") {
			$validationArray['gp_text'] = "required";
		}

		// Common Validation ====================
		$validationArray['tags'] = "required";
		$validationArray['code'] = "required";
		$validationArray['question'] = "required";
		$validationArray['mark'] = "required";
		$validationArray['penalty'] = "required";

		// Question Type ========================
		if ($request->type == "mcq") {
			$validationArray['choice_1'] = "required";
			$validationArray['choice_2'] = "required";
		} else if ($request->type == "single_mcq") {
			$validationArray['schoice_1'] = "required";
			$validationArray['schoice_2'] = "required";
		} else if ($request->type == "fill") {
			$validationArray['answer_type'] = "required";
			if ($request->answer_type == "fixed") {
				$validationArray['fixed'] = "required";
			} else {
				$validationArray['min'] = "required";
				$validationArray['max'] = "required";
			}
		} else {
			$validationArray['boolean'] = "required";
		}

		$request->validate($validationArray);

		switch ($request->type) {
			case 'single_mcq':
				return $this->save_single_mcq_question($request->all(), $admin_id);
				break;
			case 'mcq':
				return $this->save_mcq_question($request->all(), $admin_id);
				break;
			case 'fill':
				return $this->save_fill_question($request->all(), $admin_id);
				break;
			default:
				return $this->save_true_false_question($request->all(), $admin_id);
				break;
		}
	}

	// Single MCQ Question Creation
	public function save_single_mcq_question($arr, $admin_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"type" 						=> $arr['type'],
			"group_question" 	=> isset($arr['gp_checkbox']) ? $arr['gp_checkbox'] : '0',
			"group_text"	 		=> isset($arr['gp_checkbox']) ? $arr['gp_text'] : NULL,
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty']
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			$questionID  = $res->id;
			// Insert choices ===============
			$choiceData = [];
			for ($i = 1; $i <= 6; $i++) {
				# code...
				if (isset($arr['schoice_' . $i])) {
					$_choice = [
						'question_id' => $questionID,
						'sort_order' => $i,
						'options' => $arr['schoice_' . $i],
						'correct' => isset($arr['scorrect_' . $i]) ? '1' : '0',
						'created_at' => date('Y-m-d H:i:s')
					];
					array_push($choiceData, $_choice);
				}
			}
			Mcq_option::insert($choiceData);
			return redirect('admin/add-mcq-question')->with('success', 'MCQ Question Saved!.');
		}
		return redirect('admin/add-mcq-question')->with('error', 'Question not saved, please try again!');
	}

	// MCQ Question Creation
	public function save_mcq_question($arr, $admin_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"type" 						=> $arr['type'],
			"group_question" 	=> isset($arr['gp_checkbox']) ? $arr['gp_checkbox'] : '0',
			"group_text"	 		=> isset($arr['gp_checkbox']) ? $arr['gp_text'] : NULL,
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty']
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			$questionID  = $res->id;
			// Insert choices ===============
			$choiceData = [];
			for ($i = 1; $i <= 6; $i++) {
				# code...
				if (isset($arr['choice_' . $i])) {
					$_choice = [
						'question_id' => $questionID,
						'sort_order' => $i,
						'options' => $arr['choice_' . $i],
						'correct' => isset($arr['correct_' . $i]) ? '1' : '0',
						'created_at' => date('Y-m-d H:i:s')
					];
					array_push($choiceData, $_choice);
				}
			}
			Mcq_option::insert($choiceData);
			return redirect('admin/add-mcq-question')->with('success', 'MCQ Question Saved!.');
		}
		return redirect('admin/add-mcq-question')->with('error', 'Question not saved, please try again!');
	}

	// Fill Question Creation
	public function save_fill_question($arr, $admin_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"type" 						=> $arr['type'],
			"group_question" 	=> isset($arr['gp_checkbox']) ? $arr['gp_checkbox'] : '0',
			"group_text"	 		=> isset($arr['gp_checkbox']) ? $arr['gp_text'] : NULL,
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty'],
			"answer" 					=> empty($arr['fixed']) ? '0' : $arr['fixed'],
			"min" 						=> empty($arr['min']) ? '0' : $arr['min'],
			"max" 						=> empty($arr['max']) ? '0' : $arr['max'],
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			return redirect('admin/add-mcq-question')->with('success', 'Fill in the blank Question Saved!.');
		}
		return redirect('admin/add-mcq-question')->with('error', 'Question not saved, please try again!');
	}

	// T/F Question Creation
	public function save_true_false_question($arr, $admin_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"type" 						=> $arr['type'],
			"group_question" 	=> isset($arr['gp_checkbox']) ? $arr['gp_checkbox'] : '0',
			"group_text"	 		=> isset($arr['gp_checkbox']) ? $arr['gp_text'] : NULL,
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty']
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			$questionID  = $res->id;
			// Insert choices ===============
			$_choice = array([
				'question_id' => $questionID,
				'sort_order' => 1,
				'options' => 'True',
				'correct' => $arr['boolean'] == "true" ? '1' : '0',
				'created_at' => date('Y-m-d H:i:s')
			], [
				'question_id' => $questionID,
				'sort_order' => 2,
				'options' => 'False',
				'correct' => $arr['boolean'] == "false" ? '1' : '0',
				'created_at' => date('Y-m-d H:i:s')
			]);
			Mcq_option::insert($_choice);
			return redirect('admin/add-mcq-question')->with('success', 'True/False Question Saved!.');
		}
		return redirect('admin/add-mcq-question')->with('error', 'Question not saved, please try again!');
	}

	// Sub Questions list =========================================
	public function subMcqQuestionList($parent_id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		// MCQ Questions ==========================
		$query = Mcq_question::select();

		if (isset($_GET['query']) && !empty($_GET['query'])) {
			$query->where('mcq_questions.question', 'LIKE', '%' . $_GET['query'] . '%');
		}
		$query->where('mcq_questions.id', $parent_id);
		$data['mcq_questions'] = $query->paginate(10, ['mcq_questions.*']);
		// dd($data['mcq_questions']);
		return view('admin.mcq_sub.sub-mcq-question-list', $data);
	}

	// Add Sub Question
	public function addSubQuestion($parent_id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';
		$data['parent_id'] = $parent_id;
		return view('admin.mcq_sub.add-sub-question', $data);
	}

	// Post save sub question
	public function saveSubQuestion(Request $request, $parent_id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		// Admin ID ====================
		$admin_id = $request->session()->get('loggedIn')['id'];
		$validationArray = [];



		// Common Validation ====================
		$validationArray['tags'] = "required";
		$validationArray['code'] = "required";
		$validationArray['question'] = "required";
		$validationArray['mark'] = "required";
		$validationArray['penalty'] = "required";

		// Question Type ========================
		if ($request->type == "mcq") {
			$validationArray['choice_1'] = "required";
			$validationArray['choice_2'] = "required";
		} else if ($request->type == "single_mcq") {
			$validationArray['schoice_1'] = "required";
			$validationArray['schoice_2'] = "required";
		} else if ($request->type == "fill") {
			$validationArray['answer_type'] = "required";
			if ($request->answer_type == "fixed") {
				$validationArray['fixed'] = "required";
			} else {
				$validationArray['min'] = "required";
				$validationArray['max'] = "required";
			}
		} else {
			$validationArray['boolean'] = "required";
		}

		$request->validate($validationArray);

		switch ($request->type) {
			case 'single_mcq':
				return $this->save_sub_single_mcq_question($request->all(), $admin_id, $parent_id);
				break;
			case 'mcq':
				return $this->save_sub_mcq_question($request->all(), $admin_id, $parent_id);
				break;
			case 'fill':
				return $this->save_sub_fill_question($request->all(), $admin_id, $parent_id);
				break;
			default:
				return $this->save_sub_true_false_question($request->all(), $admin_id, $parent_id);
				break;
		}
	}


	// Sub Single MCQ Question Creation
	public function save_sub_single_mcq_question($arr, $admin_id, $parent_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"parent_id"				=> $parent_id,
			"type" 						=> $arr['type'],
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty']
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			$questionID  = $res->id;
			// Insert choices ===============
			$choiceData = [];
			for ($i = 1; $i <= 6; $i++) {
				# code...
				if (isset($arr['schoice_' . $i])) {
					$_choice = [
						'question_id' => $questionID,
						'sort_order' => $i,
						'options' => $arr['schoice_' . $i],
						'correct' => isset($arr['scorrect_' . $i]) ? '1' : '0',
						'created_at' => date('Y-m-d H:i:s')
					];
					array_push($choiceData, $_choice);
				}
			}
			Mcq_option::insert($choiceData);
			return redirect('admin/sub-mcq-questions/' . $parent_id)->with('success', 'Sub Question Saved!.');
		}
		return redirect('admin/add-sub-question/' . $parent_id)->with('error', 'Question not saved, please try again!');
	}

	// Sub MCQ Question Creation
	public function save_sub_mcq_question($arr, $admin_id, $parent_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"parent_id"				=> $parent_id,
			"type" 						=> $arr['type'],
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty']
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			$questionID  = $res->id;
			// Insert choices ===============
			$choiceData = [];
			for ($i = 1; $i <= 6; $i++) {
				# code...
				if (isset($arr['choice_' . $i])) {
					$_choice = [
						'question_id' => $questionID,
						'sort_order' => $i,
						'options' => $arr['choice_' . $i],
						'correct' => isset($arr['correct_' . $i]) ? '1' : '0',
						'created_at' => date('Y-m-d H:i:s')
					];
					array_push($choiceData, $_choice);
				}
			}
			Mcq_option::insert($choiceData);
			return redirect('admin/sub-mcq-questions/' . $parent_id)->with('success', 'Sub Question Saved!.');
		}
		return redirect('admin/add-sub-question/' . $parent_id)->with('error', 'Question not saved, please try again!');
	}

	// Sub Fill Question Creation
	public function save_sub_fill_question($arr, $admin_id, $parent_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"parent_id"				=> $parent_id,
			"type" 						=> $arr['type'],
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty'],
			"answer" 					=> empty($arr['fixed']) ? '0' : $arr['fixed'],
			"min" 						=> empty($arr['min']) ? '0' : $arr['min'],
			"max" 						=> empty($arr['max']) ? '0' : $arr['max'],
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			return redirect('admin/sub-mcq-questions/' . $parent_id)->with('success', 'Sub Question Saved!.');
		}
		return redirect('admin/add-sub-question/' . $parent_id)->with('error', 'Question not saved, please try again!');
	}

	// Sub T/F Question Creation
	public function save_sub_true_false_question($arr, $admin_id, $parent_id)
	{
		$data = array(
			"admin_id" 				=> $admin_id,
			"parent_id"				=> $parent_id,
			"type" 						=> $arr['type'],
			"question" 				=> $arr['question'],
			"solution" 				=> $arr['solution'],
			"tags" 						=> $arr['tags'],
			"code" 						=> $arr['code'],
			"mark" 				    => $arr['mark'],
			"penalty" 				=> $arr['penalty']
		);

		$res = Mcq_question::create($data);
		if (isset($res->id)) {
			$questionID  = $res->id;
			// Insert choices ===============
			$_choice = array([
				'question_id' => $questionID,
				'sort_order' => 1,
				'options' => 'True',
				'correct' => $arr['boolean'] == "true" ? '1' : '0',
				'created_at' => date('Y-m-d H:i:s')
			], [
				'question_id' => $questionID,
				'sort_order' => 2,
				'options' => 'False',
				'correct' => $arr['boolean'] == "false" ? '1' : '0',
				'created_at' => date('Y-m-d H:i:s')
			]);
			Mcq_option::insert($_choice);
			return redirect('admin/sub-mcq-questions/' . $parent_id)->with('success', 'Sub Question Saved!.');
		}
		return redirect('admin/add-sub-question/' . $parent_id)->with('error', 'Question not saved, please try again!');
	}


	// Word File Import Questions
	public function uploadQuestion(Request $request)
	{
		$admin_id = $request->session()->get('loggedIn')['id'];

		$file = new Filesystem;
		$file->cleanDirectory(public_path('uploads/quiz'));

		$name = basename(__FILE__, '.php');
		$ext = $request->doc_file->extension();
		if ($ext != 'docx') {
			return back()->with('error', 'File Should Be Docs Only!');
		}

		$imageName = time() . rand() . '.' . $ext;
		$request->doc_file->move(public_path('uploads/quiz'), $imageName);
		$thumb_url = base_path() . "/public/uploads/quiz/" . $imageName;
		$data = array(
			'filename' => $thumb_url,
		);

		$res = Upload_mcq_file::create($data);
		$insert_id =  $res->id;;
		$file_url =  Upload_mcq_file::where(['id' => $insert_id])->first();
		$path = $file_url->filename;


		$phpWord = \PhpOffice\PhpWord\IOFactory::load($path);

		$section = $phpWord->addSection();
		$_file_name = explode(".", $imageName);
		$orig_name = $_file_name[0];
		$source = base_path() . "/public/uploads/quiz/{$orig_name}.html";




		// Saving the document as HTML file...
		$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML');
		$objWriter->save($source);


		$all_data = array(
			'questions' => array()
		);
		// $path = base_url()."uploads/quiz/www.html";
		$file_name = asset('/') . "public/uploads/quiz/{$orig_name}.html";
		$pagecontents = file_get_contents($file_name);

		preg_match_all('#<table (.*?)</table>#is', $pagecontents, $_all_functions);
		$function_keys = $_all_functions[1];

		foreach ($function_keys as $key => $value) {
			preg_match_all('#<tr>(.*?)</tr>#is', $value, $match);
			$matches = $match[1];

			$questionData = array();
			$optionDatas = array();
			$correctOption = array();
			$j = 1;
			foreach ($matches as $rawQuestion) {
				preg_match_all('/{(.*?)}/', trim(strip_tags($rawQuestion)), $question);
				$key = $question[1][0];

				$questionData[$key] = trim(preg_replace('/\s\s+/', ' ', str_replace("{{$key}}", "", trim(strip_tags($rawQuestion)))));

				// Question ================
				if ($key == "question") {
					$questionData[$key] = trim(preg_replace('/\s\s+/', ' ', str_replace("{{$key}}", "", trim(strip_tags($rawQuestion, '<div><p><img><br>')))));
				}

				// Solution ================
				if ($key == "solution") {
					$questionData[$key] = trim(preg_replace('/\s\s+/', ' ', str_replace("{{$key}}", "", trim(strip_tags($rawQuestion, '<div><p><img><br>')))));
				}

				// Correct =================
				if (str_contains($key, 'correct')) {
					$correctOption = trim(preg_replace('/\s\s+/', ' ', str_replace("{{$key}}", "", trim(strip_tags($rawQuestion)))));
				}

				// Options =================
				if (str_contains($key, 'option')) {
					$valueQ = trim(preg_replace('/\s\s+/', ' ', str_replace("{{$key}}", "", trim(strip_tags($rawQuestion)))));
					if (!empty($valueQ)) {
						$optionQ = array(
							'options' => trim(preg_replace('/\s\s+/', ' ', str_replace("{{$key}}", "", trim(strip_tags($rawQuestion, '<div><p><img><br>'))))),
							'question_id' => "",
							'sort_order' => $j,
							'correct' => ""
						);
						array_push($optionDatas, $optionQ);
						$j++;
					}
				}
			}
			// dd($questionData);


			$questionMCQ = array();
			if ($questionData['type'] == "fill") {
				$questionMCQ = array(
					'admin_id' => $admin_id,
					'type' => trim(strip_tags($questionData['type'])),
					'question' => trim($questionData['question']),
					'solution' => trim($questionData['solution']),
					'answer' => trim(strip_tags($questionData['answer'])),
					'min' => trim(strip_tags($questionData['min'])),
					'max' => trim(strip_tags($questionData['max'])),
					'code' => trim(strip_tags($questionData['code'])),
					'tags' => trim(strip_tags($questionData['tags'])),
					'mark' => trim(strip_tags($questionData['mark'])),
					'penalty' => trim(strip_tags($questionData['penalty'])),
					'created_at' => date('Y-m-d H:i:s')
				);
			} else {
				$questionMCQ = array(
					'admin_id' => $admin_id,
					'type' => $questionData['type'],
					'question' => trim($questionData['question']),
					'solution' => trim($questionData['solution']),
					'code' => trim(strip_tags($questionData['code'])),
					'tags' => trim(strip_tags($questionData['tags'])),
					'mark' => trim(strip_tags($questionData['mark'])),
					'penalty' => trim(strip_tags($questionData['penalty'])),
					'created_at' => date('Y-m-d H:i:s')
				);
			}

			$checkQ = Mcq_question::where('code', $questionMCQ['code'])->first();
			if (empty($checkQ)) {
				$mcqQues = Mcq_question::firstOrCreate($questionMCQ);
				$question_id = $mcqQues->id;
				if (!empty($question_id)) {
					foreach ($optionDatas as $optionData) {
						$flag = 0;
						foreach (explode(',', $correctOption) as $cops) {
							if ($cops == $optionData['sort_order']) {
								$flag = 1;
								break;
							}
						}
						$option_data = array(
							'question_id' => $question_id,
							'options' => $optionData['options'],
							'correct' => $flag,
							'sort_order' => $optionData['sort_order'],
							'created_at' => date('Y-m-d H:i:s')

						);
						Mcq_option::create($option_data);
					}
				}
			}
		}

		return back()->with('success', ' Question Has Been Uploaded Successfully!.');
	}

	// Edit MCQ
	public function editMcqQuestion(Request $request, $id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$mcq_questions = Mcq_question::with('options')->where('id', $id)->first();
		$data['mcq_questions'] = $mcq_questions;
		$data['mcq_options'] =  $mcq_questions->options()->get();

		return view('admin.mcq.edit-mcq-question', $data);
	}

	public function updateMcqQuestion(Request $request, $id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		// Admin ID ====================
		$validationArray = [];

		if ($request->gp_checkbox == "1") {
			$validationArray['gp_text'] = "required";
		}

		// Common Validation ====================
		$validationArray['tags'] = "required";
		$validationArray['code'] = "required";
		$validationArray['question'] = "required";
		$validationArray['mark'] = "required";
		$validationArray['penalty'] = "required";

		// Question Type ========================
		if ($request->type == "fill") {
			$validationArray['answer_type'] = "required";
			if ($request->answer_type == "fixed") {
				$validationArray['fixed'] = "required";
			} else {
				$validationArray['min'] = "required";
				$validationArray['max'] = "required";
			}
		}

		$request->validate($validationArray);

		$data = array(
			"group_question" 	=> isset($request->gp_checkbox) ? $request->gp_checkbox : '0',
			"group_text"	 		=> isset($request->gp_text) ? $request->gp_text : NULL,
			"question" 				=> $request->question,
			"solution" 				=> $request->solution,
			"tags" 						=> $request->tags,
			"code" 						=> $request->code,
			"mark" 				    => $request->mark,
			"penalty" 				=> $request->penalty,
			"answer" 					=> $request->fixed,
			"min" 						=> $request->min,
			"max" 						=> $request->max,
		);

		$res = Mcq_question::where('id', $id)->update($data);
		if ($res) {
			return back()
				->with('success', ' Question Updated!.');
		} else {
			return back()
				->with('error', 'Something Went Wrong!');
		}
	}

	public function viewMcqQuestion(Request $request, $id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$mcq_questions = Mcq_question::with('options')->where('id', $id)->first();
		// dd($mcq_questions);
		$data['mcq_questions'] = $mcq_questions;
		$data['mcq_options'] =  $mcq_questions->options()->get();

		return view('admin.mcq.view-mcq-question', $data);
	}

	public function deleteMcqQuestion(Request $request, $id)
	{
		Mcq_option::where(['question_id' => $id])->delete();
		Mcq_question::where(['parent_id' => $id])->delete();
		Mcq_question::where(['id' => $id])->delete();

		return back()->with('success', 'Question deleted successfully');
	}

	// Mcq Option list
	public function mcqOptionList(Request $request, $id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$data['mcq_question'] =  Mcq_question::where(['id' => $id])->first();
		$data['mcq_options'] =  Mcq_option::where(['question_id' => $id])->orderBy('sort_order', 'ASC')->paginate(10);

		return view('admin.mcq.mcq-options-list', $data);
	}

	public function viewMcqOption(Request $request, $id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';
		$data['Mcq_option'] = Mcq_option::Where(['id' => $id])->first();
		return view('admin.mcq.view-mcq-option', $data);
	}

	public function deleteMcqOption(Request $request, $id)
	{
		Mcq_option::where(['id' => $id])->delete();
		return back()->with('success', 'Option deleted successfully');
	}


	// Add Questions Seperate =========================================================
	public function uploadQuestionImage(Request $request)
	{
		// $accessKey = env('AWS_S3_ACCESS_KEY');
		// $secretKey = env('AWS_S3_SECRET_KEY');
		// $region = env('AWS_REGION');
		// $host = env('AWS_HOST');
		// $bucket = env('AWS_BUCKET');

		// $s3 = new S3S3Client([
		//     'version' => 'latest',
		//     'region' => $region,
		//     'endpoint' => $host,
		//     'credentials' => [
		//         'key' => $accessKey,
		//         'secret' => $secretKey
		//     ]
		// ]);

		// $s3->putBucketCors([
		//     'Bucket' => $bucket, // REQUIRED
		//     'CORSConfiguration' => [ // REQUIRED
		//         'CORSRules' => [ // REQUIRED
		//             [
		//                 'AllowedMethods' => ['POST', 'GET', 'HEAD', 'DELETE', 'PUT'], // REQUIRED
		//                 'AllowedHeaders' => ['*'],
		//                 'AllowedOrigins' => ['*'], // REQUIRED
		//                 'ExposeHeaders' => ['ETag'],
		//                 'MaxAgeSeconds' => 0
		//             ],
		//         ],
		//     ]
		// ]);
		//dd($request->file('file'));
		$fileName = $request->file('file')->getClientOriginalName();
		$fileType = $request->file('file')->getMimeType();
		$filePath = $request->file('file')->getPathName();
		//dd($request->file('file'));
		// Upload a file.
		// $result = $s3->putObject(array(
		//     'Bucket'       => $bucket,
		//     'Key'          => "upload/mcq/" . $fileName,
		//     'SourceFile'    => $request->file('file')->getRealPath(),
		//     'ContentType'  => $fileType,
		//     'ACL'          => 'public-read',
		//     'StorageClass' => 'REDUCED_REDUNDANCY'
		// ));

		$data = file_get_contents($filePath);
		$base64 = 'data:' . $fileType . ';base64,' . base64_encode($data);
		//dd($request->file('file'));
		return response()->json(['location' => $base64]);
	}



	// Tags Json
	public function tagsJson(Request $request)
	{
		$tags = Mcq_question::where('tags', 'like', '%' . $request->term . '%')->groupBy('tags')->get(['id', 'tags as text']);
		return response()->json($tags);
	}






	// Options New =============================================================

	public function addNewOption(Request $request, $id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$mcq_questions = Mcq_question::Where(['id' => $id])->first();
		$data['mcq_questions'] = $mcq_questions;


		$mcq_option = Mcq_option::Where(['question_id' => $id])->orderBy('id', "desc")->first();
		$data['mcq_option'] = $mcq_option;

		return view('admin.mcq.add-new-option', $data);
	}

	public function saveNewOption(Request $request, $question_id)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$request->validate([
			'option' => 'required'
		]);

		$lastOption = Mcq_option::where('question_id', $question_id)->orderBy('sort_order', 'DESC')->first();

		$data = array(
			'question_id' => $question_id,
			'sort_order' => (empty($lastOption) ? 1 : ($lastOption->sort_order + 1)),
			'options' => $request->option,
			'correct' => '0',
			'created_at' => date('Y-m-d H:i:s')
		);

		//dd($request);
		$res = Mcq_option::insert($data);
		if ($res) {
			return back()
				->with('success', 'New option added in question successfully!.');
		} else {
			return back()
				->with('error', 'Something Went Wrong!');
		}
	}

	public function editMcqOption(Request $request, $id, $qid)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$mcq_questions = Mcq_question::Where(['id' => $qid])->first();
		$data['mcq_questions'] = $mcq_questions;
		$data['Mcq_option'] = Mcq_option::Where(['id' => $id])->first();

		return view('admin.mcq.edit-mcq-option', $data);
	}

	public function updateMcqOption(Request $request, $id, $qid)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$request->validate([
			'option' => 'required',
		]);

		$data = array(
			'options' => $request->option
		);

		$res = Mcq_option::where(['id' => $id])->update($data);
		if ($res) {
			return back()
				->with('success', ' Question option has been updated!.');
		} else {
			return back()
				->with('error', 'Something Went Wrong!');
		}
	}

	public function changeMcqOption(Request $request)
	{
		$data['mainMenu'] = 'databaseManagement';
		$data['subMenu'] = 'mcqQuestList';

		$correct = $request->correct;
		$type = $request->type;
		$option_id = $request->option_id;
		$question_id = $request->question_id;

		// Single choice MCQ
		if ($type == "single_mcq" || $type == "true_false") {
			$data = array(
				'correct' => '0'
			);
			Mcq_option::where('question_id', $question_id)->update($data);
		}

		// Update
		$_data = array(
			'correct' => $correct
		);
		$res = Mcq_option::where(['id' => $option_id, 'question_id' => $question_id])->update($_data);
		if ($res) {
			return true;
		}
		return false;
	}
}

Anon7 - 2021