Merge "Improve hidden field validation"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 16 Sep 2014 00:10:13 +0000 (00:10 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 16 Sep 2014 00:10:13 +0000 (00:10 +0000)
1  2 
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php

@@@ -107,7 -107,6 +107,7 @@@ class HTMLForm extends ContextSource 
                'select' => 'HTMLSelectField',
                'radio' => 'HTMLRadioField',
                'multiselect' => 'HTMLMultiSelectField',
 +              'limitselect' => 'HTMLSelectLimitField',
                'check' => 'HTMLCheckField',
                'toggle' => 'HTMLCheckField',
                'int' => 'HTMLIntField',
                'edittools' => 'HTMLEditTools',
                'checkmatrix' => 'HTMLCheckMatrix',
                'cloner' => 'HTMLFormFieldCloner',
 +              'autocompleteselect' => 'HTMLAutoCompleteSelectField',
                // HTMLTextField will output the correct type="" attribute automagically.
                // There are about four zillion other HTML5 input types, like range, but
                // we don't use those at the moment, so no point in adding all of them.
         * @return string
         */
        public function getDisplayFormat() {
 -              return $this->displayFormat;
 +              $format = $this->displayFormat;
 +              if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $format === 'table' ) {
 +                      $format = 'div';
 +              }
 +              return $format;
        }
  
        /**
                        if ( !empty( $field->mParams['nodata'] ) ) {
                                continue;
                        }
+                       if ( $field->isHidden( $this->mFieldData ) ) {
+                               continue;
+                       }
                        if ( $field->validate(
                                        $this->mFieldData[$fieldname],
                                        $this->mFieldData )
         * @return string HTML.
         */
        function getHiddenFields() {
 -              global $wgArticlePath;
 -
                $html = '';
                if ( $this->getMethod() == 'post' ) {
                        $html .= Html::hidden(
                        $html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
                }
  
 -              if ( strpos( $wgArticlePath, '?' ) !== false && $this->getMethod() == 'get' ) {
 +              $articlePath = $this->getConfig()->get( 'ArticlePath' );
 +              if ( strpos( $articlePath, '?' ) !== false && $this->getMethod() == 'get' ) {
                        $html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
                }
  
         */
        function getButtons() {
                $buttons = '';
 +              $useMediaWikiUIEverywhere = $this->getConfig()->get( 'UseMediaWikiUIEverywhere' );
  
                if ( $this->mShowSubmit ) {
                        $attribs = array();
  
                        $attribs['class'] = array( 'mw-htmlform-submit' );
  
 +                      if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
 +                              array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-constructive' );
 +                      }
 +
                        if ( $this->isVForm() ) {
                                // mw-ui-block is necessary because the buttons aren't necessarily in an
                                // immediate child div of the vform.
                                // @todo Let client specify if the primary submit button is progressive or destructive
                                array_push(
                                        $attribs['class'],
 -                                      'mw-ui-button',
                                        'mw-ui-big',
 -                                      'mw-ui-constructive',
                                        'mw-ui-block'
                                );
                        }
                                $attrs['id'] = $button['id'];
                        }
  
 +                      if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
 +                              if ( isset( $attrs['class'] ) ) {
 +                                      $attrs['class'] .= ' mw-ui-button';
 +                              } else {
 +                                      $attrs['class'] = 'mw-ui-button';
 +                              }
 +                              if ( $this->isVForm() ) {
 +                                      $attrs['class'] .= ' mw-ui-big mw-ui-block';
 +                              }
 +                      }
 +
                        $buttons .= Html::element( 'input', $attrs ) . "\n";
                }
  
                                // Close enough to a div.
                                $getFieldHtmlMethod = 'getDiv';
                                break;
 +                      case 'div':
 +                              $getFieldHtmlMethod = 'getDiv';
 +                              break;
                        default:
                                $getFieldHtmlMethod = 'get' . ucfirst( $displayFormat );
                }
         * @return string
         */
        public function getAction() {
 -              global $wgScript, $wgArticlePath;
 -
                // If an action is alredy provided, return it
                if ( $this->mAction !== false ) {
                        return $this->mAction;
                }
  
 -              // Check whether we are in GET mode and $wgArticlePath contains a "?"
 +              $articlePath = $this->getConfig()->get( 'ArticlePath' );
 +              // Check whether we are in GET mode and the ArticlePath contains a "?"
                // meaning that getLocalURL() would return something like "index.php?title=...".
                // As browser remove the query string before submitting GET forms,
 -              // it means that the title would be lost. In such case use $wgScript instead
 +              // it means that the title would be lost. In such case use wfScript() instead
                // and put title in an hidden field (see getHiddenFields()).
 -              if ( strpos( $wgArticlePath, '?' ) !== false && $this->getMethod() === 'get' ) {
 -                      return $wgScript;
 +              if ( strpos( $articlePath, '?' ) !== false && $this->getMethod() === 'get' ) {
 +                      return wfScript();
                }
  
                return $this->getTitle()->getLocalURL();
@@@ -113,7 -113,7 +113,7 @@@ abstract class HTMLFormField 
                                }
                                $data = $data[$key];
                        }
-                       $testValue = $data;
+                       $testValue = (string)$data;
                        break;
                }
  
                $wrapperAttributes = array(
                        'class' => 'htmlform-tip',
                );
 +              if ( $this->mHelpClass !== false ) {
 +                      $wrapperAttributes['class'] .= " {$this->mHelpClass}";
 +              }
                if ( $this->mHideIf ) {
                        $wrapperAttributes['data-hide-if'] = FormatJson::encode( $this->mHideIf );
                        $wrapperAttributes['class'] .= ' mw-htmlform-hide-if';