/**
  * Re-build from data posted by this control a single data object which this control is editing
  *
  * @param int $i_counter
  * @param int $i_id
  */
 protected function BuildPostedItem($i_counter = null, $i_id = null)
 {
     $s_key = $this->GetNamingPrefix() . 'Team' . $i_counter;
     $team = new Team($this->GetSettings());
     if (isset($_POST[$s_key]) and is_numeric($_POST[$s_key])) {
         $team->SetId($_POST[$s_key]);
     }
     $s_key = $this->GetNamingPrefix() . 'TeamValue' . $i_counter;
     if (isset($_POST[$s_key])) {
         $team->SetName($_POST[$s_key]);
     }
     # Infer player type from name
     if (stristr($team->GetName(), "ladies")) {
         $team->SetPlayerType(PlayerType::LADIES);
     } else {
         if (stristr($team->GetName(), "mixed")) {
             $team->SetPlayerType(PlayerType::MIXED);
         } else {
             if (stristr($team->GetName(), "Junior mixed")) {
                 $team->SetPlayerType(PlayerType::JUNIOR_MIXED);
             } else {
                 if (stristr($team->GetName(), "junior") or stristr($team->GetName(), "girls")) {
                     $team->SetPlayerType(PlayerType::GIRLS);
                 }
             }
         }
     }
     if ($team->GetId() or $team->GetName()) {
         $this->DataObjects()->Add($team);
     } else {
         $this->IgnorePostedItem($i_counter);
     }
 }
 /**
  * (non-PHPdoc)
  * @see data/validation/DataValidator#Test($s_input, $a_keys)
  */
 public function Test($a_data, $a_keys)
 {
     /* Only way to be sure of testing name against what it will be matched against is to use the code that transforms it when saving */
     $team = new Team($this->GetSiteSettings());
     $team->SetName($a_data[$a_keys[1]]);
     $team->SetPlayerType($a_data[$a_keys[2]]);
     $team_manager = new TeamManager($this->GetSiteSettings(), $this->GetDataConnection());
     $team = $team_manager->MatchExistingTeam($team);
     unset($team_manager);
     $current_id = isset($a_data[$a_keys[0]]) ? $a_data[$a_keys[0]] : null;
     return !$team->GetId() or $team->GetId() == $current_id;
 }
 /**
  * Re-build from data posted by this control a single data object which this control is editing
  *
  * @param int $i_counter
  * @param int $i_id
  */
 protected function BuildPostedItem($i_counter = null, $i_id = null)
 {
     $s_key = $this->GetNamingPrefix() . 'Team' . $i_counter;
     $o_team = null;
     $o_team = new Team($this->GetSettings());
     if (isset($_POST[$s_key]) and is_numeric($_POST[$s_key])) {
         $o_team->SetId($_POST[$s_key]);
     }
     $s_key = $this->GetNamingPrefix() . 'TeamValue' . $i_counter;
     if (isset($_POST[$s_key])) {
         $o_team->SetName($_POST[$s_key]);
     }
     $s_key = $this->GetNamingPrefix() . 'WithdrawnLeague' . $i_counter;
     $b_withdrawn_league = (isset($_POST[$s_key]) and $_POST[$s_key] == '1');
     if ($o_team->GetId() or $b_withdrawn_league) {
         $team_in_season = new TeamInSeason($o_team, null, $b_withdrawn_league);
         $this->DataObjects()->Add($team_in_season);
     } else {
         $this->IgnorePostedItem($i_counter);
     }
 }
 /**
  * @return void
  * @desc Re-build from data posted by this control the data object this control is editing
  */
 function BuildPostedDataObject()
 {
     $team = new Team($this->GetSettings());
     if (isset($_POST['item'])) {
         $team->SetId($_POST['item']);
     }
     if (isset($_POST['name'])) {
         $team->SetName($_POST['name']);
     }
     $team->SetWebsiteUrl($_POST['websiteUrl']);
     $team->SetIsActive(isset($_POST['playing']));
     $team->SetIntro(ucfirst(trim($_POST['intro'])));
     $team->SetPlayingTimes($_POST['times']);
     $team->SetCost($_POST['yearCost']);
     $team->SetContact($_POST['contact']);
     $team->SetPrivateContact($_POST['private']);
     $ground = new Ground($this->GetSettings());
     $ground->SetId($_POST['ground']);
     $team->SetGround($ground);
     if (isset($_POST['team_type'])) {
         $team->SetTeamType($_POST['team_type']);
         if ($team->GetTeamType() == Team::SCHOOL_YEARS) {
             $team->SetSchoolYears(array(1 => isset($_POST['year1']), 2 => isset($_POST['year2']), 3 => isset($_POST['year3']), 4 => isset($_POST['year4']), 5 => isset($_POST['year5']), 6 => isset($_POST['year6']), 7 => isset($_POST['year7']), 8 => isset($_POST['year8']), 9 => isset($_POST['year9']), 10 => isset($_POST['year10']), 11 => isset($_POST['year11']), 12 => isset($_POST['year12'])));
         }
     }
     if ($this->is_admin) {
         $team->SetShortUrl($_POST[$this->GetNamingPrefix() . 'ShortUrl']);
         $team->SetPlayerType($_POST['playerType']);
         if (isset($_POST['club']) and is_numeric($_POST['club'])) {
             $club = new Club($this->GetSettings());
             $club->SetId($_POST['club']);
             $team->SetClub($club);
         }
     }
     $this->SetDataObject($team);
 }
 /**
  * @return void
  * @desc Re-build from data posted by this control the data object this control is editing
  */
 function BuildPostedDataObject()
 {
     $match = new Match($this->GetSettings());
     $match->SetId($this->GetDataObjectId());
     # Get match date
     $s_key = $this->GetNamingPrefix() . 'Date';
     if (isset($_POST[$s_key]) and strlen($_POST[$s_key]) and is_numeric($_POST[$s_key])) {
         $match->SetStartTime($_POST[$s_key]);
     }
     # Get team names
     $s_key = $this->GetNamingPrefix() . 'Home';
     if (isset($_POST[$s_key])) {
         $team_data = explode(MatchHighlightsEditControl::DATA_SEPARATOR, $_POST[$s_key], 2);
         if (count($team_data) == 2) {
             $o_home = new Team($this->GetSettings());
             $o_home->SetId($team_data[0]);
             $o_home->SetName($team_data[1]);
             $match->SetHomeTeam($o_home);
         }
     }
     $s_key = $this->GetNamingPrefix() . 'Away';
     if (isset($_POST[$s_key])) {
         $team_data = explode(MatchHighlightsEditControl::DATA_SEPARATOR, $_POST[$s_key], 2);
         if (count($team_data) == 2) {
             $o_away = new Team($this->GetSettings());
             $o_away->SetId($team_data[0]);
             $o_away->SetName($team_data[1]);
             $match->SetAwayTeam($o_away);
         }
     }
     # Get the result
     $s_key = $this->GetNamingPrefix() . 'Result';
     if (isset($_POST[$s_key])) {
         $s_result = $_POST[$s_key];
         if (strlen($s_result)) {
             $match->Result()->SetResultType($s_result);
         }
     }
     # Get players of the match. Fields to use depend on which radio button was selected.
     $s_key = $this->GetNamingPrefix() . 'POM';
     if (isset($_POST[$s_key])) {
         $pom_type = (int) $_POST[$s_key];
         if ($pom_type == MatchHighlightsEditControl::PLAYER_OF_THE_MATCH_OVERALL) {
             $s_key = $this->GetNamingPrefix() . 'Player';
             if (isset($_POST[$s_key]) and $_POST[$s_key]) {
                 $player = new Player($this->GetSettings());
                 $player->SetName($_POST[$s_key]);
                 $s_key = $this->GetNamingPrefix() . 'PlayerTeam';
                 if (isset($_POST[$s_key])) {
                     $player->Team()->SetId($_POST[$s_key]);
                 }
                 $match->Result()->SetPlayerOfTheMatch($player);
             }
         } else {
             if ($pom_type == MatchHighlightsEditControl::PLAYER_OF_THE_MATCH_HOME_AND_AWAY) {
                 $s_key = $this->GetNamingPrefix() . 'PlayerHome';
                 if (isset($_POST[$s_key]) and $_POST[$s_key]) {
                     $player = new Player($this->GetSettings());
                     $player->SetName($_POST[$s_key]);
                     $player->Team()->SetId($match->GetHomeTeamId());
                     $match->Result()->SetPlayerOfTheMatchHome($player);
                 }
                 $s_key = $this->GetNamingPrefix() . 'PlayerAway';
                 if (isset($_POST[$s_key]) and $_POST[$s_key]) {
                     $player = new Player($this->GetSettings());
                     $player->SetName($_POST[$s_key]);
                     $player->Team()->SetId($match->GetAwayTeamId());
                     $match->Result()->SetPlayerOfTheMatchAway($player);
                 }
             }
         }
     }
     $s_key = $this->GetNamingPrefix() . 'Comments';
     if (isset($_POST[$s_key])) {
         $match->SetNewComment($_POST[$s_key]);
     }
     $this->SetDataObject($match);
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $o_result
  */
 protected function BuildItems(MySqlRawData $o_result)
 {
     # use CollectionBuilder to handle duplicates
     $o_ground_builder = new CollectionBuilder();
     $o_ground = null;
     while ($row = $o_result->fetch()) {
         # check whether this is a new ground
         if (!$o_ground_builder->IsDone($row->ground_id)) {
             # store any exisiting ground
             if ($o_ground != null) {
                 $this->Add($o_ground);
             }
             # create the new ground
             $o_ground = new Ground($this->o_settings);
             $o_ground->SetId($row->ground_id);
             $o_ground->SetDirections($row->directions);
             $o_ground->SetParking($row->parking);
             $o_ground->SetFacilities($row->facilities);
             $o_ground->SetShortUrl($row->short_url);
             $o_ground->SetDateUpdated($row->date_changed);
             if (isset($row->update_search) and $row->update_search == 1) {
                 $o_ground->SetSearchUpdateRequired();
             }
             $o_address = $o_ground->GetAddress();
             $o_address->SetSaon($row->saon);
             $o_address->SetPaon($row->paon);
             $o_address->SetStreetDescriptor($row->street_descriptor);
             $o_address->SetLocality($row->locality);
             $o_address->SetTown($row->town);
             $o_address->SetAdministrativeArea($row->administrative_area);
             $o_address->SetPostcode($row->postcode);
             if (isset($row->latitude)) {
                 $o_address->SetGeoLocation($row->latitude, $row->longitude, $row->geo_precision);
             }
             $o_ground->SetAddress($o_address);
         }
         if (isset($row->team_name)) {
             $team = new Team($this->GetSettings());
             $team->SetName($row->team_name);
             $team->SetShortUrl($row->team_short_url);
             $team->SetPlayerType($row->player_type_id);
             $o_ground->Teams()->Add($team);
         }
     }
     # store final ground
     if ($o_ground != null) {
         $this->Add($o_ground);
     }
 }
 /**
  * Builds a match object containing the result information posted by the control
  *
  */
 public function BuildPostedDataObject()
 {
     $o_match = new Match($this->GetSettings());
     $o_match->SetId($this->GetDataObjectId());
     # Get match date
     $s_key = $this->GetNamingPrefix() . 'Date';
     if (isset($_POST[$s_key]) and strlen($_POST[$s_key]) and is_numeric($_POST[$s_key])) {
         $o_match->SetStartTime($_POST[$s_key]);
     }
     # Get team names
     $s_key = $this->GetNamingPrefix() . 'Home';
     if (isset($_POST[$s_key])) {
         $team_data = explode(";", $_POST[$s_key], 2);
         if (count($team_data) == 2) {
             $o_home = new Team($this->GetSettings());
             $o_home->SetId($team_data[0]);
             $o_home->SetName($team_data[1]);
             $o_match->SetHomeTeam($o_home);
         }
     }
     $s_key = $this->GetNamingPrefix() . 'Away';
     if (isset($_POST[$s_key])) {
         $team_data = explode(";", $_POST[$s_key], 2);
         if (count($team_data) == 2) {
             $o_away = new Team($this->GetSettings());
             $o_away->SetId($team_data[0]);
             $o_away->SetName($team_data[1]);
             $o_match->SetAwayTeam($o_away);
         }
     }
     # Get who batted first
     $s_key = $this->GetNamingPrefix() . 'BatFirst';
     if (isset($_POST[$s_key])) {
         $s_batted = $_POST[$s_key];
         if ($s_batted == 'home') {
             $o_match->Result()->SetHomeBattedFirst(true);
         } else {
             if ($s_batted == 'away') {
                 $o_match->Result()->SetHomeBattedFirst(false);
             }
         }
     }
     # Get the result
     $s_key = $this->GetNamingPrefix() . 'Result';
     if (isset($_POST[$s_key])) {
         $s_result = $_POST[$s_key];
         if (strlen($s_result)) {
             $o_match->Result()->SetResultType($s_result);
         }
     }
     # Get the home score
     $s_key = $this->GetNamingPrefix() . 'HomeRuns';
     if (isset($_POST[$s_key])) {
         $s_home_runs = $_POST[$s_key];
         if (strlen($s_home_runs)) {
             $o_match->Result()->SetHomeRuns($s_home_runs);
         }
     }
     $s_key = $this->GetNamingPrefix() . 'HomeWickets';
     if (isset($_POST[$s_key])) {
         $s_home_wickets = $_POST[$s_key];
         if (strlen($s_home_wickets)) {
             $o_match->Result()->SetHomeWickets($s_home_wickets);
         }
     }
     # Get the away score
     $s_key = $this->GetNamingPrefix() . 'AwayRuns';
     if (isset($_POST[$s_key])) {
         $s_away_runs = $_POST[$s_key];
         if (strlen($s_away_runs)) {
             $o_match->Result()->SetAwayRuns($s_away_runs);
         }
     }
     $s_key = $this->GetNamingPrefix() . 'AwayWickets';
     if (isset($_POST[$s_key])) {
         $s_away_wickets = $_POST[$s_key];
         if (strlen($s_away_wickets)) {
             $o_match->Result()->SetAwayWickets($s_away_wickets);
         }
     }
     $s_key = $this->GetNamingPrefix() . 'Comments';
     if (isset($_POST[$s_key])) {
         $o_match->SetNewComment($_POST[$s_key]);
     }
     $this->SetDataObject($o_match);
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $o_result
  */
 protected function BuildItems(MySqlRawData $o_result)
 {
     $this->Clear();
     $o_match_builder = new CollectionBuilder();
     $o_team_builder = new CollectionBuilder();
     $o_tournament_match_builder = new CollectionBuilder();
     $season_builder = new CollectionBuilder();
     while ($o_row = $o_result->fetch()) {
         if (!$o_match_builder->IsDone($o_row->match_id)) {
             if (isset($o_match)) {
                 $this->Add($o_match);
                 $o_team_builder->Reset();
                 $o_tournament_match_builder->Reset();
                 $season_builder->Reset();
             }
             # create new
             $o_match = new Match($this->GetSettings());
             $this->BuildMatchSummary($o_match, $o_row);
             if ($o_match->GetMatchType() == MatchType::TOURNAMENT_MATCH and isset($o_row->tournament_match_id)) {
                 $o_tourn = new Match($this->o_settings);
                 $o_tourn->SetMatchType(MatchType::TOURNAMENT);
                 $o_tourn->SetId($o_row->tournament_match_id);
                 if (isset($o_row->tournament_title)) {
                     $o_tourn->SetTitle($o_row->tournament_title);
                 }
                 if (isset($o_row->tournament_url)) {
                     $o_tourn->SetShortUrl($o_row->tournament_url);
                 }
                 $o_match->SetTournament($o_tourn);
                 unset($o_tourn);
             }
             if (isset($o_row->home_team_id) and !is_null($o_row->home_team_id)) {
                 $o_home = new Team($this->o_settings);
                 $o_home->SetId($o_row->home_team_id);
                 if (isset($o_row->home_team_name)) {
                     $o_home->SetName($o_row->home_team_name);
                 }
                 if (isset($o_row->home_short_url)) {
                     $o_home->SetShortUrl($o_row->home_short_url);
                 }
                 $o_match->SetHomeTeam($o_home);
                 unset($o_home);
             }
             $this->BuildGround($o_match, $o_row);
         }
         # Add away teams
         if (isset($o_row->away_team_id) && !$o_team_builder->IsDone($o_row->away_team_id)) {
             $o_away = new Team($this->o_settings);
             $o_away->SetId($o_row->away_team_id);
             if (isset($o_row->away_team_name)) {
                 $o_away->SetName($o_row->away_team_name);
             }
             if (isset($o_row->away_short_url)) {
                 $o_away->SetShortUrl($o_row->away_short_url);
             }
             $o_match->AddAwayTeam($o_away);
             unset($o_away);
         }
         # Add matches in tournament
         if (isset($o_row->match_id_in_tournament) and is_numeric($o_row->match_id_in_tournament) and !$o_tournament_match_builder->IsDone($o_row->match_id_in_tournament)) {
             $o_tmatch = new Match($this->o_settings);
             $o_tmatch->SetMatchType(MatchType::TOURNAMENT_MATCH);
             $o_tmatch->SetId($o_row->match_id_in_tournament);
             $o_tmatch->SetTitle($o_row->tournament_match_title);
             $o_tmatch->SetShortUrl($o_row->tournament_match_url);
             $o_tmatch->SetStartTime($o_row->tournament_match_time);
             $o_tmatch->SetIsStartTimeKnown($o_row->tournament_match_start_time_known);
             $o_tmatch->SetOrderInTournament($o_row->order_in_tournament);
             $o_match->AddMatchInTournament($o_tmatch);
             unset($o_tmatch);
         }
         # Add seasons
         $this->BuildSeason($o_match, $o_row, $season_builder);
     }
     # Add final match
     if (isset($o_match)) {
         $this->Add($o_match);
     }
     return true;
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $result
  */
 protected function BuildItems(MySqlRawData $result)
 {
     # use CollectionBuilder to handle duplicates
     $school_builder = new CollectionBuilder();
     $school = null;
     while ($row = $result->fetch()) {
         # check whether this is a new school
         if (!$school_builder->IsDone($row->club_id)) {
             # store any exisiting school
             if ($school != null) {
                 $this->Add($school);
             }
             # create the new school
             $school = new School($this->GetSettings());
             $school->SetId($row->club_id);
             $school->SetName($row->club_name);
             $school->SetTypeOfClub($row->club_type);
             $school->SetHowManyPlayers($row->how_many_players);
             $school->SetAgeRangeLower($row->age_range_lower);
             $school->SetAgeRangeUpper($row->age_range_upper);
             $school->SetPlaysOutdoors($row->plays_outdoors);
             $school->SetPlaysIndoors($row->plays_indoors);
             $school->SetShortUrl($row->short_url);
             $school->SetTwitterAccount($row->twitter);
             $school->SetFacebookUrl($row->facebook);
             $school->SetInstagramAccount($row->instagram);
             $school->SetClubmarkAccredited($row->clubmark);
             # Infer partial address from school name
             $school_name = $school->GetName();
             $comma = strrpos($school_name, ",");
             if ($comma !== false) {
                 $school->Ground()->GetAddress()->SetTown(trim(substr($school_name, $comma + 1)));
                 $school->Ground()->GetAddress()->SetPaon(substr($school_name, 0, $comma));
             }
         }
         # team the only cause of multiple rows (so far) so add to current school
         if ($row->team_id) {
             $team = new Team($this->GetSettings());
             $team->SetId($row->team_id);
             $team->SetName($row->team_name);
             $team->SetShortUrl($row->team_short_url);
             $school->Add($team);
         }
     }
     # store final club
     if ($school != null) {
         $this->Add($school);
     }
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $o_result
  */
 protected function BuildItems(MySqlRawData $o_result)
 {
     $this->Clear();
     /* @var $o_team Team */
     # use CollectionBuilder to handle duplicates
     $o_team_builder = new CollectionBuilder();
     $o_season_builder = new CollectionBuilder();
     $o_team = null;
     while ($row = $o_result->fetch()) {
         # check whether this is a new team
         if (!$o_team_builder->IsDone($row->team_id)) {
             # store any exisiting team
             if ($o_team != null) {
                 $this->Add($o_team);
                 $o_season_builder->Reset();
             }
             # create the new team
             $o_team = new Team($this->o_settings);
             $o_team->SetId($row->team_id);
             $o_team->SetName($row->team_name);
             if (isset($row->website)) {
                 $o_team->SetWebsiteUrl($row->website);
             }
             if (isset($row->active)) {
                 $o_team->SetIsActive($row->active);
             }
             if (isset($row->team_type)) {
                 $o_team->SetTeamType($row->team_type);
             }
             if (isset($row->intro)) {
                 $o_team->SetIntro($row->intro);
             }
             if (isset($row->playing_times)) {
                 $o_team->SetPlayingTimes($row->playing_times);
             }
             if (isset($row->cost)) {
                 $o_team->SetCost($row->cost);
             }
             if (isset($row->contact)) {
                 $o_team->SetContact($row->contact);
             }
             if (isset($row->contact_nsa)) {
                 $o_team->SetPrivateContact($row->contact_nsa);
             }
             if (isset($row->short_url)) {
                 $o_team->SetShortUrl($row->short_url);
             }
             if (isset($row->player_type_id)) {
                 $o_team->SetPlayerType($row->player_type_id);
             }
             $o_team->SetSchoolYears(array(1 => isset($row->year1) and $row->year1, 2 => isset($row->year2) and $row->year2, 3 => isset($row->year3) and $row->year3, 4 => isset($row->year4) and $row->year4, 5 => isset($row->year5) and $row->year5, 6 => isset($row->year6) and $row->year6, 7 => isset($row->year7) and $row->year7, 8 => isset($row->year8) and $row->year8, 9 => isset($row->year9) and $row->year9, 10 => isset($row->year10) and $row->year10, 11 => isset($row->year11) and $row->year11, 12 => isset($row->year12) and $row->year12));
             if (isset($row->update_search) and $row->update_search == 1) {
                 $o_team->SetSearchUpdateRequired();
             }
             if (isset($row->date_changed)) {
                 $o_team->SetLastAudit(new AuditData($row->modified_by_id, $row->known_as, $row->date_changed));
             }
             $club = new Club($this->GetSettings());
             if (isset($row->club_id)) {
                 $club->SetId($row->club_id);
                 if (isset($row->club_name)) {
                     $club->SetName($row->club_name);
                 }
                 if (isset($row->twitter)) {
                     $club->SetTwitterAccount($row->twitter);
                 }
                 if (isset($row->facebook)) {
                     $club->SetFacebookUrl($row->facebook);
                 }
                 if (isset($row->instagram)) {
                     $club->SetInstagramAccount($row->instagram);
                 }
                 if (isset($row->clubmark)) {
                     $club->SetClubmarkAccredited($row->clubmark);
                 }
                 if (isset($row->club_short_url)) {
                     $club->SetShortUrl($row->club_short_url);
                 }
             }
             # If the website is actually a Facebook page, move it, overriding the club Facebook page is necessary
             if (strpos($o_team->GetWebsiteUrl(), 'facebook.com/') !== false) {
                 $club->SetFacebookUrl($o_team->GetWebsiteUrl());
                 $o_team->SetWebsiteUrl('');
             }
             $o_team->SetClub($club);
             if (isset($row->ground_id) and $row->ground_id) {
                 $o_ground = new Ground($this->o_settings);
                 $o_ground->SetId($row->ground_id);
                 $address = $o_ground->GetAddress();
                 if (isset($row->saon)) {
                     $address->SetSaon($row->saon);
                 }
                 if (isset($row->town)) {
                     if (isset($row->paon)) {
                         $address->SetPaon($row->paon);
                     }
                     if (isset($row->street_descriptor)) {
                         $address->SetStreetDescriptor($row->street_descriptor);
                     }
                     if (isset($row->locality)) {
                         $address->SetLocality($row->locality);
                     }
                     $address->SetTown($row->town);
                     if (isset($row->administrative_area)) {
                         $address->SetAdministrativeArea($row->administrative_area);
                     }
                     if (isset($row->postcode)) {
                         $address->SetPostcode($row->postcode);
                     }
                     if (isset($row->latitude)) {
                         $address->SetGeoLocation($row->latitude, $row->longitude, null);
                     }
                     $o_ground->SetAddress($address);
                 }
                 if (isset($row->ground_short_url)) {
                     $o_ground->SetShortUrl($row->ground_short_url);
                 }
                 $o_team->SetGround($o_ground);
             }
         }
         # Competition/Season a cause of multiple rows
         if (isset($row->season_id) and !$o_season_builder->IsDone($row->season_id) and isset($row->competition_id)) {
             $o_season = new Season($this->o_settings);
             $o_season->SetId($row->season_id);
             $o_season->SetName($row->season_name);
             $o_season->SetIsLatest($row->is_latest);
             $o_season->SetStartYear($row->start_year);
             $o_season->SetEndYear($row->end_year);
             if (isset($row->season_short_url)) {
                 $o_season->SetShortUrl($row->season_short_url);
             }
             $o_competition = new Competition($this->o_settings);
             $o_competition->SetId($row->competition_id);
             $o_competition->SetName($row->competition_name);
             $o_season->SetCompetition($o_competition);
             $o_team->Seasons()->Add(new TeamInSeason(null, $o_season, isset($row->withdrawn_league) ? $row->withdrawn_league : null));
             unset($o_season);
             unset($o_competition);
         }
     }
     # store final team
     if ($o_team != null) {
         $this->Add($o_team);
     }
     return true;
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $o_result
  */
 protected function BuildItems(MySqlRawData $o_result)
 {
     /* @var $o_season Season */
     $this->Clear();
     # use CollectionBuilder to handle duplicates
     $o_season_builder = new CollectionBuilder();
     $o_team_builder = new CollectionBuilder();
     $o_rule_builder = new CollectionBuilder();
     $o_points_builder = new CollectionBuilder();
     $o_type_builder = new CollectionBuilder();
     $o_season = null;
     while ($o_row = $o_result->fetch()) {
         # check whether this is a new season
         if (!$o_season_builder->IsDone($o_row->season_id)) {
             # store any exisiting season and reset
             if ($o_season != null) {
                 $this->Add($o_season);
                 $o_team_builder->Reset();
                 $o_rule_builder->Reset();
                 $o_points_builder->Reset();
                 $o_type_builder->Reset();
             }
             # create the new season
             $o_season = new Season($this->GetSettings());
             $this->BuildSeason($o_season, $o_row);
         }
         # Teams the first cause of multiple rows
         if (isset($o_row->team_id)) {
             if (!$o_team_builder->IsDone($o_row->team_id)) {
                 if (isset($o_team)) {
                     unset($o_team);
                 }
                 $o_team = new Team($this->GetSettings());
                 $o_team->SetId($o_row->team_id);
                 $o_team->SetName($o_row->team_name);
                 $ground = new Ground($this->GetSettings());
                 $ground->SetId($o_row->team_ground_id);
                 $o_team->SetGround($ground);
                 if (isset($o_row->team_short_url)) {
                     $o_team->SetShortUrl($o_row->team_short_url);
                 }
                 $o_season->AddTeam($o_team);
                 if (isset($o_row->withdrawn_league) and (bool) $o_row->withdrawn_league) {
                     $o_season->TeamsWithdrawnFromLeague()->Add($o_team);
                 }
             }
             # Points adjustments - should come with team and in order of team
             if (isset($o_row->point_id) and !$o_points_builder->IsDone($o_row->point_id)) {
                 $o_point = new PointsAdjustment($o_row->point_id, $o_row->points, $o_team, $o_row->reason, $o_row->points_date);
                 $o_season->PointsAdjustments()->Add($o_point);
             }
         }
         # Season rules
         if (isset($o_row->season_rule_id) and !$o_rule_builder->IsDone($o_row->season_rule_id)) {
             $o_mr = new MatchResult($o_row->match_result_id);
             $o_mr->SetHomePoints($o_row->home_points);
             $o_mr->SetAwayPoints($o_row->away_points);
             $o_season->PossibleResults()->Add($o_mr);
             unset($o_mr);
         }
         # Match types
         if (isset($o_row->season_match_type) and !$o_type_builder->IsDone($o_row->season_match_type)) {
             $o_season->MatchTypes()->Add((int) $o_row->season_match_type);
         }
     }
     # store final season
     if ($o_season != null) {
         $this->Add($o_season);
     }
     return true;
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $o_result
  */
 protected function BuildItems(MySqlRawData $o_result)
 {
     $this->Clear();
     $o_match_builder = new CollectionBuilder();
     $o_team_builder = new CollectionBuilder();
     while ($o_row = $o_result->fetch()) {
         if (!$o_match_builder->IsDone($o_row->match_id)) {
             if (isset($o_match)) {
                 $this->Add($o_match);
                 $o_team_builder->Reset();
             }
             # create new
             $o_match = new Match($this->GetSettings());
             $o_match->SetId($o_row->match_id);
             if (isset($o_row->start_time)) {
                 $o_match->SetStartTime($o_row->start_time);
             }
             if (isset($o_row->home_runs)) {
                 $o_match->Result()->SetHomeRuns($o_row->home_runs);
             }
             if (isset($o_row->away_runs)) {
                 $o_match->Result()->SetAwayRuns($o_row->away_runs);
             }
             if (isset($o_row->match_result_id)) {
                 $o_match->Result()->SetResultType($o_row->match_result_id);
             }
             if (isset($o_row->home_team_id) and !is_null($o_row->home_team_id)) {
                 $o_home = new Team($this->o_settings);
                 $o_home->SetId($o_row->home_team_id);
                 if (isset($o_row->home_team_name)) {
                     $o_home->SetName($o_row->home_team_name);
                 }
                 if (isset($o_row->home_short_url)) {
                     $o_home->SetShortUrl($o_row->home_short_url);
                 }
                 $o_match->SetHomeTeam($o_home);
                 unset($o_home);
             }
             if (isset($o_row->ground_id)) {
                 $o_ground = new Ground($this->GetSettings());
                 $o_ground->SetId($o_row->ground_id);
                 $o_match->SetGround($o_ground);
                 unset($o_ground);
             }
         }
         # Add away teams
         if (isset($o_row->away_team_id) && !$o_team_builder->IsDone($o_row->away_team_id)) {
             $o_away = new Team($this->o_settings);
             $o_away->SetId($o_row->away_team_id);
             if (isset($o_row->away_team_name)) {
                 $o_away->SetName($o_row->away_team_name);
             }
             if (isset($o_row->away_short_url)) {
                 $o_away->SetShortUrl($o_row->away_short_url);
             }
             $o_match->AddAwayTeam($o_away);
             unset($o_away);
         }
     }
     # Add final match
     if (isset($o_match)) {
         $this->Add($o_match);
     }
     return true;
 }
 /**
  * Builds data posted on pages 2/3 back into a match object
  * @return Match
  */
 private function BuildPostedScorecard()
 {
     $match = new Match($this->GetSettings());
     $match->SetId($this->GetDataObjectId());
     # Must have data on which team is which, otherwise none of the rest makes sense
     # Team ids are essential for saving data, while team names and match title are
     # purely so they can be redisplayed if the page is invalid
     $key = "teams";
     if (!isset($_POST[$key]) or strpos($_POST[$key], ScorecardEditControl::DATA_SEPARATOR) === false) {
         return $match;
     }
     $teams = explode(ScorecardEditControl::DATA_SEPARATOR, $_POST[$key], 6);
     if (count($teams) != 6) {
         return $match;
     }
     switch ($teams[0]) {
         case "0":
             $match->Result()->SetHomeBattedFirst(false);
             $home_batting = $this->GetCurrentPage() == 3;
             break;
         case "1":
             $match->Result()->SetHomeBattedFirst(true);
             $home_batting = $this->GetCurrentPage() == 2;
             break;
         default:
             $home_batting = $this->GetCurrentPage() == 2;
     }
     $home_team = new Team($this->GetSettings());
     $home_team->SetId($teams[1]);
     $home_team->SetName($teams[2]);
     $match->SetHomeTeam($home_team);
     $away_team = new Team($this->GetSettings());
     $away_team->SetId($teams[3]);
     $away_team->SetName($teams[4]);
     $match->SetAwayTeam($away_team);
     $match->SetTitle($teams[5]);
     # Read posted batting data
     $key = "batRows";
     if (isset($_POST[$key])) {
         # This controls not only which fields are read, but also which are redisplayed on an invalid postback or for the next innings.
         $match->SetMaximumPlayersPerTeam(intval($_POST[$key]));
     }
     for ($i = 1; $i <= $match->GetMaximumPlayersPerTeam(); $i++) {
         $key = "batName{$i}";
         if (isset($_POST[$key])) {
             # The row exists - has it been filled in?
             if (trim($_POST[$key])) {
                 # Read the batter data in this row
                 $player = new Player($this->GetSettings());
                 $player->SetName($_POST[$key]);
                 $player->Team()->SetId($home_batting ? $home_team->GetId() : $away_team->GetId());
                 $key = "batHowOut{$i}";
                 $how_out = (isset($_POST[$key]) and is_numeric($_POST[$key])) ? (int) $_POST[$key] : null;
                 $key = "batOutBy{$i}";
                 $dismissed_by = null;
                 if (isset($_POST[$key]) and trim($_POST[$key])) {
                     $dismissed_by = new Player($this->GetSettings());
                     $dismissed_by->SetName($_POST[$key]);
                     $dismissed_by->Team()->SetId($home_batting ? $away_team->GetId() : $home_team->GetId());
                 }
                 $key = "batBowledBy{$i}";
                 $bowler = null;
                 if (isset($_POST[$key]) and trim($_POST[$key])) {
                     $bowler = new Player($this->GetSettings());
                     $bowler->SetName($_POST[$key]);
                     $bowler->Team()->SetId($home_batting ? $away_team->GetId() : $home_team->GetId());
                 }
                 # Correct caught and bowled if marked as caught
                 if ($how_out == Batting::CAUGHT and !is_null($dismissed_by) and !is_null($bowler) and trim($dismissed_by->GetName()) == trim($bowler->GetName())) {
                     $how_out = Batting::CAUGHT_AND_BOWLED;
                     $dismissed_by = null;
                 }
                 $key = "batRuns{$i}";
                 $runs = (isset($_POST[$key]) and is_numeric($_POST[$key])) ? (int) $_POST[$key] : null;
                 $key = "batBalls{$i}";
                 $balls = (isset($_POST[$key]) and is_numeric($_POST[$key])) ? (int) $_POST[$key] : null;
                 # Add that batting performance to the match result
                 $batting = new Batting($player, $how_out, $dismissed_by, $bowler, $runs, $balls);
                 if ($home_batting) {
                     $match->Result()->HomeBatting()->Add($batting);
                 } else {
                     $match->Result()->AwayBatting()->Add($batting);
                 }
             }
         }
     }
     $key = "batByes";
     if (isset($_POST[$key]) and is_numeric($_POST[$key])) {
         $player = new Player($this->GetSettings());
         $player->SetPlayerRole(Player::BYES);
         $player->Team()->SetId($home_batting ? $home_team->GetId() : $away_team->GetId());
         $batting = new Batting($player, null, null, null, (int) $_POST[$key]);
         if ($home_batting) {
             $match->Result()->HomeBatting()->Add($batting);
         } else {
             $match->Result()->AwayBatting()->Add($batting);
         }
     }
     $key = "batWides";
     if (isset($_POST[$key]) and is_numeric($_POST[$key])) {
         $player = new Player($this->GetSettings());
         $player->SetPlayerRole(Player::WIDES);
         $player->Team()->SetId($home_batting ? $home_team->GetId() : $away_team->GetId());
         $batting = new Batting($player, null, null, null, (int) $_POST[$key]);
         if ($home_batting) {
             $match->Result()->HomeBatting()->Add($batting);
         } else {
             $match->Result()->AwayBatting()->Add($batting);
         }
     }
     $key = "batNoBalls";
     if (isset($_POST[$key]) and is_numeric($_POST[$key])) {
         $player = new Player($this->GetSettings());
         $player->SetPlayerRole(Player::NO_BALLS);
         $player->Team()->SetId($home_batting ? $home_team->GetId() : $away_team->GetId());
         $batting = new Batting($player, null, null, null, (int) $_POST[$key]);
         if ($home_batting) {
             $match->Result()->HomeBatting()->Add($batting);
         } else {
             $match->Result()->AwayBatting()->Add($batting);
         }
     }
     $key = "batBonus";
     if (isset($_POST[$key]) and is_numeric($_POST[$key])) {
         $player = new Player($this->GetSettings());
         $player->SetPlayerRole(Player::BONUS_RUNS);
         $player->Team()->SetId($home_batting ? $home_team->GetId() : $away_team->GetId());
         $batting = new Batting($player, null, null, null, (int) $_POST[$key]);
         if ($home_batting) {
             $match->Result()->HomeBatting()->Add($batting);
         } else {
             $match->Result()->AwayBatting()->Add($batting);
         }
     }
     $key = "batTotal";
     if (isset($_POST[$key]) and is_numeric($_POST[$key])) {
         if ($home_batting) {
             $match->Result()->SetHomeRuns($_POST[$key]);
         } else {
             $match->Result()->SetAwayRuns($_POST[$key]);
         }
     }
     $key = "batWickets";
     if (isset($_POST[$key]) and is_numeric($_POST[$key])) {
         if ($home_batting) {
             $match->Result()->SetHomeWickets($_POST[$key]);
         } else {
             $match->Result()->SetAwayWickets($_POST[$key]);
         }
     }
     # Read posted bowling data
     $key = "bowlerRows";
     if (isset($_POST[$key])) {
         # This controls not only which fields are read, but also which are redisplayed on an invalid postback or for the next innings.
         $match->SetOvers(intval($_POST[$key]));
     }
     for ($i = 1; $i <= $match->GetOvers(); $i++) {
         $key = "bowlerName{$i}";
         if (isset($_POST[$key])) {
             # The row exists - has it been filled in?
             if (trim($_POST[$key])) {
                 # Read the bowler data in this row
                 # strlen test allows 0 but not empty string, because is_numeric allows empty string
                 $player = new Player($this->GetSettings());
                 $player->SetName($_POST[$key]);
                 $player->Team()->SetId($home_batting ? $away_team->GetId() : $home_team->GetId());
                 $key = "bowlerBalls{$i}";
                 $balls = (isset($_POST[$key]) and is_numeric($_POST[$key]) and strlen(trim($_POST[$key]))) ? (int) $_POST[$key] : null;
                 $key = "bowlerNoBalls{$i}";
                 $no_balls = (isset($_POST[$key]) and is_numeric($_POST[$key]) and strlen(trim($_POST[$key]))) ? (int) $_POST[$key] : null;
                 $key = "bowlerWides{$i}";
                 $wides = (isset($_POST[$key]) and is_numeric($_POST[$key]) and strlen(trim($_POST[$key]))) ? (int) $_POST[$key] : null;
                 $key = "bowlerRuns{$i}";
                 $runs = (isset($_POST[$key]) and is_numeric($_POST[$key]) and strlen(trim($_POST[$key]))) ? (int) $_POST[$key] : null;
                 # Add that over to the match result
                 $bowling = new Over($player);
                 $bowling->SetBalls($balls);
                 $bowling->SetNoBalls($no_balls);
                 $bowling->SetWides($wides);
                 $bowling->SetRunsInOver($runs);
                 if ($home_batting) {
                     $match->Result()->AwayOvers()->Add($bowling);
                 } else {
                     $match->Result()->HomeOvers()->Add($bowling);
                 }
             }
         }
     }
     return $match;
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $result
  */
 protected function BuildItems(MySqlRawData $result)
 {
     # use CollectionBuilder to handle duplicates
     $club_builder = new CollectionBuilder();
     $club = null;
     while ($row = $result->fetch()) {
         # check whether this is a new club
         if (!$club_builder->IsDone($row->club_id)) {
             # store any exisiting club
             if ($club != null) {
                 $this->Add($club);
             }
             # create the new club
             $club = new Club($this->GetSettings());
             $club->SetId($row->club_id);
             $club->SetName($row->club_name);
             $club->SetTypeOfClub($row->club_type);
             $club->SetHowManyPlayers($row->how_many_players);
             $club->SetAgeRangeLower($row->age_range_lower);
             $club->SetAgeRangeUpper($row->age_range_upper);
             $club->SetPlaysOutdoors($row->plays_outdoors);
             $club->SetPlaysIndoors($row->plays_indoors);
             $club->SetShortUrl($row->short_url);
             $club->SetTwitterAccount($row->twitter);
             $club->SetFacebookUrl($row->facebook);
             $club->SetInstagramAccount($row->instagram);
             $club->SetClubmarkAccredited($row->clubmark);
         }
         # team the only cause of multiple rows (so far) so add to current club
         if ($row->team_id) {
             $team = new Team($this->GetSettings());
             $team->SetId($row->team_id);
             $team->SetName($row->team_name);
             $team->SetShortUrl($row->team_short_url);
             $club->Add($team);
         }
     }
     # store final club
     if ($club != null) {
         $this->Add($club);
     }
 }
 /**
  * Populates the collection of business objects from raw data
  *
  * @return bool
  * @param MySqlRawData $o_result
  */
 protected function BuildItems(MySqlRawData $o_result)
 {
     /* @var $o_competition Competition */
     # use CollectionBuilder to handle duplicates
     $o_comp_builder = new CollectionBuilder();
     $o_season_builder = new CollectionBuilder();
     $o_team_builder = new CollectionBuilder();
     $o_points_builder = new CollectionBuilder();
     $o_matchtype_builder = new CollectionBuilder();
     $o_competition = null;
     $o_season = null;
     while ($o_row = $o_result->fetch()) {
         # check whether this is a new competition
         if (!$o_comp_builder->IsDone($o_row->competition_id)) {
             # store any exisiting competition and reset
             if ($o_competition != null) {
                 if ($o_season != null) {
                     $o_competition->AddSeason($o_season, true);
                 }
                 $o_season = null;
                 $o_matchtype_builder->Reset();
                 $this->Add($o_competition);
                 $o_season_builder->Reset();
             }
             # create the new competition
             $o_competition = new Competition($this->o_settings);
             $o_competition->SetId($o_row->competition_id);
             $o_competition->SetName($o_row->competition_name);
             if (isset($o_row->intro)) {
                 $o_competition->SetIntro($o_row->intro);
             }
             if (isset($o_row->contact)) {
                 $o_competition->SetContact($o_row->contact);
             }
             if (isset($o_row->notification_email)) {
                 $o_competition->SetNotificationEmail($o_row->notification_email);
             }
             if (isset($o_row->website)) {
                 $o_competition->SetWebsiteUrl($o_row->website);
             }
             if (isset($o_row->short_url)) {
                 $o_competition->SetShortUrl($o_row->short_url);
             }
             if (isset($o_row->active)) {
                 $o_competition->SetIsActive($o_row->active);
             }
             if (isset($o_row->players_per_team)) {
                 $o_competition->SetMaximumPlayersPerTeam($o_row->players_per_team);
             }
             if (isset($o_row->overs)) {
                 $o_competition->SetOvers($o_row->overs);
             }
             $o_competition->SetPlayerType($o_row->player_type_id);
             if (isset($o_row->update_search) and $o_row->update_search == 1) {
                 $o_competition->SetSearchUpdateRequired();
             }
             if (isset($o_row->category_id) && !is_null($o_row->category_id)) {
                 $cat = new Category();
                 $cat->SetId($o_row->category_id);
                 if (isset($o_row->category_name)) {
                     $cat->SetName($o_row->category_name);
                 }
                 if (isset($o_row->code)) {
                     $cat->SetUrl($o_row->code);
                 }
                 $o_competition->SetCategory($cat);
             }
         }
         # Seasons are the first cause of multiple rows (first in sort order after competition)
         if (isset($o_row->season_id)) {
             if (!$o_season_builder->IsDone($o_row->season_id)) {
                 if ($o_season != null) {
                     $o_competition->AddSeason($o_season, true);
                 }
                 $o_season = new Season($this->o_settings);
                 $o_season->SetId($o_row->season_id);
                 $o_season->SetName($o_row->season_name);
                 $o_season->SetIsLatest($o_row->is_latest);
                 $o_season->SetStartYear($o_row->start_year);
                 $o_season->SetEndYear($o_row->end_year);
                 if (isset($o_row->season_intro)) {
                     $o_season->SetIntro($o_row->season_intro);
                 }
                 if (isset($o_row->results)) {
                     $o_season->SetResults($o_row->results);
                 }
                 if (isset($o_row->show_table)) {
                     $o_season->SetShowTable($o_row->show_table);
                 }
                 if (isset($o_row->show_runs_scored)) {
                     $o_season->SetShowTableRunsScored($o_row->show_runs_scored);
                 }
                 if (isset($o_row->show_runs_conceded)) {
                     $o_season->SetShowTableRunsConceded($o_row->show_runs_conceded);
                 }
                 if (isset($o_row->season_short_url)) {
                     $o_season->SetShortUrl($o_row->season_short_url);
                 }
             }
             # Team only present if there is a season
             if (isset($o_row->team_id)) {
                 if (!$o_team_builder->IsDone($o_row->team_id)) {
                     if (isset($o_team)) {
                         unset($o_team);
                     }
                     $o_team = new Team($this->GetSettings());
                     $o_team->SetId($o_row->team_id);
                     $o_team->SetName($o_row->team_name);
                     $o_team->GetGround()->SetId($o_row->ground_id);
                     if (isset($o_row->team_short_url)) {
                         $o_team->SetShortUrl($o_row->team_short_url);
                     }
                     $o_season->AddTeam($o_team);
                     if (isset($o_row->withdrawn_league) and (bool) $o_row->withdrawn_league) {
                         $o_season->TeamsWithdrawnFromLeague()->Add($o_team);
                     }
                 }
                 # Points adjustments - should come with team and in order of team
                 if (isset($o_row->point_id) and !$o_points_builder->IsDone($o_row->point_id)) {
                     $o_point = new PointsAdjustment($o_row->point_id, $o_row->points, $o_team, $o_row->reason, $o_row->points_date);
                     $o_season->PointsAdjustments()->Add($o_point);
                 }
             }
             # Match types come with a season
             if (isset($o_row->match_type) and !$o_matchtype_builder->IsDone($o_row->match_type)) {
                 $o_season->MatchTypes()->Add((int) $o_row->match_type);
             }
         }
     }
     # store final competition
     if ($o_competition != null) {
         if ($o_season != null) {
             $o_competition->AddSeason($o_season, true);
         }
         $this->Add($o_competition);
     }
 }