Last active
November 29, 2017 04:33
-
-
Save atultiwari/4bc9fd36c5fb2a18081762189fd6a347 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Process custom question form submission. | |
* Original work by - Rahul Aryan | |
* Modified by - Dr. Atul | |
* @return void | |
* @since 4.1.0 | |
*/ | |
function at_submit_question_form() { | |
$editing = false; | |
$form = anspress()->get_form( 'at_question_form' ); | |
/** | |
* Action triggered before processing question form. | |
* | |
* @since 4.1.0 | |
*/ | |
do_action( 'ap_submit_question_form' ); | |
$values = $form->get_values(); | |
// Check nonce and is valid form. | |
if ( ! $form->is_submitted() ) { | |
echo __( 'Holla, you trying to cheat!' ); | |
return; | |
} | |
$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 ( '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() ) { | |
ap_ajax_json([ | |
'success' => false, | |
'snackbar' => [ 'message' => __( 'Unable to post question.', 'anspress-question-answer' ) ], | |
'form_errors' => $form->errors, | |
'fields_errors' => $form->get_fields_errors(), | |
] ); | |
} | |
// Set post parent. | |
// @TODO: Check nonce for post parent. | |
if ( isset( $values['post_parent'] ) && $values['post_parent']['value'] ) { | |
$question_args['post_parent'] = $values['post_parent']['value']; | |
} | |
/** | |
* 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 ) ) { | |
ap_ajax_json([ | |
'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() | |
), | |
), | |
] ); | |
} | |
$form->after_save( false, array( | |
'post_id' => $post_id, | |
) ); | |
// Clear temporary images. | |
if ( $post_id ) { | |
ap_clear_unattached_media(); | |
} | |
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 ( ! is_wp_error( $post_id ) ) { | |
$form = anspress()->get_form( 'at_question_form' ); | |
$values = $form->get_values(); | |
$qameta = array( | |
'last_updated' => current_time( 'mysql' ), // When last question was active. | |
'answers' => ap_count_published_answers( $post_id ), // numbers of answers. | |
'anonymous_name' => sanitize_text_field( $values['anonymous_name']['value'] ), // Anonymous user name. | |
'selected' => false, // Answer id if have a selected answer. | |
'views' => 10000, // Numbers of views. | |
'closed' => false, // Is question closed? | |
'comments' => 10, // Numbers of comments. | |
'featured' => false, // is featured? | |
'votes_up' => 5, // Numbers of vote up. | |
'votes_down' => 0, // Numbers of vote down. | |
'subscribers' => 10, // Numbers of subscribers. | |
'flags' => 0, // Numbers of flags. | |
); | |
ap_insert_qameta( $post_id, $qameta ); | |
$activity_type = 'new_question'; | |
/** Following should have worked, but not working - | |
ap_activity_add( array( | |
'q_id' => $post_id, | |
'action' => $activity_type, | |
) ); | |
**/ | |
// Following function appears to be deprecated, but it was the only thing working for me - | |
ap_update_post_activity_meta( $post_id, $activity_type, get_current_user_id() ); | |
echo get_permalink( $post_id ); | |
} | |
} | |
add_action( 'init', 'at_submit_question_form' ); | |
/** | |
* Register a custom form by "at_question_form" name in AnsPress. | |
* | |
* @return array | |
*/ | |
function at_custom_question_form_in_ap() { | |
$form = array( | |
'fields' => array( | |
'post_title' => array( | |
'label' => __('Demo post title'), | |
'desc' => __('A TinyMce editor field.'), | |
'type' => 'editor' | |
), | |
'post_content' => array( | |
'label' => __('Demo post content'), | |
'desc' => __('A TinyMce editor field.'), | |
'type' => 'editor' | |
), | |
) | |
); | |
// I am trying to figure out that how to reset fields value once form is submitted. Following doesnt work - | |
//$form['fields']['post_content']['value'] = ''; | |
return $form; | |
} | |
// ap_form_ followed by form name. | |
add_filter('ap_form_at_question_form', 'at_custom_question_form_in_ap'); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment