function OnPostback()
 {
     # get object
     $this->team = $this->edit->GetDataObject();
     # Check user has permission to edit this team. Authentication for team owners is based on the URI
     # so make sure we get that from the database, not untrusted user input.
     if ($this->team->GetId() and !AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS)) {
         $this->team_manager->ReadById(array($this->team->GetId()));
         $check_team = $this->team_manager->GetFirst();
         $this->team->SetShortUrl($check_team->GetShortUrl());
     }
     if ($this->team->GetId() and !AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS, $this->team->GetLinkedDataUri()) or !$this->team->GetId() and !AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS)) {
         $this->GetAuthenticationManager()->GetPermission();
     }
     # save data if valid
     if ($this->IsValid()) {
         $i_id = $this->team_manager->SaveTeam($this->team);
         $this->team->SetId($i_id);
         $this->Redirect($this->team->GetNavigateUrl());
     }
 }
 /**
  * @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);
 }
 /**
  * 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);
     }
 }
 /**
  * @access public
  * @return void
  * @param int[] $a_ids
  * @desc Delete from the db the Teams matching the supplied ids
  */
 public function Delete($a_ids)
 {
     # check parameter
     $this->ValidateNumericArray($a_ids);
     if (!count($a_ids)) {
         throw new Exception('No teams to delete');
     }
     $s_ids = join(', ', $a_ids);
     # Get more information on the teams
     $teams = array();
     $s_sql = "SELECT team_id, short_url, owner_role_id FROM nsa_team WHERE team_id IN ({$s_ids})";
     $result = $this->GetDataConnection()->query($s_sql);
     while ($row = $result->fetch()) {
         $team = new Team($this->GetSettings());
         $team->SetId($row->team_id);
         $team->SetShortUrl($row->short_url);
         $team->SetOwnerRoleId($row->owner_role_id);
         $teams[] = $team;
     }
     $result->closeCursor();
     # Check that current user is an admin or a team owner
     require_once "authentication/authentication-manager.class.php";
     $user = AuthenticationManager::GetUser();
     foreach ($teams as $team) {
         /* @var $team Team */
         if (!$user->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS, $team->GetLinkedDataUri())) {
             throw new Exception("Unauthorised");
         }
     }
     # delete owner role
     $authentication_manager = new AuthenticationManager($this->GetSettings(), $this->GetDataConnection(), null);
     foreach ($teams as $team) {
         /* @var $team Team */
         if ($team->GetOwnerRoleId()) {
             $authentication_manager->DeleteRole($team->GetOwnerRoleId());
         }
     }
     unset($authentication_manager);
     # delete from short URL cache
     require_once 'http/short-url-manager.class.php';
     $o_url_manager = new ShortUrlManager($this->GetSettings(), $this->GetDataConnection());
     foreach ($teams as $team) {
         /* @var $team Team */
         $o_url_manager->Delete($team->GetShortUrl());
     }
     unset($o_url_manager);
     # Delete relationships to matches
     $s_match_link = $this->GetSettings()->GetTable('MatchTeam');
     $s_sql = 'DELETE FROM ' . $s_match_link . ' WHERE team_id IN (' . $s_ids . ') ';
     $this->GetDataConnection()->query($s_sql);
     # Delete relationships to competitions
     $s_season_link = $this->GetSettings()->GetTable('TeamSeason');
     $s_sql = 'DELETE FROM ' . $s_season_link . ' WHERE team_id IN (' . $s_ids . ') ';
     $this->GetDataConnection()->query($s_sql);
     # Delete players
     require_once "player-manager.class.php";
     $player_manager = new PlayerManager($this->GetSettings(), $this->GetDataConnection());
     $player_manager->ReadPlayersInTeam($a_ids);
     $players = $player_manager->GetItems();
     if (count($players)) {
         $player_ids = array();
         foreach ($players as $player) {
             $player_ids[] = $player->GetId();
         }
         $player_manager->Delete($player_ids);
     }
     unset($player_manager);
     # delete team(s)
     $s_sql = 'DELETE FROM nsa_team WHERE team_id IN (' . $s_ids . ') ';
     $this->GetDataConnection()->query($s_sql);
     return $this->GetDataConnection()->GetAffectedRows();
 }
 /**
  * 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)
 {
     /* @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;
 }
 /**
  * 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);
     }
 }