function OnLoadPageData() { # get id of team $i_id = $this->team_manager->GetItemId($this->team); # no need to read team data if creating a new team # unlike some pages though, re-read after a save because not all info is posted back if ($i_id) { # get team $this->team_manager->ReadById(array($i_id)); $this->team = $this->team_manager->GetFirst(); # Check user has permission to edit this team if (!$this->team instanceof Team or !AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS, $this->team->GetLinkedDataUri())) { $this->GetAuthenticationManager()->GetPermission(); } } else { # Check user has permission to create teams if (!AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS)) { $this->GetAuthenticationManager()->GetPermission(); } } # get all clubs $this->club_manager->ReadAll(); $this->edit->SetClubs($this->club_manager->GetItems()); # get all grounds $this->ground_manager->ReadAll(); $this->edit->SetGrounds($this->ground_manager->GetItems()); # tidy up unset($this->team_manager); unset($this->club_manager); unset($this->ground_manager); }
/** * Creates a TeamEditPanel * * @param SiteSettings $settings * @param Team $team * @param Season[] $seasons * @param Match[] $matches */ public function __construct(SiteSettings $settings, Team $team, $seasons, $matches) { parent::__construct($settings, " this team"); $is_one_time_team = $team->GetTeamType() == Team::ONCE; if (!$is_one_time_team) { $this->AddLink('tell us about your team', $settings->GetUrl('TeamAdd')); } if (AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS, $team->GetLinkedDataUri())) { $this->AddLink('edit this team', $team->GetEditTeamUrl()); } if (AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS)) { $this->AddLink('delete this team', $team->GetDeleteTeamUrl()); } if (!$is_one_time_team) { $b_in_league = false; $b_in_cup = false; if (is_array($seasons)) { foreach ($seasons as $season) { /* @var $season Season */ if (!$b_in_cup and $season->MatchTypes()->Contains(MatchType::CUP)) { $b_in_cup = true; } if (!$b_in_league and $season->MatchTypes()->Contains(MatchType::LEAGUE)) { $b_in_league = true; } if ($b_in_cup and $b_in_league) { break; } } } $this->AddLink('add practice', $team->GetAddMatchNavigateUrl(MatchType::PRACTICE)); $this->AddLink('add friendly match', $team->GetAddMatchNavigateUrl(MatchType::FRIENDLY)); $this->AddLink('add tournament', $team->GetAddMatchNavigateUrl(MatchType::TOURNAMENT)); if ($b_in_league) { $this->AddLink('add league match', $team->GetAddMatchNavigateUrl(MatchType::LEAGUE)); } if ($b_in_cup) { $this->AddLink('add cup match', $team->GetAddMatchNavigateUrl(MatchType::CUP)); } if (is_array($matches) and count($matches)) { # Make sure there's at least one match which is not a tournament or a practice foreach ($matches as $o_match) { /* @var $o_match Match */ if ($o_match->GetMatchType() == MatchType::PRACTICE or $o_match->GetMatchType() == MatchType::TOURNAMENT or $o_match->GetMatchType() == MatchType::TOURNAMENT_MATCH) { continue; } else { $this->AddLink('update results', $team->GetResultsNavigateUrl()); break; } } $this->AddLink('add matches to your calendar', $team->GetCalendarNavigateUrl()); } } }
/** * @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(); }
function OnPageLoad() { /* @var $team Team */ $team = $this->team; # display the team echo '<div class="team" typeof="schema:SportsTeam" about="' . htmlentities($this->team->GetLinkedDataUri(), ENT_QUOTES, "UTF-8", false) . '">'; echo new TeamNameControl($this->team, 'h1'); require_once 'xhtml/navigation/tabs.class.php'; $tabs = array('Summary' => ''); if ($this->has_player_stats) { $tabs['Players'] = $this->team->GetPlayersNavigateUrl(); } $tabs['Statistics'] = $this->team->GetStatsNavigateUrl(); echo new Tabs($tabs); ?> <div class="box tab-box"> <div class="dataFilter"></div> <div class="box-content"> <?php if (!$this->is_one_time_team) { # add club name if ($team->GetClub()->GetId()) { $o_club_para = new XhtmlElement('p'); $o_club_para->AddControl('Part of '); $o_club_link = new XhtmlElement('a', htmlentities($team->GetClub()->GetName(), ENT_QUOTES, "UTF-8", false)); $o_club_link->AddAttribute('href', $team->GetClub()->GetNavigateUrl()); $o_club_para->AddControl($o_club_link); $o_club_para->AddControl('.'); echo $o_club_para; } } # Add intro if ($team->GetIntro()) { $s_intro = htmlentities($team->GetIntro(), ENT_QUOTES, "UTF-8", false); $s_intro = XhtmlMarkup::ApplyParagraphs($s_intro); $s_intro = XhtmlMarkup::ApplyLists($s_intro); $s_intro = XhtmlMarkup::ApplySimpleXhtmlTags($s_intro, false); $s_intro = XhtmlMarkup::ApplyLinks($s_intro); if (strpos($s_intro, '<p>') > -1) { echo '<div property="schema:description">' . $s_intro . '</div>'; } else { echo '<p property="schema:description">' . $s_intro . '</p>'; } } ###################### ### When and where ### ###################### echo new XhtmlElement('h2', 'When and where'); if (!$this->is_one_time_team) { # Add not playing, if relevant if (!$team->GetIsActive()) { echo new XhtmlElement('p', new XhtmlElement('strong', 'This team doesn\'t play any more.')); } } # add ground $ground = $team->GetGround(); if ($ground->GetId() and $ground->GetName()) { echo '<p rel="schema:location">This team plays at <a typeof="schema:Place" about="' . htmlentities($ground->GetLinkedDataUri(), ENT_QUOTES, "UTF-8", false) . '" property="schema:name" rel="schema:url" href="' . htmlentities($ground->GetNavigateUrl(), ENT_QUOTES, "UTF-8", false) . '">' . htmlentities($ground->GetNameAndTown(), ENT_QUOTES, "UTF-8", false) . '</a>.</p>'; } if (!$this->is_one_time_team) { # Add playing times if ($team->GetPlayingTimes()) { $s_times = htmlentities($team->GetPlayingTimes(), ENT_QUOTES, "UTF-8", false); $s_times = XhtmlMarkup::ApplyParagraphs($s_times); $s_times = XhtmlMarkup::ApplyLists($s_times); $s_times = XhtmlMarkup::ApplySimpleXhtmlTags($s_times, false); $s_times = XhtmlMarkup::ApplyLinks($s_times); echo $s_times; } } # Match list if (count($this->a_matches)) { if ($this->is_one_time_team) { $came = "came"; if (count($this->a_matches) == 1 and $this->a_matches[0]->GetStartTime() > gmdate("U")) { $came = "will come"; } echo "<p>This team {$came} together once to play in a tournament.</p>"; } else { echo new XhtmlElement('h2', 'Matches this season'); } echo new MatchListControl($this->a_matches); } if (!$this->is_one_time_team) { ################# ### Seasons ### ################# $seasons = array(); foreach ($team->Seasons() as $team_in_season) { $seasons[] = $team_in_season->GetSeason(); } if (count($seasons)) { $season_list = new SeasonListControl($seasons); $season_list->SetShowCompetition(true); echo $season_list; } } ################# ### Cost ### ################# if ($team->GetCost()) { echo new XhtmlElement('h2', 'How much does it cost?'); $cost = XhtmlMarkup::ApplyParagraphs(htmlentities($team->GetCost(), ENT_QUOTES, "UTF-8", false)); $cost = XhtmlMarkup::ApplyLists($cost); $cost = XhtmlMarkup::ApplySimpleXhtmlTags($cost, false); $cost = XhtmlMarkup::ApplyLinks($cost); echo $cost; } ##################### ### Find out more ### ##################### if ($team->GetContact() or $team->GetWebsiteUrl()) { echo new XhtmlElement('h2', 'Contact details'); } # Add contact details $s_contact = $team->GetContact(); if ($s_contact) { # protect emails before escaping HTML, because it's trying to recognise the actual HTML tags require_once 'email/email-address-protector.class.php'; $protector = new EmailAddressProtector($this->GetSettings()); $s_contact = $protector->ApplyEmailProtection($s_contact, AuthenticationManager::GetUser()->IsSignedIn()); $s_contact = htmlentities($s_contact, ENT_QUOTES, "UTF-8", false); $s_contact = XhtmlMarkup::ApplyParagraphs($s_contact); $s_contact = XhtmlMarkup::ApplyLists($s_contact); $s_contact = XhtmlMarkup::ApplySimpleXhtmlTags($s_contact, false); $s_contact = XhtmlMarkup::ApplyLinks($s_contact); echo $s_contact; } # Add website $s_website = $team->GetWebsiteUrl(); if ($s_website) { echo new XhtmlElement('p', new XhtmlAnchor("Visit " . htmlentities($team->GetName(), ENT_QUOTES, "UTF-8", false) . "'s website", $s_website)); } if ($team->GetClub() instanceof Club and $team->GetClub()->GetClubmarkAccredited()) { ?> <p><img src="/images/logos/clubmark.png" alt="Clubmark accredited" width="150" height="29" /></p> <p>This is a <a href="http://www.sportenglandclubmatters.com/club-mark/">Clubmark accredited</a> stoolball club.</p> <?php } if (!$this->is_one_time_team) { # Prompt for more contact information, unless it's a repreaentative team when we don't expect it if (!$s_contact and !$s_website and $team->GetTeamType() !== Team::REPRESENTATIVE) { if ($team->GetPrivateContact()) { ?> <p>We may be able to contact this team, but we don't have permission to publish their details. If you'd like to play for them, <a href="/contact">contact us</a> and we'll pass your details on.</p> <?php } else { ?> <p>This team hasn't given us any contact details. If you'd like to play for them, try contacting their opposition teams or the secretary of their league, and ask them to pass on your details.</p> <?php } ?> <p>If you play for this team, please <a href="<?php echo $this->GetSettings()->GetUrl('TeamAdd'); ?> ">help us to improve this page</a>.</p> <?php } } $club = $this->team->GetClub(); if ($club and ($club->GetFacebookUrl() or $club->GetTwitterAccount() or $club->GetInstagramAccount())) { ?> <div class="social screen"> <?php if ($club->GetFacebookUrl()) { ?> <a href="<?php echo Html::Encode($club->GetFacebookUrl()); ?> " class="facebook-group"><img src="/images/play/find-us-on-facebook.png" alt="Find us on Facebook" width="137" height="22" /></a> <?php } if ($club->GetTwitterAccount()) { ?> <a href="https://twitter.com/<?php echo Html::Encode(substr($club->GetTwitterAccount(), 1)); ?> " class="twitter-follow-button">Follow <?php echo Html::Encode($this->team->GetClub()->GetTwitterAccount()); ?> </a> <script src="https://platform.twitter.com/widgets.js"></script> <?php } if ($club->GetInstagramAccount()) { ?> <a href="https://www.instagram.com/<?php echo Html::Encode(trim($club->GetInstagramAccount(), '@')); ?> /?ref=badge" class="instagram"><img src="//badges.instagram.com/static/images/ig-badge-view-24.png" alt="Instagram" /></a> <?php } ?> </div> <?php } else { $this->ShowSocial(); } ?> </div> </div> </div> <?php $this->AddSeparator(); $o_panel = new TeamEditPanel($this->GetSettings(), $this->team, $this->seasons, $this->a_matches); $o_panel->AddCssClass("with-tabs"); echo $o_panel; $this->Render(); ### Build charts ### if ($this->has_facebook_page_url) { $this->ShowFacebookPage($club->GetFacebookUrl(), $club->GetName()); } # Show top players, except for once-only teams which have a very short page for this to sit alongside if ($this->has_player_stats and !$this->is_one_time_team) { require_once 'stoolball/statistics-highlight-table.class.php'; echo new StatisticsHighlightTable($this->best_batting, $this->most_runs, $this->best_bowling, $this->most_wickets, $this->most_catches, "All seasons"); } // Show graphs of results, except for once-only teams which have a very short page for this to sit alongside if (!$this->is_one_time_team) { ?> <span class="chart-js-template supporting-chart" id="all-results-chart"></span> <?php } }
private function CheckForPermission(Team $team) { if (is_null($this->has_permission)) { $this->has_permission = AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS, $team->GetLinkedDataUri()); if (!$this->has_permission) { $this->GetAuthenticationManager()->GetPermission(); } } }
private function CreateTeamLink(Team $team) { $span = new XhtmlElement('span'); $span->AddAttribute("typeof", "schema:SportsTeam"); $span->AddAttribute("about", $team->GetLinkedDataUri()); $link = new XhtmlElement('a', Html::Encode($team->GetName())); $link->AddAttribute("property", "schema:name"); $link->AddAttribute('href', $team->GetNavigateUrl()); $link->AddAttribute("rel", "schema:url"); $span->AddControl($link); return $span; }
public function OnPageLoad() { echo '<article typeof="schema:SportsTeam" about="' . htmlentities($this->team->GetLinkedDataUri(), ENT_QUOTES, "UTF-8", false) . '">'; echo '<h1>Players for <span property="schema:name">' . htmlentities($this->team->GetName(), ENT_QUOTES, "UTF-8", false) . "</span></h1>"; require_once 'xhtml/navigation/tabs.class.php'; $tabs = array('Summary' => $this->team->GetNavigateUrl()); $tabs['Players'] = ''; $tabs['Statistics'] = $this->team->GetStatsNavigateUrl(); echo new Tabs($tabs); ?> <div class="box tab-box"> <div class="dataFilter"></div> <div class="box-content"> <?php if (count($this->players) > 4) { $threshold = (int) gmdate("Y") - 1; $list_open = false; echo '<div class="player-list">'; foreach ($this->players as $player) { /* @var $player Player */ if ($player->GetPlayerRole() == Player::PLAYER and (gmdate("Y", $player->GetLastPlayedDate()) >= $threshold or $player->GetLastPlayedDate() == 0)) { if (!$list_open) { echo '<h2>Current and recent players</h2><ol rel="schema:members">'; $list_open = true; } echo '<li typeof="schema:Person" about="' . htmlentities($player->GetLinkedDataUri(), ENT_QUOTES, "UTF-8", false) . '"><a property="schema:name" rel="schema:url" href="' . htmlentities($player->GetPlayerUrl(), ENT_QUOTES, "UTF-8", false) . '">' . htmlentities($player->GetName(), ENT_QUOTES, "UTF-8", false) . "</a></li>"; } } if ($list_open) { echo "</ol>"; } $list_open = false; foreach ($this->players as $player) { /* @var $player Player */ if ($player->GetPlayerRole() == Player::PLAYER and gmdate("Y", $player->GetLastPlayedDate()) < $threshold and $player->GetLastPlayedDate() != 0) { if (!$list_open) { echo '<h2>Former players</h2><ol rel="schema:members">'; $list_open = true; } echo '<li typeof="schema:Person" about="' . htmlentities($player->GetLinkedDataUri(), ENT_QUOTES, "UTF-8", false) . '"><a property="schema:name" rel="schema:url" href="' . htmlentities($player->GetPlayerUrl(), ENT_QUOTES, "UTF-8", false) . '">' . htmlentities($player->GetName(), ENT_QUOTES, "UTF-8", false) . "</a></li>"; } } if ($list_open) { echo "</ol>"; } $list_open = false; foreach ($this->players as $player) { /* @var $player Player */ if ($player->GetPlayerRole() != Player::PLAYER) { if (!$list_open) { echo "<h2>Extras</h2><ul>"; $list_open = true; } echo '<li><a href="' . htmlentities($player->GetPlayerUrl(), ENT_QUOTES, "UTF-8", false) . '">' . htmlentities($player->GetName(), ENT_QUOTES, "UTF-8", false) . "</a></li>"; } } if ($list_open) { echo "</ul>"; } echo "</div>"; } else { ?> <p>There aren't any player statistics for this team yet.</p> <p>To find out how to add them, see <a href="/play/manage/website/matches-and-results-why-you-should-add-yours/">Matches and results – why you should add yours</a>.</p> <?php } ?> </div> </div> </article> <?php $this->AddSeparator(); if (AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_TEAMS, $this->team->GetLinkedDataUri())) { # Create a panel with actions $panel = new UserEditPanel($this->GetSettings()); $panel->AddCssClass("with-tabs"); #$panel->AddLink("add a player", $this->team->GetPlayerAddNavigateUrl()); echo $panel; $this->BuySomething(); } else { echo '<div class="with-tabs">'; $this->BuySomething(); echo '</div>'; } }