File: //proc/thread-self/cwd/personality-test/test_generator_questions.php
<?php
include_once '../wp-config.php';
function personalityTest($user_id, $exam_id, $test_type, $medium_id, $asign_ref_id, $class_id)
{
global $wpdb;
$PSY_SP_QUESTION = $wpdb->prefix . PSY_SP_QUESTION;
$PSY_EXAMS = $wpdb->prefix . PSY_EXAMS;
$PSY_SP_EXAM_QUESTION_LINKAGE = $wpdb->prefix . PSY_SP_EXAM_QUESTION_LINKAGE;
$PSY_TEST_GEN_TEST_TAKEN = $wpdb->prefix . PSY_TEST_GEN_TEST_TAKEN;
$PSY_TEST_GEN_TEST_TAKEN_QUESTION_ANSWER = $wpdb->prefix . PSY_TEST_GEN_TEST_TAKEN_QUESTION_ANSWER;
$examDetailsQuery = "SELECT repeat_count,subject_choice,total_no_of_questions_in_exam from $PSY_EXAMS where exam_category_id='$exam_id'";
$examData = $wpdb->get_row($examDetailsQuery);
$repeatCount = $examData->repeat_count;
/**subject choice algorithm end** */
$getSubjects = $wpdb->get_results("SELECT tec.exam_category_id from $PSY_EXAMS as tec where tec.parent_id = '$exam_id'");
/*******find parent topics of exam and question_id*** */
$getAllChildQuery = "SELECT qc.question_id,qc.question_group, sale_tmp.*, sq.question_id as med1,sq.correct_answer FROM $PSY_SP_EXAM_QUESTION_LINKAGE as qc INNER JOIN (
select
CASE WHEN tec3.parent_id is not null THEN tec3.exam_category_id
WHEN tec2.parent_id is not null THEN tec2.exam_category_id
WHEN tec1.parent_id is not null THEN tec1.exam_category_id
WHEN tec.parent_id is not null THEN tec.exam_category_id
ELSE null END AS child_catid,
CASE WHEN tec3.parent_id is not null THEN tec3.category_name
WHEN tec2.parent_id is not null THEN tec2.category_name
WHEN tec1.parent_id is not null THEN tec1.category_name
WHEN tec.parent_id is not null THEN tec.category_name
ELSE null END AS child_name,
CASE WHEN tec3.parent_id is not null THEN tec3.no_of_questions_to_display
WHEN tec2.parent_id is not null THEN tec2.no_of_questions_to_display
WHEN tec1.parent_id is not null THEN tec1.no_of_questions_to_display
WHEN tec.parent_id is not null THEN tec.no_of_questions_to_display
ELSE null END AS child_ques,
CASE WHEN tec3.parent_id is not null THEN tec3.display_order
WHEN tec2.parent_id is not null THEN tec2.display_order
WHEN tec1.parent_id is not null THEN tec1.display_order
WHEN tec.parent_id is not null THEN tec.display_order
ELSE null END AS child_disp, tec.exam_category_id as subject_id, tec.display_order as subject_order
from $PSY_EXAMS as tec
left JOIN $PSY_EXAMS as tec1 On tec1.parent_id = tec.exam_category_id
left JOIN $PSY_EXAMS as tec2 On tec2.parent_id = tec1.exam_category_id
left JOIN $PSY_EXAMS as tec3 On tec3.parent_id = tec2.exam_category_id
left JOIN $PSY_EXAMS as tec4 On tec4.parent_id = tec3.exam_category_id
where tec.parent_id = '$exam_id' order by tec.display_order, child_disp ) as sale_tmp
ON (qc.topic_id = sale_tmp.child_catid)
LEFT JOIN $PSY_SP_QUESTION as sq ON sq.question_id=qc.question_id
WHERE qc.status='1' order by qc.display_order asc";
$questionData = $wpdb->get_results($getAllChildQuery, ARRAY_A);
$arr = array();
$k = 1;
$oldCatId = $questionData[0]['child_catid'];
/*****make array according to total question in parent topics***** */
for ($i = 0; $i < count($questionData); $i++) {
if ($questionData[$i]['child_catid'] == $oldCatId) {
if ($questionData[$i]['child_ques'] >= $k) {
$arr[] = array("test_question_id" => $questionData[$i]['question_id'], "group_question" => $questionData[$i]['question_group'], "subject_id" => $questionData[$i]['subject_id'], "subject_order" => $questionData[$i]['subject_order'], "module_id" => $questionData[$i]['child_catid'], "module_order" => $questionData[$i]['child_disp'], "module_name" => $questionData[$i]['child_name'], "correct_answer" => $questionData[$i]['correct_answer'], "count" => $questionData[$i]['child_ques']);
$k++;
}
} else {
$k = 1;
$questionData[$i]['child_ques'] . '----' . $k;
if ($questionData[$i]['child_ques'] >= $k) {
$arr[] = array("test_question_id" => $questionData[$i]['question_id'], "group_question" => $questionData[$i]['question_group'], "subject_id" => $questionData[$i]['subject_id'], "subject_order" => $questionData[$i]['subject_order'], "module_id" => $questionData[$i]['child_catid'], "module_order" => $questionData[$i]['child_disp'], "module_name" => $questionData[$i]['child_name'], "correct_answer" => $questionData[$i]['correct_answer'], "count" => $questionData[$i]['child_ques']);
$k++;
}
}
$oldCatId = $questionData[$i]['child_catid'];
}
// echo $examData->total_no_of_questions_in_exam ."----".count($arr);
/******check total questions in exam and created array count if same then create test taken id and insert questions**** */
if ($examData->total_no_of_questions_in_exam == count($arr)) {
$curDate = date('Y-m-d H:i:s');
$uniqueCode = md5(uniqid(rand(), true));
$insertTestQuery = "INSERT INTO $PSY_TEST_GEN_TEST_TAKEN SET reference_id='$asign_ref_id', test_type='$test_type', whitelabel_id='0', class_id='$class_id', user_id='$user_id', exam_category_id='$exam_id', medium_id='$medium_id', total_questions='$examData->total_no_of_questions_in_exam', start_date='$curDate', status='N'";
$insertTestData = $wpdb->query($insertTestQuery);
$sp_test_taken_id = $wpdb->insert_id;
//echo "<pre> Questins " . print_r($arr, true) . "</pre>";
/*****insert questions*** */
foreach ($arr as $sq) {
$testQuesId = $sq['test_question_id'];
$subjectId = $sq['subject_id'];
$moduleId = $sq['module_id'];
$correct_answer = $sq['correct_answer'];
$insertQuesQuery = "INSERT INTO $PSY_TEST_GEN_TEST_TAKEN_QUESTION_ANSWER set test_taken_id='$sp_test_taken_id', test_question_id='$testQuesId', answer='0',correct_answer='$correct_answer', subject_id='$subjectId', module_id='$moduleId', datetime_attempted='$curDate'";
$wpdb->query($insertQuesQuery);
}
$getTestQuestionCount = $wpdb->get_var("SELECT count(test_question_id) from $PSY_TEST_GEN_TEST_TAKEN_QUESTION_ANSWER where test_taken_id='$sp_test_taken_id' ");
if ($getTestQuestionCount == $examData->total_no_of_questions_in_exam) {
return $sp_test_taken_id;
} else {
$deleteIfQuesDel = $wpdb->query("DELETE from $PSY_TEST_GEN_TEST_TAKEN_QUESTION_ANSWER where test_taken_id='$sp_test_taken_id' ");
$deleteIfTstDel = $wpdb->query("DELETE from $PSY_TEST_GEN_TEST_TAKEN where test_taken_id='$sp_test_taken_id' ");
return null;
}
} else {
echo "else question count not match with array and total question";
return null;
}
}
//echo personalityTest(1, '48305', 'PER', '1', '1');