Add flag to HTMLTextField to not persist submitted data
authorGergő Tisza <tgr.huwiki@gmail.com>
Fri, 1 Apr 2016 11:54:15 +0000 (14:54 +0300)
committerGergő Tisza <tgr.huwiki@gmail.com>
Fri, 1 Apr 2016 12:14:58 +0000 (15:14 +0300)
Sometimes the submitted text is not expected to show up as default
when the form is redisplayed after an error; password fields are
the obvious example for this, but in some cases (e.g. two-factor
token) it is useful for a normal text field to act like that as well.

The patch adds a new 'persistent' flag to HTMLTextField, which
defaults to false for passwords and true otherwise.

Change-Id: If0a52f61aa061bbb55bfdc76321ace7d3eaed934

includes/htmlform/HTMLTextField.php

index 4d5bcab..671dfde 100644 (file)
@@ -14,7 +14,19 @@ class HTMLTextField extends HTMLFormField {
                return null;
        }
 
                return null;
        }
 
+       public function isPersistent() {
+               if ( isset( $this->mParams['persistent'] ) ) {
+                       return $this->mParams['persistent'];
+               }
+               // don't put passwords into the HTML body, they could get cached or otherwise leaked
+               return !( isset( $this->mParams['type'] ) && $this->mParams['type'] === 'password' );
+       }
+
        function getInputHTML( $value ) {
        function getInputHTML( $value ) {
+               if ( !$this->isPersistent() ) {
+                       $value = '';
+               }
+
                $attribs = [
                                'id' => $this->mID,
                                'name' => $this->mName,
                $attribs = [
                                'id' => $this->mID,
                                'name' => $this->mName,
@@ -85,6 +97,10 @@ class HTMLTextField extends HTMLFormField {
        }
 
        function getInputOOUI( $value ) {
        }
 
        function getInputOOUI( $value ) {
+               if ( !$this->isPersistent() ) {
+                       $value = '';
+               }
+
                $attribs = $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {
                $attribs = $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {