public function addQuestion($data) { $quizzes = Edr_Manager::get('edr_quizzes'); $question = edr_get_question(); $question->lesson_id = $data['lesson_id']; $question->question = $data['question']; $question->question_type = $data['question_type']; $question->menu_order = $data['menu_order']; $question->save(); if ('multiplechoice' == $question->question_type) { $choices = array(array('question_id' => $question->ID, 'choice_text' => 'Choice #1', 'correct' => 1, 'menu_order' => 0), array('question_id' => $question->ID, 'choice_text' => 'Choice #2', 'correct' => 0, 'menu_order' => 1), array('question_id' => $question->ID, 'choice_text' => 'Choice #3', 'correct' => 0, 'menu_order' => 2)); foreach ($choices as $choice) { $quizzes->add_choice($choice); } } return $question->ID; }
/** * AJAX: process quiz question admin requests. */ public static function quiz_question() { switch ($_SERVER['REQUEST_METHOD']) { case 'POST': $response = array('status' => '', 'errors' => array(), 'id' => 0); $input = json_decode(file_get_contents('php://input')); // Input given? if (!$input || !isset($input->lesson_id) || !is_numeric($input->lesson_id)) { status_header(400); exit; } // Verify nonce. if (!isset($input->_wpnonce) || !wp_verify_nonce($input->_wpnonce, 'edr_quiz_' . $input->lesson_id)) { status_header(403); exit; } $post_type = get_post_type($input->lesson_id); // Verify capabilities. if (!current_user_can('edit_' . $post_type, $input->lesson_id)) { exit; } // Process input. $question = edr_get_question(); $question->lesson_id = $input->lesson_id; if (isset($input->question) && !empty($input->question)) { $question->question = apply_filters('edr_add_question_pre_question', $input->question); } else { $response['errors'][] = 'question'; } if (isset($input->question_type) && !empty($input->question_type)) { $question->question_type = $input->question_type; } else { $response['errors'][] = 'question_type'; } if (isset($input->question_content)) { $question->question_content = apply_filters('edr_add_question_pre_content', $input->question_content); } else { $response['errors'][] = 'question_content'; } if (isset($input->menu_order) && is_numeric($input->menu_order)) { $question->menu_order = $input->menu_order; } else { $response['errors'][] = 'order'; } if (!count($response['errors'])) { $question->save(); if ($question->ID && isset($input->choices) && is_array($input->choices)) { $response['choices'] = self::save_question_choices($question->ID, $input->choices); } if (!get_post_meta($question->lesson_id, self::$has_quiz_meta_key, true)) { // Set default settings for the quiz. update_post_meta($question->lesson_id, self::$has_quiz_meta_key, 1); update_post_meta($question->lesson_id, self::$attempts_meta_key, 1); } $response['status'] = 'success'; $response['id'] = $question->ID; } else { $response['status'] = 'error'; status_header(400); } echo json_encode($response); break; case 'PUT': $response = array('status' => '', 'errors' => array()); $question_id = isset($_GET['id']) ? absint($_GET['id']) : 0; $input = json_decode(file_get_contents('php://input')); // Input given? if (!$question_id || !$input) { status_header(400); exit; } $question = edr_get_question($question_id); // Question found? if (!$question->ID) { status_header(400); exit; } // Verify nonce. if (!isset($input->_wpnonce) || !wp_verify_nonce($input->_wpnonce, 'edr_quiz_' . $question->lesson_id)) { status_header(403); exit; } $post_type = get_post_type($question->lesson_id); // Verify capabilities. if (!current_user_can('edit_' . $post_type, $question->lesson_id)) { exit; } if (isset($input->question) && !empty($input->question)) { $question->question = apply_filters('edr_edit_question_pre_question', $input->question); } else { $response['errors'][] = 'question'; } if (isset($input->question_content)) { $question->question_content = apply_filters('edr_edit_question_pre_content', $input->question_content); } else { $response['errors'][] = 'question_content'; } if (!count($response['errors'])) { $question->save(); if (isset($input->choices) && is_array($input->choices)) { $response['choices'] = self::save_question_choices($question->ID, $input->choices); } $response['status'] = 'success'; } else { $response['status'] = 'error'; status_header(400); } echo json_encode($response); break; case 'DELETE': $response = array('status' => ''); $question_id = isset($_GET['id']) ? absint($_GET['id']) : 0; // Input given? if (!$question_id) { status_header(400); exit; } $question = edr_get_question($question_id); // Question found? if (!$question->ID) { status_header(400); exit; } // Verify nonce. $input = json_decode(file_get_contents('php://input')); if (!isset($input->_wpnonce) || !wp_verify_nonce($input->_wpnonce, 'edr_quiz_' . $question->lesson_id)) { status_header(403); exit; } $post_type = get_post_type($question->lesson_id); // Verify capabilities. if (!current_user_can('edit_' . $post_type, $question->lesson_id)) { exit; } if ($question->ID) { $quizzes = Edr_Manager::get('edr_quizzes'); // First, delete question choices. $choices_deleted = true; if ('multiplechoice' == $question->question_type) { $choices_deleted = $quizzes->delete_choices($question->ID); } if (false !== $choices_deleted) { $response['status'] = $question->delete() ? 'success' : 'error'; } } echo json_encode($response); break; } exit; }