jenkins-bot has submitted this change and it was merged.
Change subject: corrected issue where batch upload breaks off early
......................................................................
corrected issue where batch upload breaks off early
the main issue was that while the metadata batch job was creating media file
batch
jobs it would first evaluate the media file URL and then use the final file
name it found
to create a media file batch job title. this worked as long as the media file
URL was valid.
if there was a problem with the media file URL it would error out the metadata
batch job
and stop it from creating any remaining media file batch jobs.
the solution implemented here was to use a generic media file batch job title
and let
the media file batch job evaluate the media file URL when it runs. this
isolates the
metadata batch job from any media file URL errors, so that it can continue to
create
media file batch jobs, and only the individual media file batch job will error
out if
there is something wrong with its media file URL.
another issue that was identified, while working on this main issue, had to do
with
keeping track of the record count. record-count now always refers to the total
metadata records found and record-current is the current record the application
is processing.
bryan davis brought up the issue of unique batch job title names. after a short
discussion we decided that adding a uniqid to the title would take care of
the issue.
* GWToolset.i18n.php
- added key 'gwtoolset-no-url-to-evaluate'
- changed key 'gwtoolset-dom-record-issue'
* includes/Config.php
- changed comments from {boolean} to {bool} for consistency
* includes/Forms/PreviewForm.php
- changed $user_options['record-begin'] value from
$user_options['record-count']
to $user_options['record-current']
* includes/Handlers/Forms/MetadataMappingHandler.php
- added line breaks to code that is > 100 characters
- added record-current variable
- changed set-up of record-begin variable
- changed set-up of record-count variable
- re-factored processMatchingElement()
- set $_POST['record-begin'] to $user_options['record-current'] instead of
$user_options['record-count']
* includes/Handlers/UploadHandler.php
- added exception when $url provided to evaluateMediafileUrl() is empty
- re-factored getTitle()
- re-factored saveMediafileAsContent()
- re-factored saveMediafileViaJob()
- removed saveMediaFile()
* includes/Handlers/Xml/XmlMappingHandler.php
- changed use of $user_options['record-count'] to
$user_options['record-current']
* includes/Jobs/UploadMediafileJob.php
- added use statements
- changed use of error_log() to $this->setLastError()
- expanded validateParams() to accommodate new params
- passing $this->params['user_options'] instead of $this->params to
saveMediafileAsContent();
- re-factored processMetadata()
- re-located validateParams() within the class
- removed class variables
* includes/Jobs/UploadMetadataJob.php
- created a processMetadata() method to match similar use in
includes/Jobs/UploadMediafileJob.php
* re: #179/assembla - Batch upload breaks off early
Change-Id: I595168caba21fa23bda202724933f38de96f322a
---
M GWToolset.i18n.php
M includes/Config.php
M includes/Forms/PreviewForm.php
M includes/Handlers/Forms/MetadataMappingHandler.php
M includes/Handlers/UploadHandler.php
M includes/Handlers/Xml/XmlMappingHandler.php
M includes/Jobs/UploadMediafileJob.php
M includes/Jobs/UploadMetadataJob.php
8 files changed, 189 insertions(+), 132 deletions(-)
Approvals:
BryanDavis: Looks good to me, approved
jenkins-bot: Verified
diff --git a/GWToolset.i18n.php b/GWToolset.i18n.php
index 72fdcfe..2e309f7 100644
--- a/GWToolset.i18n.php
+++ b/GWToolset.i18n.php
@@ -35,7 +35,7 @@
'gwtoolset-developer-issue' => "Please contact a developer; they will
need to address this issue before you can continue.
'''$1'''",
- 'gwtoolset-dom-record-issue' => '<code>record-element-name</code>, or
<code>record-count</code> not provided.',
+ 'gwtoolset-dom-record-issue' => '<code>record-element-name</code>, or
<code>record-count</code> or <code>record-current</code> not provided.',
'gwtoolset-ignorewarnings' => '<code>ignorewarnings</code> not set.',
'gwtoolset-no-accepted-types' => 'No accepted types provided',
'gwtoolset-no-callback' => 'No callback passed to this method.',
@@ -53,6 +53,7 @@
'gwtoolset-no-title' => 'No title provided.',
'gwtoolset-no-upload-handler' => 'No upload handler was created.',
'gwtoolset-no-upload-media' =>
"<code>user_options['upload-media']</code> not set.",
+ 'gwtoolset-no-url-to-evaluate' => 'No URL was provided for evaluation.',
'gwtoolset-no-url-to-media' => '<code>url-to-the-media-file</code> not
set.',
'gwtoolset-no-user' => 'no user object provided.',
'gwtoolset-no-xml-element' => 'No XMLReader or DOMElement provided.',
@@ -280,7 +281,7 @@
'gwtoolset-desc' =>
'{{desc|name=GWToolset|url=https://www.mediawiki.org/wiki/Extension:GWToolset}}',
'gwtoolset-developer-issue' => "A user-friendly message that lets the
user know that something went wrong that a developer will need to fix. The
single parameter takes a message that explains a bit more to the developer what
the issue may be.",
'gwtoolset-disk-write-failure' => 'User error message that appears when
the uploaded file failed to write to disk.',
- 'gwtoolset-dom-record-issue' => 'Hint to the developer that appears
when record-element-name, or record-count not provided.',
+ 'gwtoolset-dom-record-issue' => 'Hint to the developer that appears
when record-element-name, or record-count or record-current not provided.',
'gwtoolset-ensure-well-formed-xml' => 'Additional instructions that
will help the user make sure the XML File is well-formed.',
'gwtoolset-example-record' => 'Label for the metadata example record.',
'gwtoolset-file-interpretation-error' => 'Heading that appears when
there was a problem interpreting the metadata file.',
@@ -347,6 +348,7 @@
'gwtoolset-no-title' => 'Hint to the developer that appears when no
title is provided.',
'gwtoolset-no-upload-handler' => 'Hint to the developer that appears
when no upload handler was created.',
'gwtoolset-no-upload-media' => "Hint to the developer that appears when
user_options['upload-media'] is not set.",
+ 'gwtoolset-no-url-to-evaluate' => 'Message that appears when no URL was
provided for evaluation.',
'gwtoolset-no-url-to-media' => 'Hint to the developer that appears when
url-to-the-media-file is not set.',
'gwtoolset-no-user' => 'Hint to the developer that appears when no user
object is provided.',
'gwtoolset-no-xml-element' => 'Hint to the developer that appears when
no XMLReader or DOMElement is provided.',
diff --git a/includes/Config.php b/includes/Config.php
index f33fa61..ad6faf9 100644
--- a/includes/Config.php
+++ b/includes/Config.php
@@ -246,6 +246,7 @@
'gwtoolset-cancel'
),
'dependencies' => array(
+ 'jquery.json',
'jquery.spinner',
'jquery.ui.widget',
'jquery.ui.button',
@@ -279,7 +280,7 @@
/**
* @see SpecialPage __constructor
- * @var {boolean}
+ * @var {bool}
* whether the page is listed in Special:Specialpages
*/
public static $special_page_listed = true;
@@ -307,14 +308,14 @@
public static $title_separator = '-';
/**
- * @var {boolean}
+ * @var {bool}
* tells the upload form to place the $accepted_mime_types in a comma
* delimited list in the input file’s accept attribute
*/
public static $use_file_accept_attribute = true;
/**
- * @var {boolean}
+ * @var {bool}
*/
public static $use_UploadStash = true;
diff --git a/includes/Forms/PreviewForm.php b/includes/Forms/PreviewForm.php
index 0c9b225..a90974b 100644
--- a/includes/Forms/PreviewForm.php
+++ b/includes/Forms/PreviewForm.php
@@ -110,7 +110,7 @@
array(
'type' => 'hidden',
'name' => 'record-begin',
- 'value' =>
(int)$user_options['record-count']
+ 'value' =>
(int)$user_options['record-current']
)
) .
diff --git a/includes/Handlers/Forms/MetadataMappingHandler.php
b/includes/Handlers/Forms/MetadataMappingHandler.php
index 5e6b234..35c9a70 100644
--- a/includes/Handlers/Forms/MetadataMappingHandler.php
+++ b/includes/Handlers/Forms/MetadataMappingHandler.php
@@ -64,12 +64,16 @@
$job = new UploadMetadataJob(
Title::newFromText(
- 'User:' . $this->User->getName() . '/' .
Config::$name . ' Metadata Batch Job'
+ $this->User->getName() . '/' .
+ Config::$name . '/' .
+ 'Metadata Batch Job/' .
+ uniqid(),
+ NS_USER
),
array(
- 'username' => $this->User->getName(),
- 'user_options' => $user_options,
- 'post' => $_POST
+ 'post' => $_POST,
+ 'user-name' => $this->User->getName(),
+ 'user-options' => $user_options
)
);
@@ -164,11 +168,15 @@
? true
: false,
- 'record-count' => 0,
-
'record-begin' => !empty( $_POST['record-begin'] )
? (int)$_POST['record-begin']
+ : 1,
+
+ 'record-count' => !empty( $_POST['record-count'] )
+ ? (int)$_POST['record-count']
: 0,
+
+ 'record-current' => 0,
'record-element-name' => !empty(
$_POST['record-element-name'] )
? $_POST['record-element-name']
@@ -212,17 +220,29 @@
*
* @param {array} $element_mapped_to_mediawiki_template
* @param {string} $metadata_raw
- * @return {null|Title}
+ * @return {null|Title|bool}
*/
public function processMatchingElement(
array &$user_options,
$element_mapped_to_mediawiki_template,
$metadata_raw
) {
+ $result = null;
+
$this->_MediawikiTemplate->metadata_raw = $metadata_raw;
$this->_MediawikiTemplate->populateFromArray(
$element_mapped_to_mediawiki_template );
- return $this->_UploadHandler->saveMediaFile( $user_options );
+ if ( $user_options['save-as-batch-job'] ) {
+ $result = $this->_UploadHandler->saveMediafileViaJob(
+ $user_options,
+ $metadata_raw,
+ $element_mapped_to_mediawiki_template
+ );
+ } else {
+ $result =
$this->_UploadHandler->saveMediafileAsContent( $user_options );
+ }
+
+ return $result;
}
/**
@@ -286,7 +306,10 @@
} elseif ( $Metadata_Title instanceof Title ) {
$Metadata_Page = new WikiPage( $Metadata_Title );
$Metadata_Content = $Metadata_Page->getContent(
Revision::RAW );
- $mediafile_titles =
$this->_XmlMappingHandler->processXml( $user_options, $Metadata_Content );
+ $mediafile_titles =
$this->_XmlMappingHandler->processXml(
+ $user_options,
+ $Metadata_Content
+ );
} else {
throw new MWException(
wfMessage(
'gwtoolset-metadata-file-url-not-present' )
@@ -300,12 +323,11 @@
* if more metadata records exist in the metadata file, create
another
* UploadMetadataJob
*/
- if ( empty( $this->SpecialPage ) &&
- (int)$user_options['record-count'] > (
- (int)$user_options['record-begin'] +
(int)Config::$job_throttle
- )
+ if ( empty( $this->SpecialPage )
+ && (int)$user_options['record-count']
+ >= ( (int)$user_options['record-begin'] +
(int)Config::$job_throttle )
) {
- $_POST['record-begin'] =
(int)$user_options['record-count'];
+ $_POST['record-begin'] =
(int)$user_options['record-current'];
$this->createMetadataBatchJob( $user_options );
}
@@ -364,10 +386,11 @@
wfMessage(
'gwtoolset-step-4-heading' )->escaped()
) .
$this->createMetadataBatchJob(
$user_options );
- /**
- * when $this->SpecialPage is empty, this
method is being run
- * by a wiki job; typically, uploadMediafileJob.
- */
+
+ /**
+ * when $this->SpecialPage is empty, this method is
being run
+ * by a wiki job; typically, uploadMediafileJob.
+ */
} else {
$result = $this->processMetadata( $user_options
);
}
diff --git a/includes/Handlers/UploadHandler.php
b/includes/Handlers/UploadHandler.php
index 306c481..7969a1d 100644
--- a/includes/Handlers/UploadHandler.php
+++ b/includes/Handlers/UploadHandler.php
@@ -270,6 +270,13 @@
$result = array( 'content-type' => null, 'extension' => null,
'url' => null );
$pathinfo = array();
+ if ( empty( $url ) ) {
+ throw new MWException(
+ __METHOD__ . ' ' .
+ wfMessage( 'gwtoolset-no-url-to-evaluate'
)->escaped()
+ );
+ }
+
$Http = MWHttpRequest::factory(
$url,
array(
@@ -401,13 +408,13 @@
}
/**
- * @param {Array} $options
+ * @param {String} $title
* @throws {MWException}
* @return {Title}
*/
- protected function getTitle( array &$options ) {
+ protected function getTitle( $title ) {
$result = \GWToolset\getTitle(
- \GWToolset\stripIllegalTitleChars( $options['title'] ),
+ \GWToolset\stripIllegalTitleChars( $title ),
Config::$mediafile_namespace,
array( 'must-be-known' => false )
);
@@ -415,7 +422,7 @@
if ( !( $result instanceof Title ) ) {
throw new MWException(
wfMessage( 'gwtoolset-title-bad' )
- ->params( $options['title'] )->parse()
+ ->params( $title )->parse()
);
}
@@ -594,15 +601,15 @@
}
/**
- * controls the workflow for saving media files
- *
+ * @todo does ContentHandler filter $options['text']?
+ * @todo does WikiPage filter $options['comment']?
* @param {array} $user_options
- * an array of user options that was submitted in the html form
- *
+ * @throws {MWException}
* @return {null|Title}
*/
- public function saveMediaFile( array &$user_options ) {
- $result = null;
+ public function saveMediafileAsContent( array &$user_options ) {
+ $Title = null;
+ $Status = null;
$options = array();
$this->validateUserOptions( $user_options );
@@ -625,27 +632,9 @@
$options['text'] = $this->getText();
- if ( $this->user_options['save-as-batch-job'] ) {
- $Status = $this->saveMediafileViaJob( $options );
- } else {
- $result = $this->saveMediafileAsContent( $options );
- }
-
- return $result;
- }
-
- /**
- * @todo does ContentHandler filter $options['text']?
- * @todo does WikiPage filter $options['comment']?
- * @param {array} $options
- * @throws {MWException}
- * @return {Title}
- */
- public function saveMediafileAsContent( array &$options ) {
- $Status = null;
WikiChecks::increaseHTTPTimeout();
$this->validatePageOptions( $options );
- $Title = $this->getTitle( $options );
+ $Title = $this->getTitle( $options['title'] );
if ( !$Title->isKnown() ) {
$Status = $this->uploadMediaFileViaUploadFromUrl(
$options, $Title );
@@ -670,10 +659,20 @@
}
/**
- * @param {array} $options
+ * save a metadata record as a new/updated wiki page
+ *
+ * @param {array} $user_options
+ * an array of user options that was submitted in the html form
+ *
+ * @param {array} $element_mapped_to_mediawiki_template
+ * @param {string} $metadata_raw
* @return {bool}
*/
- protected function saveMediafileViaJob( array &$options ) {
+ public function saveMediafileViaJob(
+ array &$user_options,
+ $metadata_raw = null,
+ $element_mapped_to_mediawiki_template
+ ) {
$result = false;
$job = null;
$sessionKey = null;
@@ -682,20 +681,22 @@
return;
}
- $this->validatePageOptions( $options );
- $Title = $this->getTitle( $options );
+ $this->validateUserOptions( $user_options );
$job = new UploadMediafileJob(
- $Title,
+ Title::newFromText(
+ $this->_User->getName() . '/' .
+ Config::$name . '/' .
+ 'Mediafile Batch Job/' .
+ uniqid(),
+ NS_USER
+ ),
array(
- 'comment' => $options['comment'],
- 'ignorewarnings' => $options['ignorewarnings'],
- 'text' => $options['text'],
- 'title' => $options['title'],
- 'url-to-the-media-file' =>
$options['url-to-the-media-file'],
- 'username' => $this->_User->getName(),
- 'user_options' => $this->user_options,
- 'watch' => $options['watch']
+ 'element-mapped-to-mediawiki-template' =>
$element_mapped_to_mediawiki_template,
+ 'post' => $_POST,
+ 'metadata-raw' => $metadata_raw,
+ 'user-name' => $this->_User->getName(),
+ 'user-options' => $user_options
)
);
diff --git a/includes/Handlers/Xml/XmlMappingHandler.php
b/includes/Handlers/Xml/XmlMappingHandler.php
index 0e21c4c..4c4ae4f 100644
--- a/includes/Handlers/Xml/XmlMappingHandler.php
+++ b/includes/Handlers/Xml/XmlMappingHandler.php
@@ -206,7 +206,7 @@
*
* @return {array}
* - $result['Title'] {Title}
- * - $result['stop-reading'] {boolean}
+ * - $result['stop-reading'] {bool}
*/
protected function processDOMElements( $XMLElement, array
&$user_options ) {
$result = array( 'Title' => null, 'stop-reading' => false );
@@ -225,6 +225,7 @@
if ( !isset( $user_options['record-element-name'] )
|| !isset( $user_options['record-count'] )
+ || !isset( $user_options['record-current'] )
) {
throw new MWException(
wfMessage( 'gwtoolset-developer-issue' )
@@ -248,23 +249,26 @@
}
if ( !empty( $record ) ) {
- $user_options['record-count'] += 1;
+ $user_options['record-current'] += 1;
- // don’t process the element if the
record count is not >=
- // the record nr we should start
processing on
- if ( $user_options['record-count'] <
$user_options['record-begin'] ) {
+ // don’t process the element if the
current record nr is <
+ // the record nr we should begin
processing on
+ if ( $user_options['record-current'] <
$user_options['record-begin'] ) {
break;
}
- // stop processing if the record count
is > the record nr we should
- // start processing on plus the job
throttle
- if ( $user_options['record-count'] >
$user_options['record-begin'] + Config::$job_throttle ) {
+ // stop processing if the current
record nr is >=
+ // the record nr we should begin
processing on plus the job throttle
+ if ( $user_options['record-current']
+ >=
$user_options['record-begin'] + Config::$job_throttle
+ ) {
$result['stop-reading'] = true;
break;
}
$result['Title'] =
$this->_MappingHandler->processMatchingElement(
- $user_options,
$this->getDOMElementMapped( $record ),
+ $user_options,
+ $this->getDOMElementMapped(
$record ),
$outer_xml
);
}
diff --git a/includes/Jobs/UploadMediafileJob.php
b/includes/Jobs/UploadMediafileJob.php
index 7044554..668b87d 100644
--- a/includes/Jobs/UploadMediafileJob.php
+++ b/includes/Jobs/UploadMediafileJob.php
@@ -8,27 +8,16 @@
*/
namespace GWToolset\Jobs;
-use GWToolset\Handlers\UploadHandler,
+use GWToolset\Adapters\Php\MappingPhpAdapter,
+ GWToolset\Adapters\Php\MediawikiTemplatePhpAdapter,
+ GWToolset\Models\Mapping,
+ GWToolset\Models\MediawikiTemplate,
+ GWToolset\Handlers\UploadHandler,
MWException,
Job,
User;
class UploadMediafileJob extends Job {
-
- /**
- * {UploadHandler}
- */
- protected $_UploadHandler;
-
- /**
- * @var {User}
- */
- protected $_User;
-
- /**
- * @var {string}
- */
- public $filename_metadata;
/**
* @param {Title} $title
@@ -41,38 +30,37 @@
}
/**
+ * a control method for re-establishing application state so that the
metadata can be processed.
+ * this is similar to MetadataMappingHandler::processMetadata(),
however it avoids the necessity
+ * to process the metadata file
+ *
* @return {bool|Title}
*/
protected function processMetadata() {
$result = false;
+ $_POST = $this->params['post'];
- $this->_UploadHandler = new UploadHandler(
+ $MediawikiTemplate = new MediawikiTemplate( new
MediawikiTemplatePhpAdapter() );
+ $MediawikiTemplate->getMediaWikiTemplate(
$this->params['user-options'] );
+
+ $Mapping = new Mapping( new MappingPhpAdapter() );
+ $Mapping->mapping_array =
$MediawikiTemplate->getMappingFromArray( $_POST );
+ $Mapping->setTargetElements();
+ $Mapping->reverseMap();
+
+ $User = User::newFromName( $this->params['user-name'] );
+
+ $UploadHandler = new UploadHandler(
array(
- 'User' => $this->_User
+ 'Mapping' => $Mapping,
+ 'MediawikiTemplate' => $MediawikiTemplate,
+ 'User' => $User,
)
);
- $this->_UploadHandler->user_options =
$this->params['user_options'];
- $result = $this->_UploadHandler->saveMediafileAsContent(
$this->params );
-
- return $result;
- }
-
- /**
- * @return {bool}
- */
- protected function validateParams() {
- $result = true;
-
- if ( empty( $this->params['username'] ) ) {
- error_log( __METHOD__ . ' : no
$this->params[\'username\'] provided' . PHP_EOL );
- $result = false;
- }
-
- if ( empty( $this->params['user_options'] ) ) {
- error_log( __METHOD__ . ' : no
$this->params[\'user_options\'] provided' . PHP_EOL );
- $result = false;
- }
+ $MediawikiTemplate->metadata_raw =
$this->params['metadata-raw'];
+ $MediawikiTemplate->populateFromArray(
$this->params['element-mapped-to-mediawiki-template'] );
+ $result = $UploadHandler->saveMediafileAsContent(
$this->params['user-options'] );
return $result;
}
@@ -89,16 +77,46 @@
return $result;
}
- $this->_User = User::newFromName( $this->params['username'] );
-
try {
$result = $this->processMetadata();
} catch ( MWException $e ) {
- error_log( $e->getMessage() );
+ $this->setLastError(
+ __METHOD__ . ': ' .
+ $e->getMessage() .
+ print_r( $this->params['user-options'], true )
+ );
}
- if ( !$result ) {
- error_log( "Could not save [ {$this->params['title']} ]
to the wiki." );
+ return $result;
+ }
+
+ /**
+ * @return {bool}
+ */
+ protected function validateParams() {
+ $result = true;
+
+ if ( empty(
$this->params['element-mapped-to-mediawiki-template'] ) ) {
+ $this->setLastError(
+ __METHOD__ .
+ ': no
$this->params[\'element-mapped-to-mediawiki-template\'] provided'
+ );
+ $result = false;
+ }
+
+ if ( empty( $this->params['metadata-raw'] ) ) {
+ $this->setLastError( __METHOD__ . ': no
$this->params[\'metadata-raw\'] provided' );
+ $result = false;
+ }
+
+ if ( empty( $this->params['user-name'] ) ) {
+ $this->setLastError( __METHOD__ . ': no
$this->params[\'user-name\'] provided' );
+ $result = false;
+ }
+
+ if ( empty( $this->params['user-options'] ) ) {
+ $this->setLastError( __METHOD__ . ': no
$this->params[\'user-options\'] provided' );
+ $result = false;
}
return $result;
diff --git a/includes/Jobs/UploadMetadataJob.php
b/includes/Jobs/UploadMetadataJob.php
index 1b3c25d..b72b70a 100644
--- a/includes/Jobs/UploadMetadataJob.php
+++ b/includes/Jobs/UploadMetadataJob.php
@@ -29,11 +29,6 @@
class UploadMetadataJob extends Job {
/**
- * @var {MetadataMappingHandler}
- */
- protected $_MetadataMappingHandler;
-
- /**
* @param {Title} $title
* @param {bool|array} $params
* @param {int} $id
@@ -41,6 +36,24 @@
*/
public function __construct( $title, $params, $id = 0 ) {
parent::__construct( 'gwtoolsetUploadMetadataJob', $title,
$params, $id );
+ }
+
+ /**
+ * a control method for re-establishing application state so that the
metadata can be processed
+ *
+ * @return {bool|Title}
+ */
+ protected function processMetadata() {
+ $result = false;
+ $_POST = $this->params['post'];
+
+ $MetadataMappingHandler = new MetadataMappingHandler(
+ array( 'User' => User::newFromName(
$this->params['user-name'] ) )
+ );
+
+ $result = $MetadataMappingHandler->processRequest();
+
+ return $result;
}
/**
@@ -55,13 +68,8 @@
return $result;
}
- $_POST = $this->params['post'];
- $this->_MetadataMappingHandler = new MetadataMappingHandler(
- array( 'User' => User::newFromName(
$this->params['username'] ) )
- );
-
try {
- $result =
$this->_MetadataMappingHandler->processRequest();
+ $result = $this->processMetadata();
} catch ( MWException $e ) {
$this->setLastError( __METHOD__ . ': ' .
$e->getMessage() );
}
@@ -75,8 +83,8 @@
protected function validateParams() {
$result = true;
- if ( empty( $this->params['username'] ) ) {
- $this->setLastError( __METHOD__ . ': no
$this->params[\'user\'] provided' );
+ if ( empty( $this->params['user-name'] ) ) {
+ $this->setLastError( __METHOD__ . ': no
$this->params[\'user-name\'] provided' );
$result = false;
}
--
To view, visit https://gerrit.wikimedia.org/r/90149
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I595168caba21fa23bda202724933f38de96f322a
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/GWToolset
Gerrit-Branch: master
Gerrit-Owner: Dan-nl <[email protected]>
Gerrit-Reviewer: BryanDavis <[email protected]>
Gerrit-Reviewer: Dan-nl <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits