From bec75cc99f52c8f2fd406f359cccc4d7c44cd253 Mon Sep 17 00:00:00 2001 From: Reedy Date: Tue, 18 Feb 2014 01:30:13 +0000 Subject: [PATCH] Refactor out HTMLFormField class and type normalisation code Also include fieldname when exceptioning over bad descriptor class Change-Id: Ia612453625fdeb611875d5ffc724cef2abe4f776 --- includes/htmlform/HTMLForm.php | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index 422fa8a311..43c1a940d2 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -306,15 +306,22 @@ class HTMLForm extends ContextSource { } /** - * Initialise a new Object for the field + * Get the HTMLFormField subclass for this descriptor. + * + * The descriptor can be passed either 'class' which is the name of + * a HTMLFormField subclass, or a shorter 'type' which is an alias. + * This makes sure the 'class' is always set, and also is returned by + * this function for ease. * - * @param $fieldname string - * @param string $descriptor input Descriptor, as described above + * @since 1.23 + * + * @param string $fieldname Name of the field + * @param array $descriptor Input Descriptor, as described above * * @throws MWException - * @return HTMLFormField subclass + * @return string Name of a HTMLFormField subclass */ - static function loadInputFromParameters( $fieldname, $descriptor ) { + public static function getClassFromDescriptor( $fieldname, &$descriptor ) { if ( isset( $descriptor['class'] ) ) { $class = $descriptor['class']; } elseif ( isset( $descriptor['type'] ) ) { @@ -325,8 +332,22 @@ class HTMLForm extends ContextSource { } if ( !$class ) { - throw new MWException( "Descriptor with no class: " . print_r( $descriptor, true ) ); + throw new MWException( "Descriptor with no class for $fieldname: " . print_r( $descriptor, true ) ); } + return $class; + } + + /** + * Initialise a new Object for the field + * + * @param string $fieldname Name of the field + * @param array $descriptor Input Descriptor, as described above + * + * @throws MWException + * @return HTMLFormField subclass + */ + public static function loadInputFromParameters( $fieldname, $descriptor ) { + $class = self::getClassFromDescriptor( $fieldname, $descriptor ); $descriptor['fieldname'] = $fieldname; -- 2.20.1