Exemplo n.º 1
0
 /**
  * Fetches all courses moderated by selected player.
  *
  * @param int $id Id of selected player.
  *
  * @return array Array of all courses moderated by selected player.
  */
 public static function find_by_moderator($id)
 {
     $query = DB::connection()->prepare('SELECT c.* FROM Course c LEFT JOIN Course_moderators cm ON cm.courseid = c.id WHERE cm.playerid = :id');
     $query->execute(array('id' => $id));
     $rows = $query->fetchAll();
     $courses = array();
     foreach ($rows as $row) {
         $rounds = Round::find_by_course($row['id']);
         $moderators = Player::find_by_moderation($row['id']);
         $best = 0;
         $par = 0;
         foreach ($rounds as $round) {
             $scores = Score::find_by_round($round->id);
             foreach ($scores as $score) {
                 $par = $score->par;
                 if ($best > $score->throws || $best == 0) {
                     $best = $score->throws;
                 }
             }
         }
         $courses[] = new Course(array('id' => $row['id'], 'name' => $row['name'], 'address' => $row['address'], 'mapLink' => $row['maplink'], 'description' => $row['description'], 'added' => $row['added'], 'edited' => $row['edited'], 'rounds' => $rounds, 'moderators' => $moderators, 'best' => $best, 'par' => $par, 'url' => $row['url']));
     }
     return $courses;
 }
Exemplo n.º 2
0
 /**
  * Checks if round is ready to be saved. If not, displays round edit page with information already inputted. If yes, attempts to update selected round and related scores.
  *
  * @param int $id Id of selected round.
  */
 public static function update($id)
 {
     $player = self::get_user_logged_in();
     if (!$player) {
         View::make('player/login.html', array('error' => 'Vain kirjautuneet käyttäjät voivat muokata ratoja.'));
     }
     $params = $_POST;
     $players = Player::all();
     $course = Course::find($params['course']);
     $courses = Course::all();
     $played = $params['played'];
     $round = Round::find($id);
     $holes = Hole::find_by_course($course->id);
     $scores = Score::find_by_round($id);
     $numberOfPlayers = sizeof($scores);
     if ($params['course'] != $params['course_orig']) {
         // If course selection has changed we need to display edit page again with new information.
         $playerScores = array();
         $numberOfHoles = Hole::count_holes($params['course_orig']);
         for ($i = 1; $i <= $numberOfPlayers; $i++) {
             $holeScores = array();
             for ($j = 1; $j <= $numberOfHoles; $j++) {
                 $holeScores[] = $params['p' . $i . '_h' . $j];
             }
             $playerScores[] = array('player' => Player::find($params['player_' . $i]), 'holes' => $holeScores);
         }
         View::make('round/edit.html', array('numberOfPlayers' => $numberOfPlayers, 'players' => $players, 'course' => $course, 'holes' => $holes, 'courses' => $courses, 'playerScores' => $playerScores, 'round' => $round, 'scores' => $scores, 'played' => $played));
     } else {
         $attributes = array('courseId' => $params['course'], 'played' => $params['played']);
         $playerScores = array();
         $numberOfHoles = Hole::count_holes($params['course_orig']);
         $round = new Round(array_merge(array("id" => $round->id), $attributes));
         $errors = $round->errors();
         if (count($errors) == 0) {
             $round->update();
             for ($i = 1; $i <= $numberOfPlayers; $i++) {
                 $holeScores = array();
                 $scoreId = $params['score_' . $i];
                 for ($j = 1; $j <= $numberOfHoles; $j++) {
                     $hole = Hole::find_by_course_and_holenumber($params['course_orig'], $j);
                     $holeScores[] = array('throws' => $params['p' . $i . '_h' . $j], 'holeId' => $hole->id, 'holenumber' => $j);
                 }
                 $score = new Score(array('id' => $scoreId, 'playerId' => $params['player_' . $i], 'roundId' => $round->id, 'scores' => $holeScores));
                 $score->update();
             }
             Redirect::to('/round/' . $round->id, array('message' => 'Kierrosta muokattu.'));
         } else {
             View::make('round/new.html', array('errors' => $errors, 'attributes' => $attributes));
         }
     }
 }
Exemplo n.º 3
0
 /**
  * Fetches all rounds played on selected course.
  *
  * @param int $courseId Id of selected course.
  *
  * @return array Returns listing of all rounds played on selected course.
  */
 public static function find_by_course($courseId)
 {
     $query = DB::connection()->prepare('SELECT r.id, c.name AS course, r.played, r.added, p.name AS addedby FROM Round r LEFT JOIN Course c ON r.courseid = c.id LEFT JOIN Player p ON r.addedby = p.id WHERE r.courseid = :courseId');
     $query->execute(array('courseId' => $courseId));
     $rows = $query->fetchAll();
     $rounds = array();
     foreach ($rows as $row) {
         $best = 0;
         $par = 0;
         $sum = 0;
         $scores = Score::find_by_round($row['id']);
         foreach ($scores as $score) {
             $par = $score->par;
             if ($best > $score->throws || $best == 0) {
                 $best = $score->throws;
             }
             $sum += $score->throws;
         }
         $avg = $sum / count($scores);
         $rounds[] = new Round(array('id' => $row['id'], 'course' => $row['course'], 'played' => $row['played'], 'added' => $row['added'], 'addedBy' => $row['addedby'], 'scores' => $scores, 'best' => $best, 'par' => $par, 'average' => $avg, 'players' => count($scores)));
     }
     return $rounds;
 }