/**
 * Rebuild scores for all votes
 */
function bbpvotes_rebuild_scores()
{
    $post_ids = array();
    $default_query_args = array('post_type' => bbpvotes()->supported_post_types, 'post_status' => 'any', 'posts_per_page' => -1, 'fields' => 'ids');
    $votes_up_query_args = wp_parse_args(array('meta_key' => bbpvotes()->metaname_post_vote_up), $default_query_args);
    $votes_down_query_args = wp_parse_args(array('meta_key' => bbpvotes()->metaname_post_vote_down), $default_query_args);
    $votes_up_query = new WP_Query($votes_up_query_args);
    $votes_down_query = new WP_Query($votes_down_query_args);
    foreach ($votes_up_query->posts as $id) {
        $post_ids[] = $id;
    }
    foreach ($votes_down_query->posts as $id) {
        $post_ids[] = $id;
    }
    $post_ids = array_unique($post_ids);
    foreach ($post_ids as $id) {
        $post_score = 0;
        $vote_count = 0;
        $votes = bbpvotes_get_votes_for_post($id);
        foreach ($votes as $user_id => $vote) {
            $post_score += $vote;
            $vote_count++;
        }
        update_post_meta($id, bbpvotes()->metaname_post_vote_score, $post_score);
        update_post_meta($id, bbpvotes()->metaname_post_vote_count, $vote_count);
    }
}
示例#2
0
function bbpvotes_post_vote_ajax()
{
    $result = array('success' => false);
    if (!isset($_POST['post_id'])) {
        return false;
    }
    $action = $_POST['action'];
    $post_id = $_POST['post_id'];
    if ($action == 'bbpvotes_post_vote_up') {
        $nonce = 'vote-up-post_' . $post_id;
    } else {
        if ($action == 'bbpvotes_post_vote_down') {
            $nonce = 'vote-down-post_' . $post_id;
        }
    }
    if (!wp_verify_nonce($_POST['_wpnonce'], $nonce)) {
        return false;
    }
    if ($action == 'bbpvotes_post_vote_up') {
        $vote = bbpvotes()->do_post_vote($post_id, true);
    } else {
        if ($action == 'bbpvotes_post_vote_down') {
            $vote = bbpvotes()->do_post_vote($post_id, false);
        }
    }
    if (!is_wp_error($vote)) {
        $result['success'] = true;
        $score = bbpvotes_get_votes_score_for_post($post_id);
        $score_display = bbpvotes_number_format($score);
        $votes_count = bbpvotes_get_votes_count_for_post($post_id);
        $vote_count_display = bbpvotes_number_format($votes_count);
        $result['score_text'] = sprintf(__('Score: %1$s', 'bbpvotes'), $score_display);
        $result['score_title'] = sprintf(__('Votes count: %1$s', 'bbpvotes'), $vote_count_display);
    } else {
        $result['message'] = $vote->get_error_message();
    }
    header('Content-type: application/json');
    echo json_encode($result);
    die;
}
function bbpvotes_get_author_score($author_id = 0, $post_args = null)
{
    global $wpdb;
    if (!$author_id) {
        $author_id = get_current_user_id();
    }
    //Get posts by this author
    $defaults = array('author' => $author_id, 'post_type' => bbpvotes()->supported_post_types, 'post_status' => 'any', 'fields' => 'ids', 'posts_per_page' => -1);
    // Parse arguments against default values
    $post_args = bbp_parse_args($post_args, $defaults, 'bbpvotes_get_votes_down_for_author_count_post_args');
    $query = new WP_Query($post_args);
    if ($query->found_posts) {
        $post_ids = $query->posts;
        $post_ids_str = implode(',', $post_ids);
        //Get sum of scores for those posts
        $votes_scores = $wpdb->get_col($wpdb->prepare("\n                SELECT      meta_value\n                FROM        {$wpdb->postmeta}\n                WHERE       meta_key = %s \n                            AND post_id IN ({$post_ids_str})\n                ", bbpvotes()->metaname_post_vote_score));
        return array_sum($votes_scores);
    } else {
        return 0;
    }
}
示例#4
0
 /**
  * 
  * @param type $post_id
  * @param type $vote MUST BE defined, MUST BE a boolean
  * @return boolean|\WP_Error
  */
 function do_post_vote($post_id, $vote = null)
 {
     //check vote value
     if (is_bool($vote) === false) {
         return new WP_Error('vote_is_not_bool', __('Vote is not a boolean', 'bbpvotes'));
     }
     $voteplus = $vote === true;
     $voteminus = $vote === false;
     if (!($post = get_post($post_id))) {
         return false;
     }
     if ($voteplus && !bbpvotes_can_user_vote_up_for_post($post->ID) || $voteminus && !bbpvotes_can_user_vote_down_for_post($post->ID)) {
         return new WP_Error('missing_capability', __("You don't have the required capability to vote", 'bbpvotes'));
     }
     $user_id = get_current_user_id();
     //check user is not post author
     if ($post->post_author == $user_id) {
         return new WP_Error('user_is_author', __('You cannot vote for your own post', 'bbpvotes'));
     }
     //get current votes
     $post_score = bbpvotes_get_votes_score_for_post($post->ID);
     $votes_count = bbpvotes_get_votes_count_for_post($post->ID);
     $user_voted_up = bbpvotes_has_user_voted_up_for_post($post->ID, $user_id);
     $user_voted_down = bbpvotes_has_user_voted_down_for_post($post->ID, $user_id);
     $toggle_vote = $voteplus && $user_voted_down || $voteminus && $user_voted_up;
     $unvote = bbpvotes()->options['unvote_enabled'] && ($voteplus && $user_voted_up || $voteminus && $user_voted_down);
     //remove old vote first if any
     if ($toggle_vote || $unvote) {
         //get previous vote meta key
         if ($user_voted_down) {
             $meta_previous_vote = $this->metaname_post_vote_down;
         } else {
             $meta_previous_vote = $this->metaname_post_vote_up;
         }
         if ($removed_previous_vote = delete_post_meta($post->ID, $meta_previous_vote, $user_id)) {
             //successfully deleted
             $votes_count--;
             //restore score
             if ($user_voted_down) {
                 $post_score++;
             } else {
                 $post_score--;
             }
         }
     }
     if ($voteplus && $user_voted_up || $voteminus && $user_voted_down) {
         //vote duplicate : remove or block it
         if (bbpvotes()->options['unvote_enabled']) {
             //remove vote
             if (!bbpvotes_can_user_unvote_for_post($post->ID)) {
                 return new WP_Error('missing_capability', __("You don't have the required capability to unvote", 'bbpvotes'));
             } else {
                 if ($removed_previous_vote) {
                     update_post_meta($post->ID, $this->metaname_post_vote_score, $post_score);
                     update_post_meta($post->ID, $this->metaname_post_vote_count, $votes_count);
                     do_action('bbpvotes_do_post_unvote', $post->ID, $user_id);
                 } else {
                     return new WP_Error('unvoting_error', __('Error while unvoting for this post', 'bbpvotes'));
                 }
             }
         } else {
             //block vote
             return new WP_Error('already_voted', __('You have already voted for this post', 'bbpvotes'));
         }
     } else {
         //process vote
         //get new vote meta key
         if ($voteplus) {
             $meta_vote = $this->metaname_post_vote_up;
         } else {
             $meta_vote = $this->metaname_post_vote_down;
         }
         if ($result = add_post_meta($post->ID, $meta_vote, $user_id)) {
             $votes_count++;
             //update score
             if ($voteplus) {
                 $post_score++;
             } else {
                 $post_score--;
             }
             update_post_meta($post->ID, $this->metaname_post_vote_score, $post_score);
             update_post_meta($post->ID, $this->metaname_post_vote_count, $votes_count);
         } else {
             return new WP_Error('voting_error', __('Error while voting for this post', 'bbpvotes'));
         }
         do_action('bbpvotes_do_post_vote', $post->ID, $user_id, $vote);
     }
     return true;
 }
示例#5
0
 function post_column_content($column_name, $post_id)
 {
     $post_type = get_post_type();
     if (!in_array($post_type, bbpvotes()->supported_post_types)) {
         return;
     }
     $output = '';
     switch ($column_name) {
         //score
         case $this->column_name_score:
             if ($score = bbpvotes_get_votes_score_for_post($post_id)) {
                 $output = $score;
             }
             break;
     }
     echo $output;
 }