/**
 * Save question submitted
 * @return void
 */
function dwqa_submit_question()
{
    global $post_submit_filter, $dwqa_options;
    if (isset($_POST['dwqa-action']) && 'dwqa-submit-question' == $_POST['dwqa-action']) {
        global $dwqa_current_error;
        $valid_captcha = dwqa_valid_captcha('question');
        $dwqa_submit_question_errors = new WP_Error();
        if (isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'dwqa-submit-question-nonce-#!')) {
            if ($valid_captcha) {
                if (empty($_POST['question-title'])) {
                    $dwqa_submit_question_errors->add('submit_question', 'You must enter a valid question title');
                    return false;
                }
                $title = esc_html($_POST['question-title']);
                $category = isset($_POST['question-category']) ? (int) $_POST['question-category'] : 0;
                if (!term_exists($category, 'dwqa-question_category')) {
                    $category = 0;
                }
                $tags = isset($_POST['question-tag']) ? esc_html($_POST['question-tag']) : '';
                $content = isset($_POST['question-content']) ? $_POST['question-content'] : '';
                $content = wp_kses(dwqa_pre_content_filter($content), $post_submit_filter);
                $user_id = 0;
                $is_anonymous = false;
                if (is_user_logged_in()) {
                    $user_id = get_current_user_id();
                } else {
                    //$post_author_email = $_POST['user-email'];
                    if (isset($_POST['login-type']) && $_POST['login-type'] == 'sign-in') {
                        $user = wp_signon(array('user_login' => $_POST['user-name'], 'user_password' => $_POST['user-password']), false);
                        if (!is_wp_error($user)) {
                            global $current_user;
                            $current_user = $user;
                            get_currentuserinfo();
                            $user_id = $user->data->ID;
                        } else {
                            $dwqa_current_error = $user;
                            return false;
                        }
                    } else {
                        //Create new user
                        $users_can_register = get_option('users_can_register');
                        if (isset($_POST['user-email']) && isset($_POST['user-name-signup']) && $users_can_register && !email_exists($_POST['user-email']) && !username_exists($_POST['user-name-signup'])) {
                            if (isset($_POST['password-signup'])) {
                                $password = $_POST['password-signup'];
                            } else {
                                $password = wp_generate_password(12, false);
                            }
                            $user_id = wp_create_user($_POST['user-name-signup'], $password, $_POST['user-email']);
                            if (is_wp_error($user_id)) {
                                $dwqa_current_error = $user_id;
                                return false;
                            }
                            wp_new_user_notification($user_id, $password);
                            $user = wp_signon(array('user_login' => $_POST['user-name-signup'], 'user_password' => $password), false);
                            if (!is_wp_error($user)) {
                                global $current_user;
                                $current_user = $user;
                                get_currentuserinfo();
                                $user_id = $user->data->ID;
                            } else {
                                $dwqa_current_error = $user;
                                return false;
                            }
                        } else {
                            $message = '';
                            if (!$users_can_register) {
                                $message .= __('User Registration was disabled.', 'dwqa') . '<br>';
                            }
                            if (email_exists($_POST['user-email'])) {
                                $message .= __('This email is already registered, please choose another one.', 'dwqa') . '<br>';
                            }
                            if (username_exists($_POST['user-name'])) {
                                $message .= __('This username is already registered. Please choose another one.', 'dwqa') . '<br>';
                            }
                            $dwqa_current_error = new WP_Error('submit_question', $message);
                            return false;
                        }
                    }
                }
                $post_status = isset($_POST['private-message']) && $_POST['private-message'] ? 'private' : 'publish';
                $postarr = array('comment_status' => 'open', 'post_author' => $user_id, 'post_content' => $content, 'post_status' => $post_status, 'post_title' => $title, 'post_type' => 'dwqa-question', 'tax_input' => array('dwqa-question_category' => array($category), 'dwqa-question_tag' => explode(',', $tags)));
                if (dwqa_current_user_can('post_question')) {
                    $new_question = dwqa_insert_question($postarr);
                } else {
                    $new_question = new WP_Error('permission', __("You do not have permission to submit question.", 'dwqa'));
                }
                if (!is_wp_error($new_question)) {
                    exit(wp_safe_redirect(get_permalink($new_question)));
                } else {
                    $dwqa_current_error = $new_question;
                }
            } else {
                $dwqa_submit_question_errors->add('submit_question', __('Captcha is not correct', 'dwqa'));
            }
        } else {
            $dwqa_submit_question_errors->add('submit_question', __('Are you cheating huh?', 'dwqa'));
        }
        $dwqa_current_error = $dwqa_submit_question_errors;
    }
}
 public function submit_question()
 {
     global $dwqa_options;
     if (isset($_POST['dwqa-question-submit'])) {
         global $dwqa_current_error;
         $valid_captcha = dwqa_valid_captcha('question');
         $dwqa_submit_question_errors = new WP_Error();
         if (isset($_POST['_wpnonce']) && wp_verify_nonce(esc_html($_POST['_wpnonce']), '_dwqa_submit_question')) {
             if ($valid_captcha) {
                 if (empty($_POST['question-title'])) {
                     // $dwqa_submit_question_errors->add( 'submit_question', 'You must enter a valid question title' );
                     dwqa_add_notice(__('You must enter a valid question title.', 'error'));
                     return false;
                 }
                 $title = esc_html($_POST['question-title']);
                 $category = isset($_POST['question-category']) ? intval($_POST['question-category']) : 0;
                 if (!term_exists($category, 'dwqa-question_category')) {
                     $category = 0;
                 }
                 $tags = isset($_POST['question-tag']) ? esc_html($_POST['question-tag']) : '';
                 $content = isset($_POST['question-content']) ? $_POST['question-content'] : '';
                 $content = apply_filters('dwqa_prepare_question_content', $content);
                 $user_id = 0;
                 $is_anonymous = false;
                 if (is_user_logged_in()) {
                     $user_id = get_current_user_id();
                 } else {
                     //$post_author_email = $_POST['user-email'];
                     if (isset($_POST['login-type']) && $_POST['login-type'] == 'sign-in') {
                         $user = wp_signon(array('user_login' => isset($_POST['user-name']) ? esc_html($_POST['user-name']) : '', 'user_password' => isset($_POST['user-password']) ? esc_html($_POST['user-password']) : ''), false);
                         if (!is_wp_error($user)) {
                             global $current_user;
                             $current_user = $user;
                             get_currentuserinfo();
                             $user_id = $user->data->ID;
                         } else {
                             $dwqa_current_error = $user;
                             return false;
                         }
                     } elseif (isset($_POST['login-type']) && $_POST['login-type'] == 'sign-up') {
                         //Create new user
                         $users_can_register = get_option('users_can_register');
                         if (isset($_POST['user-email']) && isset($_POST['user-name-signup']) && $users_can_register && !email_exists($_POST['user-email']) && !username_exists($_POST['user-name-signup'])) {
                             if (isset($_POST['password-signup'])) {
                                 $password = esc_html($_POST['password-signup']);
                             } else {
                                 $password = wp_generate_password(12, false);
                             }
                             $user_id = wp_create_user(esc_html($_POST['user-name-signup']), $password, sanitize_email($_POST['user-email']));
                             if (is_wp_error($user_id)) {
                                 $dwqa_current_error = $user_id;
                                 return false;
                             }
                             wp_new_user_notification($user_id, $password);
                             $user = wp_signon(array('user_login' => esc_html($_POST['user-name-signup']), 'user_password' => $password), false);
                             if (!is_wp_error($user)) {
                                 global $current_user;
                                 $current_user = $user;
                                 get_currentuserinfo();
                                 $user_id = $user->data->ID;
                             } else {
                                 $dwqa_current_error = $user;
                                 return false;
                             }
                         } else {
                             $message = '';
                             if (!$users_can_register) {
                                 $message .= __('User Registration was disabled.', 'dwqa') . '<br>';
                             }
                             if (isset($_POST['user-name']) && email_exists(sanitize_email($_POST['user-email']))) {
                                 $message .= __('This email is already registered, please choose another one.', 'dwqa') . '<br>';
                             }
                             if (isset($_POST['user-name']) && username_exists(esc_html($_POST['user-name']))) {
                                 $message .= __('This username is already registered. Please use another one.', 'dwqa') . '<br>';
                             }
                             // $dwqa_current_error = new WP_Error( 'submit_question', $message );
                             dwqa_add_notice($message, 'error');
                             return false;
                         }
                     } else {
                         $is_anonymous = true;
                         $question_author_email = isset($_POST['_dwqa_anonymous_email']) && is_email($_POST['_dwqa_anonymous_email']) ? sanitize_email($_POST['_dwqa_anonymous_email']) : false;
                         $user_id = 0;
                     }
                 }
                 $post_status = isset($_POST['question-status']) && esc_html($_POST['question-status']) ? $_POST['question-status'] : 'publish';
                 //Enable review mode
                 global $dwqa_general_settings;
                 if (isset($dwqa_general_settings['enable-review-question']) && $dwqa_general_settings['enable-review-question'] && $post_status != 'private' && !current_user_can('manage_options')) {
                     $post_status = 'pending';
                 }
                 $postarr = array('comment_status' => 'open', 'post_author' => $user_id, 'post_content' => $content, 'post_status' => $post_status, 'post_title' => $title, 'post_type' => 'dwqa-question', 'tax_input' => array('dwqa-question_category' => array($category), 'dwqa-question_tag' => explode(',', $tags)));
                 if (apply_filters('dwqa-current-user-can-add-question', dwqa_current_user_can('post_question'), $postarr)) {
                     $new_question = $this->insert_question($postarr);
                 } else {
                     //$dwqa_submit_question_errors->add( 'submit_question',  __( 'You do not have permission to submit question.', 'dwqa' ) );
                     dwqa_add_notice(__('You do not have permission to submit question.', 'dwqa'), 'error');
                     $new_question = $dwqa_submit_question_errors;
                 }
                 if (dwqa_count_notices('error') == 0) {
                     if ($is_anonymous) {
                         update_post_meta($new_question, '_dwqa_anonymous_email', $question_author_email);
                         update_post_meta($new_question, '_dwqa_is_anonymous', true);
                     }
                     if (isset($dwqa_options['enable-review-question']) && $dwqa_options['enable-review-question'] && !current_user_can('manage_options') && $post_status != 'private') {
                         dwqa_add_notice(__('Your question is waiting moderator.', 'dwqa'), 'success');
                     } else {
                         exit(wp_safe_redirect(get_permalink($new_question)));
                     }
                 }
             } else {
                 // $dwqa_submit_question_errors->add( 'submit_question', __( 'Captcha is not correct','dwqa' ) );
                 dwqa_add_notice(__('Captcha is not correct', 'dwqa'), 'error');
             }
         } else {
             // $dwqa_submit_question_errors->add( 'submit_question', __( 'Are you cheating huh?','dwqa' ) );
             dwqa_add_notice(__('Are you cheating huh?', 'dwqa'), 'error');
         }
         //$dwqa_current_error = $dwqa_submit_question_errors;
     }
 }
