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><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><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