/** * Create new order * * @param array * * @return LP_Order instance */ function learn_press_create_order($order_data) { $order_data_defaults = array('ID' => 0, 'post_author' => '1', 'post_parent' => '0', 'post_type' => LP()->order_post_type, 'post_status' => 'lp-' . apply_filters('learn_press_default_order_status', 'pending'), 'ping_status' => 'closed', 'post_title' => __('Order on', 'learn_press') . ' ' . current_time("l jS F Y h:i:s A")); $order_data_defaults = apply_filters('learn_press_defaults_order_data', $order_data_defaults); $order_data = wp_parse_args($order_data, $order_data_defaults); if ($order_data['status']) { if (!in_array('lp-' . $order_data['status'], array_keys(learn_press_get_order_statuses()))) { return new WP_Error('learn_press_invalid_order_status', __('Invalid order status', 'learn_press')); } $order_data['post_status'] = 'lp-' . $order_data['status']; } if (!is_null($order_data['user_note'])) { $order_data['post_excerpt'] = $order_data['user_note']; } if ($order_data['ID']) { $order_data = apply_filters('learn_press_update_order_data', $order_data); wp_update_post($order_data); $order_id = $order_data['ID']; } else { $order_data = apply_filters('learn_press_new_order_data', $order_data); $order_id = wp_insert_post($order_data); } if ($order_id) { $order = LP_Order::instance($order_id); update_post_meta($order_id, '_order_currency', learn_press_get_currency()); update_post_meta($order_id, '_prices_include_tax', 'no'); update_post_meta($order_id, '_user_ip_address', learn_press_get_ip()); update_post_meta($order_id, '_user_agent', isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''); update_post_meta($order_id, '_user_id', learn_press_get_current_user_id()); update_post_meta($order_id, '_order_subtotal', LP()->cart->subtotal); update_post_meta($order_id, '_order_total', LP()->cart->total); update_post_meta($order_id, '_order_key', apply_filters('learn_press_generate_order_key', uniqid('order'))); update_post_meta($order_id, '_payment_method', ''); update_post_meta($order_id, '_payment_method_title', ''); update_post_meta($order_id, '_order_version', '1.0'); } return LP_Order::instance($order_id, true); }
/** * Check if user has completed a quiz or not * * @author TuNN * * @param int $user_id The ID of user need to check * @param int $quiz_id The ID of quiz need to check * * @return boolean */ function learn_press_user_has_completed_quiz($user_id = null, $quiz_id = null) { _deprecated_function(__FUNCTION__, '1.0', 'Need to edit this function'); $completed = false; // if $user_id is not passed, try to get it from current user if (!$user_id) { $user_id = learn_press_get_current_user_id(); if (!$user_id) { $completed = false; } } // if $quiz_id is not passed, try to get it from current quiz $quiz_id = learn_press_get_quiz_id($quiz_id); $quiz_completed = get_user_meta($user_id, '_lpr_quiz_completed', true); $retake = get_user_meta($user_id, '_lpr_quiz_retake', true); // if user can not retake a quiz or has already completed a quiz if ((!$retake || !in_array($quiz_id, $retake)) && $quiz_completed && array_key_exists($quiz_id, $quiz_completed)) { $completed = true; } return apply_filters('learn_press_user_has_completed_quiz', $completed, $user_id, $quiz_id); }
<?php learn_press_prevent_access_directly(); if (learn_press_user_has_completed_quiz(learn_press_get_current_user_id())) { return; } do_action('learn_press_before_quiz_question_nav_buttons'); ?> <div class="quiz-question-nav-buttons"> <?php $question_id = !empty($_REQUEST['question']) ? $_REQUEST['question'] : 0; ?> <?php //if( $prev = learn_press_get_user_prev_question_url( get_the_ID(), $question_id ) ){ ?> <button type="button" data-nav="prev" class="prev-question" data-url="<?php echo $prev; ?> "><?php echo apply_filters('learn_press_quiz_question_nav_button_back_title', __('Back', 'learn_press')); ?> </button> <?php //} ?> <?php //if( $next = learn_press_get_user_next_question_url( get_the_ID(), $question_id ) ){ ?> <button type="button" data-nav="next" class="next-question" data-url="<?php echo $next; ?>
/** * Retake a quiz */ public static function retake_quiz() { $quiz_id = learn_press_get_request('quiz_id'); $user_id = learn_press_get_current_user_id(); $response = array(); if (!learn_press_user_can_retake_quiz($quiz_id, $user_id)) { $response['message'] = __('Sorry! You can not retake this quiz', 'learn_press'); $response['error'] = true; } else { //lpr_reset_quiz_answer($quiz_id); learn_press_reset_user_quiz($user_id, $quiz_id); add_user_meta($user_id, '_lpr_quiz_taken', $quiz_id); $response = array('retake' => true, 'redirect' => get_the_permalink($quiz_id)); do_action('learn_press_user_retake_quiz', $quiz_id, $user_id); } learn_press_send_json($response); }
/** * Check to see if a user can retake a quiz they have completed * Only for the quiz that allows user can retake * * @param null $quiz_id * @param null $user_id * * @return bool */ function learn_press_user_can_retake_quiz($quiz_id = null, $user_id = null) { $quiz_id = learn_press_get_quiz_id($quiz_id); if (!$user_id) { $user_id = learn_press_get_current_user_id(); } if (!$quiz_id || !$user_id) { return apply_filters('learn_press_anonymous_user_can_retake_quiz', false, $quiz_id); } if (!learn_press_user_has_completed_quiz($user_id, $quiz_id)) { //apply_filters( 'learn_press_user_can_retake_quiz', $can_retake, $quiz_id, $user_id, $taken, $available ); return false; } $available = get_post_meta($quiz_id, '_lpr_retake_quiz', true); //learn_press_settings( 'pages', 'quiz.retake_quiz' ); if (!$available) { return false; } global $wpdb; $query = $wpdb->prepare("\n SELECT count(meta_key)\n FROM {$wpdb->usermeta}\n WHERE user_id = %d\n AND meta_key = %s\n AND meta_value = %d\n ", $user_id, '_lpr_quiz_taken', $quiz_id); $taken = $wpdb->get_var($query); $can_retake = $taken < $available; // added 0.9.5 return apply_filters('learn_press_user_can_retake_quiz', $can_retake, $quiz_id, $user_id, $taken, $available); }