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