Exemplo n.º 1
0
function watupro_import_question($data, &$cats)
{
    global $wpdb;
    if ($_POST['file_type'] == 'new') {
        $cat_id = WTPCategory::discover(@$data[3], $cats);
        // handle true/false subtype
        $truefalse = 0;
        if ($data[1] == 'true/false') {
            $truefalse = 1;
            $data[1] = 'radio';
        }
        // only new questions and answers
        $stripfrom = 6;
        $question_array = array("content" => $data[0], "answer_type" => $data[1], "sort_order" => $data[2], "cat_id" => $cat_id, "explain_answer" => $data[4], "is_required" => $data[5], "quiz" => $_GET['quiz']);
        $stripfrom = 13;
        $question_array['correct_condition'] = $data[6];
        $gapdata = explode("/", $data[7]);
        // handle both gap & sort
        $question_array['correct_gap_points'] = $question_array['correct_sort_points'] = @$gapdata[0];
        $question_array['incorrect_gap_points'] = $question_array['incorrect_sort_points'] = @$gapdata[1];
        $question_array['sorting_answers'] = $data[8];
        $question_array['max_selections'] = $data[9];
        $question_array['is_inactive'] = $data[10];
        $question_array['is_survey'] = $data[11];
        $question_array['elaborate_explanation'] = $data[12];
        $question_array['truefalse'] = $truefalse;
        $question_array['feedback_label'] = '';
        // temp as it's not yet included in export
        // sorting answers may contain ||| or |||||| for new lines separator
        $question_array['sorting_answers'] = str_replace('||||||', "\n", $question_array['sorting_answers']);
        $question_array['sorting_answers'] = str_replace('|||', "\n", $question_array['sorting_answers']);
        $qid = WTPQuestion::add($question_array);
        // extract answers
        $data = array_slice($data, $stripfrom);
        $answers = array();
        $step = 1;
        foreach ($data as $cnt => $d) {
            if ($step == 1) {
                $answer = array();
                $answer['answer'] = $d;
                $answer['is_correct'] = 0;
                $step = 2;
            } else {
                $answer['points'] = $d;
                $step = 1;
                $answers[] = $answer;
            }
        }
        // now we have the answers in the array, let's identify which ones are correct
        if ($data[1] == 'radio') {
            // for 'single answer' it's the one with most points
            $top_points = 0;
            foreach ($answers as $answer) {
                if ($answer['points'] > $top_points) {
                    $top_points = $answer['points'];
                }
            }
            // once again
            foreach ($answers as $cnt => $answer) {
                if ($answer['points'] == $top_points) {
                    $answers[$cnt]['is_correct'] = 1;
                    break;
                }
            }
        } else {
            // for other types answer with positive points is correct
            foreach ($answers as $cnt => $answer) {
                if ($answer['points'] > 0) {
                    $answers[$cnt]['is_correct'] = 1;
                }
            }
        }
        // finally insert them
        $vals = array();
        foreach ($answers as $cnt => $answer) {
            if ($answer['answer'] === '') {
                continue;
            }
            $cnt++;
            $vals[] = $wpdb->prepare("(%d, %s, %s, %s, %d)", $qid, $answer['answer'], $answer['is_correct'], $answer['points'], $cnt);
        }
        $values_sql = implode(",", $vals);
        if (sizeof($answers)) {
            $wpdb->query("INSERT INTO " . WATUPRO_ANSWERS . " (question_id,answer,correct,point, sort_order) \n\t\t\tVALUES {$values_sql}");
        }
    } else {
        // for old files import
        if ($row == 1 or empty($data[1])) {
            continue;
        }
        // skip first line
        $cat_id = WTPCategory::discover($data[4], $cats);
        $stripfrom = 14;
        $gapdata = explode("/", $data[8]);
        if (empty($data[0])) {
            $question_array = array("content" => $data[1], "answer_type" => $data[2], "sort_order" => $data[3], "cat_id" => $cat_id, "explain_answer" => $data[5], "is_required" => $data[6], "quiz" => $_GET['quiz']);
            $question_array['correct_condition'] = $data[7];
            $question_array['correct_gap_points'] = $gapdata[0];
            $question_array['incorrect_gap_points'] = $gapdata[1];
            $question_array['sorting_answers'] = $data[9];
            $question_array['max_selections'] = $data[10];
            $question_array['is_inactive'] = $data[11];
            $question_array['is_survey'] = $data[12];
            $question_array['elaborate_explanation'] = $data[13];
            $question_array['feedback_label'] = '';
            // temp as it's not yet included in export
            // sorting answers may contain ||| or |||||| for new lines separator
            $question_array['sorting_answers'] = str_replace('||||||', "\n", $question_array['sorting_answers']);
            $question_array['sorting_answers'] = str_replace('|||', "\n", $question_array['sorting_answers']);
            $qid = WTPQuestion::add($question_array);
        } else {
            $wpdb->query($wpdb->prepare("UPDATE " . WATUPRO_QUESTIONS . " SET question=%s, answer_type=%s,\n  \t\t\t\tsort_order=%d, cat_id=%d, explain_answer=%s, is_required=%d, correct_condition=%s,\n  \t\t\t\tcorrect_gap_points=%s, incorrect_gap_points=%s, sorting_answers = %s, max_selections = %d,\n  \t\t\t\tis_inactive=%d, is_survey = %d, elaborate_explanation = %s\n  \t\t\t\tWHERE ID=%d", $data[1], $data[2], $data[3], $cat_id, $data[5], $data[6], $data[7], $gapdata[0], $gapdata[1], $data[9], $data[10], $data[11], $data[12], $data[13], $data[0]));
            $qid = $data[0];
        }
        // now answers, first extract them similar to the "new file" option
        $data = array_slice($data, $stripfrom);
        $answers = array();
        $step = 1;
        foreach ($data as $cnt => $d) {
            switch ($step) {
                case 1:
                    $answer = array();
                    $answer['id'] = $d;
                    $step = 2;
                    break;
                case 2:
                    $answer['answer'] = $d;
                    $step = 3;
                    break;
                case 3:
                    $answer['points'] = $d;
                    $step = 1;
                    $answers[] = $answer;
                    break;
            }
        }
        // end foreach
        // now insert or update
        foreach ($answers as $cnt => $answer) {
            if ($answer['answer'] === '') {
                continue;
            }
            $cnt++;
            // assume 1st is correct
            if ($cnt == 1) {
                $correct = 1;
            } else {
                $correct = 0;
            }
            if ($answer['id']) {
                $wpdb->query($wpdb->prepare("UPDATE " . WATUPRO_ANSWERS . " SET answer=%s, point=%d WHERE ID=%d", $answer['answer'], $answer['points'], $answer['id']));
            } else {
                $wpdb->query($wpdb->prepare("INSERT INTO " . WATUPRO_ANSWERS . "\n  \t\t\t\t\t\t(question_id,answer,correct,point, sort_order) VALUES (%d, %s, %s, %s, %d) ", $qid, $answer['answer'], $correct, $answer['points'], $cnt));
            }
        }
        // end foreach
    }
    // end else pf $_POST['file_type']=='new'
}
Exemplo n.º 2
0
 static function import_question_advanced($data, $quiz, &$cats)
 {
     global $wpdb;
     // handle true/false subtype
     $truefalse = 0;
     if ($data[1] == 'true/false') {
         $truefalse = 1;
         $data[1] = 'radio';
     }
     $cat_id = WTPCategory::discover(@$data[3], $cats);
     $question_array = array("content" => $data[0], "answer_type" => $data[1], "quiz" => $quiz->ID, "cat_id" => $cat_id, 'explain_answer' => $data[4], 'is_required' => $data[5], 'truefalse' => $truefalse);
     $question_array['correct_condition'] = $data[6];
     $gapdata = explode("/", $data[7]);
     // handle both gap & sort
     $question_array['correct_gap_points'] = $question_array['correct_sort_points'] = @$gapdata[0];
     $question_array['incorrect_gap_points'] = $question_array['incorrect_sort_points'] = @$gapdata[1];
     $question_array['sorting_answers'] = $data[8];
     $question_array['max_selections'] = $data[9];
     $question_array['is_inactive'] = $data[10];
     $question_array['is_survey'] = $data[11];
     $question_array['elaborate_explanation'] = $data[12];
     $question_array['open_end_mode'] = $data[13];
     $question_array['tags'] = $data[14];
     $question_array['open_end_display'] = $data[15];
     $question_array['exclude_on_final_screen'] = $data[16];
     $question_array['hints'] = $data[17];
     $question_array['compact_format'] = $data[18];
     $question_array['round_points'] = $data[19];
     $question_array['importance'] = $data[20];
     $question_array['feedback_label'] = '';
     // temp as it's not yet included in export
     // sorting answers may contain ||| or |||||| for new lines separator
     $question_array['sorting_answers'] = str_replace('||||||', "\n", $question_array['sorting_answers']);
     $question_array['sorting_answers'] = str_replace('|||', "\n", $question_array['sorting_answers']);
     $qid = WTPQuestion::add($question_array);
     // add answers
     $data = array_slice($data, 21);
     $answers = array();
     $step = 1;
     foreach ($data as $cnt => $d) {
         if ($step == 1) {
             $answer = array();
             $answer['answer'] = $d;
             $step = 2;
             continue;
         }
         if ($step == 2) {
             $answer['is_correct'] = $d;
             $step = 3;
             continue;
         }
         if ($step == 3) {
             $answer['points'] = $d;
             $step = 1;
             $answers[] = $answer;
         }
     }
     // end filling answers array
     // finally insert them
     $vals = array();
     foreach ($answers as $cnt => $answer) {
         if ($answer['answer'] === '') {
             continue;
         }
         $cnt++;
         $vals[] = $wpdb->prepare("(%d, %s, %s, %s, %d)", $qid, $answer['answer'], $answer['is_correct'], $answer['points'], $cnt);
     }
     $values_sql = implode(",", $vals);
     if (sizeof($answers)) {
         $wpdb->query("INSERT INTO " . WATUPRO_ANSWERS . " (question_id,answer,correct,point, sort_order) \n\t\t\t\tVALUES {$values_sql}");
     }
 }