Dan-nl has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/133684

Change subject: Allow for custom templates
......................................................................

Allow for custom templates

* added new i18n messages
* added new form fields
* adjusted logic accordingly

Bug: 63889
Change-Id: Ibab2b75e018409e8699a72b9c90cb2eb6a7babf5
---
M i18n/en.json
M i18n/qqq.json
M includes/Adapters/Php/MediawikiTemplatePhpAdapter.php
M includes/Forms/MetadataDetectForm.php
M includes/Forms/MetadataMappingForm.php
M includes/Handlers/Forms/MetadataDetectHandler.php
M includes/Models/MediawikiTemplate.php
7 files changed, 102 insertions(+), 32 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/GWToolset 
refs/changes/84/133684/1

diff --git a/i18n/en.json b/i18n/en.json
index 3a6258b..154935e 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -1,7 +1,7 @@
 {
        "@metadata": {
                "authors": [
-                       "dan-nl",
+                       "dan entous",
                        "Brian Wolff",
                        "Siebrand Mazeland",
                        "Shirayuki",
@@ -86,7 +86,6 @@
        "gwtoolset-file-interpretation-error": "There was a problem processing 
the metadata file.",
        "gwtoolset-mediawiki-template": "Template $1",
        "gwtoolset-metadata-user-options-error": "The following form 
{{PLURAL:$2|field|fields}} must be filled in:\n$1",
-       "gwtoolset-metadata-invalid-template": "No valid MediaWiki template 
found.",
        "gwtoolset-menu": "* $1",
        "gwtoolset-menu-1": "Metadata mapping",
        "gwtoolset-technical-error": "There was a technical error.",
@@ -201,5 +200,10 @@
        "gwtoolset-verify-php-version": "The $1 extension requires PHP >= 
5.3.3.",
        "gwtoolset-verify-uploads-enabled": "The $1 extension requires that 
file uploads are enabled.\n\nPlease make sure that 
<code>$wgEnableUploads</code> is set to <code>true</code> in 
<code>LocalSettings.php</code>.",
        "gwtoolset-verify-xmlreader": "The $1 extension requires that PHP 
[http://www.php.net/manual/en/xmlreader.setup.php XMLReader] be installed.",
-       "gwtoolset-wiki-checks-not-passed": "Wiki checks did not pass"
+       "gwtoolset-wiki-checks-not-passed": "Wiki checks did not pass",
+       "gwtoolset-select-template": "select a template:",
+       "gwtoolset-select-custom-template": "or enter a custom template:",
+       "gwtoolset-no-templatedata": "There is no 
<code>&lt;templatedata></code> block for template $1.\n\nIf possible, add a $2 
to the template, or to the template's $3.",
+       "gwtoolset-templatedata-link-text": "<code>&lt;templatedata></code> 
block",
+       "gwtoolset-templatebox-link-text": "<code>TemplateBox</code>"
 }
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 0794712..04d625d 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -198,5 +198,10 @@
        "gwtoolset-verify-php-version": "Message that appears when the PHP 
version is less than version 5.3.3. Parameters:\n* $1 - \"GWToolset\" 
(untranslatable)",
        "gwtoolset-verify-uploads-enabled": "Message that appears when the wiki 
does not allow file uploads. Parameters:\n* $1 - \"GWToolset\" 
(untranslatable)",
        "gwtoolset-verify-xmlreader": "Message that appears when PHP XMLReader 
is not available. Parameters:\n* $1 - \"GWToolset\" (untranslatable)",
-       "gwtoolset-wiki-checks-not-passed": "Heading used when a wiki 
requirement is not met."
+       "gwtoolset-wiki-checks-not-passed": "Heading used when a wiki 
requirement is not met.",
+       "gwtoolset-select-template": "Label for the corresponding field in Step 
1: Metadata detection.",
+       "gwtoolset-select-custom-template": "Label for the corresponding field 
in Step 1: Metadata detection.",
+       "gwtoolset-no-templatedata": "Message that appears when there is no 
templatedata for a MediaWiki template chosen in Step 1: Metadata detection. 
Parameters:\n* $1 - the name of the chosen template\n* $2 - a link to the 
MediaWiki templatedata help page for adding a templatedata block to a 
template\n* $3 - a link to the commons help page for adding templatedata to a 
template's templatebox",
+       "gwtoolset-templatedata-link-text": "Text for the templatedata link.",
+       "gwtoolset-templatebox-link-text": "Text for the templatebox link."
 }
diff --git a/includes/Adapters/Php/MediawikiTemplatePhpAdapter.php 
b/includes/Adapters/Php/MediawikiTemplatePhpAdapter.php
index 206dd35..012256f 100644
--- a/includes/Adapters/Php/MediawikiTemplatePhpAdapter.php
+++ b/includes/Adapters/Php/MediawikiTemplatePhpAdapter.php
@@ -14,6 +14,7 @@
        GWToolset\Config,
        GWToolset\GWTException,
        GWToolset\Utils,
+       Linker,
        Title;
 
 class MediawikiTemplatePhpAdapter implements DataAdapterInterface {
@@ -47,19 +48,6 @@
                $result = array( 'mediawiki_template_json' => '' );
                $template_data = null;
 
-               // should we limit the mw templates we allow?
-               // 2013-09-26 w/david haskia, for now, yes
-               if ( !isset(
-                       Config::$mediawiki_templates[Utils::sanitizeString( 
$options['mediawiki_template_name'] )] )
-               ) {
-                       throw new GWTException(
-                               array(
-                                       
'gwtoolset-mediawiki-template-not-found' =>
-                                       array( 
$options['mediawiki_template_name'] )
-                               )
-                       );
-               }
-
                $Title = Utils::getTitle(
                        $options['mediawiki_template_name'],
                        NS_TEMPLATE
@@ -76,11 +64,32 @@
 
                $template_data = $this->retrieveTemplateData( $Title );
 
-               if ( empty ( $template_data ) ) {
-                       $result['mediawiki_template_json'] =
-                               
Config::$mediawiki_templates[Utils::sanitizeString( 
$options['mediawiki_template_name'] )];
-               } else {
+               if ( !empty( $template_data ) ) {
                        $result['mediawiki_template_json'] = $template_data;
+               } else if (
+                       in_array(
+                               $options['mediawiki_template_name'],
+                               Config::$mediawiki_templates
+                       )
+               ) {
+                       $result['mediawiki_template_json'] =
+                               Config::$mediawiki_templates[ 
$options['mediawiki_template_name'] ];
+               } else {
+                       throw new GWTException(
+                               array(
+                                       'gwtoolset-no-templatedata' => array(
+                                               
$options['mediawiki_template_name'],
+                                               '[[' .
+                                                       
'mw:Extension:TemplateData#Defining_a_TemplateData_block|' .
+                                                       wfMessage( 
'gwtoolset-templatedata-link-text' ) .
+                                               ']]',
+                                               '[[' .
+                                                       
'commons:Commons:TemplateData#Using_TemplateBox|' .
+                                                       wfMessage( 
'gwtoolset-templatebox-link-text' ) .
+                                               ']]'
+                                       )
+                               )
+                       );
                }
 
                return $result;
diff --git a/includes/Forms/MetadataDetectForm.php 
b/includes/Forms/MetadataDetectForm.php
index dab7257..04f3c78 100644
--- a/includes/Forms/MetadataDetectForm.php
+++ b/includes/Forms/MetadataDetectForm.php
@@ -189,13 +189,40 @@
                                        'label',
                                        array(),
                                        wfMessage( 
'gwtoolset-which-mediawiki-template' )->escaped() .
-                                       
$MediawikiTemplate->getTemplatesAsSelect( 'gwtoolset-mediawiki-template-name' ) 
.
                                        Html::rawElement(
                                                'span',
                                                array( 'class' => 'required' ),
                                                ' *'
                                        )
-                               )
+                               ) .
+
+                               Html::openElement( 'ul' ) .
+
+                               Html::rawElement(
+                                       'li',
+                                       array(),
+                                       wfMessage( 'gwtoolset-select-template' 
) .
+                                       Html::rawElement( 'br' ) .
+                                       
$MediawikiTemplate->getTemplatesAsSelect( 'gwtoolset-mediawiki-template-name' )
+                               ) .
+
+                               Html::rawElement(
+                                       'li',
+                                       array(),
+                                       wfMessage( 
'gwtoolset-select-custom-template' ) .
+                                       Html::rawElement( 'br' ) .
+                                       Html::rawElement(
+                                               'input',
+                                               array(
+                                                       'type' => 'text',
+                                                       'name' => 
'gwtoolset-mediawiki-template-custom',
+                                                       'class' => 
'gwtoolset-wider-input',
+                                                       'placeholder' => 
'TorontoHollarCollection'
+                                               )
+                                       )
+                               ) .
+
+                               Html::closeElement( 'ul' )
                        ) .
 
                        Html::rawElement(
@@ -210,7 +237,7 @@
                                                array(
                                                        'type' => 'text',
                                                        'name' => 
'gwtoolset-metadata-mapping-url',
-                                                       'class' => 
'gwtoolset-url-input',
+                                                       'class' => 
'gwtoolset-wider-input',
                                                        'placeholder' => 
$namespace .
                                                                
Utils::sanitizeString( Config::$metadata_mapping_subpage ) .
                                                                
'/User-name/mapping-name.json'
@@ -364,7 +391,7 @@
                                        array(
                                                'type' => 'text',
                                                'name' => 
'gwtoolset-metadata-file-url',
-                                               'class' => 
'gwtoolset-url-input',
+                                               'class' => 
'gwtoolset-wider-input',
                                                'placeholder' => 
'Two-images.xml'
                                        )
                                ) .
diff --git a/includes/Forms/MetadataMappingForm.php 
b/includes/Forms/MetadataMappingForm.php
index d98888f..87a43a4 100644
--- a/includes/Forms/MetadataMappingForm.php
+++ b/includes/Forms/MetadataMappingForm.php
@@ -494,7 +494,7 @@
                                                        'type' => 'text',
                                                        'name' => 
'gwtoolset-partner-template-url',
                                                        'placeholder' => 
'Template:Europeana',
-                                                       'class' => 
'gwtoolset-url-input'
+                                                       'class' => 
'gwtoolset-wider-input'
                                                )
                                        )
                                ) .
