function OnPageLoad()
    {
        echo new XhtmlElement('h1', $this->GetPageTitle());
        # If no search term, show a search form (intended for mobile)
        if (!$this->query instanceof SearchQuery) {
            ?>
            <form action="/search" method="get"><div>
            <input type="search" name="q" />
            <input type="submit" value="Search" />
            </div></form>
            <?php 
            return;
        }
        if ($this->paging->GetTotalResults()) {
            # write the paging navbar
            $paging_bar = $this->paging->GetNavigationBar();
            echo $paging_bar;
            # Load files used for custom formats
            require_once 'email/email-address-protector.class.php';
            require_once 'search/search-highlighter.class.php';
            $protector = new EmailAddressProtector($this->GetSettings());
            $highlighter = new SearchHighlighter();
            echo '<dl class="search">';
            foreach ($this->results as $result) {
                /* @var $result SearchItem */
                echo '<dt>';
                $title = htmlentities($result->Title(), ENT_QUOTES, "UTF-8", false);
                $title = $highlighter->Highlight($this->query->GetSanitisedTerms(), $title);
                echo '<a href="' . htmlentities($result->Url(), ENT_QUOTES, "UTF-8", false) . '">' . $title . "</a> ";
                echo "</dt>";
                echo '<dd>';
                $description = htmlentities($result->Description(), ENT_QUOTES, "UTF-8", false);
                $description = $protector->ApplyEmailProtection($description, AuthenticationManager::GetUser()->IsSignedIn());
                $description = $highlighter->Highlight($this->query->GetSanitisedTerms(), $description);
                echo "<p>" . $description . "</p>";
                echo $result->RelatedLinksHtml();
                echo '<p class="url">' . htmlentities($this->DisplayUrl($result->Url()), ENT_QUOTES, "UTF-8", false) . "</p>";
                if (isset($_GET['debug'])) {
                    echo '<ul class="weight">' . '<li>Matched field weight: <strong>' . $result->WeightOfMatchedField() . '</strong></li>' . '<li>Weight of result type: <strong>' . $result->WeightOfType() . '</strong></li>' . '<li>Weight within type: <strong>' . $result->WeightWithinType() . '</strong></li>' . '<li>Weight: <strong>' . $result->Weight() . '</strong></li>' . '</ul>';
                }
                echo "</dd>";
            }
            echo '</dl>';
            echo $paging_bar;
        } else {
            ?>
			<p>Sorry, we didn't find anything matching your search.</p>
			<p>Please check your spelling, or try rewording your search.</p>
			<p>If you still can't find what you're looking for, please <a href="/contact/"> contact us</a>.</p>
			<?php 
        }
        $this->AddSeparator();
        $this->BuySomething();
    }
 function OnPageInit()
 {
     parent::OnPageInit();
     $this->form = new EmailForm($this->GetSettings());
     $this->RegisterControlForValidation($this->form);
     $this->valid = isset($_GET['to']);
     if ($this->valid) {
         $protector = new EmailAddressProtector($this->GetSettings());
         $this->address = $protector->DecryptProtectedEmail($_GET['to']);
         $email = new EmailAddress($this->address);
         $this->valid = $email->IsValid();
     }
     if ($this->valid) {
         $this->address_display = HTML::Encode(substr($this->address, 0, strpos($this->address, "@"))) . "@&#8230; (protected address)";
     } else {
         header($_SERVER["SERVER_PROTOCOL"] . " 400 Bad Request");
     }
 }
    function OnPageLoad()
    {
        require_once 'xhtml/navigation/tabs.class.php';
        require_once 'stoolball/match-list-control.class.php';
        require_once 'stoolball/season-list-control.class.php';
        /* @var $season Season */
        $season = $this->competition->GetWorkingSeason();
        echo new XhtmlElement('h1', Html::Encode($this->season->GetCompetitionName()));
        $tabs = array('Summary' => '');
        if ($season->MatchTypes()->Contains(MatchType::LEAGUE)) {
            $tabs['Table'] = $season->GetTableUrl();
        }
        if (count($season->GetTeams())) {
            $tabs['Map'] = $season->GetMapUrl();
        }
        $tabs['Statistics'] = $season->GetStatisticsUrl();
        echo new Tabs($tabs);
        ?>

        <div class="box tab-box">
            <div class="dataFilter"></div>
            <div class="box-content">
  
        <?php 
        # Add intro
        if ($this->competition->GetIntro()) {
            $intro = htmlentities($this->competition->GetIntro(), ENT_QUOTES, "UTF-8", false);
            $intro = XhtmlMarkup::ApplyParagraphs($intro);
            $intro = XhtmlMarkup::ApplyLists($intro);
            $intro = XhtmlMarkup::ApplySimpleXhtmlTags($intro, false);
            $intro = XhtmlMarkup::ApplyLinks($intro);
            echo $intro;
        }
        # Add season intro
        if ($season->GetIntro()) {
            $intro = htmlentities($season->GetIntro(), ENT_QUOTES, "UTF-8", false);
            $intro = XhtmlMarkup::ApplyCharacterEntities($intro);
            $intro = XhtmlMarkup::ApplyParagraphs($intro);
            $intro = XhtmlMarkup::ApplyLinks($intro);
            $intro = XhtmlMarkup::ApplyLists($intro);
            $intro = XhtmlMarkup::ApplySimpleTags($intro);
            $intro = XhtmlMarkup::ApplyTables($intro);
            echo $intro;
        }
        # Add not active, if relevant
        if (!$this->competition->GetIsActive()) {
            echo new XhtmlElement('p', new XhtmlElement('strong', 'This competition isn\'t played any more.'));
        }
        # Add matches
        $a_matches = $season->GetMatches();
        $i_matches = count($a_matches);
        if ($i_matches > 0) {
            echo new XhtmlElement('h2', 'Matches in ' . htmlentities($season->GetName(), ENT_QUOTES, "UTF-8", false) . ' season');
            $o_matches = new MatchListControl($a_matches);
            if ($season->MatchTypes()->Contains(MatchType::LEAGUE)) {
                $o_matches->SetMatchTypesToLabel(array(MatchType::FRIENDLY, MatchType::CUP, MatchType::PRACTICE));
            } else {
                if ($season->MatchTypes()->Contains(MatchType::CUP)) {
                    $o_matches->SetMatchTypesToLabel(array(MatchType::FRIENDLY, MatchType::PRACTICE));
                } else {
                    $o_matches->SetMatchTypesToLabel(array(MatchType::PRACTICE));
                }
            }
            echo $o_matches;
        }
        # Add teams
        $a_teams = $season->GetTeams();
        if (count($a_teams) > 0) {
            require_once 'stoolball/team-list-control.class.php';
            echo new XhtmlElement('h2', 'Teams playing in ' . htmlentities($season->GetName(), ENT_QUOTES, "UTF-8", false) . ' season');
            echo new TeamListControl($a_teams);
        }
        # Add results
        if ($season->GetResults()) {
            $s_results = htmlentities($season->GetResults(), ENT_QUOTES, "UTF-8", false);
            $s_results = XhtmlMarkup::ApplyCharacterEntities($s_results);
            $s_results = XhtmlMarkup::ApplyParagraphs($s_results);
            $s_results = XhtmlMarkup::ApplyLinks($s_results);
            $s_results = XhtmlMarkup::ApplyLists($s_results);
            $s_results = XhtmlMarkup::ApplySimpleTags($s_results);
            $s_results = XhtmlMarkup::ApplyTables($s_results);
            echo $s_results;
        }
        # Add contact details
        $s_contact = $this->competition->GetContact();
        $s_website = $this->competition->GetWebsiteUrl();
        if ($s_contact or $s_website) {
            echo new XhtmlElement('h2', 'Contact details');
        }
        if ($s_contact) {
            $s_contact = htmlentities($s_contact, ENT_QUOTES, "UTF-8", false);
            $s_contact = XhtmlMarkup::ApplyCharacterEntities($s_contact);
            require_once 'email/email-address-protector.class.php';
            $protector = new EmailAddressProtector($this->GetSettings());
            $s_contact = $protector->ApplyEmailProtection($s_contact, AuthenticationManager::GetUser()->IsSignedIn());
            $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;
        }
        if ($s_website) {
            echo new XhtmlAnchor("Visit the " . htmlentities($this->competition->GetName(), ENT_QUOTES, "UTF-8", false) . ' website', $s_website);
        }
        # Check for other seasons. Check is >2 becuase current season is there twice - added above
        if (count($this->competition->GetSeasons()) > 2) {
            require_once "stoolball/season-list-control.class.php";
            echo new XhtmlElement('h2', 'Other seasons in the ' . htmlentities($this->competition->GetName(), ENT_QUOTES, "UTF-8", false), "screen");
            $season_list = new SeasonListControl($this->competition->GetSeasons());
            $season_list->SetExcludedSeasons(array($this->season));
            $season_list->AddCssClass("screen");
            echo $season_list;
        }
        ?>
        </div>
        </div>
        <?php 
        $this->ShowSocial();
        $this->AddSeparator();
        # Panel for updates
        $you_can = new UserEditPanel($this->GetSettings(), 'this season');
        $you_can->AddCssClass("with-tabs");
        if (AuthenticationManager::GetUser()->Permissions()->HasPermission(PermissionType::MANAGE_COMPETITIONS)) {
            $you_can->AddLink('edit this competition', $this->competition->GetEditCompetitionUrl());
            $you_can->AddLink('delete this competition', $this->competition->GetDeleteCompetitionUrl());
            $you_can->AddLink('edit this season', $this->season->GetEditSeasonUrl());
            # Only offer delete option if there's more than one season. Don't want to delete last season because
            # that leaves an empty competition which won't display. Instead, must delete whole competition with its one remaining season.
            if (count($this->competition->GetSeasons()) > 1) {
                $you_can->AddLink('delete this season', $this->season->GetDeleteSeasonUrl());
            }
        }
        foreach ($this->season->MatchTypes() as $i_type) {
            if ($i_type != MatchType::PRACTICE and $i_type != MatchType::TOURNAMENT_MATCH) {
                $you_can->AddLink('add a ' . MatchType::Text($i_type), $this->season->GetNewMatchNavigateUrl($i_type));
            }
        }
        if (count($this->season->GetMatches())) {
            # Make sure there's at least one match which is not a tournament or a practice
            foreach ($this->season->GetMatches() 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 {
                    $you_can->AddLink('update results', $this->season->GetResultsNavigateUrl());
                    break;
                }
            }
            $you_can->AddLink('add matches to your calendar', $this->season->GetCalendarNavigateUrl());
        }
        echo $you_can;
        if ($this->has_player_stats) {
            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, $this->season->GetName() . " season");
        }
    }
 private function FormatBody(SiteSettings $o_site_settings, $b_strip_tags = false)
 {
     $this->s_body_formatted = '';
     if ($this->GetFilteredBody()) {
         $text = $this->GetFilteredBody();
         # strip attributes
         $text = preg_replace('/ (align|style|lang|xml:lang|class)=".*?"/', '', $text);
         # strip unwanted tags
         $text = preg_replace('/<\\/?(div|span|sup)[^>]*>/', '', $text);
         # protect emails before escaping HTML, because it's trying to recognise the actual HTML tags
         $protector = new EmailAddressProtector($this->o_settings);
         $text = $protector->ApplyEmailProtection($text, $this->o_user->IsSignedIn());
         $text = htmlentities($text, ENT_QUOTES, "UTF-8", false);
         $text = XhtmlMarkup::ApplyCharacterEntities($text);
         $text = XhtmlMarkup::ApplyParagraphs($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplyLinks($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplyLists($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplySimpleTags($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplySimpleXhtmlTags($text, $b_strip_tags);
         $text = XhtmlMarkup::CloseUnmatchedTags($text);
         $this->s_body_formatted = $text;
     }
 }
 function OnPreRender()
 {
     /* @var $match Match */
     /* @var $o_home Team */
     /* @var $o_away Team */
     $match = $this->match;
     $player_type = PlayerType::Text($match->GetPlayerType());
     # Show time and place
     $date = new XhtmlElement('p', 'When: ' . $match->GetStartTimeFormatted());
     $date->AddAttribute("property", "schema:startDate");
     $date->AddAttribute("datatype", "xsd:date");
     $date->AddAttribute("content", Date::Microformat($match->GetStartTime()));
     $this->AddControl($date);
     # If we know the time and place, show when the sun sets
     # TODO: assumes UK
     if ($match->GetGround() instanceof Ground and $match->GetGround()->GetAddress()->GetLatitude() and $match->GetGround()->GetAddress()->GetLongitude()) {
         $date->AddControl(' <span class="sunset">sunset ' . Date::Time(date_sunset($match->GetStartTime(), SUNFUNCS_RET_TIMESTAMP, $match->GetGround()->GetAddress()->GetLatitude(), $match->GetGround()->GetAddress()->GetLongitude())) . '</span>');
     }
     $ground = $match->GetGround();
     if (is_object($ground)) {
         $ground_link = new XhtmlElement('a', $ground->GetNameAndTown());
         $ground_link->AddAttribute('href', $ground->GetNavigateUrl());
         $ground_link->SetCssClass('location');
         # hCalendar
         $ground_link->AddAttribute("typeof", "schema:Place");
         $ground_link->AddAttribute("about", $ground->GetLinkedDataUri());
         $ground_link->AddAttribute("rel", "schema:url");
         $ground_link->AddAttribute("property", "schema:name");
         $ground_control = new XhtmlElement('p', 'Where: ');
         $ground_control->AddAttribute("rel", "schema:location");
         $ground_control->AddControl($ground_link);
         $this->AddControl($ground_control);
     }
     # Format
     if ($match->GetIsOversKnown()) {
         $this->AddControl(new XhtmlElement("p", "Matches are " . $match->GetOvers() . " overs."));
     }
     # Add teams
     $a_teams = $match->GetAwayTeams();
     if (!is_array($a_teams)) {
         $a_teams = array();
     }
     if (!is_null($match->GetHomeTeam())) {
         array_unshift($a_teams, $match->GetHomeTeam());
     }
     # shouldn't be home teams any more, but doesn't hurt!
     $how_many_teams = count($a_teams);
     $qualification = $match->GetQualificationType();
     if ($qualification === MatchQualification::OPEN_TOURNAMENT) {
         $qualification = "Any " . strtolower($player_type) . " team may enter this tournament. ";
     } else {
         if ($qualification === MatchQualification::CLOSED_TOURNAMENT) {
             $qualification = "Only invited or qualifying teams may enter this tournament. ";
         } else {
             $qualification = "";
         }
     }
     $show_spaces_left = ($match->GetMaximumTeamsInTournament() and gmdate('U') < $match->GetStartTime() and $match->GetQualificationType() !== MatchQualification::CLOSED_TOURNAMENT);
     if ($match->GetIsMaximumPlayersPerTeamKnown() or $show_spaces_left or $how_many_teams or $qualification) {
         $this->AddControl(new XhtmlElement('h2', 'Teams'));
     }
     $who_can_play = "";
     if ($match->GetIsMaximumPlayersPerTeamKnown()) {
         $who_can_play = Html::Encode($match->GetMaximumPlayersPerTeam() . " players per team. ");
     }
     $who_can_play .= Html::Encode($qualification);
     if ($show_spaces_left) {
         $who_can_play .= '<strong class="spaces-left">' . $match->GetSpacesLeftInTournament() . " spaces left.</strong>";
     }
     if ($who_can_play) {
         $this->AddControl("<p>" . trim($who_can_play) . "</p>");
     }
     if ($how_many_teams) {
         $teams = new TeamListControl($a_teams);
         $this->AddControl('<div rel="schema:performers">' . $teams . '</div>');
     }
     # Add matches
     $a_matches = $match->GetMatchesInTournament();
     if (is_array($a_matches) && count($a_matches)) {
         $o_hmatches = new XhtmlElement('h2', 'Matches');
         $matches = new MatchListControl($a_matches);
         $matches->AddAttribute("rel", "schema:subEvents");
         $this->AddControl($o_hmatches);
         $this->AddControl($matches);
     }
     # Add notes
     if ($match->GetNotes() or $match->Seasons()->GetCount() > 0) {
         $this->AddControl(new XhtmlElement('h2', 'Notes'));
     }
     if ($match->GetNotes()) {
         $s_notes = XhtmlMarkup::ApplyCharacterEntities($match->GetNotes());
         require_once 'email/email-address-protector.class.php';
         $protector = new EmailAddressProtector($this->settings);
         $s_notes = $protector->ApplyEmailProtection($s_notes, AuthenticationManager::GetUser()->IsSignedIn());
         $s_notes = XhtmlMarkup::ApplyHeadings($s_notes);
         $s_notes = XhtmlMarkup::ApplyParagraphs($s_notes);
         $s_notes = XhtmlMarkup::ApplyLists($s_notes);
         $s_notes = XhtmlMarkup::ApplySimpleTags($s_notes);
         $s_notes = XhtmlMarkup::ApplyLinks($s_notes);
         if (strpos($s_notes, '<p>') > -1) {
             $this->AddControl($s_notes);
         } else {
             $this->AddControl(new XhtmlElement('p', $s_notes));
         }
     }
     # Show details of the seasons
     if ($match->Seasons()->GetCount() == 1) {
         $season = $match->Seasons()->GetFirst();
         $season_name = new XhtmlAnchor($season->GetCompetitionName(), $season->GetNavigateUrl());
         $b_the = !(stristr($season->GetCompetitionName(), 'the ') === 0);
         $this->AddControl(new XhtmlElement('p', 'This tournament is listed in ' . ($b_the ? 'the ' : '') . $season_name->__toString() . '.'));
     } elseif ($match->Seasons()->GetCount() > 1) {
         $this->AddControl(new XhtmlElement('p', 'This tournament is listed in the following seasons: '));
         $season_list = new XhtmlElement('ul');
         $this->AddControl($season_list);
         $seasons = $match->Seasons()->GetItems();
         $total_seasons = count($seasons);
         for ($i = 0; $i < $total_seasons; $i++) {
             $season = $seasons[$i];
             /* @var $season Season */
             $season_name = new XhtmlAnchor($season->GetCompetitionName(), $season->GetNavigateUrl());
             $li = new XhtmlElement('li', $season_name);
             if ($i < $total_seasons - 2) {
                 $li->AddControl(new XhtmlElement('span', ', ', 'metadata'));
             } else {
                 if ($i < $total_seasons - 1) {
                     $li->AddControl(new XhtmlElement('span', ' and ', 'metadata'));
                 }
             }
             $season_list->AddControl($li);
         }
     }
 }
    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 
        }
    }
 /**
  * Customise the display of posts as they are being rendered by the browser
  *
  * @param string $content
  * @return string
  */
 public function TheContent($content = '')
 {
     $searches = array();
     $replaces = array();
     # Use title as alt where there's a title and an empty alt attribute
     $searches[] = '/ title="([^"]+)"([^>]*) alt=""/';
     $replaces[] = '$2 alt="$1"';
     # Remove title where there's also a populated alt attribute
     $searches[] = '/ title="[^"]+"([^>]* alt="[^"]+")/';
     $replaces[] = '$1';
     # Remove link to original image, which has no navigation
     $searches[] = '/<a href="[^"]+.(jpg|gif|png|jpeg)"[^>]*>(<img [^>]*>)<\\/a>/';
     $replaces[] = '$2';
     # Strip these by providing no replacement text
     $searches[] = '/ title="[a-z0-9-]*"/';
     # remove meaningless title attributes containing filenames
     $replaces[] = '';
     $content = preg_replace($searches, $replaces, $content);
     $content = str_replace("http://www.stoolball.org.uk", "https://www.stoolball.org.uk", $content);
     if (is_home()) {
         # Take out and remember images
         $content = preg_replace_callback('/(<img[^>]*>)/', array($this, 'ExtractImage'), $content);
         $strip_these = array('/<h[0-9][^>]*>.*?<\\/h[0-9]>/', '/<p class="wp-caption-text">.*?<\\/p>/', '/<a[^>]* class="more-link[^>]*>.*?<\\/a>/', '/style="width: [0-9]+px;?"/', '/<div[^>]*><\\/div>/');
         $content = preg_replace($strip_these, '', $content);
         # Don't want home page to be too long, so cut off after first para
         $pos = strpos($content, '</p>');
         if ($pos) {
             $pos = $pos + 4;
             # length of </p>
             $content = substr($content, 0, $pos);
         }
         # If there were images, put the first one at the start of the text
         if (count($this->a_matches)) {
             # Remove unused class, width and height
             $image = preg_replace('/ (class|width|height)="[A-Za-z0-9-_ ]+"/', '', $this->a_matches[0]);
             # Try to isolate the src attribute and swop it for the corresponding thumbnail
             $pos = strpos($image, ' src="');
             if ($pos !== false) {
                 $pos = $pos + 6;
                 # move to start to attr value
                 $len = strpos($image, '"', $pos);
                 if ($len !== false) {
                     # Get path to image on server
                     $wordpress_image_folder = $this->settings->GetServerRoot();
                     if (SiteContext::IsDevelopment()) {
                         $wordpress_image_folder .= "../";
                     }
                     # on dev setup, WordPress image uploads are outside web root
                     require_once 'Zend/Uri.php';
                     $uri = Zend_Uri::factory(substr($image, $pos, $len - $pos));
                     /* @var $uri Zend_Uri_Http */
                     # Change it to the thumbnail path and see whether the thumbnail exists
                     $thumbnail = $wordpress_image_folder . $uri->getPath();
                     $pos = strrpos($thumbnail, '.');
                     if ($pos !== false) {
                         $thumbnail = substr($thumbnail, 0, $pos) . "-150x150" . substr($thumbnail, $pos);
                         if (file_exists($thumbnail)) {
                             # if it does exist, update the original image tag with the thumbnail suffix and size
                             # important to do all these checks because thumbnails don't exist for images smaller than 150px
                             $image = preg_replace('/\\.(jpg|jpeg|gif|png)"/', '-150x150.$1" width="150" height="150"', $image);
                         }
                     }
                 }
             }
             # Add image before content
             $content = $image . $content;
         }
     } else {
         # Increase image width by 10px (caption must be 100%, so space around image must be margin on inner element, not padding on this element)
         $content = preg_replace_callback('/class="wp-caption([A-Za-z0-9-_ ]*)" style="width: ([0-9]+)px;?"/', array($this, 'ReplaceImageWidth'), $content);
         # Add extra XHTML around photo captions as hook for CSS
         $content = preg_replace('/(<p class="wp-caption-text">[^<]*<\\/p>)/', '<div class="photoCaption">$1</div>', $content);
     }
     $protector = new EmailAddressProtector($this->settings);
     $content = $protector->ApplyEmailProtection($content, is_object(AuthenticationManager::GetUser()) and AuthenticationManager::GetUser()->IsSignedIn());
     return $content;
 }
 protected function OnPreRender()
 {
     /* @var $o_home Team */
     /* @var $o_away Team */
     /* @var $o_tourney Match */
     # Date and tournament
     $o_date_para = new XhtmlElement('p');
     $o_date = new XhtmlElement('abbr', htmlentities($this->o_match->GetStartTimeFormatted(), ENT_QUOTES, "UTF-8", false));
     $o_date->SetTitle(Date::Microformat($this->o_match->GetStartTime()));
     # hCalendar
     $o_date->SetCssClass('dtstart');
     # hCalendar
     $o_date->AddAttribute("property", "schema:startDate");
     $o_date->AddAttribute("datatype", "xsd:date");
     $o_date->AddAttribute("content", Date::Microformat($this->o_match->GetStartTime()));
     $o_date_para->AddControl('When: ');
     $o_date_para->AddControl($o_date);
     # hCalendar end date
     if ($this->o_match->GetIsStartTimeKnown()) {
         $i_end_time = $this->o_match->GetStartTime() + 60 * 90;
         $o_hcal_end = new XhtmlElement('abbr', ' until around ' . htmlentities(Date::Time($i_end_time), ENT_QUOTES, "UTF-8", false));
         $o_hcal_end->SetTitle(Date::Microformat($i_end_time));
         $o_hcal_end->SetCssClass('metadata dtend');
         $o_date_para->AddControl($o_hcal_end);
     }
     # If we know the time and place, show when the sun sets
     # TODO: Assumes UK
     if ($this->o_match->GetGround() instanceof Ground and $this->o_match->GetGround()->GetAddress()->GetLatitude() and $this->o_match->GetGround()->GetAddress()->GetLongitude()) {
         $o_date_para->AddControl(' <span class="sunset">sunset ' . htmlentities(Date::Time(date_sunset($this->o_match->GetStartTime(), SUNFUNCS_RET_TIMESTAMP, $this->o_match->GetGround()->GetAddress()->GetLatitude(), $this->o_match->GetGround()->GetAddress()->GetLongitude())), ENT_QUOTES, "UTF-8", false) . '</span>');
     }
     # Display match type/season/tournament
     if ($this->o_match->GetMatchType() == MatchType::TOURNAMENT_MATCH) {
         $o_date_para->SetCssClass('description');
         # hCal
         $o_tourney = $this->o_match->GetTournament();
         if (is_object($o_tourney)) {
             $tournament_link = new XhtmlAnchor(htmlentities($o_tourney->GetTitle(), ENT_QUOTES, "UTF-8", false), $o_tourney->GetNavigateUrl());
             $tournament_link->AddAttribute("typeof", "schema:SportsEvent");
             $tournament_link->AddAttribute("about", $o_tourney->GetLinkedDataUri());
             $tournament_link->AddAttribute("rel", "schema:url");
             $tournament_link->AddAttribute("property", "schema:name");
             $tournament_container = new XhtmlElement("span", $tournament_link);
             $tournament_container->AddAttribute("rel", "schema:superEvent");
             # Check for 'the' to get the grammar right
             $s_title = strtolower($o_tourney->GetTitle());
             if (strlen($s_title) >= 4 and substr($s_title, 0, 4) == 'the ') {
                 $o_date_para->AddControl(', in ');
             } else {
                 $o_date_para->AddControl(', in the ');
             }
             $o_date_para->AddControl($tournament_container);
             $o_date_para->AddControl('.');
         } else {
             $o_date_para->AddControl(', in a tournament.');
         }
     } else {
         # hCalendar desc, built up at the same time as the date and league/tournament
         $hcal_desc = new XhtmlElement('div', null, 'description');
         $this->AddControl($hcal_desc);
         $s_detail_xhtml = ucfirst(MatchType::Text($this->o_match->GetMatchType()));
         $season_list_xhtml = null;
         if ($this->o_match->Seasons()->GetCount() == 1) {
             $season = $this->o_match->Seasons()->GetFirst();
             $season_name = new XhtmlAnchor(htmlentities($season->GetCompetitionName(), ENT_QUOTES, "UTF-8", false), $season->GetNavigateUrl());
             $b_the = !(stristr($season->GetCompetitionName(), 'the ') === 0);
             $s_detail_xhtml .= ' in ' . ($b_the ? 'the ' : '') . $season_name->__toString() . '.';
         } elseif ($this->o_match->Seasons()->GetCount() > 1) {
             $s_detail_xhtml .= ' in the following seasons: ';
             $season_list_xhtml = new XhtmlElement('ul');
             $seasons = $this->o_match->Seasons()->GetItems();
             $total_seasons = count($seasons);
             for ($i = 0; $i < $total_seasons; $i++) {
                 $season = $seasons[$i];
                 /* @var $season Season */
                 $season_name = new XhtmlAnchor(htmlentities($season->GetCompetitionName(), ENT_QUOTES, "UTF-8", false), $season->GetNavigateUrl());
                 $li = new XhtmlElement('li', $season_name);
                 if ($i < $total_seasons - 2) {
                     $li->AddControl(new XhtmlElement('span', ', ', 'metadata'));
                 } else {
                     if ($i < $total_seasons - 1) {
                         $li->AddControl(new XhtmlElement('span', ' and ', 'metadata'));
                     }
                 }
                 $season_list_xhtml->AddControl($li);
             }
         } else {
             $s_detail_xhtml .= '.';
         }
         $hcal_desc->AddControl(new XhtmlElement('p', $s_detail_xhtml));
         if (!is_null($season_list_xhtml)) {
             $hcal_desc->AddControl($season_list_xhtml);
         }
     }
     # Who
     $o_home = $this->o_match->GetHomeTeam();
     $o_away = $this->o_match->GetAwayTeam();
     $has_home = $o_home instanceof Team;
     $has_away = $o_away instanceof Team;
     if ($has_home or $has_away) {
         $who = new XhtmlElement("p", "Who: ");
         if ($has_home) {
             $who->AddControl($this->CreateTeamLink($o_home));
         }
         if ($has_home and $has_away) {
             $who->AddControl(" and ");
         }
         if ($has_away) {
             $who->AddControl($this->CreateTeamLink($o_away));
         }
         $this->AddControl($who);
     }
     # When
     $this->AddControl($o_date_para);
     # Ground
     $o_ground = $this->o_match->GetGround();
     if (is_object($o_ground)) {
         $o_ground_link = new XhtmlElement('a', htmlentities($o_ground->GetNameAndTown(), ENT_QUOTES, "UTF-8", false));
         $o_ground_link->AddAttribute('href', $o_ground->GetNavigateUrl());
         $o_ground_link->SetCssClass('location');
         # hCalendar
         $o_ground_link->AddAttribute("typeof", "schema:Place");
         $o_ground_link->AddAttribute("about", $o_ground->GetLinkedDataUri());
         $o_ground_link->AddAttribute("rel", "schema:url");
         $o_ground_link->AddAttribute("property", "schema:name");
         $o_ground_control = new XhtmlElement('p', 'Where: ');
         $o_ground_control->AddAttribute("rel", "schema:location");
         $o_ground_control->AddControl($o_ground_link);
         $this->AddControl($o_ground_control);
     }
     # Add result
     $o_result = $this->o_match->Result();
     $b_result_known = !$o_result->GetResultType() == MatchResult::UNKNOWN;
     $toss_known = !is_null($this->o_match->Result()->GetTossWonBy());
     $b_batting_order_known = !is_null($this->o_match->Result()->GetHomeBattedFirst());
     $has_scorecard_data = ($o_result->HomeBatting()->GetCount() or $o_result->HomeBowling()->GetCount() or $o_result->AwayBatting()->GetCount() or $o_result->AwayBowling()->GetCount() or $o_result->GetHomeRuns() or $o_result->GetHomeWickets() or $o_result->GetAwayRuns() or $o_result->GetAwayWickets());
     $has_player_of_match = $this->o_match->Result()->GetPlayerOfTheMatch() instanceof Player and $this->o_match->Result()->GetPlayerOfTheMatch()->GetName();
     $has_player_of_match_home = $this->o_match->Result()->GetPlayerOfTheMatchHome() instanceof Player and $this->o_match->Result()->GetPlayerOfTheMatchHome()->GetName();
     $has_player_of_match_away = $this->o_match->Result()->GetPlayerOfTheMatchAway() instanceof Player and $this->o_match->Result()->GetPlayerOfTheMatchAway()->GetName();
     if ($b_result_known or $b_batting_order_known or $has_scorecard_data) {
         # Put result in header, so long as we have something to put after it. Otherwise put the result after it.
         $result_header = "Result";
         if ($b_result_known and ($b_batting_order_known or $has_scorecard_data)) {
             $result_header .= ": " . $this->o_match->GetResultDescription();
         }
         $result_header = new XhtmlElement('h2', htmlentities($result_header, ENT_QUOTES, "UTF-8", false));
         if ($has_scorecard_data) {
             $result_header->AddCssClass("hasScorecard");
         }
         $this->AddControl($result_header);
     }
     if ($toss_known) {
         $toss_team = $this->o_match->Result()->GetTossWonBy() === TeamRole::Home() ? $this->o_match->GetHomeTeam() : $this->o_match->GetAwayTeam();
         if ($toss_team instanceof Team) {
             $toss_text = $toss_team->GetName() . " won the toss";
             if ($b_batting_order_known) {
                 $chose_to = ($this->o_match->Result()->GetTossWonBy() === TeamRole::Home()) == $this->o_match->Result()->GetHomeBattedFirst() ? "bat" : "bowl";
                 $toss_text .= " and chose to " . $chose_to;
             }
             $this->AddControl("<p>" . Html::Encode($toss_text) . '.</p>');
         }
     }
     # If at least one player recorded, create a container for the schema.org metadata
     if ($has_scorecard_data or $has_player_of_match or $has_player_of_match_home or $has_player_of_match_away) {
         $this->AddControl('<div rel="schema:performers">');
     }
     if ($has_scorecard_data) {
         $this->CreateScorecard($this->o_match);
     } else {
         # Got to be just result and batting order now. Only include result if batting order's not there, otherwise result will already be in header.
         if ($b_result_known and !$b_batting_order_known) {
             $this->AddControl(new XhtmlElement('p', htmlentities($this->o_match->GetResultDescription(), ENT_QUOTES, "UTF-8", false) . '.'));
         }
         if ($b_batting_order_known) {
             $this->AddControl(new XhtmlElement('p', htmlentities(($this->o_match->Result()->GetHomeBattedFirst() ? $o_home->GetName() : $o_away->GetName()) . ' batted first.'), ENT_QUOTES, "UTF-8", false));
         }
     }
     # Player of the match
     if ($has_player_of_match) {
         $player = $this->o_match->Result()->GetPlayerOfTheMatch();
         $team = $player->Team()->GetId() == $o_home->GetId() ? $o_home->GetName() : $o_away->GetName();
         $player_of_match = new XhtmlElement('p', 'Player of the match: <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> ({$team})");
         $player_of_match->AddAttribute("typeof", "schema:Person");
         $player_of_match->AddAttribute("about", $player->GetLinkedDataUri());
         $this->AddControl($player_of_match);
     }
     if ($has_player_of_match_home) {
         $player = $this->o_match->Result()->GetPlayerOfTheMatchHome();
         $player_of_match = new XhtmlElement('p', $o_home->GetName() . ' player of the match: <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>");
         $player_of_match->AddAttribute("typeof", "schema:Person");
         $player_of_match->AddAttribute("about", $player->GetLinkedDataUri());
         $this->AddControl($player_of_match);
     }
     if ($has_player_of_match_away) {
         $player = $this->o_match->Result()->GetPlayerOfTheMatchAway();
         $player_of_match = new XhtmlElement('p', $o_away->GetName() . ' player of the match: <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>");
         $player_of_match->AddAttribute("typeof", "schema:Person");
         $player_of_match->AddAttribute("about", $player->GetLinkedDataUri());
         $this->AddControl($player_of_match);
     }
     # End container for the schema.org metadata
     if ($has_scorecard_data or $has_player_of_match or $has_player_of_match_home or $has_player_of_match_away) {
         $this->AddControl('</div>');
     }
     # Add notes
     if ($this->o_match->GetNotes()) {
         $this->AddControl(new XhtmlElement('h2', 'Notes'));
         $s_notes = htmlentities($this->o_match->GetNotes(), ENT_QUOTES, "UTF-8", false);
         $s_notes = XhtmlMarkup::ApplyCharacterEntities($s_notes);
         require_once 'email/email-address-protector.class.php';
         $protector = new EmailAddressProtector($this->o_settings);
         $s_notes = $protector->ApplyEmailProtection($s_notes, AuthenticationManager::GetUser()->IsSignedIn());
         $s_notes = XhtmlMarkup::ApplyHeadings($s_notes);
         $s_notes = XhtmlMarkup::ApplyParagraphs($s_notes);
         $s_notes = XhtmlMarkup::ApplyLists($s_notes);
         $s_notes = XhtmlMarkup::ApplySimpleTags($s_notes);
         $s_notes = XhtmlMarkup::ApplyLinks($s_notes);
         if (strpos($s_notes, '<p>') > -1) {
             $this->AddControl($s_notes);
         } else {
             $this->AddControl(new XhtmlElement('p', $s_notes));
         }
     }
     # hCalendar metadata
     $o_hcal_para = new XhtmlElement('p');
     $o_hcal_para->SetCssClass('metadata');
     $this->AddControl($o_hcal_para);
     # hCalendar timestamp
     $o_hcal_para->AddControl('Status: At ');
     $o_hcal_stamp = new XhtmlElement('abbr', htmlentities(Date::Time(gmdate('U')), ENT_QUOTES, "UTF-8", false));
     $o_hcal_stamp->SetTitle(Date::Microformat());
     $o_hcal_stamp->SetCssClass('dtstamp');
     $o_hcal_para->AddControl($o_hcal_stamp);
     # hCalendar GUID
     $o_hcal_para->AddControl(' match ');
     $o_hcal_guid = new XhtmlElement('span', htmlentities($this->o_match->GetLinkedDataUri(), ENT_QUOTES, "UTF-8", false));
     $o_hcal_guid->SetCssClass('uid');
     $o_hcal_para->AddControl($o_hcal_guid);
     # work out hCalendar status
     $s_status = 'CONFIRMED';
     switch ($this->o_match->Result()->GetResultType()) {
         case MatchResult::CANCELLED:
         case MatchResult::POSTPONED:
         case MatchResult::AWAY_WIN_BY_FORFEIT:
         case MatchResult::HOME_WIN_BY_FORFEIT:
             $s_status = 'CANCELLED';
     }
     # hCalendar URL and status
     $o_hcal_para->AddControl(' is ');
     $o_hcal_url = new XhtmlAnchor($s_status, 'http://' . $_SERVER['HTTP_HOST'] . $this->o_match->GetNavigateUrl());
     $o_hcal_url->SetCssClass('url status');
     $o_hcal_para->AddControl($o_hcal_url);
 }
 function ApplyInterestsMarkup($text, $b_strip_tags = 0)
 {
     if ($text) {
         $text = HTML::Encode($text);
         $text = XhtmlMarkup::ApplyCharacterEntities($text);
         require_once 'email/email-address-protector.class.php';
         $protector = new EmailAddressProtector($this->GetSettings());
         $text = $protector->ApplyEmailProtection($text, AuthenticationManager::GetUser()->IsSignedIn());
         $text = XhtmlMarkup::ApplyParagraphs($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplyLists($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplyLinks($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplySimpleTags($text, $b_strip_tags);
         $text = XhtmlMarkup::ApplySimpleXhtmlTags($text, $b_strip_tags);
         $text = XhtmlMarkup::CloseUnmatchedTags($text);
     }
     return $text;
 }