From 2852e5959eb5094a0509386da31e3c2caf5e23fb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Tue, 8 Dec 2015 19:15:50 +0100 Subject: [PATCH] mw.Upload.BookletLayout: Show an error rather than explode when uploads are disabled Also, localise the error messages. Bug: T119314 Change-Id: I0b2f53b91454f22e2001462397087da9e055b701 --- languages/i18n/en.json | 1 + languages/i18n/qqq.json | 1 + resources/Resources.php | 4 ++++ ...mediawiki.ForeignStructuredUpload.BookletLayout.js | 3 ++- resources/src/mediawiki/mediawiki.ForeignUpload.js | 11 ++++++----- .../src/mediawiki/mediawiki.Upload.BookletLayout.js | 3 +++ 6 files changed, 17 insertions(+), 6 deletions(-) diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 43fdbd9dab..2849963204 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -1488,6 +1488,7 @@ "upload-too-many-redirects": "The URL contained too many redirects", "upload-http-error": "An HTTP error occurred: $1", "upload-copy-upload-invalid-domain": "Copy uploads are not available from this domain.", + "upload-foreign-cant-upload": "This wiki is not configured to upload files to the requested foreign file repository.", "upload-dialog-title": "Upload file", "upload-dialog-button-cancel": "Cancel", "upload-dialog-button-done": "Done", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index 37e1a5a773..128e24394a 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -1663,6 +1663,7 @@ "upload-too-many-redirects": "Error message shown when uploading a file via URL, if the upload failed because the URL returned too many redirects.", "upload-http-error": "Parameters:\n* $1 - error message", "upload-copy-upload-invalid-domain": "Error message shown if a user is trying to upload (i.e. copy) a file from a website that is not in $wgCopyUploadsDomains (if set).\n\nSee also:\n* {{msg-mw|http-invalid-url}}\n* {{msg-mw|tmp-create-error}}\n* {{msg-mw|tmp-write-error}}", + "upload-foreign-cant-upload": "Error message shown when a user is trying to upload a file to foreign repository that is not configured to receive file uploads from current wiki.", "upload-dialog-title": "Title of the upload dialog box\n{{Identical|Upload file}}", "upload-dialog-button-cancel": "Button to cancel the dialog\n{{Identical|Cancel}}", "upload-dialog-button-done": "Button to close the dialog once upload is complete\n{{Identical|Done}}", diff --git a/resources/Resources.php b/resources/Resources.php index 60c3175272..18bff5151d 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1152,6 +1152,10 @@ return array( 'mediawiki.Upload', 'oojs', ), + 'messages' => array( + 'uploaddisabledtext', + 'upload-foreign-cant-upload', + ) ), 'mediawiki.ForeignStructuredUpload' => array( 'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js', diff --git a/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js b/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js index 6813ea65eb..7331df9c1e 100644 --- a/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js +++ b/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js @@ -49,8 +49,9 @@ // Can't reuse the same object, CategorySelector calls #abort on its mw.Api instance this.categoriesWidget.api = new mw.ForeignApi( api.apiUrl ); } + }.bind( this ) ).always( function () { deferred.resolve(); - }.bind( this ) ); + } ); }.bind( this ) ); return deferred.promise(); }; diff --git a/resources/src/mediawiki/mediawiki.ForeignUpload.js b/resources/src/mediawiki/mediawiki.ForeignUpload.js index aa08b6cd7c..1a0b59a160 100644 --- a/resources/src/mediawiki/mediawiki.ForeignUpload.js +++ b/resources/src/mediawiki/mediawiki.ForeignUpload.js @@ -46,11 +46,12 @@ if ( this.target === 'local' ) { // If local uploads were requested, but they are disabled, fail. if ( !mw.config.get( 'wgEnableUploads' ) ) { - throw new Error( 'Local uploads are disabled' ); + this.apiPromise = $.Deferred().reject( 'uploaddisabledtext' ); + } else { + // We'll ignore the CORS and centralauth stuff if the target is + // the local wiki. + this.apiPromise = $.Deferred().resolve( new mw.Api( apiconfig ) ); } - // We'll ignore the CORS and centralauth stuff if the target is - // the local wiki. - this.apiPromise = $.Deferred().resolve( new mw.Api( apiconfig ) ); } else { api = new mw.Api(); this.apiPromise = api.get( { @@ -76,7 +77,7 @@ } } - throw new Error( 'Can not upload to requested foreign repo' ); + return $.Deferred().reject( 'upload-foreign-cant-upload' ); } ); } diff --git a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js index 84b33fdc50..797106955e 100644 --- a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js +++ b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js @@ -169,6 +169,9 @@ } ).always( function () { deferred.resolve(); } ); + } ).fail( function ( errorMsg ) { + booklet.getPage( 'upload' ).$element.msg( errorMsg ); + deferred.resolve(); } ); return deferred.promise(); -- 2.20.1