MediaWiki REL1_39
XmlSelect.php
Go to the documentation of this file.
1<?php
26class 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 return $this->attributes[$name] ?? null;
74 }
75
80 public function addOption( $label, $value = false ) {
81 $value = $value !== false ? $value : $label;
82 $this->options[] = [ $label => $value ];
83 }
84
92 public function addOptions( $options ) {
93 $this->options[] = $options;
94 }
95
105 public static function formatOptions( $options, $default = false ) {
106 $data = '';
107
108 foreach ( $options as $label => $value ) {
109 if ( is_array( $value ) ) {
110 $contents = self::formatOptions( $value, $default );
111 $data .= Html::rawElement( 'optgroup', [ 'label' => $label ], $contents ) . "\n";
112 } else {
113 // If $default is an array, then the <select> probably has the multiple attribute,
114 // so we should check if each $value is in $default, rather than checking if
115 // $value is equal to $default.
116 $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
117 $data .= Xml::option( $label, $value, $selected ) . "\n";
118 }
119 }
120
121 return $data;
122 }
123
127 public function getHTML() {
128 $contents = '';
129
130 foreach ( $this->options as $options ) {
131 $contents .= self::formatOptions( $options, $this->default );
132 }
133
134 return Html::rawElement( $this->tagName, $this->attributes, rtrim( $contents ) );
135 }
136
146 public static function parseOptionsMessage( string $msg ): array {
147 $options = [];
148 foreach ( explode( ',', $msg ) as $option ) {
149 // Normalize options that only have one part.
150 if ( strpos( $option, ':' ) === false ) {
151 $option = "$option:$option";
152 }
153 // Extract the two parts.
154 list( $label, $value ) = explode( ':', $option );
155 $options[ trim( $label ) ] = trim( $value );
156 }
157 return $options;
158 }
159}
Class for generating HTML <select> or <datalist> elements.
Definition XmlSelect.php:26
static parseOptionsMessage(string $msg)
Parse labels and values out of a comma- and colon-separated list of options, such as is used for expi...
setTagName( $tagName)
Definition XmlSelect.php:56
getAttribute( $name)
Definition XmlSelect.php:72
setDefault( $default)
Definition XmlSelect.php:49
setAttribute( $name, $value)
Definition XmlSelect.php:64
__construct( $name=false, $id=false, $default=false)
Definition XmlSelect.php:32
static formatOptions( $options, $default=false)
This accepts an array of form: label => value label => ( label => value, label => value )
addOption( $label, $value=false)
Definition XmlSelect.php:80
addOptions( $options)
This accepts an array of form label => value label => ( label => value, label => value )
Definition XmlSelect.php:92