[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/htmlform/ -> HTMLSelectAndOtherField.php (source)

   1  <?php
   2  
   3  /**
   4   * Double field with a dropdown list constructed from a system message in the format
   5   *     * Optgroup header
   6   *     ** <option value>
   7   *     * New Optgroup header
   8   * Plus a text field underneath for an additional reason.  The 'value' of the field is
   9   * "<select>: <extra reason>", or "<extra reason>" if nothing has been selected in the
  10   * select dropdown.
  11   * @todo FIXME: If made 'required', only the text field should be compulsory.
  12   */
  13  class HTMLSelectAndOtherField extends HTMLSelectField {
  14  	function __construct( $params ) {
  15          if ( array_key_exists( 'other', $params ) ) {
  16          } elseif ( array_key_exists( 'other-message', $params ) ) {
  17              $params['other'] = wfMessage( $params['other-message'] )->plain();
  18          } else {
  19              $params['other'] = wfMessage( 'htmlform-selectorother-other' )->plain();
  20          }
  21  
  22          parent::__construct( $params );
  23  
  24          if ( $this->getOptions() === null ) {
  25              # Sulk
  26              throw new MWException( 'HTMLSelectAndOtherField called without any options' );
  27          }
  28          if ( !in_array( 'other', $this->mOptions, true ) ) {
  29              // Have 'other' always as first element
  30              $this->mOptions = array( $params['other'] => 'other' ) + $this->mOptions;
  31          }
  32          $this->mFlatOptions = self::flattenOptions( $this->getOptions() );
  33  
  34      }
  35  
  36  	function getInputHTML( $value ) {
  37          $select = parent::getInputHTML( $value[1] );
  38  
  39          $textAttribs = array(
  40              'id' => $this->mID . '-other',
  41              'size' => $this->getSize(),
  42          );
  43  
  44          if ( $this->mClass !== '' ) {
  45              $textAttribs['class'] = $this->mClass;
  46          }
  47  
  48          $allowedParams = array(
  49              'required',
  50              'autofocus',
  51              'multiple',
  52              'disabled',
  53              'tabindex'
  54          );
  55  
  56          $textAttribs += $this->getAttributes( $allowedParams );
  57  
  58          $textbox = Html::input( $this->mName . '-other', $value[2], 'text', $textAttribs );
  59  
  60          return "$select<br />\n$textbox";
  61      }
  62  
  63      /**
  64       * @param WebRequest $request
  65       *
  66       * @return array("<overall message>","<select value>","<text field value>")
  67       */
  68  	function loadDataFromRequest( $request ) {
  69          if ( $request->getCheck( $this->mName ) ) {
  70  
  71              $list = $request->getText( $this->mName );
  72              $text = $request->getText( $this->mName . '-other' );
  73  
  74              if ( $list == 'other' ) {
  75                  $final = $text;
  76              } elseif ( !in_array( $list, $this->mFlatOptions, true ) ) {
  77                  # User has spoofed the select form to give an option which wasn't
  78                  # in the original offer.  Sulk...
  79                  $final = $text;
  80              } elseif ( $text == '' ) {
  81                  $final = $list;
  82              } else {
  83                  $final = $list . $this->msg( 'colon-separator' )->inContentLanguage()->text() . $text;
  84              }
  85          } else {
  86              $final = $this->getDefault();
  87  
  88              $list = 'other';
  89              $text = $final;
  90              foreach ( $this->mFlatOptions as $option ) {
  91                  $match = $option . $this->msg( 'colon-separator' )->inContentLanguage()->text();
  92                  if ( strpos( $text, $match ) === 0 ) {
  93                      $list = $option;
  94                      $text = substr( $text, strlen( $match ) );
  95                      break;
  96                  }
  97              }
  98          }
  99  
 100          return array( $final, $list, $text );
 101      }
 102  
 103  	function getSize() {
 104          return isset( $this->mParams['size'] ) ? $this->mParams['size'] : 45;
 105      }
 106  
 107  	function validate( $value, $alldata ) {
 108          # HTMLSelectField forces $value to be one of the options in the select
 109          # field, which is not useful here.  But we do want the validation further up
 110          # the chain
 111          $p = parent::validate( $value[1], $alldata );
 112  
 113          if ( $p !== true ) {
 114              return $p;
 115          }
 116  
 117          if ( isset( $this->mParams['required'] )
 118              && $this->mParams['required'] !== false
 119              && $value[1] === ''
 120          ) {
 121              return $this->msg( 'htmlform-required' )->parse();
 122          }
 123  
 124          return true;
 125      }
 126  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1