protected static function get_fields()
 {
     return self::select_fields() . ", " . AchievementCategory::select_fields();
 }
 protected static function get_fields()
 {
     return implode(', ', array(self::select_fields(), User::select_fields(), Achievement::select_fields(), AchievementCategory::select_fields()));
 }
 public function award()
 {
     if ($this->post) {
         $achievement = $this->load_achievement($this->PostData('achievement_id'));
         $user_temp = $this->PostData('users');
         if (!is_array($user_temp)) {
             $user_temp = explode(',', $user_temp);
         }
         $error_on = array();
         $success = 0;
         foreach ($user_temp as $name_temp) {
             $user_id = mysql_real_escape_string($name_temp);
             $user = User::find_by_id($user_id);
             if ($user) {
                 if ($achievement->award($user, $this->PostData("category_id"))) {
                     $success++;
                 } else {
                     $error_on[] = $name;
                 }
             } else {
                 $error_on[] = $name;
             }
         }
         if (count($user_temp) == 1) {
             if ($success == 1) {
                 Site::InstantFlash("notice", "{$user->nickname} has been awarded {$achievement->name}");
             } else {
                 Site::InstantFlash("error", "Unable to award achievement");
             }
         } else {
             if ($success == 0) {
                 Site::InstantFlash("error", "Unable to award achievements to any of the users listed");
             } elseif (count($error_on) > 0) {
                 Site::InstantFlash("error", "Awarded achievement to {$success} user" . ($success != 1 ? "s" : "") . ", failed to award to " . implode(", ", $error_on));
             } else {
                 Site::InstantFlash("notice", "Awarded achievements to all users listed.");
             }
         }
     }
     $filters = array();
     $pageQuery = '';
     if ($this->GetData('query')) {
         $pageQuery = $this->GetData('query');
         $query = mysql_real_escape_string($this->GetData('query'));
         $filters[] = "users.nickname LIKE '%{$query}%'";
     }
     $filter = implode('AND', $filters);
     $achievement_id = null;
     if ($this->GetData('achievement_id')) {
         $achievement_id = $this->GetData('achievement_id');
     }
     $page = 1;
     if ($this->GetData('page')) {
         $page = $this->GetData('page');
     }
     $users = User::paginate($filter, 'users.nickname ASC', $page, 50);
     $achievements = Achievement::find_all("", "achievements.created_at ASC");
     $achlist = array();
     foreach ($achievements as $ach) {
         $achlist[$ach->id] = "{$ach->id}. {$ach->name}";
     }
     // Yay - Magic Numbers!
     $category_id = 11;
     $categories = array();
     $all_categories = array();
     $all_categories = AchievementCategory::find_all();
     foreach ($all_categories as $category) {
         $event = Event::find("achievement_category_id={$category->id}");
         if (!$event || $event->check_user(Site::CurrentUser()) && $event->display_achievements) {
             $categories[$category->id] = $category->category_name;
             if ($category->default_category) {
                 $category_id = $category->id;
             }
         }
     }
     if ($this->GetData('category_id')) {
         $category_id = $this->GetData('category_id');
     }
     $this->assign("achievements", $achlist);
     $this->assign("categories", $categories);
     $this->assign("category_id", $category_id);
     $this->assign("achievement_id", $achievement_id);
     $this->assign("users", $users);
     $this->assign('pagequery', $pageQuery);
     $this->title = "Award Achievement";
     $this->render("achievement/award.tpl");
 }
 protected static function load_category($id = null)
 {
     if (!$id) {
         $id = $_GET['id'];
     }
     $category = AchievementCategory::find_by_id($id);
     if ($category) {
         return $category;
     } else {
         throw new Error404();
     }
 }