AnsPress_Vote::vote()
Description #
Process voting button.
Source #
File: includes/votes.php
public static function vote() {
$post_id = (int) ap_sanitize_unslash( 'post_id', 'request' );
if ( ! anspress_verify_nonce( 'vote_' . $post_id ) ) {
ap_ajax_json( 'something_wrong' );
}
$type = 'vote_up' === ap_sanitize_unslash( 'type', 'request' ) ? 'vote_up' : 'vote_down';
$value = 'vote_up' === $type ? '1' : '-1';
$userid = get_current_user_id();
$post = ap_get_post( $post_id );
$thing = ap_user_can_vote_on_post( $post_id, $type, $userid, true );
// Check if WP_Error object and send error message code.
if ( is_wp_error( $thing ) ) {
ap_ajax_json(
array(
'success' => false,
'snackbar' => array(
'message' => $thing->get_error_message(),
),
)
);
}
// Check if down vote disabled.
if ( 'question' === $post->post_type && ap_opt( 'disable_down_vote_on_question' ) && 'vote_down' === $type ) {
ap_ajax_json( 'voting_down_disabled' );
} elseif ( 'answer' === $post->post_type && ap_opt( 'disable_down_vote_on_answer' ) && 'vote_down' === $type ) {
ap_ajax_json( 'voting_down_disabled' );
}
$is_voted = ap_get_vote( $post_id, get_current_user_id(), 'vote' );
if ( false !== $is_voted ) {
// If user already voted and click that again then reverse.
if ( $is_voted->vote_value == $value ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual
$counts = ap_delete_post_vote( $post_id, $userid, 'vote_up' === $type );
ap_ajax_json(
array(
'success' => true,
'action' => 'undo',
'vote_type' => $type,
'snackbar' => array(
'message' => __( 'Your vote has been removed.', 'anspress-question-answer' ),
),
'voteData' => array(
'net' => $counts['votes_net'],
'active' => '',
'nonce' => wp_create_nonce( 'vote_' . $post_id ),
),
)
);
}
// Else ask user to undor their vote first.
ap_ajax_json(
array(
'success' => false,
'snackbar' => array(
'message' => __( 'Undo your vote first.', 'anspress-question-answer' ),
),
'voteData' => array(
'active' => $type,
'nonce' => wp_create_nonce( 'vote_' . $post_id ),
),
)
);
}
$counts = ap_add_post_vote( $post_id, $userid, 'vote_up' === $type );
ap_ajax_json(
array(
'success' => true,
'action' => 'voted',
'vote_type' => $type,
'snackbar' => array(
'message' => __( 'Thank you for voting.', 'anspress-question-answer' ),
),
'voteData' => array(
'net' => $counts['votes_net'],
'active' => $type,
'nonce' => wp_create_nonce( 'vote_' . $post_id ),
),
)
);
}
Expand full source code Collapse full source code View on GitHub: includes/votes.php:30
Add your comment