/** * Creates the controls when the editor is in its fixture view * */ private function CreateFixtureControls(Match $match, XhtmlElement $match_box) { $css_class = 'TournamentEdit'; if ($this->GetCssClass()) { $css_class .= ' ' . $this->GetCssClass(); } $match_outer_1 = new XhtmlElement('div'); $match_outer_1->SetCssClass($css_class); $this->SetCssClass(''); $match_outer_1->SetXhtmlId($this->GetNamingPrefix()); $match_outer_2 = new XhtmlElement('div'); $this->AddControl($match_outer_1); $match_outer_1->AddControl($match_outer_2); $match_outer_2->AddControl($match_box); if ($match->GetId()) { $heading = "Edit tournament"; } else { $heading = "Add your tournament"; } if ($this->show_step_number) { $heading .= ' – step 1 of 3'; } $o_title_inner_1 = new XhtmlElement('span', $heading); $o_title_inner_2 = new XhtmlElement('span', $o_title_inner_1); $o_title_inner_3 = new XhtmlElement('span', $o_title_inner_2); $match_box->AddControl(new XhtmlElement('h2', $o_title_inner_3, "large")); # Tournament title $suggested_title = $match->GetTitle(); if (isset($this->context_season)) { $suggested_title = $this->GetContextSeason()->GetCompetition()->GetName(); if (strpos(strtolower($suggested_title), 'tournament') === false) { $suggested_title .= ' tournament'; } } else { if (isset($this->context_team)) { $suggested_title = $this->GetContextTeam()->GetName(); if (strpos(strtolower($suggested_title), 'tournament') === false) { $suggested_title .= ' tournament'; } } } if ($suggested_title == "To be confirmed tournament") { $suggested_title = ""; } if ($suggested_title == "To be confirmed v To be confirmed") { $suggested_title = ""; } $title = new TextBox($this->GetNamingPrefix() . 'Title', $suggested_title, $this->IsValidSubmit()); $title->SetMaxLength(200); $match_box->AddControl(new FormPart('Tournament name', $title)); # Open or invite? require_once 'xhtml/forms/radio-button.class.php'; $qualify_set = new XhtmlElement('fieldset'); $qualify_set->SetCssClass('formPart radioButtonList'); $qualify_set->AddControl(new XhtmlElement('legend', 'Who can play?', 'formLabel')); $qualify_radios = new XhtmlElement('div', null, 'formControl'); $qualify_set->AddControl($qualify_radios); $qualify_radios->AddControl(new RadioButton($this->GetNamingPrefix() . 'Open', $this->GetNamingPrefix() . 'Qualify', 'any team may enter', MatchQualification::OPEN_TOURNAMENT, $match->GetQualificationType() === MatchQualification::OPEN_TOURNAMENT or !$match->GetId(), $this->IsValidSubmit())); $qualify_radios->AddControl(new RadioButton($this->GetNamingPrefix() . 'Qualify', $this->GetNamingPrefix() . 'Qualify', 'only invited or qualifying teams can enter', MatchQualification::CLOSED_TOURNAMENT, $match->GetQualificationType() === MatchQualification::CLOSED_TOURNAMENT, $this->IsValidSubmit())); $match_box->AddControl($qualify_set); # Player type $suggested_type = 2; if (isset($this->context_season)) { $suggested_type = $this->context_season->GetCompetition()->GetPlayerType(); } elseif (isset($this->context_team)) { $suggested_type = $this->context_team->GetPlayerType(); } if (!is_null($match->GetPlayerType())) { $suggested_type = $match->GetPlayerType(); } # Saved value overrides suggestion $player_set = new XhtmlElement('fieldset'); $player_set->SetCssClass('formPart radioButtonList'); $player_set->AddControl(new XhtmlElement('legend', 'Type of teams', 'formLabel')); $player_radios = new XhtmlElement('div', null, 'formControl'); $player_set->AddControl($player_radios); $player_radios_1 = new XhtmlElement('div', null, 'column'); $player_radios_2 = new XhtmlElement('div', null, 'column'); $player_radios->AddControl($player_radios_1); $player_radios->AddControl($player_radios_2); $player_radios_1->AddControl(new RadioButton($this->GetNamingPrefix() . 'Ladies', $this->GetNamingPrefix() . 'PlayerType', 'Ladies', 2, $suggested_type === 2, $this->IsValidSubmit())); $player_radios_1->AddControl(new RadioButton($this->GetNamingPrefix() . 'Mixed', $this->GetNamingPrefix() . 'PlayerType', 'Mixed', 1, $suggested_type === 1, $this->IsValidSubmit())); $player_radios_2->AddControl(new RadioButton($this->GetNamingPrefix() . 'Girls', $this->GetNamingPrefix() . 'PlayerType', 'Junior girls', 5, $suggested_type === 5, $this->IsValidSubmit())); $player_radios_2->AddControl(new RadioButton($this->GetNamingPrefix() . 'Children', $this->GetNamingPrefix() . 'PlayerType', 'Junior mixed', 4, $suggested_type === 6, $this->IsValidSubmit())); $match_box->AddControl($player_set); # How many? $per_side_box = new XhtmlSelect($this->GetNamingPrefix() . "Players", null, $this->IsValid()); $per_side_box->SetBlankFirst(true); for ($i = 6; $i <= 16; $i++) { $per_side_box->AddControl(new XhtmlOption($i)); } if ($match->GetIsMaximumPlayersPerTeamKnown()) { $per_side_box->SelectOption($match->GetMaximumPlayersPerTeam()); } else { if (!$match->GetId()) { # Use eight as sensible default for new tournaments $per_side_box->SelectOption(8); } } $players_per_team = new XhtmlElement("label", $per_side_box); $players_per_team->AddAttribute("for", $this->GetNamingPrefix() . "Players"); $players_per_team->AddControl(" players per team"); $players_part = new FormPart("How many players?", $players_per_team); $players_part->AddCssClass("playersPerTeam"); $match_box->AddControl($players_part); # Overs $overs_box = new XhtmlSelect($this->GetNamingPrefix() . "Overs", null, $this->IsValid()); $overs_box->SetBlankFirst(true); for ($i = 2; $i <= 8; $i++) { $overs_box->AddControl(new XhtmlOption($i)); } if ($match->GetIsOversKnown()) { $overs_box->SelectOption($match->GetOvers()); } $overs_label = new XhtmlElement("label", "Overs per innings"); $overs_label->AddAttribute("for", $overs_box->GetXhtmlId()); $overs_part = new FormPart($overs_label, new XhtmlElement("div", $overs_box)); $overs_part->AddCssClass("overs"); $match_box->AddControl($overs_part); # Start date and time if (!$match->GetStartTime()) { # if no date set, use specified default if ($this->i_default_time) { $match->SetStartTime($this->i_default_time); } else { # if no date set and no default, default to today at 10.30am BST # NOTE that if this is a new tournament in an old season, this date won't be selected because the available # dates will be limited below and won't include today. It'll be the same day in the relevant year though. $i_now = gmdate('U'); $match->SetStartTime(gmmktime(9, 30, 00, (int) gmdate('n', $i_now), (int) gmdate('d', $i_now), (int) gmdate('Y', $i_now))); $match->SetIsStartTimeKnown(true); } } $o_date = new DateControl($this->GetNamingPrefix() . 'Start', $match->GetStartTime(), $match->GetIsStartTimeKnown(), $this->IsValidSubmit()); $o_date->SetShowTime(true); $o_date->SetRequireTime(false); $o_date->SetMinuteInterval(5); # if only one season to choose from, limit available dates to the length of that season if ($this->context_season instanceof Season) { if ($this->context_season->GetStartYear() == $this->context_season->GetEndYear()) { $i_mid_season = gmmktime(0, 0, 0, 6, 30, $this->context_season->GetStartYear()); } else { $i_mid_season = gmmktime(0, 0, 0, 12, 31, $this->context_season->GetStartYear()); } $season_dates = Season::SeasonDates($i_mid_season); $season_start_month = gmdate('n', $season_dates[0]); $season_end_month = gmdate('n', $season_dates[1]); if ($season_start_month) { $o_date->SetMonthStart($season_start_month); } if ($season_end_month) { $o_date->SetMonthEnd($season_end_month); } $season_start_year = $this->context_season->GetStartYear(); $season_end_year = $this->context_season->GetEndYear(); if ($season_start_year) { $o_date->SetYearStart($season_start_year); } if ($season_end_year) { $o_date->SetYearEnd($season_end_year); } } $o_date_part = new FormPart('When?', $o_date); $o_date_part->SetIsFieldset(true); $match_box->AddControl($o_date_part); # Where? $o_ground_list = new XhtmlSelect($this->GetNamingPrefix() . 'Ground'); $o_ground_list->AddControl(new XhtmlOption("Don't know", -1)); $o_ground_list->AddControl(new XhtmlOption('Not listed (type the address in the notes field)', -2)); # Promote the most likely grounds to the top of the list $likely_ground_ids = array(); if ($match->GetGroundId()) { $likely_ground_ids[] = $match->GetGroundId(); } foreach ($this->probable_teams as $o_team) { $likely_ground_ids[] = $o_team->GetGround()->GetId(); } if (isset($this->context_season)) { foreach ($this->context_season->GetTeams() as $o_team) { $likely_ground_ids[] = $o_team->GetGround()->GetId(); } } if (isset($this->context_team) and is_object($this->context_team->GetGround())) { $likely_ground_ids[] = $this->context_team->GetGround()->GetId(); } $likely_grounds = array(); $a_other_grounds = array(); /* @var $o_ground Ground */ foreach ($this->grounds->GetItems() as $o_ground) { if (array_search($o_ground->GetId(), $likely_ground_ids) > -1) { $likely_grounds[] = $o_ground; } else { $a_other_grounds[] = $o_ground; } } # Add home grounds foreach ($likely_grounds as $o_ground) { $option = new XhtmlOption($o_ground->GetNameAndTown(), $o_ground->GetId()); $option->SetGroupName('Likely grounds'); $o_ground_list->AddControl($option); } # Add away grounds foreach ($a_other_grounds as $o_ground) { $option = new XhtmlOption($o_ground->GetNameAndTown(), $o_ground->GetId()); $option->SetGroupName('Other grounds'); $o_ground_list->AddControl($option); } # Select ground if ($match->GetGroundId()) { $o_ground_list->SelectOption($match->GetGroundId()); } elseif (isset($this->context_team)) { $o_ground_list->SelectOption($this->context_team->GetGround()->GetId()); } $o_ground_part = new FormPart('Where?', $o_ground_list); $match_box->AddControl($o_ground_part); # Notes $o_notes = new TextBox($this->GetNamingPrefix() . 'Notes', $match->GetNotes()); $o_notes->SetMode(TextBoxMode::MultiLine()); $o_notes_part = new FormPart('Notes<br />(remember to include contact details)', $o_notes); $match_box->AddControl($o_notes_part); # Remember short URL $o_short_url = new TextBox($this->GetNamingPrefix() . 'ShortUrl', $match->GetShortUrl()); $o_short_url->SetMode(TextBoxMode::Hidden()); $match_box->AddControl($o_short_url); # Note the context team to be added to the tournament by default if (isset($this->context_team)) { $context_team_box = new TextBox($this->GetNamingPrefix() . 'ContextTeam', $this->context_team->GetId()); $context_team_box->SetMode(TextBoxMode::Hidden()); $match_box->AddControl($context_team_box); } # Change Save button to "Next" button if ($this->show_step_number) { $this->SetButtonText('Next »'); } }
function CreateControls() { $this->AddCssClass('form'); /* @var $club Club */ /* @var $competition Competition */ /* @var $season Season */ /* @var $ground Ground */ require_once 'xhtml/forms/textbox.class.php'; require_once 'xhtml/forms/checkbox.class.php'; require_once 'stoolball/season-select.class.php'; $team = $this->GetDataObject(); $this->SetButtonText('Save team'); /* @var $team Team */ $is_once_only = $team->GetTeamType() == Team::ONCE; if ($this->is_admin) { # add club $club_list = new XhtmlSelect('club', null, $this->IsValidSubmit()); $club_list->SetBlankFirst(true); foreach ($this->a_clubs as $club) { if ($club instanceof Club) { $opt = new XhtmlOption($club->GetName(), $club->GetId()); $club_list->AddControl($opt); unset($opt); } } if (!is_null($team->GetClub()) and $this->IsValidSubmit()) { $club_list->SelectOption($team->GetClub()->GetId()); } $club_label = new XhtmlElement('label', 'Club'); $club_label->AddAttribute('for', $club_list->GetXhtmlId()); $this->AddControl($club_label); $this->AddControl($club_list); } if ($this->is_admin or $is_once_only) { # add name $name_box = new TextBox('name', $team->GetName(), $this->IsValidSubmit()); $name_box->AddAttribute('maxlength', 100); $name = new XhtmlElement('label', 'Team name'); $name->AddAttribute('for', $name_box->GetXhtmlId()); $this->AddControl($name); $this->AddControl($name_box); } if ($this->is_admin) { # add player type $type_list = new XhtmlSelect('playerType', null, $this->IsValidSubmit()); $type_list->AddControl(new XhtmlOption(PlayerType::Text(PlayerType::MIXED), PlayerType::MIXED)); $type_list->AddControl(new XhtmlOption(PlayerType::Text(PlayerType::LADIES), PlayerType::LADIES)); $type_list->AddControl(new XhtmlOption(PlayerType::Text(PlayerType::JUNIOR_MIXED), PlayerType::JUNIOR_MIXED)); $type_list->AddControl(new XhtmlOption(PlayerType::Text(PlayerType::GIRLS), PlayerType::GIRLS)); $type_list->AddControl(new XhtmlOption(PlayerType::Text(PlayerType::MEN), PlayerType::MEN)); $type_list->AddControl(new XhtmlOption(PlayerType::Text(PlayerType::BOYS), PlayerType::BOYS)); if (!is_null($team->GetPlayerType()) and $this->IsValidSubmit()) { $type_list->SelectOption($team->GetPlayerType()); } $type_part = new XhtmlElement('label', 'Player type'); $type_part->AddAttribute('for', $type_list->GetXhtmlId()); $this->AddControl($type_part); $this->AddControl($type_list); # Remember short URL $short_url = new TextBox($this->GetNamingPrefix() . 'ShortUrl', $team->GetShortUrl(), $this->IsValidSubmit()); $short_url_label = new XhtmlElement('label', 'Short URL'); $short_url_label->AddAttribute('for', $short_url->GetXhtmlId()); $this->AddControl($short_url_label); $this->AddControl($short_url); } # add intro $intro_box = new TextBox('intro', $team->GetIntro(), $this->IsValidSubmit()); $intro_box->SetMode(TextBoxMode::MultiLine()); $intro = new XhtmlElement('label', 'Introduction'); $intro->AddAttribute('for', $intro_box->GetXhtmlId()); $this->AddControl($intro); $this->AddControl('<p class="label-hint">If you need to change your team name, please email us.</p>'); $this->AddControl($intro_box); if (!$is_once_only) { # Can we join in? $team_type = new XhtmlSelect('team_type', null, $this->IsValidSubmit()); $team_type->AddControl(new XhtmlOption("plays regularly", Team::REGULAR, $team->GetTeamType() == Team::REGULAR)); $team_type->AddControl(new XhtmlOption("represents a league or group", Team::REPRESENTATIVE, $team->GetTeamType() == Team::REPRESENTATIVE)); $team_type->AddControl(new XhtmlOption("closed group (example: only staff can join a work team)", Team::CLOSED_GROUP, $team->GetTeamType() == Team::CLOSED_GROUP)); $team_type->AddControl(new XhtmlOption("plays occasionally", Team::OCCASIONAL, $team->GetTeamType() == Team::OCCASIONAL)); $team_type->AddControl(new XhtmlOption("school year group(s)", Team::SCHOOL_YEARS, $team->GetTeamType() == Team::SCHOOL_YEARS)); $team_type->AddControl(new XhtmlOption("school club (eg after school)", Team::SCHOOL_CLUB, $team->GetTeamType() == Team::SCHOOL_CLUB)); $team_type->AddControl(new XhtmlOption("other school team", Team::SCHOOL_OTHER, $team->GetTeamType() == Team::SCHOOL_OTHER)); $type_label = new XhtmlElement('label', "Type of team"); $type_label->AddAttribute('for', $team_type->GetXhtmlId()); $this->AddControl($type_label); $this->AddControl('<p class="label-hint">We use this to decide when to list your team.</p>'); $this->AddControl($team_type); $school_years_data = $this->GetDataObject()->GetSchoolYears(); $school_years = new XhtmlElement("fieldset", null, "school-years"); $school_years->AddControl(new XhtmlElement("legend", "Select the school year(s) this team represents")); $school_years->AddControl(new XhtmlElement("p", "For example, if Years 7 and 8 play together, select both. If Year 9 also plays, but separately, create a separate Year 9 team.")); $school_years->AddControl(new CheckBox('year1', 'Year 1', 1, array_key_exists(1, $school_years_data) and $school_years_data[1], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year2', 'Year 2', 1, array_key_exists(2, $school_years_data) and $school_years_data[2], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year3', 'Year 3', 1, array_key_exists(3, $school_years_data) and $school_years_data[3], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year4', 'Year 4', 1, array_key_exists(4, $school_years_data) and $school_years_data[4], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year5', 'Year 5', 1, array_key_exists(5, $school_years_data) and $school_years_data[5], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year6', 'Year 6', 1, array_key_exists(6, $school_years_data) and $school_years_data[6], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year7', 'Year 7', 1, array_key_exists(7, $school_years_data) and $school_years_data[7], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year8', 'Year 8', 1, array_key_exists(8, $school_years_data) and $school_years_data[8], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year9', 'Year 9', 1, array_key_exists(9, $school_years_data) and $school_years_data[9], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year10', 'Year 10', 1, array_key_exists(10, $school_years_data) and $school_years_data[10], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year11', 'Year 11', 1, array_key_exists(11, $school_years_data) and $school_years_data[11], $this->IsValidSubmit())); $school_years->AddControl(new CheckBox('year11', 'Year 12', 1, array_key_exists(12, $school_years_data) and $school_years_data[12], $this->IsValidSubmit())); $this->AddControl($school_years); $this->AddControl(new CheckBox('playing', 'This team still plays matches', 1, $team->GetIsActive(), $this->IsValidSubmit())); # add ground $ground_list = new XhtmlSelect('ground', null, $this->IsValidSubmit()); foreach ($this->a_grounds as $ground) { if ($ground instanceof Ground) { $opt = new XhtmlOption($ground->GetNameAndTown(), $ground->GetId()); $ground_list->AddControl($opt); unset($opt); } } $ground = $team->GetGround(); if (is_numeric($ground->GetId()) and $this->IsValidSubmit()) { $ground_list->SelectOption($ground->GetId()); } $ground_label = new XhtmlElement('label', 'Where do you play?'); $ground_label->AddAttribute('for', $ground_list->GetXhtmlId()); $this->AddControl($ground_label); $this->AddControl('<p class="label-hint">If your ground isn\'t listed, please email us the address.</p>'); $this->AddControl($ground_list); } # Add seasons $this->AddControl(new XhtmlElement('label', 'Leagues and competitions')); $this->AddControl('<p class="label-hint">We manage the leagues and competitions you\'re listed in. Please email us with any changes.</p>'); if (!$is_once_only) { # add times $times_box = new TextBox('times', $team->GetPlayingTimes(), $this->IsValidSubmit()); $times_box->SetMode(TextBoxMode::MultiLine()); $times = new XhtmlElement("label", 'Which days of the week do you play, and at what time?'); $times->AddAttribute('for', $times_box->GetXhtmlId()); $this->AddControl($times); $this->AddControl($times_box); } # add cost $year_box = new TextBox('yearCost', $team->GetCost(), $this->IsValidSubmit()); $year_box->SetMode(TextBoxMode::MultiLine()); $year = new XhtmlElement('label', 'Cost to play'); $year->AddAttribute('for', $year_box->GetXhtmlId()); $this->AddControl($year); $this->AddControl('<p class="label-hint">Do you have an annual membership fee? Match fees? Special rates for juniors?</p>'); $this->AddControl($year_box); # add contact info $contact_box = new TextBox('contact', $team->GetContact(), $this->IsValidSubmit()); $contact_box->SetMode(TextBoxMode::MultiLine()); $contact = new XhtmlElement('label', 'Contact details for the public'); $contact->AddAttribute('for', $contact_box->GetXhtmlId()); $this->AddControl($contact); $this->AddControl('<p class="label-hint">We recommend you publish a phone number and email so new players can get in touch.</p>'); $this->AddControl($contact_box); $private_box = new TextBox('private', $team->GetPrivateContact(), $this->IsValidSubmit()); $private_box->SetMode(TextBoxMode::MultiLine()); $private = new XhtmlElement('label', 'Contact details for Stoolball England (if different)'); $private->AddAttribute('for', $private_box->GetXhtmlId()); $this->AddControl($private); $this->AddControl('<p class="label-hint">We won\'t share this with anyone else.</p>'); $this->AddControl($private_box); # add website url $website_url_box = new TextBox('websiteUrl', $team->GetWebsiteUrl(), $this->IsValidSubmit()); $website_url_box->AddAttribute('maxlength', 250); $website_url = new XhtmlElement('label', 'Team website'); $website_url->AddAttribute('for', $website_url_box->GetXhtmlId()); $this->AddControl($website_url); $this->AddControl($website_url_box); }
/** * Build the form */ protected function OnPreRender() { $this->AddControl('<div id="statisticsFilter" class="panel"><div><div><h2><span><span><span>Filter these statistics</span></span></span></h2>'); # Track whether to show or hide this filter $filter = '<input type="hidden" id="filter" name="filter" value="'; $filter .= (isset($_GET["filter"]) and $_GET["filter"] == "1") ? 1 : 0; $filter .= '" />'; $this->AddControl($filter); $type_filters = array(); # Support player type filter if (is_array($this->player_type_filter)) { require_once "stoolball/player-type.enum.php"; $player_type_list = new XhtmlSelect("player-type"); $blank = new XhtmlOption("any players", ""); $player_type_list->AddControl($blank); foreach ($this->player_type_filter[0] as $player_type) { $player_type_list->AddControl(new XhtmlOption(strtolower(PlayerType::Text($player_type)), $player_type, $player_type === $this->player_type_filter[1])); } $label = new XhtmlElement("label", "Type of players", "aural"); $label->AddAttribute("for", $player_type_list->GetXhtmlId()); $type_filters[] = $label; $type_filters[] = $player_type_list; } # Support match type filter if (is_array($this->match_type_filter)) { require_once "stoolball/match-type.enum.php"; $match_type_list = new XhtmlSelect("match-type"); $blank = new XhtmlOption("any match", ""); $match_type_list->AddControl($blank); foreach ($this->match_type_filter[0] as $match_type) { $match_type_list->AddControl(new XhtmlOption(str_replace(" match", "", MatchType::Text($match_type)), $match_type, $match_type === $this->match_type_filter[1])); } $label = new XhtmlElement("label", "Type of competition", "aural"); $label->AddAttribute("for", $match_type_list->GetXhtmlId()); $type_filters[] = $label; $type_filters[] = $match_type_list; } if (count($type_filters)) { $type = new XhtmlElement("fieldset", new XhtmlElement("legend", "Match type", "formLabel"), "formPart"); $controls = new XhtmlElement("div", null, "formControl"); foreach ($type_filters as $control) { $controls->AddControl($control); } $type->AddControl($controls); $this->AddControl($type); } # Support team filter if (is_array($this->team_filter)) { $team_list = new XhtmlSelect("team"); $blank = new XhtmlOption("any team", ""); $team_list->AddControl($blank); foreach ($this->team_filter[0] as $team) { $team_list->AddControl(new XhtmlOption($team->GetName(), $team->GetId(), $team->GetId() == $this->team_filter[1])); } $this->AddControl(new FormPart("Team", $team_list)); } # Support opposition team filter if (is_array($this->opposition_filter)) { $opposition_list = new XhtmlSelect("opposition"); $blank = new XhtmlOption("any team", ""); $opposition_list->AddControl($blank); foreach ($this->opposition_filter[0] as $team) { $opposition_list->AddControl(new XhtmlOption($team->GetName(), $team->GetId(), $team->GetId() == $this->opposition_filter[1])); } $this->AddControl(new FormPart("Against", $opposition_list)); } # Support ground filter if (is_array($this->ground_filter)) { $ground_list = new XhtmlSelect("ground"); $blank = new XhtmlOption("any ground", ""); $ground_list->AddControl($blank); foreach ($this->ground_filter[0] as $ground) { $ground_list->AddControl(new XhtmlOption($ground->GetNameAndTown(), $ground->GetId(), $ground->GetId() == $this->ground_filter[1])); } $this->AddControl(new FormPart("Ground", $ground_list)); } # Support competition filter if (is_array($this->competition_filter)) { $competition_list = new XhtmlSelect("competition"); $blank = new XhtmlOption("any competition", ""); $competition_list->AddControl($blank); foreach ($this->competition_filter[0] as $competition) { $competition_list->AddControl(new XhtmlOption($competition->GetName(), $competition->GetId(), $competition->GetId() == $this->competition_filter[1])); } $this->AddControl(new FormPart("Competition", $competition_list)); } # Support date filter # Use text fields rather than HTML 5 date fields because then we can accept dates like "last Tuesday" # which PHP will understand. Jquery calendar is at least as good as native date pickers anyway. $date_fields = '<div class="formPart"> <label for="from" class="formLabel">From date</label> <div class="formControl twoFields"> <input type="text" class="date firstField" id="from" name="from" placeholder="any date" autocomplete="off"'; if (!$this->IsValid()) { $date_fields .= ' value="' . (isset($_GET["from"]) ? $_GET["from"] : "") . '"'; } else { if ($this->after_date_filter) { $date_fields .= ' value="' . Date::BritishDate($this->after_date_filter, false, true, false) . '"'; } } $date_fields .= ' /> <label for="to">Up to date <input type="text" class="date" id="to" name="to" placeholder="any date" autocomplete="off"'; if (!$this->IsValid()) { $date_fields .= ' value="' . (isset($_GET["to"]) ? $_GET["to"] : "") . '"'; } else { if ($this->before_date_filter) { $date_fields .= ' value="' . Date::BritishDate($this->before_date_filter, false, true, false) . '"'; } } $date_fields .= ' /></label> </div> </div>'; $this->AddControl($date_fields); # Support innings filter $innings_list = new XhtmlSelect("innings"); $innings_list->AddControl(new XhtmlOption("either innings", "")); $innings_list->AddControl(new XhtmlOption("first innings", 1, 1 == $this->innings_filter)); $innings_list->AddControl(new XhtmlOption("second innings", 2, 2 == $this->innings_filter)); $this->AddControl('<div class="formPart"> <label for="innings" class="formLabel">Innings</label> <div class="formControl">' . $innings_list . '</div>' . '</div>'); # Support batting position filter if (is_array($this->batting_position_filter)) { $batting_position_list = new XhtmlSelect("batpos"); $blank = new XhtmlOption("any position", ""); $batting_position_list->AddControl($blank); foreach ($this->batting_position_filter[0] as $batting_position) { $batting_position_list->AddControl(new XhtmlOption($batting_position == 1 ? "opening" : $batting_position, $batting_position, $batting_position == $this->batting_position_filter[1])); } $this->AddControl('<div class="formPart"> <label for="batpos" class="formLabel">Batting at</label> <div class="formControl">' . $batting_position_list . '</div>' . '</div>'); } # Support match result filter $result_list = new XhtmlSelect("result"); $result_list->AddControl(new XhtmlOption("any result", "")); $result_list->AddControl(new XhtmlOption("win", 1, 1 === $this->match_result_filter)); $result_list->AddControl(new XhtmlOption("tie", 0, 0 === $this->match_result_filter)); $result_list->AddControl(new XhtmlOption("lose", -1, -1 === $this->match_result_filter)); $this->AddControl('<div class="formPart"> <label for="result" class="formLabel">Match result</label> <div class="formControl">' . $result_list . '</div>' . '</div>'); # Preserve the player filter if applied if (isset($_GET["player"]) and is_numeric($_GET["player"])) { $this->AddControl('<input type="hidden" name="player" id="player" value="' . $_GET["player"] . '" />'); } $this->AddControl('<p class="actions"><input type="submit" value="Apply filter" /></p>'); $this->AddControl('</div></div></div>'); }
function OnPreRender() { if ($this->b_show_date) { # create dropdown menu for day of month $o_day = new XhtmlSelect($this->GetXhtmlId() . '_day', '', $this->b_page_valid); if (!$this->GetRequireDate()) { $o_day->AddControl(new XhtmlOption()); } for ($i = 1; $i <= 31; $i++) { $o_day->AddControl(new XhtmlOption($i, $i)); } if ($this->i_timestamp != null and !($this->b_page_valid === false)) { $o_day->SelectOption(date('j', $this->i_timestamp)); } # create label, and add controls $o_day_label = new XhtmlElement('label', 'Day'); $o_day_label->AddAttribute('for', $o_day->GetXhtmlId()); $o_day_label->SetCssClass('aural'); $this->AddControl($o_day_label); $this->AddControl($o_day); # create dropdown menu for month $o_month = new XhtmlSelect($this->GetXhtmlId() . '_month', '', $this->b_page_valid); if (!$this->GetRequireDate()) { $o_month->AddControl(new XhtmlOption()); } if ($this->month_end > $this->month_start) { for ($i = $this->month_start; $i <= $this->month_end; $i++) { $s_monthname = date('F', gmmktime(0, 0, 0, $i, 1, 0)); $o_month->AddControl(new XhtmlOption($s_monthname, $i)); } } else { # Support order of Oct, Nov, Dec, Jan, Feb Mar for ($i = $this->month_start; $i <= 12; $i++) { $s_monthname = date('F', gmmktime(0, 0, 0, $i, 1, 0)); $o_month->AddControl(new XhtmlOption($s_monthname, $i)); } for ($i = 1; $i <= $this->month_end; $i++) { $s_monthname = date('F', gmmktime(0, 0, 0, $i, 1, 0)); $o_month->AddControl(new XhtmlOption($s_monthname, $i)); } } if ($this->i_timestamp != null and !($this->b_page_valid === false)) { $o_month->SelectOption(date('n', $this->i_timestamp)); } # create label, and add controls $o_month_label = new XhtmlElement('label', 'Month'); $o_month_label->AddAttribute('for', $o_month->GetXhtmlId()); $o_month_label->SetCssClass('aural'); $this->AddControl($o_month_label); $this->AddControl($o_month); # create dropdown for year if ($this->GetRequireDate() and $this->year_start == $this->year_end) { # If there's only one possible value for year and it's required, just hard-code it $o_year = new TextBox($this->GetXhtmlId() . '_year', $this->year_start, $this->b_page_valid); $o_year->SetMode(TextBoxMode::Hidden()); $this->AddControl($o_year); $this->AddControl(' ' . $this->year_start); } else { $o_year = new XhtmlSelect($this->GetXhtmlId() . '_year', '', $this->b_page_valid); if (!$this->GetRequireDate()) { $o_year->AddControl(new XhtmlOption()); } for ($i = $this->year_start; $i <= $this->year_end; $i++) { $o_option = new XhtmlOption($i, $i); $o_year->AddControl($o_option); } if ($this->i_timestamp != null and !($this->b_page_valid === false)) { $o_year->SelectOption(date('Y', $this->i_timestamp)); } # create label, and add controls $o_year_label = new XhtmlElement('label', 'Year'); $o_year_label->AddAttribute('for', $o_year->GetXhtmlId()); $o_year_label->SetCssClass('aural'); $this->AddControl($o_year_label); $this->AddControl($o_year); } } else { $o_day = new TextBox($this->GetXhtmlId() . '_day'); $o_day->SetMode(TextBoxMode::Hidden()); $o_day->SetText(date('j', $this->i_timestamp)); $this->AddControl($o_day); $o_month = new TextBox($this->GetXhtmlId() . '_month'); $o_month->SetMode(TextBoxMode::Hidden()); $o_month->SetText(date('n', $this->i_timestamp)); $this->AddControl($o_month); $o_year = new TextBox($this->GetXhtmlId() . '_year'); $o_year->SetMode(TextBoxMode::Hidden()); $o_year->SetText(date('Y', $this->i_timestamp)); $this->AddControl($o_year); } if ($this->b_show_time) { if ($this->b_show_date) { $this->AddControl(' '); } $this->AddControl('<span class="time">'); if ($this->b_show_date) { $this->AddControl('at '); } # create dropdown menu for hour $o_hour = new XhtmlSelect($this->GetXhtmlId() . '_hour', '', $this->b_page_valid); if (!$this->GetRequireTime()) { $o_hour->AddControl(new XhtmlOption()); } for ($i = 1; $i <= 12; $i++) { $o_hour->AddControl(new XhtmlOption($i, $i)); } if ($this->i_timestamp != null and $this->b_time_known and !($this->b_page_valid === false)) { $o_hour->SelectOption(date('g', $this->i_timestamp)); } # create label, and add controls $o_hour_label = new XhtmlElement('label', 'Hour'); $o_hour_label->AddAttribute('for', $o_hour->GetXhtmlId()); $o_hour_label->SetCssClass('aural'); $this->AddControl($o_hour_label); $this->AddControl($o_hour); # create dropdown menu for minute $o_minute = new XhtmlSelect($this->GetXhtmlId() . '_minute', '', $this->b_page_valid); if (!$this->GetRequireTime()) { $o_minute->AddControl(new XhtmlOption()); } for ($i = 0; $i <= 59; $i++) { if ($i % $this->i_minute_interval == 0) { $s_minute = $i > 9 ? (string) $i : "0" . (string) $i; $o_minute->AddControl(new XhtmlOption($s_minute, $s_minute)); } } if ($this->i_timestamp != null and $this->b_time_known and !($this->b_page_valid === false)) { $o_minute->SelectOption(date('i', $this->i_timestamp)); } # create label, and add controls $o_min_label = new XhtmlElement('label', 'Minutes'); $o_min_label->AddAttribute('for', $o_minute->GetXhtmlId()); $o_min_label->SetCssClass('aural'); $this->AddControl($o_min_label); $this->AddControl($o_minute); # create dropdown menu for am/pm $o_ampm = new XhtmlSelect($this->GetXhtmlId() . '_ampm', '', $this->b_page_valid); if (!$this->GetRequireTime()) { $o_ampm->AddControl(new XhtmlOption()); } $o_ampm->AddControl(new XhtmlOption('am', 'am')); $o_ampm->AddControl(new XhtmlOption('pm', 'pm')); if ($this->i_timestamp != null and $this->b_time_known and !($this->b_page_valid === false)) { $o_ampm->SelectOption(date('a', $this->i_timestamp)); } # create label, and add controls $o_ampm_label = new XhtmlElement('label', 'AM or PM'); $o_ampm_label->AddAttribute('for', $o_ampm->GetXhtmlId()); $o_ampm_label->SetCssClass('aural'); $this->AddControl($o_ampm_label); $this->AddControl($o_ampm); $this->AddControl('</span>'); } else { $o_hour = new TextBox($this->GetXhtmlId() . '_hour'); $o_hour->SetMode(TextBoxMode::Hidden()); if ($this->b_time_known) { $o_hour->SetText(date('g', $this->i_timestamp)); } $this->AddControl($o_hour); $o_minute = new TextBox($this->GetXhtmlId() . '_minute'); $o_minute->SetMode(TextBoxMode::Hidden()); if ($this->b_time_known) { $o_minute->SetText(date('i', $this->i_timestamp)); } $this->AddControl($o_minute); $o_ampm = new TextBox($this->GetXhtmlId() . '_ampm'); $o_ampm->SetMode(TextBoxMode::Hidden()); if ($this->b_time_known) { $o_ampm->SetText(date('a', $this->i_timestamp)); } $this->AddControl($o_ampm); } }
/** * Configures, and repopulates on postback, a dropdown list to manage one property of a related data item * * @param XhtmlSelect $select * @param string $s_validated_value * @param string $s_name * @param int $i_row_count * @param int $i_total_rows * @param bool $b_required * @param string $s_default_value * @return XhtmlSelect */ protected function ConfigureSelect($select, $s_validated_value, $s_name, $i_row_count, $i_total_rows, $b_required = false, $s_default_value = '') { # Establish current status $b_is_add_row = is_null($i_row_count); $b_repopulate_add_row = (!$this->IsValid() or $this->DeleteClicked() or $this->IsUnrelatedInternalPostback()); $select->SetXhtmlId($this->GetNamingPrefix() . $s_name . $i_row_count); if ($b_required) { $select->SetCssClass('required'); } # If this is the row used to add a new related item... # Add a blank option only if data is not required, or there's no obvious default if ($b_is_add_row and (!$b_required or !strlen($s_default_value))) { $select->SetBlankFirst(true); } # If there is a default, set it if ($b_is_add_row and !$this->IsPostback() and strlen($s_default_value)) { $select->SelectOption($s_default_value); } # But if it's an existing row and data is required, there's no blank option... if (!$b_is_add_row and !$b_required) { $select->SetBlankFirst(true); } # If this is the row used to add a new related item... if ($b_is_add_row) { # ...if we repopulate, it'll be with the exact value posted, # as validation has either failed or not occurred if ($b_repopulate_add_row and isset($_POST[$select->GetXhtmlId()])) { $select->SelectOption($_POST[$select->GetXhtmlId()]); } } else { if ($this->IsValid()) { if ($this->AddClicked() and $i_row_count == $this->i_row_added) { # If a new row was posted, is valid, and is now displayed here, need to get the posted value from the add row $s_select_in_add_row = substr($select->GetXhtmlId(), 0, strlen($select->GetXhtmlId()) - strlen($i_row_count)); $select->SelectOption($_POST[$s_select_in_add_row]); } else { # Even though the editor as a whole is valid, this row wasn't validated # so just restore the previous value if (isset($_POST[$select->GetXhtmlId()])) { $select->SelectOption($_POST[$select->GetXhtmlId()]); } else { # Won't be in $_POST when page is first loaded $select->SelectOption($s_validated_value); } } } else { # Repopulate with the exact value posted, as validation has failed $select->SelectOption($_POST[$select->GetXhtmlId()]); } } # Return dropdown so that other things can be done to it - eg add a CSS class return $select; }