MediaWiki  1.28.0
XmlSelect.php
Go to the documentation of this file.
1 <?php
26 class XmlSelect {
27  protected $options = [];
28  protected $default = false;
29  protected $tagName = 'select';
30  protected $attributes = [];
31 
32  public function __construct( $name = false, $id = false, $default = false ) {
33  if ( $name ) {
34  $this->setAttribute( 'name', $name );
35  }
36 
37  if ( $id ) {
38  $this->setAttribute( 'id', $id );
39  }
40 
41  if ( $default !== false ) {
42  $this->default = $default;
43  }
44  }
45 
49  public function setDefault( $default ) {
50  $this->default = $default;
51  }
52 
56  public function setTagName( $tagName ) {
57  $this->tagName = $tagName;
58  }
59 
64  public function setAttribute( $name, $value ) {
65  $this->attributes[$name] = $value;
66  }
67 
72  public function getAttribute( $name ) {
73  if ( isset( $this->attributes[$name] ) ) {
74  return $this->attributes[$name];
75  } else {
76  return null;
77  }
78  }
79 
84  public function addOption( $label, $value = false ) {
85  $value = $value !== false ? $value : $label;
86  $this->options[] = [ $label => $value ];
87  }
88 
96  public function addOptions( $options ) {
97  $this->options[] = $options;
98  }
99 
109  static function formatOptions( $options, $default = false ) {
110  $data = '';
111 
112  foreach ( $options as $label => $value ) {
113  if ( is_array( $value ) ) {
114  $contents = self::formatOptions( $value, $default );
115  $data .= Html::rawElement( 'optgroup', [ 'label' => $label ], $contents ) . "\n";
116  } else {
117  // If $default is an array, then the <select> probably has the multiple attribute,
118  // so we should check if each $value is in $default, rather than checking if
119  // $value is equal to $default.
120  $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
121  $data .= Xml::option( $label, $value, $selected ) . "\n";
122  }
123  }
124 
125  return $data;
126  }
127 
131  public function getHTML() {
132  $contents = '';
133 
134  foreach ( $this->options as $options ) {
135  $contents .= self::formatOptions( $options, $this->default );
136  }
137 
138  return Html::rawElement( $this->tagName, $this->attributes, rtrim( $contents ) );
139  }
140 }
getAttribute($name)
Definition: XmlSelect.php:72
static rawElement($element, $attribs=[], $contents= '')
Returns an HTML element in a string.
Definition: Html.php:209
Class for generating HTML