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; }