public function generate_cache() { set_time_limit(0); $overall_leaderboards = User_score::get_overall_leaderboard(); $this->data['overall_leaderboards'] = $overall_leaderboards; $lc = Leaderboards_cache::create(array('type' => 1, 'data' => base64_encode(json_encode($overall_leaderboards)))); $speed_leaderboards = User_score::get_speed_leaderboard(); $lc = Leaderboards_cache::create(array('type' => 2, 'data' => base64_encode(json_encode($speed_leaderboards)))); $jumpstream_leaderboards = User_score::get_jumpstream_leaderboard(); $lc = Leaderboards_cache::create(array('type' => 3, 'data' => base64_encode(json_encode($jumpstream_leaderboards)))); $jack_leaderboards = User_score::get_jack_leaderboard(); $lc = Leaderboards_cache::create(array('type' => 4, 'data' => base64_encode(json_encode($jack_leaderboards)))); $technical_leaderboards = User_score::get_technical_leaderboard(); $lc = Leaderboards_cache::create(array('type' => 5, 'data' => base64_encode(json_encode($technical_leaderboards)))); $stamina_leaderboards = User_score::get_stamina_leaderboard(); $lc = Leaderboards_cache::create(array('type' => 6, 'data' => base64_encode(json_encode($stamina_leaderboards)))); $old_caches = Leaderboards_cache::all(array('order' => 'id ASC', 'limit' => 6)); foreach ($old_caches as $oc) { $oc->delete(); } $this->content_view = "lc"; }
public static function get_overall_leaderboard() { // For ease of editing later I'm not going to try to wiggle this into one query $users = User::all(); $return_array = array(); $speed_leaderboard = User_score::get_speed_leaderboard(); $jumptream_leaderboard = User_score::get_jumpstream_leaderboard(); $jack_leaderboard = User_score::get_jack_leaderboard(); $technical_leaderboard = User_score::get_technical_leaderboard(); $stamina_leaderboard = User_score::get_stamina_leaderboard(); foreach ($users as $user) { $scores = User_score::get_scores_for_user_approved($user->id, "difficulty_score DESC"); $top_sum = 0; $top_score = 0; foreach ($scores as $score) { $top_score = $score->difficulty_score; break; } $i = 0; $scores_to_use = 1; if ($top_score < 15) { $scores_to_use = 1; } else { if ($top_score < 20) { $scores_to_use = 2; } else { if ($top_score < 24) { $scores_to_use = 2; } else { if ($top_score < 28) { $scores_to_use = 3; } else { if ($top_score < 31) { $scores_to_use = 3; } else { $scores_to_use = 3; } } } } } $uscores = array(); $uscores['speed_score'] = 0; $uscores['jumpstream_score'] = 0; $uscores['jack_score'] = 0; $uscores['technical_score'] = 0; $uscores['stamina_score'] = 0; foreach ($speed_leaderboard as $row) { if ($row['username'] == $user->display_name) { $uscores['speed_score'] = $row['average_score']; } } foreach ($jumptream_leaderboard as $row) { if ($row['username'] == $user->display_name) { $uscores['jumpstream_score'] = $row['average_score']; } } foreach ($jack_leaderboard as $row) { if ($row['username'] == $user->display_name) { $uscores['jack_score'] = $row['average_score']; } } foreach ($technical_leaderboard as $row) { if ($row['username'] == $user->display_name) { $uscores['technical_score'] = $row['average_score']; } } foreach ($stamina_leaderboard as $row) { if ($row['username'] == $user->display_name) { $uscores['stamina_score'] = $row['average_score']; } } $avg = 0; $total = 0; rsort($uscores); $c = 0; $add_to_leaderboard = true; foreach ($uscores as $uscore) { $c++; $total += $uscore; if ($uscore == 0) { $add_to_leaderboard = false; } if ($c == $scores_to_use) { break; } } #echo $user->display_name . ": " . $scores_to_use . "<br />"; #echo User_score::count(array('conditions' => array('status = "approved" AND user_id = ?', $user->id))) . "<br />"; #echo "<pre>"; #print_r($uscores); #echo "</pre>"; $avg = $total / $c; $user_array = array("username" => $user->display_name, "profile_link" => "/profile/view/" . $user->username, "average_score" => $avg, "scores" => $scores); if ($add_to_leaderboard) { array_push($return_array, $user_array); } } // sort the array using an anonymous function array_sort_by_column($return_array, 'average_score'); return $return_array; }