コード例 #1
0
ファイル: test-edr-quizzes.php プロジェクト: zaro/ibeducator
 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;
 }
コード例 #2
0
ファイル: Quiz.php プロジェクト: zaro/ibeducator
 /**
  * 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;
 }