AP_Form_Hooks()
Description #
The form hooks.
Source #
File: includes/class-form-hooks.php
class AP_Form_Hooks {
/**
* Register question form.
*
* @return array
* @since 4.1.0
* @since 4.1.5 Fixed: anonymous_name field value.
*
* @category haveTests
*/
public static function question_form() {
$editing = false;
$editing_id = ap_sanitize_unslash( 'id', 'r' );
$form = array(
'submit_label' => __( 'Submit Question', 'anspress-question-answer' ),
'fields' => array(
'post_title' => array(
'type' => 'input',
'label' => __( 'Title', 'anspress-question-answer' ),
'desc' => __( 'Question in one sentence', 'anspress-question-answer' ),
'attr' => array(
'autocomplete' => 'off',
'placeholder' => __( 'Question title', 'anspress-question-answer' ),
'data-action' => 'suggest_similar_questions',
'data-loadclass' => 'q-title',
),
'min_length' => ap_opt( 'minimum_qtitle_length' ),
'max_length' => 100,
'validate' => 'required,min_string_length,max_string_length,badwords',
'order' => 2,
),
'post_content' => array(
'type' => 'editor',
'label' => __( 'Description', 'anspress-question-answer' ),
'min_length' => ap_opt( 'minimum_question_length' ),
'validate' => 'required,min_string_length,badwords',
'editor_args' => array(
'quicktags' => ap_opt( 'question_text_editor' ) ? true : false,
),
),
),
);
// Add private field checkbox if enabled.
if ( ap_opt( 'allow_private_posts' ) ) {
$form['fields']['is_private'] = array(
'type' => 'checkbox',
'label' => __( 'Is private?', 'anspress-question-answer' ),
'desc' => __( 'Only visible to admin and moderator.', 'anspress-question-answer' ),
);
}
// Add name fields if anonymous is allowed.
if ( ! is_user_logged_in() && ap_allow_anonymous() ) {
$form['fields']['anonymous_name'] = array(
'label' => __( 'Your Name', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter your name to display', 'anspress-question-answer' ),
),
'order' => 20,
'validate' => 'max_string_length,badwords',
'max_length' => 64,
);
if ( empty( $editing_id ) && ap_opt( 'create_account' ) ) {
$form['fields']['email'] = array(
'label' => __( 'Your Email', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter your email', 'anspress-question-answer' ),
),
'desc' => 'An account for you will be created and a confirmation link will be sent to you with the password.',
'order' => 20,
'validate' => 'is_email,required',
'sanitize' => 'email,required',
'max_length' => 64,
);
}
}
$form['fields']['post_id'] = array(
'type' => 'input',
'subtype' => 'hidden',
'value' => $editing_id,
'sanitize' => 'absint',
);
// Set post parent field and nonce.
$post_parent = ap_isset_post_value( 'post_parent', false );
if ( $post_parent && wp_verify_nonce( ap_isset_post_value( '__nonce_pp' ), 'post_parent_' . $post_parent ) ) {
$form['hidden_fields'] = array(
array(
'name' => 'post_parent',
'value' => $post_parent,
),
array(
'name' => '__nonce_pp',
'value' => wp_create_nonce( 'post_parent_' . $post_parent ),
),
);
}
// Add value when editing post.
if ( ! empty( $editing_id ) ) {
$question = ap_get_post( $editing_id );
$form['editing'] = true;
$form['editing_id'] = $editing_id;
$form['submit_label'] = __( 'Update Question', 'anspress-question-answer' );
$form['fields']['post_title']['value'] = $question->post_title;
$form['fields']['post_content']['value'] = $question->post_content;
$form['fields']['is_private']['value'] = 'private_post' === $question->post_status ? true : false;
if ( isset( $form['fields']['anonymous_name'] ) ) {
$fields = ap_get_post_field( 'fields', $question );
$form['fields']['anonymous_name']['value'] = ! empty( $fields['anonymous_name'] ) ? $fields['anonymous_name'] : '';
}
}
/**
* Filter for modifying question form `$args`.
*
* @param array $fields Ask form fields.
* @param bool $editing Currently editing form.
* @since 4.1.0
*/
$form = apply_filters( 'ap_question_form_fields', $form, $editing );
return $form;
}
/**
* Register answer form.
*
* @return array
* @since 4.1.0
* @since 4.1.6 Fixed: editing answer creates new answer.
*/
public static function answer_form() {
$editing = false;
$editing_id = ap_sanitize_unslash( 'id', 'r' );
$question_id = ap_sanitize_unslash( 'question_id', 'r', get_question_id() );
$form = array(
'submit_label' => __( 'Post Answer', 'anspress-question-answer' ),
'fields' => array(
'post_content' => array(
'type' => 'editor',
'label' => __( 'Description', 'anspress-question-answer' ),
'min_length' => ap_opt( 'minimum_ans_length' ),
'validate' => 'required,min_string_length,badwords',
'editor_args' => array(
'quicktags' => ap_opt( 'question_text_editor' ) ? true : false,
),
),
),
);
// Add private field checkbox if enabled.
if ( ap_opt( 'allow_private_posts' ) ) {
$form['fields']['is_private'] = array(
'type' => 'checkbox',
'label' => __( 'Is private?', 'anspress-question-answer' ),
'desc' => __( 'Only visible to admin and moderator.', 'anspress-question-answer' ),
);
}
// Add name fields if anonymous is allowed.
if ( ! is_user_logged_in() && ap_allow_anonymous() ) {
$form['fields']['anonymous_name'] = array(
'label' => __( 'Your Name', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter your name to display', 'anspress-question-answer' ),
),
'order' => 20,
'validate' => 'max_string_length,badwords',
'max_length' => 20,
);
if ( empty( $editing_id ) && ap_opt( 'create_account' ) ) {
$form['fields']['email'] = array(
'label' => __( 'Your Email', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter your email', 'anspress-question-answer' ),
),
'desc' => 'An account for you will be created and a confirmation link will be sent to you with the password.',
'order' => 20,
'validate' => 'is_email,required',
'sanitize' => 'email,required',
'max_length' => 64,
);
}
}
$form['fields']['post_id'] = array(
'type' => 'input',
'subtype' => 'hidden',
'value' => $editing_id,
'sanitize' => 'absint',
);
// Add value when editing post.
if ( ! empty( $editing_id ) ) {
$form['editing'] = true;
$form['editing_id'] = $editing_id;
$form['submit_label'] = __( 'Update Answer', 'anspress-question-answer' );
}
/**
* Filter for modifying answer form `$args`.
*
* @param array $fields Answer form fields.
* @param bool $editing Currently editing form.
* @since 4.1.0
*/
return apply_filters( 'ap_answer_form_fields', $form, $editing );
}
/**
* Register comment form.
*
* @return array
* @since 4.1.0
*/
public static function comment_form() {
$form = array(
'submit_label' => __( 'Submit Comment', 'anspress-question-answer' ),
'fields' => array(
'content' => array(
'type' => 'textarea',
'label' => __( 'Comment', 'anspress-question-answer' ),
'min_length' => 5,
'validate' => 'required,min_string_length,badwords',
'attr' => array(
'placeholder' => __( 'Write your comment here...', 'anspress-question-answer' ),
'rows' => 5,
),
'editor_args' => array(
'quicktags' => true,
'textarea_rows' => 5,
),
),
),
);
// Add name fields if anonymous is allowed.
if ( ! is_user_logged_in() ) {
$form['fields']['author'] = array(
'label' => __( 'Your Name', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter your name to display.', 'anspress-question-answer' ),
),
'validate' => 'required,max_string_length,badwords',
'max_length' => 64,
);
$form['fields']['email'] = array(
'label' => __( 'Your Email', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter your email to get follow up notifications.', 'anspress-question-answer' ),
),
'subtype' => 'email',
'validate' => 'required,is_email',
'max_length' => 254,
);
$form['fields']['url'] = array(
'label' => __( 'Your Website', 'anspress-question-answer' ),
'attr' => array(
'placeholder' => __( 'Enter link to your website.', 'anspress-question-answer' ),
),
'subtype' => 'url',
'validate' => 'is_url',
'max_length' => 254,
);
}
/**
* Filter for modifying comment form `$args`.
*
* @param array $fields Comment form fields.
* @since 4.1.0
*/
$form = apply_filters( 'ap_comment_form_fields', $form );
return $form;
}
/**
* Process question form submission.
*
* @param boolean $manual Is form submitted manually.
* @return void|WP_Error|integer This method will not die script if `$manual` is set to `true` and also return `WP_Error` on error.
* @since 4.1.0
* @since 4.1.5 Added new argument `$manual` for allowing form to be submitted manually.
*/
public static function submit_question_form( $manual = false ) {
$editing = false;
$form = anspress()->get_form( 'question' );
/**
* Action triggered before processing question form.
*
* @since 4.1.0
*/
do_action( 'ap_submit_question_form' );
$values = $form->get_values();
// Store current values in session.
$form->save_values_session();
// Check nonce and is valid form. Do not check if `$manual` is true.
if ( ! $form->is_submitted() && false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Trying to cheat?!', 'anspress-question-answer' ) ),
)
);
}
$question_args = array(
'post_title' => $values['post_title']['value'],
'post_content' => $values['post_content']['value'],
);
if ( ! empty( $values['post_id']['value'] ) ) {
$question_args['ID'] = $values['post_id']['value'];
$editing = true;
$_post = ap_get_post( $question_args['ID'] );
// Check if valid post type and user can edit.
if ( false !== $manual && ( 'question' !== $_post->post_type || ! ap_user_can_edit_question( $_post ) ) ) {
ap_ajax_json( 'something_wrong' );
}
}
// Add default arguments if not editing.
if ( ! $editing ) {
$question_args = wp_parse_args(
$question_args,
array(
'post_author' => get_current_user_id(),
'post_name' => '',
'comment_status' => 'open',
)
);
}
// Post status.
$question_args['post_status'] = ap_new_edit_post_status( false, 'question', $editing );
if ( $form->have_errors() ) {
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Unable to post question.', 'anspress-question-answer' ) ),
'form_errors' => $form->errors,
'fields_errors' => $form->get_fields_errors(),
)
);
} else {
return new WP_Error( 'failed', __( 'Failed to insert question', 'anspress-question-answer' ) );
}
}
// Set post parent.
$post_parent = ap_sanitize_unslash( 'post_parent', 'r' );
if ( ! empty( $post_parent ) && wp_verify_nonce( ap_sanitize_unslash( '__nonce_pp', 'r' ), 'post_parent_' . $post_parent ) ) {
$question_args['post_parent'] = (int) $post_parent;
}
// If private override status.
if ( isset( $values['is_private']['value'] ) && true === $values['is_private']['value'] ) {
$question_args['post_status'] = 'private_post';
}
// Create user if enabled.
if ( ! $editing && ! is_user_logged_in() && ap_opt( 'create_account' ) ) {
self::create_user( $values, $question_args, $manual );
}
// Check if duplicate.
if ( ! $editing && ap_opt( 'duplicate_check' ) && false !== ap_find_duplicate_post( $question_args['post_content'], 'question' ) ) {
$form->add_error( 'duplicate-question', __( 'You are trying to post a duplicate question. Please search existing questions before posting a new one.', 'anspress-question-answer' ) );
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Unable to post question.', 'anspress-question-answer' ) ),
'form_errors' => $form->errors,
'fields_errors' => $form->get_fields_errors(),
)
);
} else {
return new WP_Error( 'failed', __( 'Failed to insert question', 'anspress-question-answer' ) );
}
}
/**
* Filter question description before saving.
*
* @param string $content Post content.
* @since unknown
* @since @3.0.0 Moved from process-form.php
*/
$question_args['post_content'] = apply_filters( 'ap_form_contents_filter', $question_args['post_content'] );
$question_args['post_name'] = ap_remove_stop_words_post_name( $question_args['post_title'] );
if ( $editing ) {
/**
* Can be used to modify `$args` before updating question
*
* @param array $question_args Question arguments.
* @since 2.0.1
* @since 4.1.0 Moved from includes/ask-form.php.
*/
$question_args = apply_filters( 'ap_pre_update_question', $question_args );
} else {
/**
* Can be used to modify args before inserting question
*
* @param array $question_args Question arguments.
* @since 2.0.1
* @since 4.1.0 Moved from includes/ask-form.php.
*/
$question_args = apply_filters( 'ap_pre_insert_question', $question_args );
}
if ( ! $editing ) {
$question_args['post_type'] = 'question';
$post_id = wp_insert_post( $question_args, true );
} else {
$post_id = wp_update_post( $question_args, true );
}
// If error return and send error message.
if ( is_wp_error( $post_id ) ) {
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array(
'message' => sprintf(
// Translators: placeholder contain error message.
__( 'Unable to post question. Error: %s', 'anspress-question-answer' ),
$post_id->get_error_message()
),
),
)
);
} else {
return $post_id;
}
}
$activity_type = $editing ? 'edit_q' : 'new_q';
// Insert activity.
ap_activity_add(
array(
'q_id' => $post_id,
'action' => $activity_type,
)
);
$form->after_save(
false,
array(
'post_id' => $post_id,
)
);
// Clear temporary images.
if ( $post_id ) {
ap_clear_unattached_media();
}
/**
* Action called after processing question form. This is triggred
* only for question submitted from frontend.
*
* @param integer $post_id Question id just created /updated.
*
* @since 4.1.11
*/
do_action( 'ap_after_question_form_processed', $post_id );
if ( isset( $question_args['ID'] ) ) {
$message = __( 'Question updated successfully, you\'ll be redirected in a moment.', 'anspress-question-answer' );
} else {
$message = __( 'Your question is posted successfully, you\'ll be redirected in a moment.', 'anspress-question-answer' );
}
if ( false === $manual ) {
anspress()->session->set_question( $post_id );
ap_ajax_json(
array(
'success' => true,
'snackbar' => array(
'message' => $message,
),
'redirect' => get_permalink( $post_id ),
'post_id' => $post_id,
)
);
}
return $post_id;
}
/**
* Process question form submission.
*
* @param boolean $manual Is form submitted manually.
* @return void|WP_Error|integer This method will not die script if `$manual` is set to `true` and also return `WP_Error` on error.
* @since 4.1.0
* @since 4.1.5 Added new argument `$manual` for allowing form to be submitted manually.
*/
public static function submit_answer_form( $manual = false ) {
$editing = false;
$question_id = ap_sanitize_unslash( 'question_id', 'r' );
$form = anspress()->get_form( 'answer' );
/**
* Action triggered before processing answer form.
*
* @since 4.1.0
*/
do_action( 'ap_submit_answer_form' );
$values = $form->get_values();
// Store current values in session.
$form->save_values_session( $question_id );
// Check nonce and is valid form.
if ( false === $manual && ( ! $form->is_submitted() || ! ap_user_can_answer( $question_id ) ) ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Trying to cheat?!', 'anspress-question-answer' ) ),
)
);
}
$answer_args = array(
'post_title' => $question_id,
'post_name' => $question_id,
'post_content' => $values['post_content']['value'],
'post_parent' => $question_id,
);
if ( ! empty( $values['post_id']['value'] ) ) {
$answer_args['ID'] = $values['post_id']['value'];
$editing = true;
$_post = ap_get_post( $answer_args['ID'] );
// Check if valid post type and user can edit.
if ( 'answer' !== $_post->post_type || ! ap_user_can_edit_answer( $_post ) ) {
ap_ajax_json( 'something_wrong' );
}
}
// Add default arguments if not editing.
if ( ! $editing ) {
$answer_args = wp_parse_args(
$answer_args,
array(
'post_author' => get_current_user_id(),
'post_name' => '',
'comment_status' => 'open',
)
);
}
// Post status.
$answer_args['post_status'] = ap_new_edit_post_status( false, 'answer', $editing );
if ( $form->have_errors() ) {
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Unable to post answer.', 'anspress-question-answer' ) ),
'form_errors' => $form->errors,
'fields_errors' => $form->get_fields_errors(),
)
);
} else {
return new WP_Error( 'failed', __( 'Please check field', 'anspress-question-answer' ) );
}
}
// If private override status.
if ( isset( $values['is_private']['value'] ) && true === $values['is_private']['value'] ) {
$answer_args['post_status'] = 'private_post';
}
// Create user if enabled.
if ( ! $editing && ! is_user_logged_in() && ap_opt( 'create_account' ) ) {
self::create_user( $values, $answer_args, $manual );
}
/**
* Filter question description before saving.
*
* @param string $content Post content.
* @since unknown
* @since @3.0.0 Moved from process-form.php
*/
$answer_args['post_content'] = apply_filters( 'ap_form_contents_filter', $answer_args['post_content'] );
$answer_args['post_name'] = ap_remove_stop_words_post_name( $answer_args['post_title'] );
if ( $editing ) {
/**
* Can be used to modify `$args` before updating answer
*
* @param array $answer_args Answer arguments.
* @since 2.0.1
* @since 4.1.0 Moved from includes/answer-form.php.
*/
$answer_args = apply_filters( 'ap_pre_update_answer', $answer_args );
} else {
/**
* Can be used to modify args before inserting answer
*
* @param array $answer_args Answer arguments.
* @since 2.0.1
* @since 4.1.0 Moved from includes/answer-form.php.
*/
$answer_args = apply_filters( 'ap_pre_insert_answer', $answer_args );
}
if ( ! $editing ) {
$answer_args['post_type'] = 'answer';
$post_id = wp_insert_post( $answer_args, true );
} else {
$post_id = wp_update_post( $answer_args, true );
}
// If error return and send error message.
if ( is_wp_error( $post_id ) ) {
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array(
'message' => sprintf(
// Translators: placeholder contain error message.
__( 'Unable to post answer. Error: %s', 'anspress-question-answer' ),
$post_id->get_error_message()
),
),
)
);
} else {
return $post_id;
}
}
$post = ap_get_post( $post_id );
$form->delete_values_session( $question_id );
$activity_type = $editing ? 'edit_a' : 'new_a';
// Insert activity.
ap_activity_add(
array(
'q_id' => $post->post_parent,
'a_id' => $post_id,
'action' => $activity_type,
)
);
$form->after_save(
false,
array(
'post_id' => $post_id,
)
);
// Clear temporary images.
if ( $post_id ) {
ap_clear_unattached_media();
}
/**
* Action called after processing answer form. This is triggered
* only for answer submitted from frontend.
*
* @param integer $post_id Answer id just created /updated.
*
* @since 4.1.11
*/
do_action( 'ap_after_answer_form_processed', $post_id );
if ( ! $editing ) {
anspress()->session->set_answer( $post_id );
ap_answer_post_ajax_response( $question_id, $post_id );
}
if ( $editing ) {
$message = __( 'Answer updated successfully. Redirecting you to question page.', 'anspress-question-answer' );
} else {
$message = __( 'Your answer is posted successfully.', 'anspress-question-answer' );
}
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => true,
'snackbar' => array(
'message' => $message,
),
'redirect' => get_permalink( $question_id ),
'post_id' => $post_id,
)
);
}
return $post_id;
}
/**
* Process comment form.
*
* @return void
* @since 4.1.0
*/
public static function submit_comment_form() {
global $comment;
$editing = false;
$form = anspress()->get_form( 'comment' );
/**
* Action triggered before processing comment form.
*
* @since 4.1.0
*/
do_action( 'ap_submit_comment_form' );
$values = $form->get_values();
$post_id = ap_sanitize_unslash( 'post_id', 'r' );
// Check nonce and is valid form.
if ( ! $form->is_submitted() || ! ap_user_can_comment( $post_id ) ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Trying to cheat?!', 'anspress-question-answer' ) ),
)
);
}
if ( $form->have_errors() ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'Unable to post comment.', 'anspress-question-answer' ) ),
'form_errors' => $form->errors,
'fields_errors' => $form->get_fields_errors(),
)
);
}
$comment_id = ap_sanitize_unslash( 'comment_id', 'r' );
if ( ! empty( $comment_id ) ) {
$comment = get_comment( $comment_id ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
if ( 'anspress' !== $comment->comment_type || ! ap_user_can_edit_comment( $comment_id ) ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'You cannot edit this comment.', 'anspress-question-answer' ) ),
)
);
}
// Check if content is changed.
if ( $values['content']['value'] === $comment->comment_content ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => __( 'There is no change in your comment.', 'anspress-question-answer' ) ),
)
);
}
$updated = wp_update_comment(
array(
'comment_ID' => $comment_id,
'comment_content' => $values['content']['value'],
)
);
if ( ! is_wp_error( $updated ) ) {
/**
* Fires immediately after a comment is updated in the database.
*
* @since 4.1.2
*
* @param int $comment_id The comment ID.
*/
do_action( 'ap_edit_comment', $comment_id );
$c = get_comment( $comment_id );
$count = get_comment_count( $c->comment_post_ID );
ob_start();
$comment = $c; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
ap_get_template_part( 'comment' );
$html = ob_get_clean();
$result = array(
'success' => true,
'action' => 'edit-comment',
'commentsCount' => array(
// translators: %d is count of comments.
'text' => sprintf( _n( '%d Comment', '%d Comments', $count['all'], 'anspress-question-answer' ), $count['all'] ),
'number' => $count['all'],
'unapproved' => $count['awaiting_moderation'],
),
'snackbar' => array( 'message' => __( 'Comment updated successfully', 'anspress-question-answer' ) ),
'html' => $html,
'post_id' => $c->comment_post_ID,
'comment_id' => $c->comment_ID,
'hide_modal' => 'comment',
);
ap_ajax_json( $result );
}
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => $updated->get_error_message() ),
)
);
}
$_post = ap_get_post( $post_id );
$type = 'question' === $_post->post_type ? __( 'question', 'anspress-question-answer' ) : __( 'answer', 'anspress-question-answer' );
// Check if not restricted post type.
if ( in_array( $_post->post_status, array( 'draft', 'pending', 'trash' ), true ) ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array(
'message' => sprintf(
// Translators: %s contain post type name.
__( 'Commenting is not allowed on draft, pending or deleted %s', 'anspress-question-answer' ),
$type
),
),
)
);
}
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
$user_id = $user->ID;
$author = wp_slash( $user->display_name );
$email = wp_slash( $user->user_email );
$url = wp_slash( $user->user_url );
} else {
$user_id = 0;
$author = $values['author']['value'];
$email = $values['email']['value'];
$url = $values['url']['value'];
}
$commentdata = array(
'comment_post_ID' => $_post->ID,
'comment_author' => wp_slash( $author ),
'comment_author_email' => wp_slash( $email ),
'comment_author_url' => wp_slash( $url ),
'comment_content' => trim( $values['content']['value'] ),
'comment_type' => 'anspress',
'comment_parent' => 0,
'user_id' => $user_id,
);
/**
* Filter comment content before inserting to DB.
*
* @param bool $apply_filter Apply this filter.
* @param string $content Un-filtered comment content.
* @since 3.0.0
*/
$commentdata = apply_filters( 'ap_pre_insert_comment', $commentdata );
// Insert new comment and get the comment ID.
$comment_id = wp_new_comment( $commentdata, true );
if ( ! is_wp_error( $comment_id ) && false !== $comment_id ) {
$c = get_comment( $comment_id );
do_action( 'ap_after_new_comment', $c );
$count = get_comment_count( $c->comment_post_ID );
ob_start();
ap_the_comments( $c->comment_post_ID );
$html = ob_get_clean();
$result = array(
'success' => true,
'action' => 'new-comment',
'commentsCount' => array(
'text' => sprintf(
// Translators: %d contains count of comments.
_n( '%d Comment', '%d Comments', $count['all'], 'anspress-question-answer' ),
$count['all']
),
'number' => $count['all'],
'unapproved' => $count['awaiting_moderation'],
),
'snackbar' => array( 'message' => __( 'Comment successfully posted', 'anspress-question-answer' ) ),
'html' => $html,
'post_id' => $c->comment_post_ID,
'comment_id' => $c->comment_ID,
'hide_modal' => 'comment',
);
ap_ajax_json( $result );
}
// Lastly output error message.
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => $comment_id->get_error_message() ),
)
);
}
/**
* Callback for image field in `image_upload` form.
*
* @param array $values Values.
* @param \AnsPress\Field\Upload $field AnsPress field object.
* @return array
* @since 4.1.8
*/
public static function image_upload_save( $values, $field ) {
$field->save_uploads();
// Set files in session, so that it can be validated while saving post.
if ( ! empty( $field->uploaded_files ) ) {
foreach ( $field->uploaded_files as $new ) {
anspress()->session->set_file( $new );
}
}
return $field->get_uploaded_files_url();
}
/**
* Image upload form.
*
* This form is used for uploading images in AnsPress.
*
* @return array
* @since 4.1.8
*/
public static function image_upload_form() {
return array(
'submit_label' => __( 'Upload & insert', 'anspress-question-answer' ),
'fields' => array(
'image' => array(
'label' => __( 'Image', 'anspress-question-answer' ),
'desc' => __( 'Select image(s) to upload. Only .jpg, .png and .gif files allowed.', 'anspress-question-answer' ),
'type' => 'upload',
'save' => array( __CLASS__, 'image_upload_save' ),
'upload_options' => array(
'multiple' => false,
'max_files' => 1,
'allowed_mimes' => array(
'jpg|jpeg' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
),
),
'validate' => 'required',
),
),
);
}
/**
* Handle create user request.
*
* @param array $values Form values.
* @param array $args Form arguments.
* @param bool $manual Is this manually submitted.
*
* @return int
*/
public static function create_user( &$values, &$args, $manual ) {
$email = $values['email']['value'];
$user_id = wp_insert_user(
array(
'user_email' => $email,
'user_login' => $email,
'user_pass' => wp_generate_password(),
'display_name' => ! empty( $values['anonymous_name']['value'] ) ? $values['anonymous_name']['value'] : '',
)
);
if ( is_wp_error( $user_id ) ) {
if ( false === $manual ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array( 'message' => $user_id->get_error_message() ),
)
);
} else {
return $user_id;
}
}
// Send the notification.
wp_new_user_notification( $user_id, null, 'both' );
$args['post_author'] = $user_id;
}
}
Expand full source code Collapse full source code View on GitHub: includes/class-form-hooks.php:22
Add your comment