Dan-nl has uploaded a new change for review.
https://gerrit.wikimedia.org/r/133476
Change subject: Make template wrapping optional
......................................................................
Make template wrapping optional
adjusted the template wrapping so that:
* wrapping a creator parameter in a creator template is optional.
* reversing last name, first name of the creator value is optional.
* wrapping the institution value in an institution template is optional.
* wrapping of elements using lang= in a language template is optional.
* detecting and creating a permission template is optional.
* a global permission can be used instead of a metadata value.
* added new i18n messages
* added new form fields
* adjusted logic accordingly
Bug: 64060, 65248
Change-Id: Ia5f7f54f17c19f7373cc264eee5329565d585f54
---
M i18n/en.json
M i18n/qqq.json
M includes/Forms/MetadataMappingForm.php
M includes/Handlers/Forms/MetadataMappingHandler.php
M includes/Handlers/Xml/XmlMappingHandler.php
M includes/Models/MediawikiTemplate.php
6 files changed, 454 insertions(+), 128 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/GWToolset
refs/changes/76/133476/1
diff --git a/i18n/en.json b/i18n/en.json
index 3a6258b..c4dfd70 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -16,7 +16,7 @@
"group-gwtoolset": "GWToolset users",
"group-gwtoolset-member": "{{GENDER:$1|GWToolset user}}",
"grouppage-gwtoolset": "{{ns:project}}:GWToolset users",
- "gwtoolset-back-to-top": "⇪ top of the page",
+ "gwtoolset-back-to-top": "top of the page",
"gwtoolset-batchjob-creation-failure": "Could not create a batch job of
type \"$1\".",
"gwtoolset-could-not-close-xml": "Could not close the XML reader.",
"gwtoolset-could-not-open-xml": "Could not open the XML file for
reading.",
@@ -201,5 +201,21 @@
"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-reverse-creator": "Reverse last name, first name",
+ "gwtoolset-reverse-creator-explanation": "Sometimes the creator value
is listed as last name, first name in the metadata; checking this checkbox will
reverse that order and remove the comma; e.g., da Vinci, Leonardo would become
Leonardo da Vinci. Note, this relies on a single comma in the value; if there
is no comma in the value, no change will be made. If there is more than one
comma, the change will only be made using the first comma.",
+ "gwtoolset-wrap-creator": "Wrap creator in the creator template",
+ "gwtoolset-wrap-creator-explanation": "The MediaWiki template may have
an <code>author</code>, <code>artist</code>, <code>publisher</code> or similar
parameter; when it does, the metadata value mapped to it can automatically be
wrapped in <code>{{Creator:<value>}}</code>.",
+ "gwtoolset-wrap-creator-heading": "Creator template",
+ "gwtoolset-wrap-institution": "Wrap institution in the institution
template",
+ "gwtoolset-wrap-institution-explanation": "The MediaWiki template may
have an institution parameter; when it does, the metadata value mapped to it
can automatically be wrapped in <code>{{Institution:<value>}}</code>.",
+ "gwtoolset-wrap-institution-heading": "Institution template",
+ "gwtoolset-wrap-language": "Wrap metadata in a language template",
+ "gwtoolset-wrap-language-explanation": "Sometimes a metadata element
may contain a <code>lang</code> attribute; when it does, the value can be
wrapped in a language template; e.g., <code><dc:description lang=\"en\">A
sentence written in English.</dc:description></code> would become {{en|A
sentence written in English.}}",
+ "gwtoolset-wrap-language-heading": "Language template",
+ "gwtoolset-detect-license": "Attempt to detect the license",
+ "gwtoolset-detect-license-explanation": "The MediaWiki template may
have a <code>permission</code> parameter; when it does, an attempt to detect
the copyright license based on the metadata value can be made. GWToolset looks
for Creative Commons URLs that match possible copyright licenses; e.g.,
https://creativecommons.org/licenses/by-sa/3.0/ matches the MediaWiki license
template <code>{{tl|Template:Cc-by-sa-3.0}}</code>. If this checkbox is left
unchecked, the raw metadata value for each item in the batch upload will be
placed in the permission parameter.",
+ "gwtoolset-detect-license-heading": "License template",
+ "gwtoolset-global-license": "Global license",
+ "gwtoolset-global-license-explanation": "Or you can specific a global
license below that will be applied to all items in the batch upload. This value
can be a free text value or a MediaWiki template. If this field has a value in
it then any metadata value mapped to the permission parameter will be ignored."
}
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 0794712..675e03e 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -198,5 +198,21 @@
"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-reverse-creator": "Label used for the corresponding checkbox
in the Step 2: Metadata mapping form.",
+ "gwtoolset-reverse-creator-explanation": "Explanation of the
corresponding checkbox in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-creator": "Label used for the corresponding checkbox in
the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-creator-explanation": "Explanation of the corresponding
checkbox in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-creator-heading": "Heading for the corresponding
section in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-institution": "Label used for the corresponding
checkbox in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-institution-explanation": "Explanation of the
corresponding checkbox in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-institution-heading": "Heading for the corresponding
section in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-language": "Label used for the corresponding checkbox
in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-language-explanation": "Explanation of the
corresponding checkbox in the Step 2: Metadata mapping form.",
+ "gwtoolset-wrap-language-heading": "Heading for the corresponding
section in the Step 2: Metadata mapping form.",
+ "gwtoolset-detect-license": "Label used for the corresponding checkbox
in the Step 2: Metadata mapping form.",
+ "gwtoolset-detect-license-explanation": "Explanation of the
corresponding checkbox in the Step 2: Metadata mapping form.",
+ "gwtoolset-detect-license-heading": "Heading for the corresponding
section in the Step 2: Metadata mapping form.",
+ "gwtoolset-global-license": "Label used for the corresponding input
field in the Step 2: Metadata mapping form.",
+ "gwtoolset-global-license-explanation": "Explanation of the
corresponding input field in the Step 2: Metadata mapping form."
}
diff --git a/includes/Forms/MetadataMappingForm.php
b/includes/Forms/MetadataMappingForm.php
index d98888f..dca19b4 100644
--- a/includes/Forms/MetadataMappingForm.php
+++ b/includes/Forms/MetadataMappingForm.php
@@ -342,6 +342,157 @@
wfMessage( 'copyrightwarning2' )->parseAsBlock() .
+ // creator template
+ Html::rawElement(
+ 'h3',
+ array( 'style' => 'margin-top:1em;'),
+ wfMessage( 'gwtoolset-wrap-creator-heading'
)->escaped()
+ ) .
+
+ Html::rawElement(
+ 'p',
+ array(),
+ Html::rawElement(
+ 'label',
+ array(),
+ Html::rawElement(
+ 'input',
+ array(
+ 'type' => 'checkbox',
+ 'name' =>
'gwtoolset-wrap-creator',
+ 'value' => 'true'
+ )
+ ) .
+ ' ' . wfMessage(
'gwtoolset-wrap-creator' )->escaped() .
+ Html::rawElement( 'br' ) .
+ wfMessage(
'gwtoolset-wrap-creator-explanation' )->parse()
+ )
+ ) .
+
+ Html::rawElement(
+ 'p',
+ array(),
+ Html::rawElement(
+ 'label',
+ array(),
+ Html::rawElement(
+ 'input',
+ array(
+ 'type' => 'checkbox',
+ 'name' =>
'gwtoolset-reverse-creator',
+ 'value' => 'true'
+ )
+ ) .
+ ' ' . wfMessage(
'gwtoolset-reverse-creator' )->escaped() .
+ Html::rawElement( 'br' ) .
+ wfMessage(
'gwtoolset-reverse-creator-explanation' )->escaped()
+ )
+ ) .
+
+ // institution template
+ Html::rawElement(
+ 'h3',
+ array( 'style' => 'margin-top:1em;'),
+ wfMessage( 'gwtoolset-wrap-institution-heading'
)->escaped()
+ ) .
+
+ Html::rawElement(
+ 'p',
+ array(),
+ Html::rawElement(
+ 'label',
+ array(),
+ Html::rawElement(
+ 'input',
+ array(
+ 'type' => 'checkbox',
+ 'name' =>
'gwtoolset-wrap-institution',
+ 'value' => 'true'
+ )
+ ) .
+ ' ' . wfMessage(
'gwtoolset-wrap-institution' )->escaped() .
+ Html::rawElement( 'br' ) .
+ wfMessage(
'gwtoolset-wrap-institution-explanation' )->parse()
+ )
+ ) .
+
+ // language template
+ Html::rawElement(
+ 'h3',
+ array( 'style' => 'margin-top:1em;'),
+ wfMessage( 'gwtoolset-wrap-language-heading'
)->escaped()
+ ) .
+
+ Html::rawElement(
+ 'p',
+ array(),
+ Html::rawElement(
+ 'label',
+ array(),
+ Html::rawElement(
+ 'input',
+ array(
+ 'type' => 'checkbox',
+ 'name' =>
'gwtoolset-wrap-language',
+ 'value' => 'true'
+ )
+ ) .
+ ' ' . wfMessage(
'gwtoolset-wrap-language' )->escaped() .
+ Html::rawElement( 'br' ) .
+ wfMessage(
'gwtoolset-wrap-language-explanation' )->parse()
+ )
+ ) .
+
+ // permission/license template
+ Html::rawElement(
+ 'h3',
+ array( 'style' => 'margin-top:1em;'),
+ wfMessage( 'gwtoolset-detect-license-heading'
)->escaped()
+ ) .
+
+ Html::rawElement(
+ 'p',
+ array(),
+ Html::rawElement(
+ 'label',
+ array(),
+ Html::rawElement(
+ 'input',
+ array(
+ 'type' => 'checkbox',
+ 'name' =>
'gwtoolset-detect-license',
+ 'value' => 'true'
+ )
+ ) .
+ ' ' . wfMessage(
'gwtoolset-detect-license' )->escaped() .
+ Html::rawElement( 'br' ) .
+ wfMessage(
'gwtoolset-detect-license-explanation' )->parse()
+ )
+ ) .
+
+ Html::rawElement(
+ 'p',
+ array(),
+ Html::rawElement(
+ 'span',
+ array( 'style' =>
'font-style:italic;text-decoration:underline;' ),
+ wfMessage( 'gwtoolset-global-license'
)->escaped()
+ ) .
+ Html::rawElement( 'br' ) .
+ wfMessage(
'gwtoolset-global-license-explanation' )->escaped()
+ ) .
+
+ Html::rawElement(
+ 'input',
+ array(
+ 'type' => 'text',
+ 'name' => 'gwtoolset-global-license',
+ 'placeholder' => wfMessage(
'gwtoolset-global-license' ),
+ 'class' => 'gwtoolset-url-input'
+ )
+ ) .
+
+ // global categories
Html::rawElement(
'h3',
array( 'style' => 'margin-top:1em;'),
diff --git a/includes/Handlers/Forms/MetadataMappingHandler.php
b/includes/Handlers/Forms/MetadataMappingHandler.php
index a9dbe98..51cc025 100644
--- a/includes/Handlers/Forms/MetadataMappingHandler.php
+++ b/includes/Handlers/Forms/MetadataMappingHandler.php
@@ -55,7 +55,13 @@
'gwtoolset-record-begin' => array( 'size' => 255 ),
'gwtoolset-record-count' => array( 'size' => 255 ),
'gwtoolset-record-element-name' => array( 'size' => 255 ),
- 'gwtoolset-reupload-media' => array( 'size' => 255 ),
+ 'gwtoolset-reupload-media' => array( 'size' => 4 ),
+ 'gwtoolset-reverse-creator' => array( 'size' => 4 ),
+ 'gwtoolset-wrap-creator' => array( 'size' => 4 ),
+ 'gwtoolset-wrap-institution' => array( 'size' => 4 ),
+ 'gwtoolset-wrap-language' => array( 'size' => 4 ),
+ 'gwtoolset-detect-license' => array( 'size' => 4 ),
+ 'gwtoolset-global-license' => array( 'size' => 255 ),
'wpEditToken' => array( 'size' => 255 ),
'wpSummary' => array( 'size' => 255 )
);
@@ -184,10 +190,20 @@
?
$this->_whitelisted_post['gwtoolset-category-metadata']
: array(),
+ 'gwtoolset-detect-license' =>
+ !empty(
$this->_whitelisted_post['gwtoolset-detect-license'] )
+ ?
(bool)$this->_whitelisted_post['gwtoolset-detect-license']
+ : false,
+
'comment' =>
!empty( $this->_whitelisted_post['wpSummary'] )
? $this->_whitelisted_post['wpSummary']
: '',
+
+ 'gwtoolset-global-license' =>
+ !empty(
$this->_whitelisted_post['gwtoolset-global-license'] )
+ ?
$this->_whitelisted_post['gwtoolset-global-license']
+ : null,
'gwtoolset-mediafile-throttle' =>
!empty(
$this->_whitelisted_post['gwtoolset-mediafile-throttle'] )
@@ -262,6 +278,26 @@
?
(bool)$this->_whitelisted_post['gwtoolset-reupload-media']
: false,
+ 'gwtoolset-reverse-creator' =>
+ !empty(
$this->_whitelisted_post['gwtoolset-reverse-creator'] )
+ ?
(bool)$this->_whitelisted_post['gwtoolset-reverse-creator']
+ : false,
+
+ 'gwtoolset-wrap-creator' =>
+ !empty(
$this->_whitelisted_post['gwtoolset-wrap-creator'] )
+ ?
(bool)$this->_whitelisted_post['gwtoolset-wrap-creator']
+ : false,
+
+ 'gwtoolset-wrap-institution' =>
+ !empty(
$this->_whitelisted_post['gwtoolset-wrap-institution'] )
+ ?
(bool)$this->_whitelisted_post['gwtoolset-wrap-institution']
+ : false,
+
+ 'gwtoolset-wrap-language' =>
+ !empty(
$this->_whitelisted_post['gwtoolset-wrap-language'] )
+ ?
(bool)$this->_whitelisted_post['gwtoolset-wrap-language']
+ : false,
+
'gwtoolset-url-to-the-media-file' =>
!empty(
$this->_whitelisted_post['gwtoolset-url-to-the-media-file'] )
?
$this->_whitelisted_post['gwtoolset-url-to-the-media-file']
diff --git a/includes/Handlers/Xml/XmlMappingHandler.php
b/includes/Handlers/Xml/XmlMappingHandler.php
index 890c0e0..ed4a842 100644
--- a/includes/Handlers/Xml/XmlMappingHandler.php
+++ b/includes/Handlers/Xml/XmlMappingHandler.php
@@ -135,13 +135,14 @@
* @todo possibly refactor so that it works with getDOMElementAsArray
*
* @param {DOMELement} $DOMElement
+ * @param {array} $user_options
*
* @return {array}
* the keys and values in the array have not been filtered
* an array that maps mediawiki template parameters to the metadata
record
* values provided by the DOMElement
*/
- protected function getDOMElementMapped( DOMElement $DOMElement ) {
+ protected function getDOMElementMapped( DOMElement $DOMElement, array
$user_options ) {
$elements_mapped = array();
$DOMNodeList = $DOMElement->getElementsByTagName( '*' );
@@ -173,7 +174,7 @@
foreach ( $template_parameters as $template_parameter )
{
$is_url = strpos( $template_parameter, 'url' )
!== false;
- if ( !empty( $lang ) ) {
+ if ( !empty( $lang ) &&
$user_options['gwtoolset-wrap-language'] ) {
// within a record, multimple elements
with the same element name, e.g., description
// can exist. some may have a lang
attribute and some may not. if the first element
// found does not have a lang attribute
it is stored as a value in
@@ -377,7 +378,8 @@
$user_options,
array(
'metadata-as-array' =>
$this->getDOMElementAsArray( $record ),
-
'metadata-mapped-to-mediawiki-template' => $this->getDOMElementMapped( $record
),
+
'metadata-mapped-to-mediawiki-template' =>
+
$this->getDOMElementMapped( $record, $user_options ),
'metadata-raw' =>
$outer_xml
)
);
diff --git a/includes/Models/MediawikiTemplate.php
b/includes/Models/MediawikiTemplate.php
index f6d783d..7f0176b 100644
--- a/includes/Models/MediawikiTemplate.php
+++ b/includes/Models/MediawikiTemplate.php
@@ -51,7 +51,6 @@
*/
protected $_sub_templates = array(
'language' => '{{%s|%s}}',
- 'institution' => '{{Institution:%s}}',
'creator' => array(
'template' => '{{Creator:%s}}',
'parameters' => array(
@@ -79,6 +78,100 @@
}
public function delete( array &$options = array() ) {
+ }
+
+ /**
+ * determines the MediaWiki template creator parameter
+ * evaluates whether or not the user has chosen to:
+ *
+ * - use the metadata value mapped to the institution parameter as is
+ * - or wrap the metadata value in an institution template
+ *
+ * @param {string} $content
+ * @param {array} $user_options
+ * @return {string}
+ */
+ protected function getCreator( $content, array $user_options ) {
+ $result = '';
+
+ // assumes that there could be more than one creator in the
string
+ // and uses the configured metadata separator for evaluation
+ $creators = explode( Config::$metadata_separator, $content );
+
+ foreach ( $creators as $creator ) {
+ // assumes that a creator entry could be last name,
first
+ if ( $user_options['gwtoolset-reverse-creator'] ) {
+ $creator = explode( ',', $creator, 2 );
+ } else {
+ $creator = array( $creator );
+ }
+
+ if ( count( $creator ) <= 1 && trim( $creator[0] ) ===
'' ) {
+ return $result;
+ } else {
+ if ( count( $creator ) === 2 ) {
+ $creator = trim( $creator[1] ) . ' ' .
trim( $creator[0] );
+ } else {
+ $creator = $creator[0];
+ }
+
+ if ( $user_options['gwtoolset-wrap-creator'] ) {
+ $result .= sprintf(
+
$this->_sub_templates['creator']['template'],
+ $creator
+ ) . PHP_EOL;
+ } else {
+ $result .= $creator . PHP_EOL;
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * creates wiki text for the GWToolset parameters
+ *
+ * @todo move this into a GWToolsetTemplate model
+ *
+ * @return {string}
+ * the result is sanitized
+ */
+ public function getGWToolsetTemplateAsWikiText() {
+ return
+ '{{Uploaded with GWToolset' . PHP_EOL .
+ ' | gwtoolset-title-identifier = ' .
+ Utils::sanitizeString(
+
$this->mediawiki_template_array['gwtoolset-title-identifier']
+ ) . PHP_EOL .
+ ' | gwtoolset-url-to-the-media-file = ' .
+ Utils::sanitizeString(
+
$this->mediawiki_template_array['gwtoolset-url-to-the-media-file']
+ ) . PHP_EOL .
+ '}}' .
+ PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL;
+ }
+
+ /**
+ * determines the MediaWiki template institution parameter
+ * evaluates whether or not the user has chosen to:
+ *
+ * - use the metadata value mapped to the institution parameter as is
+ * - or wrap the metadata value in an institution template
+ *
+ * @param {string} $content
+ * @param {array} $user_options
+ * @return {string}
+ */
+ protected function getInstitution( $content, array $user_options ) {
+ if (
+ trim( $content ) === ''
+ || !$user_options['gwtoolset-wrap-institution']
+ ) {
+ return $content;
+ }
+
+ return sprintf( '{{Institution:%s}}', $content );
}
/**
@@ -141,26 +234,103 @@
}
/**
- * creates wiki text for the GWToolset parameters
+ * determines the MediaWiki template permission parameter
+ * evaluates whether or not the user has chosen to:
*
- * @todo move this into a GWToolsetTemplate model
+ * - use a free text global license
+ * - detect and create a license template based on a cc license URL
+ * - use the metadata value mapped to the permission parameter
*
+ * e.g. https://creativecommons.org/licenses/by-sa/3.0/ corresponds with
+ * the MediaWiki license template {{Template:Cc-by-sa-3.0}}
+ *
+ * @see
http://commons.wikimedia.org/wiki/Category:Creative_Commons_licenses
+ *
+ * @param {string} $content
+ * @param {array} $user_options
* @return {string}
- * the result is sanitized
*/
- public function getGWToolsetTemplateAsWikiText() {
- return
- '{{Uploaded with GWToolset' . PHP_EOL .
- ' | gwtoolset-title-identifier = ' .
- Utils::sanitizeString(
-
$this->mediawiki_template_array['gwtoolset-title-identifier']
- ) . PHP_EOL .
- ' | gwtoolset-url-to-the-media-file = ' .
- Utils::sanitizeString(
-
$this->mediawiki_template_array['gwtoolset-url-to-the-media-file']
- ) . PHP_EOL .
- '}}' .
- PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL;
+ protected function getPermission( $content, array $user_options ) {
+ if ( !empty( $user_options['gwtoolset-global-license'] ) ) {
+ return $user_options['gwtoolset-global-license'];
+ } else if ( $user_options['gwtoolset-detect-license'] ) {
+ $permission = strtolower( $content );
+ } else {
+ return $content;
+ }
+
+ if ( !strstr( $permission, 'creativecommons.org/' ) ) {
+ return $content;
+ }
+
+ $patterns = array(
+
'/(http|https):\/\/(www\.|)creativecommons.org\/publicdomain\/mark\/1.0\//',
+
'/(http|https):\/\/(www\.|)creativecommons.org\/publicdomain\/zero\/1.0\//',
+
'/(http|https):\/\/(www\.|)creativecommons.org\/licenses\//',
+ '/deed\.*/'
+ );
+
+ $replacements = array(
+ '{{PD-US}}{{PD-old}}', // Public Domain Mark 1.0
+ '{{Cc-zero}}', // CC0 1.0 Universal (CC0 1.0) Public
Domain Dedication
+ '',
+ ''
+ );
+
+ $permission = preg_replace( $patterns, $replacements,
$permission );
+ $permission = explode( '/', $permission );
+
+ if ( count( $permission ) > 1 ) {
+ $i = 0;
+ $string = '{{Cc-';
+
+ foreach ( $permission as $piece ) {
+ if ( !empty( $piece ) ) {
+ $string .= $piece . '-';
+ }
+
+ $i++;
+
+ // limit licenses path depth to 3
+ if ( $i == 3 ) {
+ break;
+ }
+ }
+
+ $string = substr( $string, 0, strlen( $string ) - 1 );
+ $string .= '}}';
+ $permission = $string;
+ } else {
+ $permission = $permission[0];
+ }
+
+ return $permission;
+ }
+
+ /**
+ * determines the MediaWiki template source parameter
+ * evaluates whether or not the user has chosen to:
+ *
+ * - use a free text source template
+ * adds the metadata value mapped to the source parameter
+ * and adds the free text value
+ * assumes that the free text value must be wrapped in {{}}
+ * - use the metadata value mapped to the source parameter
+ *
+ * @param {string} $content
+ * @param {array} $user_options
+ * @return {string}
+ */
+ protected function getSource( $content, array $user_options ) {
+ if ( !empty( $user_options['partner-template-name'] ) ) {
+ return
+ $content .
+ '{{' .
+ Utils::sanitizeString(
$user_options['partner-template-name'] ) .
+ '}}';
+ } else {
+ return $content;
+ }
}
/**
@@ -180,7 +350,7 @@
* @return {string}
* the resulting wiki text is filtered
*/
- public function getTemplateAsWikiText( array &$user_options ) {
+ public function getTemplateAsWikiText( array $user_options ) {
$result = '';
$sections = null;
$template = '{{' . $this->mediawiki_template_name . PHP_EOL .
'%s}}';
@@ -194,16 +364,19 @@
$sections .= ' | ' . Utils::sanitizeString( $parameter
) . ' = ';
- /**
- * sometimes the metadata element has several "shared"
metadata
- * elements with the same element name. at the moment
the
- * application will add elements that use lang=
attribute to an
- * associative array element 'language' indicating that
the mediawiki
- * template should use the language subtemplate
- */
+ // sometimes a metadata element has an XML attribute
that the tools
+ // looks for in order to possibly place the metadata
into a
+ // sub-template, e.g., <dc:description lang="en">
+ //
+ // currently the application only looks for XML
elements with the
+ // attribute lang; those elements are placed into an
associative array
+ // 'language' and are processed here. no other array
grouping is
+ // currently created.
+ //
+ // this section is meant to handle this current
scenario and any future
+ // scenarios of this type.
if ( is_array( $content ) ) {
foreach ( $content as $sub_template_name =>
$sub_template_content ) {
- // currently only language is handled
as a sub-template
if ( $sub_template_name === 'language'
) {
foreach ( $sub_template_content
as $language => $language_content ) {
$sections .= sprintf(
@@ -212,112 +385,44 @@
Utils::sanitizeString( $language_content )
) . PHP_EOL;
}
- /**
- * sometimes the "shared"
metadata element will indicate lang,
- * sometimes not this section
handles those "shared" metadata
- * elements that do not specify
a lang attribute
- */
+
+ // sometimes there is more than one
metadata element with the same
+ // element name that falls into this
sub-templating scenario; one
+ // has an XML attribute the tool looks
for, and another does not.
+ // when one of those "shared" elements
does not have the XML
+ // attribute the tool is looking for,
it falls into this section and
+ // is not wrapped in a sub-template.
} else {
$sections .=
Utils::sanitizeString( $sub_template_content ) . PHP_EOL;
}
}
} else {
- $content = trim( $content );
-
+ // institution parameter
if ( $parameter === 'institution' ) {
- if ( trim( $content ) === '' ) {
- $sections .= PHP_EOL;
- } else {
- $sections .= sprintf(
-
$this->_sub_templates['institution'],
- Utils::sanitizeString(
$content )
- ) . PHP_EOL;
- }
- } elseif ( in_array( $parameter,
$this->_sub_templates['creator']['parameters'] ) ) {
- // assumes that there could be more
than one creator and uses the
- // configured metadata separator to
determine that
- $creators = explode(
Config::$metadata_separator, $content );
+ $institution = $this->getInstitution(
$content, $user_options );
+ $sections .= Utils::sanitizeString(
$institution ) . PHP_EOL;
- foreach ( $creators as $creator ) {
- // assumes that a creator entry
could be last name, first
- // no other assumptions are
made other than this one
- $creator = explode( ',',
$creator, 2 );
+ // creator parameter
+ } elseif (
+ in_array(
+ $parameter,
+
$this->_sub_templates['creator']['parameters']
+ )
+ ) {
+ $creator = $this->getCreator( $content,
$user_options );
+ $sections .= Utils::sanitizeString(
$creator );
- if ( count( $creator ) <= 1 &&
trim( $creator[0] ) === '' ) {
- $sections .= PHP_EOL;
- } else {
- if ( count( $creator )
=== 2 ) {
- $creator =
trim( $creator[1] ) . ' ' . trim( $creator[0] );
- } else {
- $creator =
trim( $creator[0] );
- }
-
- $sections .= sprintf(
-
$this->_sub_templates['creator']['template'],
-
Utils::sanitizeString( $creator )
- ) . PHP_EOL;
- }
- }
+ // permission parameter
} elseif ( $parameter === 'permission' ) {
- //
http://commons.wikimedia.org/wiki/Category:Creative_Commons_licenses
- $permission = strtolower( $content );
-
- if ( strstr( $permission,
'creativecommons.org/' ) ) {
- $patterns = array(
-
'/(http|https):\/\/(www\.|)creativecommons.org\/publicdomain\/mark\/1.0\//',
-
'/(http|https):\/\/(www\.|)creativecommons.org\/publicdomain\/zero\/1.0\//',
-
'/(http|https):\/\/(www\.|)creativecommons.org\/licenses\//',
- '/deed\.*/'
- );
-
- $replacements = array(
- '{{PD-US}}{{PD-old}}',
// Public Domain Mark 1.0
- '{{Cc-zero}}', // CC0
1.0 Universal (CC0 1.0) Public Domain Dedication
- '',
- ''
- );
-
- $permission = preg_replace(
$patterns, $replacements, $permission );
- $permission = explode( '/',
$permission );
-
- if ( count( $permission ) > 1 )
{
- $i = 0;
- $string = '{{Cc-';
-
- foreach ( $permission
as $piece ) {
- if ( !empty(
$piece ) ) {
- $string
.= $piece . '-';
- }
-
- $i++;
-
- // limit
licenses path depth to 3
- if ( $i == 3 ) {
- break;
- }
- }
-
- $string = substr(
$string, 0, strlen( $string ) - 1 );
- $string .= '}}';
- $permission = $string;
- } else {
- $permission =
$permission[0];
- }
- } else {
- $permission = $content;
- }
-
+ $permission = $this->getPermission(
$content, $user_options );
$sections .= Utils::sanitizeString(
$permission ) . PHP_EOL;
+
+ // source parameter
} elseif ( $parameter === 'source' ) {
- if ( !empty(
$user_options['partner-template-name'] ) ) {
- $sections .=
Utils::sanitizeString( $content ) .
- '{{' .
- Utils::sanitizeString(
$user_options['partner-template-name'] ) .
- '}}' .
- PHP_EOL;
- } else {
- $sections .=
Utils::sanitizeString( $content ) . PHP_EOL;
- }
+ $source = $this->getSource( $content,
$user_options );
+ $sections .= Utils::sanitizeString(
$source ) . PHP_EOL;
+
+ // all other parameters
} else {
$sections .= Utils::sanitizeString(
$content ) . PHP_EOL;
}
--
To view, visit https://gerrit.wikimedia.org/r/133476
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia5f7f54f17c19f7373cc264eee5329565d585f54
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/GWToolset
Gerrit-Branch: master
Gerrit-Owner: Dan-nl <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits