AnsPress_Ajax::toggle_best_answer()
Description #
Ajax action for selecting a best answer.
Changelog #
Version | Description |
---|---|
4.1.6 | Check if user have permission to toggle best answer. |
4.1.2 | Log activities to ap_activity table and removed @see ap_update_post_activity_meta(). |
2.0.0 | Introduced. |
Source #
File: includes/ajax-hooks.php
public static function toggle_best_answer() { $answer_id = (int) ap_sanitize_unslash( 'answer_id', 'r' ); if ( ! is_user_logged_in() || ! check_ajax_referer( 'select-answer-' . $answer_id, 'nonce', false ) ) { ap_ajax_json( 'something_wrong' ); } $_post = ap_get_post( $answer_id ); // Check for permission. if ( ! ap_user_can_select_answer( $_post ) ) { ap_ajax_json( array( 'success' => false, 'snackbar' => [ 'message' => __( 'You do not have permission to select or unselect answer', 'anspress-question-answer' ) ], ) ); } // Unselect best answer if already selected. if ( ap_have_answer_selected( $_post->post_parent ) ) { ap_unset_selected_answer( $_post->post_parent ); /** * Action triggered after an answer is un-selected as best. * * @param WP_Post $_post WordPress post object. * @since unknown */ do_action( 'ap_unselect_answer', $_post ); ap_ajax_json( array( 'success' => true, 'action' => 'unselected', 'snackbar' => [ 'message' => __( 'Best answer is unselected for your question.', 'anspress-question-answer' ) ], 'label' => __( 'Select', 'anspress-question-answer' ), ) ); } // Do not allow answer to be selected as best if status is moderate. if ( 'moderate' === $_post->post_status || 'trash' === $_post->post_status || 'private' === $_post->post_status ) { ap_ajax_json( [ 'success' => false, 'snackbar' => [ 'message' => __( 'This answer cannot be selected as best, update status to select as best answer.', 'anspress-question-answer' ) ], ] ); } /** * Trigger right after selecting an answer. * * @param object $_post Post. */ do_action( 'ap_select_answer', $_post ); // Update question qameta. ap_set_selected_answer( $_post->post_parent, $_post->ID ); // Close question if enabled in option. if ( ap_opt( 'close_selected' ) ) { ap_insert_qameta( $_post->post_parent, [ 'closed' => 1 ] ); } ap_ajax_json( array( 'success' => true, 'action' => 'selected', 'snackbar' => [ 'message' => __( 'Best answer is selected for your question.', 'anspress-question-answer' ) ], 'label' => __( 'Unselect', 'anspress-question-answer' ), ) ); }
Expand full source code Collapse full source code View on GitHub: includes/ajax-hooks.php:131
Add your comment