Eranroz has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/356811 )

Change subject: WIP: Introducing crosswiki-upload right
......................................................................

WIP: Introducing crosswiki-upload right

* A new user right crosswiki-upload to allow configuration whether user have 
right to upload files from external site.

Bug: T166540
Change-Id: Ibfbf71c9fe295fd9f0580c427e21b5f773888d47
---
M includes/DefaultSettings.php
M includes/user/User.php
M languages/i18n/en.json
M languages/i18n/qqq.json
M resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
M resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
M resources/src/mediawiki/mediawiki.Upload.js
7 files changed, 50 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/11/356811/1

diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index f7f52e5..189aa89 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -5125,6 +5125,7 @@
 $wgGroupPermissions['user']['upload'] = true;
 $wgGroupPermissions['user']['reupload'] = true;
 $wgGroupPermissions['user']['reupload-shared'] = true;
+$wgGroupPermissions['user']['crosswiki-upload'] = true;
 $wgGroupPermissions['user']['minoredit'] = true;
 $wgGroupPermissions['user']['purge'] = true;
 $wgGroupPermissions['user']['sendemail'] = true;
diff --git a/includes/user/User.php b/includes/user/User.php
index 99610c3..37d53ba 100644
--- a/includes/user/User.php
+++ b/includes/user/User.php
@@ -186,6 +186,7 @@
                'undelete',
                'unwatchedpages',
                'upload',
+               'crosswiki-upload',
                'upload_by_url',
                'userrights',
                'userrights-interwiki',
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 9fe0e3c..26817b1 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -1305,6 +1305,7 @@
        "action-move-categorypages": "move category pages",
        "action-movefile": "move this file",
        "action-upload": "upload this file",
+       "action-crosswiki-upload": "upload file to shared repository",
        "action-reupload": "overwrite this existing file",
        "action-reupload-shared": "override this file on a shared repository",
        "action-upload_by_url": "upload this file from a URL",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index ee51075..e949fdc 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -1494,6 +1494,7 @@
        "action-move-categorypages": "{{Doc-action|move-categorypages}}",
        "action-movefile": "{{doc-action|movefile}}",
        "action-upload": "{{Doc-action|upload}}",
+       "action-crosswiki-upload": "{{Doc-action|crosswiki-upload}}",
        "action-reupload": "{{Doc-action|reupload}}",
        "action-reupload-shared": "{{Doc-action|reupload-shared}}",
        "action-upload_by_url": "{{Doc-action|upload_by_url}}",
diff --git a/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js 
b/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
index 0c572d4..54f5411 100644
--- a/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
+++ b/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
@@ -260,5 +260,23 @@
                return '[[' + namespace + ':' + username + '|' + username + 
']]';
        };
 
+       /**
+        * @inheritdoc
+        */
+       ForeignStructuredUpload.prototype.isUploadAllowed = function() {
+               var promise = new $.Deferred(),
+                       userright = ( this.target === 'local' ) ? 'upload' : 
'crosswiki-upload';
+
+               this.apiPromise.then( function ( api ) {
+                       api.getUserInfo().then(
+                               function ( userInfo ) {
+                                       promise.resolve( { allowed: 
userInfo.rights.indexOf( userright ) != -1, userInfo: userInfo, uploadRight: 
userright });
+                               }
+                       );
+               });
+
+               return promise;
+       }
+
        mw.ForeignStructuredUpload = ForeignStructuredUpload;
 }( mediaWiki, jQuery, OO ) );
diff --git a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js 
b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
index 3fcbb3f..eead5cc 100644
--- a/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
+++ b/resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
@@ -174,23 +174,18 @@
                        this.setFilekey( this.filekey );
                }
 
-               return this.upload.getApi().then(
-                       function ( api ) {
-                               // If the user can't upload anything, don't 
give them the option to.
-                               return api.getUserInfo().then(
-                                       function ( userInfo ) {
-                                               if ( userInfo.rights.indexOf( 
'upload' ) === -1 ) {
-                                                       if ( mw.user.isAnon() ) 
{
-                                                               
booklet.getPage( 'upload' ).$element.msg( 'apierror-mustbeloggedin', mw.msg( 
'action-upload' ) );
-                                                       } else {
-                                                               
booklet.getPage( 'upload' ).$element.msg( 'apierror-permissiondenied', mw.msg( 
'action-upload' ) );
-                                                       }
-                                               }
-                                               return $.Deferred().resolve();
-                                       },
-                                       // Always resolve, never reject
-                                       function () { return 
$.Deferred().resolve(); }
-                               );
+               return this.upload.isUploadAllowed().then(
+                       function ( res ) {
+                               if (!res.allowed) {
+                                       // If the user can't upload anything, 
don't give them the option to.
+                                       if ( mw.user.isAnon() ) {
+                                               booklet.getPage( 'upload' 
).$element.msg( 'apierror-mustbeloggedin', mw.msg( 'action-' + res.uploadRight 
) );
+                                       } else {
+                                               booklet.getPage( 'upload' 
).$element.msg( 'apierror-permissiondenied', mw.msg( 'action-' +  + 
res.uploadRight ) );
+                                       }
+                               }
+
+                               return $.Deferred().resolve();
                        },
                        function ( errorMsg ) {
                                booklet.getPage( 'upload' ).$element.msg( 
errorMsg );
diff --git a/resources/src/mediawiki/mediawiki.Upload.js 
b/resources/src/mediawiki/mediawiki.Upload.js
index 02df2a8..544a163 100644
--- a/resources/src/mediawiki/mediawiki.Upload.js
+++ b/resources/src/mediawiki/mediawiki.Upload.js
@@ -366,6 +366,22 @@
        };
 
        /**
+        * Get info whether the user have sufficent access rights for upload
+        *
+        * @return {jQuery.Promise}
+        */
+       UP.isUploadAllowed = function() {
+               var promise = new $.Deferred();
+
+               this.api.getUserInfo().then(
+                       function ( userInfo ) {
+                               promise.resolve( { allowed: 
userInfo.rights.indexOf( 'upload' ) != -1, userInfo: userInfo, uploadRight: 
'upload' });
+                       }
+               );
+               return promise;
+       }
+
+       /**
         * @enum mw.Upload.State
         * State of uploads represented in simple terms.
         */

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibfbf71c9fe295fd9f0580c427e21b5f773888d47
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Eranroz <eranro...@gmail.com>

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

Reply via email to