HTMLTitleTextField: Support 'relative' config option
authorBartosz Dziewoński <matma.rex@gmail.com>
Sun, 26 Jul 2015 20:54:45 +0000 (22:54 +0200)
committerBartosz Dziewoński <matma.rex@gmail.com>
Sun, 26 Jul 2015 21:46:05 +0000 (23:46 +0200)
Uses:
* SpecialExport: I2b3524e61efc618aa2b7484134bba562d5f9011c
* SpecialRandomInCategory: I4c0b11e2ae0cfa906bbde77fc89901cf88a9a5bd

Change-Id: Ia7c773fee34fd8809c8683c62d700f5373ceb45c

includes/htmlform/HTMLTitleTextField.php

index e1bc1a0..6e5242c 100644 (file)
@@ -11,6 +11,7 @@ use MediaWiki\Widget\TitleInputWidget;
  *
  * Optional parameters:
  * 'namespace' - Namespace the page must be in
+ * 'relative' - If true and 'namespace' given, strip/add the namespace from/to the title as needed
  * 'creatable' - Whether to validate the title is creatable (not a special page)
  * 'exists' - Whether to validate that the title already exists
  *
@@ -20,6 +21,7 @@ class HTMLTitleTextField extends HTMLTextField {
        public function __construct( $params ) {
                $params += array(
                        'namespace' => false,
+                       'relative' => false,
                        'creatable' => false,
                        'exists' => false,
                );
@@ -29,7 +31,14 @@ class HTMLTitleTextField extends HTMLTextField {
 
        public function validate( $value, $alldata ) {
                try {
-                       $title = Title::newFromTextThrow( $value );
+                       if ( !$this->mParams['relative'] ) {
+                               $title = Title::newFromTextThrow( $value );
+                       } else {
+                               // Can't use Title::makeTitleSafe(), because it doesn't throw useful exceptions
+                               global $wgContLang;
+                               $namespaceName = $wgContLang->getNsText( $this->mParams['namespace'] );
+                               $title = Title::newFromTextThrow( $namespaceName . ':' . $value );
+                       }
                } catch ( MalformedTitleException $e ) {
                        $msg = $this->msg( $e->getErrorMessage() );
                        $params = $e->getErrorMessageParameters();
@@ -60,7 +69,7 @@ class HTMLTitleTextField extends HTMLTextField {
                if ( $this->mParams['namespace'] !== false ) {
                        $params['namespace'] = $this->mParams['namespace'];
                }
-               $params['relative'] = false;
+               $params['relative'] = $this->mParams['relative'];
                return new TitleInputWidget( $params );
        }
 }