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' }
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}"); } }