Merge "Don't check namespace in SpecialWantedtemplates"
[lhc/web/wiklou.git] / includes / XmlSelect.php
index 1cd04ae..78f4764 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Class to generate XML <select>.
+ * Class for generating HTML <select> elements.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
  */
 
 /**
- * Module of static functions for generating XML <select> elements
+ * Class for generating HTML <select> elements.
  */
 class XmlSelect {
        protected $options = array();
@@ -43,7 +43,7 @@ class XmlSelect {
        }
 
        /**
-        * @param string $default
+        * @param string|array $default
         */
        public function setDefault( $default ) {
                $this->default = $default;
@@ -51,7 +51,7 @@ class XmlSelect {
 
        /**
         * @param string $name
-        * @param array $value
+        * @param string $value
         */
        public function setAttribute( $name, $value ) {
                $this->attributes[$name] = $value;
@@ -59,7 +59,7 @@ class XmlSelect {
 
        /**
         * @param string $name
-        * @return array|null
+        * @return string|null
         */
        public function getAttribute( $name ) {
                if ( isset( $this->attributes[$name] ) ) {
@@ -70,14 +70,12 @@ class XmlSelect {
        }
 
        /**
-        * @param string $name
-        * @param bool $value
+        * @param string $label
+        * @param string $value If not given, assumed equal to $label
         */
-       public function addOption( $name, $value = false ) {
-               // Stab stab stab
-               $value = $value !== false ? $value : $name;
-
-               $this->options[] = array( $name => $value );
+       public function addOption( $label, $value = false ) {
+               $value = $value !== false ? $value : $label;
+               $this->options[] = array( $label => $value );
        }
 
        /**
@@ -92,12 +90,12 @@ class XmlSelect {
        }
 
        /**
-        * This accepts an array of form
+        * This accepts an array of form:
         * label => value
         * label => ( label => value, label => value )
         *
         * @param array $options
-        * @param bool $default
+        * @param string|array $default
         * @return string
         */
        static function formatOptions( $options, $default = false ) {
@@ -108,7 +106,11 @@ class XmlSelect {
                                $contents = self::formatOptions( $value, $default );
                                $data .= Html::rawElement( 'optgroup', array( 'label' => $label ), $contents ) . "\n";
                        } else {
-                               $data .= Xml::option( $label, $value, $value === $default ) . "\n";
+                               // If $default is an array, then the <select> probably has the multiple attribute,
+                               // so we should check if each $value is in $default, rather than checking if
+                               // $value is equal to $default.
+                               $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
+                               $data .= Xml::option( $label, $value, $selected ) . "\n";
                        }
                }