Tweaked location of profiling in query() to split out the implicit BEGIN
[lhc/web/wiklou.git] / includes / HTMLForm.php
index e06a934..84e7874 100644 (file)
@@ -968,9 +968,10 @@ class HTMLForm extends ContextSource {
         * @param $fields array[]|HTMLFormField[] array of fields (either arrays or objects)
         * @param string $sectionName ID attribute of the "<table>" tag for this section, ignored if empty
         * @param string $fieldsetIDPrefix ID prefix for the "<fieldset>" tag of each subsection, ignored if empty
+        * @param boolean &$hasUserVisibleFields Whether the section had user-visible fields
         * @return String
         */
-       public function displaySection( $fields, $sectionName = '', $fieldsetIDPrefix = '' ) {
+       public function displaySection( $fields, $sectionName = '', $fieldsetIDPrefix = '', &$hasUserVisibleFields = false ) {
                $displayFormat = $this->getDisplayFormat();
 
                $html = '';
@@ -990,20 +991,38 @@ class HTMLForm extends ContextSource {
                                if ( $labelValue != '&#160;' && $labelValue !== '' ) {
                                        $hasLabel = true;
                                }
-                       } elseif ( is_array( $value ) ) {
-                               $section = $this->displaySection( $value, "mw-htmlform-$key", "$fieldsetIDPrefix$key-" );
-                               $legend = $this->getLegend( $key );
-                               if ( isset( $this->mSectionHeaders[$key] ) ) {
-                                       $section = $this->mSectionHeaders[$key] . $section;
-                               }
-                               if ( isset( $this->mSectionFooters[$key] ) ) {
-                                       $section .= $this->mSectionFooters[$key];
+
+                               if ( get_class( $value ) !== 'HTMLHiddenField' &&
+                                               get_class( $value ) !== 'HTMLApiField' ) {
+                                       $hasUserVisibleFields = true;
                                }
-                               $attributes = array();
-                               if ( $fieldsetIDPrefix ) {
-                                       $attributes['id'] = Sanitizer::escapeId( "$fieldsetIDPrefix$key" );
+                       } elseif ( is_array( $value ) ) {
+                               $subsectionHasVisibleFields = false;
+                               $section = $this->displaySection( $value, "mw-htmlform-$key", "$fieldsetIDPrefix$key-", $subsectionHasVisibleFields );
+                               $legend = null;
+
+                               if ( $subsectionHasVisibleFields === true ) {
+                                       // Display the section with various niceties.
+                                       $hasUserVisibleFields = true;
+
+                                       $legend = $this->getLegend( $key );
+
+                                       if ( isset( $this->mSectionHeaders[$key] ) ) {
+                                               $section = $this->mSectionHeaders[$key] . $section;
+                                       }
+                                       if ( isset( $this->mSectionFooters[$key] ) ) {
+                                               $section .= $this->mSectionFooters[$key];
+                                       }
+
+                                       $attributes = array();
+                                       if ( $fieldsetIDPrefix ) {
+                                               $attributes['id'] = Sanitizer::escapeId( "$fieldsetIDPrefix$key" );
+                                       }
+                                       $subsectionHtml .= Xml::fieldset( $legend, $section, $attributes ) . "\n";
+                               } else {
+                                       // Just return the inputs, nothing fancy.
+                                       $subsectionHtml .= $section;
                                }
-                               $subsectionHtml .= Xml::fieldset( $legend, $section, $attributes ) . "\n";
                        }
                }