Beispiel #3
0
 public function insert()
 {
     global $dwqa_options;
     if (!isset($_POST['dwqa-action']) || !isset($_POST['submit-answer'])) {
         return false;
     }
     $dwqa_add_answer_errors = new WP_Error();
     if (!isset($_POST['_wpnonce']) || !wp_verify_nonce(esc_html($_POST['_wpnonce']), '_dwqa_add_new_answer')) {
         $dwqa_add_answer_errors->add('answer_question', '"Helllo", Are you cheating huh?.');
     }
     if ($_POST['submit-answer'] == __('Delete draft', 'dwqa')) {
         $draft = isset($_POST['answer-id']) ? intval($_POST['answer-id']) : 0;
         if ($draft) {
             wp_delete_post($draft);
         }
         return false;
     }
     if (empty($_POST['answer-content']) || empty($_POST['question'])) {
         if (empty($_POST['answer-content'])) {
             $dwqa_add_answer_errors->add('answer_question', 'answer content is empty');
         }
         if (empty($_POST['question'])) {
             $dwqa_add_answer_errors->add('answer_question', 'question is empty');
         }
     } else {
         $user_id = 0;
         $is_anonymous = false;
         if (is_user_logged_in()) {
             $user_id = get_current_user_id();
         } else {
             $is_anonymous = true;
             if (isset($_POST['user-email']) && is_email($_POST['user-email'])) {
                 $post_author_email = sanitize_email($_POST['user-email']);
             }
         }
         $question_id = intval($_POST['question']);
         $question = get_post($question_id);
         $answer_title = __('Answer for ', 'dwqa') . $question->post_title;
         $answ_content = apply_filters('dwqa_prepare_answer_content', $_POST['answer-content']);
         $post_status = isset($_POST['private-message']) && esc_html($_POST['private-message']) ? 'private' : 'publish';
         $answers = array('comment_status' => 'open', 'post_author' => $user_id, 'post_content' => $answ_content, 'post_status' => $post_status, 'post_title' => $answer_title, 'post_type' => $this->get_slug());
         if ($_POST['submit-answer'] == __('Save draft', 'dwqa')) {
             $answers['post_status'] = 'draft';
         } else {
             if (isset($_POST['privacy']) && 'private' == $_POST['privacy']) {
                 $answers['post_status'] = 'private';
             }
         }
         switch ($_POST['dwqa-action']) {
             case 'add-answer':
                 $valid_captcha = dwqa_valid_captcha('single-question');
                 if ($valid_captcha) {
                     if (dwqa_current_user_can('post_answer')) {
                         $answer_id = wp_insert_post($answers, true);
                     } else {
                         $answer_id = new WP_Error('permission', __('You do not have permission to submit question.', 'dwqa'));
                     }
                     if (!is_wp_error($answer_id)) {
                         //Send email alert for author of question about this answer
                         $question_author = $question->post_author;
                         if (user_can($answers['post_author'], 'edit_posts') && $answers['post_status'] != 'draft') {
                             update_post_meta($question_id, '_dwqa_status', 'answered');
                             update_post_meta($question_id, '_dwqa_answered_time', time());
                         }
                         update_post_meta($answer_id, '_question', $question_id);
                         if ($is_anonymous) {
                             update_post_meta($answer_id, '_dwqa_is_anonymous', true);
                             if (isset($post_author_email) && is_email($post_author_email)) {
                                 update_post_meta($answer_id, '_dwqa_anonymous_email', $post_author_email);
                             }
                         }
                         do_action('dwqa_add_answer', $answer_id, $question_id);
                         // wp_redirect( get_permalink( $question_id ) );
                         // wp_send_json_success( array( 'url' => get_permalink( $question_id ) ) );
                         // return true;
                     } else {
                         $dwqa_add_answer_errors = $answer_id;
                     }
                 } else {
                     $dwqa_add_answer_errors->add('in_valid_captcha', __('Captcha is not correct', 'dwqa'));
                 }
                 break;
             case 'update-answer':
                 if (!isset($_POST['answer-id'])) {
                     $dwqa_add_answer_errors->add('missing-content', __('Answer is missing', 'dwqa'));
                     break;
                 }
                 $answer_id = intval($_POST['answer-id']);
                 $answer_author = get_post_field('post_author', $answer_id);
                 global $current_user;
                 if (!(dwqa_current_user_can('edit_answer') || is_user_logged_in() && $answer_author == $current_user->ID)) {
                     $dwqa_add_answer_errors->add('permission-denided', __('You do not have permission to edit this post', 'dwqa'));
                     break;
                 }
                 if (get_post_type($answer_id) != 'dwqa-answer') {
                     $dwqa_add_answer_errors->add('posttype-error', __('This post is not an answer', 'dwqa'));
                     break;
                 }
                 $answer_update = array('ID' => $answer_id, 'post_content' => $answ_content);
                 $post_status = get_post_status($answer_id);
                 if ($post_status == 'draft' && strtolower($_POST['submit-answer']) == 'publish' || $post_status != 'draft' && strtolower($_POST['submit-answer']) == 'update') {
                     $answer_update['post_status'] = isset($_POST['privacy']) && 'private' == esc_html($_POST['privacy']) ? 'private' : 'publish';
                     update_post_meta($question_id, '_dwqa_status', 're-open');
                 }
                 $old_post = get_post($answer_id);
                 $answer_id = wp_update_post($answer_update);
                 $new_post = get_post($answer_id);
                 do_action('dwqa_update_answer', $answer_id, $old_post, $new_post);
                 if ($answer_id) {
                     wp_safe_redirect(get_permalink($question_id));
                     exit(0);
                 }
                 break;
         }
     }
     $url = get_permalink($question_id);
     $error_messages = $dwqa_add_answer_errors->get_error_messages();
     foreach ($error_messages as $value) {
         $url = esc_url_raw(add_query_arg('errors', urlencode($value), $url));
     }
     wp_safe_redirect($url);
     exit(0);
 }