diff --git a/includes/Handlers/Forms/MetadataDetectHandler.php 
b/includes/Handlers/Forms/MetadataDetectHandler.php
index 712bd35..aee9e6a 100644
--- a/includes/Handlers/Forms/MetadataDetectHandler.php
+++ b/includes/Handlers/Forms/MetadataDetectHandler.php
@@ -19,6 +19,7 @@
        GWToolset\Models\MediawikiTemplate,
        GWToolset\Utils,
        FSFile,
+       Language,
        MWException,
        Php\File;
 
@@ -30,6 +31,7 @@
        protected $_expected_post_fields = array(
                'gwtoolset-form' => array( 'size' => 255 ),
                'gwtoolset-mediawiki-template-name' => array( 'size' => 255 ),
+               'gwtoolset-mediawiki-template-custom' => array( 'size' => 255 ),
                'gwtoolset-mediafile-throttle' => array( 'size' => 2 ),
                'gwtoolset-metadata-file-upload' => array( 'size' => 255 ),
                'gwtoolset-metadata-mapping-url' => array( 'size' => 255 ),
@@ -105,6 +107,8 @@
         * @return {array}
         */
        protected function getUserOptions() {
+               $this->setTemplateName();
+
                return array(
                        'gwtoolset-mediafile-throttle' =>
                                !empty( 
$this->_whitelisted_post['gwtoolset-mediafile-throttle'] )
@@ -158,10 +162,12 @@
         */
        protected function processRequest() {
                $result = null;
+
                $this->_whitelisted_post = Utils::getWhitelistedPost(
                        $_POST,
                        $this->_expected_post_fields
                );
+
                $user_options = $this->getUserOptions();
 
                $this->checkForRequiredFormFields(
@@ -239,4 +245,27 @@
 
                return $result;
        }
+
+       /**
+        * overrides the gwtoolset-mediawiki-template form field if a value is 
given
+        * for gwtoolset-mediawiki-template-custom
+        */
+       protected function setTemplateName() {
+               if (
+                       !empty(
+                               
$this->_whitelisted_post['gwtoolset-mediawiki-template-custom']
+                       )
+               ) {
+                       $Language = new Language();
+
+                       
$this->_whitelisted_post['gwtoolset-mediawiki-template-name'] =
+                               Utils::normalizeSpace(
+                                       str_replace(
+                                               $Language->getNsText( 
NS_TEMPLATE ) . ':',
+                                               '',
+                                               
$this->_whitelisted_post['gwtoolset-mediawiki-template-custom']
+                                       )
+                               );
+               }
+       }
 }
diff --git a/includes/Models/MediawikiTemplate.php 
b/includes/Models/MediawikiTemplate.php
index f6d783d..23b5652 100644
--- a/includes/Models/MediawikiTemplate.php
+++ b/includes/Models/MediawikiTemplate.php
@@ -455,12 +455,8 @@
                                );
                }
 
-               if ( array_key_exists( $mediawiki_template_name, 
Config::$mediawiki_templates ) ) {
-                       $this->mediawiki_template_name = 
$mediawiki_template_name;
-                       $this->retrieve();
-               } else {
-                       throw new GWTException( 
'gwtoolset-metadata-invalid-template' );
-               }
+               $this->mediawiki_template_name = $mediawiki_template_name;
+               $this->retrieve();
        }
 
        /**

-- 
To view, visit https://gerrit.wikimedia.org/r/133684
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibab2b75e018409e8699a72b9c90cb2eb6a7babf5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/GWToolset
Gerrit-Branch: master
Gerrit-Owner: Dan-nl <d_ent...@yahoo.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to