Exemplo n.º 1
0
 function recalculate_multi_averages($post_id, $set_id, $rules = "", $set = null, $last_voted = false)
 {
     global $wpdb, $table_prefix;
     if ($set == null) {
         $set = gd_get_multi_set($set_id);
     }
     $multi_data = GDSRDBMulti::get_values_join($post_id, $set_id);
     $votes_js = array();
     $weight_norm = array_sum($set->weight);
     $total_users = $total_visitors = $total_votes = 0;
     $user_weighted = $visitors_weighted = $weighted = 0;
     $i = 0;
     foreach ($multi_data as $md) {
         $votes = $score = $rating = $v_user = $v_visitor = $s_user = $s_visitor = $r_user = $r_visitor = 0;
         $v_visitor = $md->visitor_voters;
         $s_visitor = $md->visitor_votes;
         $v_user = $md->user_voters;
         $s_user = $md->user_votes;
         if ($v_visitor > 0) {
             $r_visitor = $s_visitor / $v_visitor;
         }
         if ($v_user > 0) {
             $r_user = $s_user / $v_user;
         }
         if ($r_visitor > $set->stars) {
             $r_visitor = $set->stars;
         }
         if ($r_user > $set->stars) {
             $r_user = $set->stars;
         }
         $r_visitor = @number_format($r_visitor, 1);
         $r_user = @number_format($r_user, 1);
         $visitors_weighted += $r_visitor * $set->weight[$i] / $weight_norm;
         $user_weighted += $r_user * $set->weight[$i] / $weight_norm;
         $total_visitors += $v_visitor;
         $total_users += $v_user;
         if ($rules != "") {
             if ($rules == "A" || $rules == "N") {
                 $votes = $md->user_voters + $md->visitor_voters;
                 $score = $md->user_votes + $md->visitor_votes;
             } else {
                 if ($rules == "V") {
                     $votes = $md->visitor_voters;
                     $score = $md->visitor_votes;
                 } else {
                     if ($rules == "U") {
                         $votes = $md->user_voters;
                         $score = $md->user_votes;
                     }
                 }
             }
             if ($votes > 0) {
                 $rating = $score / $votes;
             }
             if ($rating > $set->stars) {
                 $rating = $set->stars;
             }
             $rating = @number_format($rating, 1);
             $votes_js[] = $rating * $this->o["mur_size"];
             $weighted += $rating * $set->weight[$i] / $weight_norm;
             $total_votes += $votes;
         }
         $i++;
     }
     $rating_users = @number_format($user_weighted, 1);
     $rating_visitors = @number_format($visitors_weighted, 1);
     $total_users = @number_format($total_users / $i, 0);
     $total_visitors = @number_format($total_visitors / $i, 0);
     if ($rules != "") {
         $rating = @number_format($weighted, 1);
         $total_votes = @number_format($total_votes / $i, 0);
         $output["total"]["rating"] = $rating;
         $output["total"]["votes"] = $total_votes;
         $output["json"] = $votes_js;
     }
     $lastv = $last_voted ? ", last_voted = CURRENT_TIMESTAMP" : "";
     $sql = sprintf("update %sgdsr_multis_data set average_rating_users = '%s', average_rating_visitors = '%s', total_votes_users = '%s', total_votes_visitors = '%s'%s where post_id = %s and multi_id = %s", $table_prefix, $rating_users, $rating_visitors, $total_users, $total_visitors, $lastv, $post_id, $set_id);
     $wpdb->query($sql);
     $output["users"]["rating"] = $rating_users;
     $output["users"]["votes"] = $total_users;
     $output["visitors"]["rating"] = $rating_visitors;
     $output["visitors"]["votes"] = $total_visitors;
     return $output;
 }