HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-31-18-78 6.17.0-1017-aws #17~24.04.1-Ubuntu SMP Tue May 26 21:09:53 UTC 2026 aarch64
User: ubuntu (1000)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //proc/thread-self/cwd/emu-aptitude-test/test_generator_questions.php
<?php
include_once '../wp-config.php';
// ini_set('display_errors',1);
// error_reporting(E_ALL);
function aptitudeTest($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' and sq.status='4' order by sale_tmp.subject_order, sale_tmp.child_catid, qc.question_group, (CASE WHEN qc.question_group!='0' THEN qc.question_id ELSE RAND() END)";
    $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);
    // echo "<pre> Questins " . print_r($arr, true) . "</pre>";
    /******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;
        //shuffle arr
        shuffle($arr);
        /**make group of subject id questions */
        function group_by($key, $data)
        {
            $result = array();
            foreach ($data as $val) {
                if (array_key_exists($key, $val)) {
                    $result[$val[$key]][] = $val;
                } else {
                    $result[""][] = $val;
                }
            }
            return $result;
        }
        $byGroup = group_by("subject_id", $arr);
        /***sort array function */
        function array_sort($array, $on, $order = SORT_ASC)
        {
            $new_array = array();
            $sortable_array = array();
            if (count($array) > 0) {
                foreach ($array as $k => $v) {
                    if (is_array($v)) {
                        foreach ($v as $k2 => $v2) {
                            if ($k2 == $on) {
                                $sortable_array[$k] = $v2;
                            }
                        }
                    } else {
                        $sortable_array[$k] = $v;
                    }
                }
                switch ($order) {
                    case SORT_ASC:
                        asort($sortable_array);
                        break;
                    case SORT_DESC:
                        arsort($sortable_array);
                        break;
                }
                foreach ($sortable_array as $k => $v) {
                    $new_array[$k] = $array[$k];
                }
            }
            return $new_array;
        }
        $grouped = array();
        $nonGrouped = array();
        foreach ($getSubjects as $sub) {
            shuffle($byGroup[$sub->exam_category_id]);
            $array_sort = array_sort($byGroup[$sub->exam_category_id], 'group_question', SORT_ASC);
            foreach ($array_sort as $grp_sub) {
                if ($grp_sub['group_question'] != '0') {
                    $grouped[] = array("test_question_id" => $grp_sub['test_question_id'], "subject_id" => $grp_sub['subject_id'], "module_id" => $grp_sub['module_id'], "module_name" => $grp_sub['module_name'], "correct_answer" => $grp_sub['correct_answer']);
                } else {
                    $nonGrouped[] = array("test_question_id" => $grp_sub['test_question_id'], "subject_id" => $grp_sub['subject_id'], "module_id" => $grp_sub['module_id'], "module_name" => $grp_sub['module_name'], "correct_answer" => $grp_sub['correct_answer']);
                }
                //echo "<br>qData-".$grp_sub['test_question_id']."-Group ".$grp_sub['group_question']."- Subject Id -".$grp_sub['subject_id']." - Module Id -".$grp_sub['module_id']."- Module Na - ".$grp_sub['module_name'];
            }
        }
        $nogroupedGroup = group_by("subject_id", $nonGrouped);
        $groupedGroup = group_by("subject_id", $grouped);
        // echo "<pre> Grouped " . print_r($grouped, true) . "</pre>";
        // echo "<pre> Non Grouped " . print_r($nonGrouped, true) . "</pre>";
        $finalArray = array();
        foreach ($getSubjects as $sbb) {
            
            $grpLength = count($groupedGroup[$sbb->exam_category_id]);
            $nonGrpLength = count($nogroupedGroup[$sbb->exam_category_id]);
            if ($grpLength != 0 && $nonGrpLength == 0) {
                
                $finalArray[$sbb->exam_category_id] = array_sort($groupedGroup[$sbb->exam_category_id], 'test_question_id', SORT_ASC);
            } else if ($grpLength != 0) {
                
                $finalArray[$sbb->exam_category_id] = array_merge($nogroupedGroup[$sbb->exam_category_id], array_sort($groupedGroup[$sbb->exam_category_id], 'test_question_id', SORT_ASC));
            } else {
                
                $finalArray[$sbb->exam_category_id] = $nogroupedGroup[$sbb->exam_category_id];
            }
            
        }
        /*****insert questions*** */
        foreach ($getSubjects as $final) {
            foreach ($finalArray[$final->exam_category_id] as $ins) {
                $testQuesId = $ins['test_question_id'];
                $subjectId = $ins['subject_id'];
                $moduleId = $ins['module_id'];
                $correct_answer = $ins['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 aptitudeTest(40,48422,'EMU',1,1,1);