Merge "Simplify HTMLTitleTextField::validate"
[lhc/web/wiklou.git] / includes / htmlform / HTMLFormField.php
index 97e4b50..8902995 100644 (file)
@@ -462,6 +462,16 @@ abstract class HTMLFormField {
                if ( isset( $params['hide-if'] ) ) {
                        $this->mHideIf = $params['hide-if'];
                }
+
+               if ( isset( $this->mParams['notice-message'] ) ) {
+                       wfDeprecated( "'notice-message' parameter in HTMLForm", '1.32' );
+               }
+               if ( isset( $this->mParams['notice-messages'] ) ) {
+                       wfDeprecated( "'notice-messages' parameter in HTMLForm", '1.32' );
+               }
+               if ( isset( $this->mParams['notice'] ) ) {
+                       wfDeprecated( "'notice' parameter in HTMLForm", '1.32' );
+               }
        }
 
        /**
@@ -607,7 +617,7 @@ abstract class HTMLFormField {
                        $error = new OOUI\HtmlSnippet( $error );
                }
 
-               $notices = $this->getNotices();
+               $notices = $this->getNotices( 'skip deprecation' );
                foreach ( $notices as &$notice ) {
                        $notice = new OOUI\HtmlSnippet( $notice );
                }
@@ -619,6 +629,7 @@ abstract class HTMLFormField {
                        'errors' => $errors,
                        'notices' => $notices,
                        'infusable' => $infusable,
+                       'helpInline' => $this->isHelpInline(),
                ];
 
                $preloadModules = false;
@@ -679,8 +690,8 @@ abstract class HTMLFormField {
         * @return bool
         */
        protected function shouldInfuseOOUI() {
-               // Always infuse fields with help text, since the interface for it is nicer with JS
-               return $this->getHelpText() !== null;
+               // Always infuse fields with popup help text, since the interface for it is nicer with JS
+               return $this->getHelpText() !== null && !$this->isHelpInline();
        }
 
        /**
@@ -851,12 +862,29 @@ abstract class HTMLFormField {
                return $helptext;
        }
 
+       /**
+        * Determine if the help text should be displayed inline.
+        *
+        * Only applies to OOUI forms.
+        *
+        * @since 1.31
+        * @return bool
+        */
+       public function isHelpInline() {
+               return $this->mParams['help-inline'] ?? true;
+       }
+
        /**
         * Determine form errors to display and their classes
         * @since 1.20
         *
+        * phan-taint-check gets confused with returning both classes
+        * and errors and thinks double escaping is happening, so specify
+        * that return value has no taint.
+        *
         * @param string $value The value of the input
         * @return array array( $errors, $errorClass )
+        * @return-taint none
         */
        public function getErrorsAndErrorClass( $value ) {
                $errors = $this->validate( $value, $this->mParent->mFieldData );
@@ -902,9 +930,16 @@ abstract class HTMLFormField {
         * Determine notices to display for the field.
         *
         * @since 1.28
+        * @deprecated since 1.32
+        * @param string $skipDeprecation Pass 'skip deprecation' to avoid the deprecation
+        *   warning (since 1.32)
         * @return string[]
         */
-       public function getNotices() {
+       public function getNotices( $skipDeprecation = null ) {
+               if ( $skipDeprecation !== 'skip deprecation' ) {
+                       wfDeprecated( __METHOD__, '1.32' );
+               }
+
                $notices = [];
 
                if ( isset( $this->mParams['notice-message'] ) ) {
@@ -1119,6 +1154,12 @@ abstract class HTMLFormField {
         * Formats one or more errors as accepted by field validation-callback.
         *
         * @param string|Message|array $errors Array of strings or Message instances
+        * To work around limitations in phan-taint-check the calling
+        * class has taintedness disabled. So instead we pretend that
+        * this method outputs html, since the result is eventually
+        * outputted anyways without escaping and this allows us to verify
+        * stuff is safe even though the caller has taintedness cleared.
+        * @param-taint $errors exec_html
         * @return string HTML
         * @since 1.18
         */